Program: 45410
Project: 45410
Buggy source:
private void bindToTypeParamSlot(Context cx,ObjectValue obj,ObjectValue qualifier,Slot s){
  if (s.getValue() instanceof TypeValue) {
    TypeValue factory=(TypeValue)s.getValue();
    ObjectList<TypeValue> types=new ObjectList<TypeValue>(type_params.size());
    for (int i=0, limit=type_params.size(); i < limit; ++i) {
      ReferenceValue r=type_params.at(i);
      Slot type_slot=r.getSlot(cx);
      if (type_slot != null) {
        Value v=type_slot.getValue();
        if (v instanceof TypeValue) {
          types.add((TypeValue)v);
        }
      }
 else       if ("String_Node_Str".equals(r.name) && r.namespaces.contains(cx.publicNamespace())) {
        types.add(cx.noType());
      }
      if (types.size() != i + 1) {
        this.slot=null;
        return;
      }
    }
    Slot slot;
    if (factory.is_parameterized) {
      ParameterizedName fullname=new ParameterizedName(qualifier,name,types);
      String name=fullname.getNamePart();
      int slot_id;
      if (!obj.hasName(cx,Tokens.GET_TOKEN,name,qualifier)) {
        slot_id=obj.builder.ImplicitVar(cx,obj,name,qualifier,cx.typeType(),-1,-1,-1);
        ObjectValue prot_ns=cx.getNamespace(fullname.toString(),Context.NS_PROTECTED);
        ObjectValue static_prot_ns=cx.getNamespace(fullname.toString(),Context.NS_STATIC_PROTECTED);
        TypeValue cframe=new TypeValue(cx,new ClassBuilder(fullname,prot_ns,static_prot_ns),fullname,TYPE_object);
        ObjectValue iframe=new ObjectValue(cx,new InstanceBuilder(fullname),cframe);
        cframe.prototype=iframe;
        slot=obj.getSlot(cx,slot_id);
        slot.setValue(cframe);
        slot.setConst(true);
        slot.declaredBy=null;
        obj.builder.ImplicitCall(cx,obj,slot_id,cframe,CALL_Method,-1,-1);
        obj.builder.ImplicitConstruct(cx,obj,slot_id,cframe,CALL_Method,-1,-1);
        factory.addParameterizedTypeSlot(cx,slot);
        FlowAnalyzer.inheritClassSlotsStatic(cframe,iframe,cx.vectorObjType(),cx);
        if (factory == cx.vectorType()) {
          cframe.indexed_type=types.at(0);
        }
      }
 else {
        slot_id=obj.getSlotIndex(cx,Tokens.GET_TOKEN,name,qualifier);
        slot=obj.getSlot(cx,slot_id);
      }
      bindToSlot(cx,name,obj,fullname.ns);
    }
 else {
      cx.internalError("String_Node_Str");
    }
  }
}

Fixed version (ground truth):
private void bindToTypeParamSlot(Context cx,ObjectValue obj,ObjectValue qualifier,Slot s){
  if (s.getValue() instanceof TypeValue) {
    TypeValue factory=(TypeValue)s.getValue();
    ObjectList<TypeValue> types=new ObjectList<TypeValue>(type_params.size());
    for (int i=0, limit=type_params.size(); i < limit; ++i) {
      ReferenceValue r=type_params.at(i);
      Slot type_slot=r.getSlot(cx);
      if (type_slot != null) {
        Value v=type_slot.getValue();
        if (v instanceof TypeValue) {
          types.add((TypeValue)v);
        }
      }
 else       if ("String_Node_Str".equals(r.name) && r.namespaces.contains(cx.publicNamespace())) {
        types.add(cx.noType());
      }
      if (types.size() != i + 1) {
        this.slot=null;
        return;
      }
    }
    Slot slot;
    if (factory.is_parameterized) {
      ParameterizedName fullname=new ParameterizedName(qualifier,name,types);
      String name=fullname.getNamePart();
      int slot_id;
      if (!obj.hasName(cx,Tokens.GET_TOKEN,name,qualifier)) {
        slot_id=obj.builder.ImplicitVar(cx,obj,name,qualifier,cx.typeType(),-1,-1,-1);
        TypeValue cframe=null;
        if (factory.types != null && factory.types.containsKey(name)) {
          Slot instaniated=factory.types.get(name);
          cframe=(TypeValue)instaniated.getValue();
        }
 else {
          ObjectValue prot_ns=cx.getNamespace(fullname.toString(),Context.NS_PROTECTED);
          ObjectValue static_prot_ns=cx.getNamespace(fullname.toString(),Context.NS_STATIC_PROTECTED);
          cframe=new TypeValue(cx,new ClassBuilder(fullname,prot_ns,static_prot_ns),fullname,TYPE_object);
          ObjectValue iframe=new ObjectValue(cx,new InstanceBuilder(fullname),cframe);
          cframe.prototype=iframe;
          FlowAnalyzer.inheritClassSlotsStatic(cframe,iframe,cx.vectorObjType(),cx);
        }
        slot=obj.getSlot(cx,slot_id);
        slot.setValue(cframe);
        slot.setConst(true);
        slot.declaredBy=null;
        obj.builder.ImplicitCall(cx,obj,slot_id,cframe,CALL_Method,-1,-1);
        obj.builder.ImplicitConstruct(cx,obj,slot_id,cframe,CALL_Method,-1,-1);
        factory.addParameterizedTypeSlot(cx,name,slot);
        if (factory == cx.vectorType()) {
          cframe.indexed_type=types.at(0);
        }
      }
 else {
        slot_id=obj.getSlotIndex(cx,Tokens.GET_TOKEN,name,qualifier);
        slot=obj.getSlot(cx,slot_id);
      }
      bindToSlot(cx,name,obj,fullname.ns);
    }
 else {
      cx.internalError("String_Node_Str");
    }
  }
}