outstructs.println("#define STRINGARRAYTYPE "+
(state.getArrayNumber(
- (new TypeDescriptor(typeutil.getClass(TypeUtil.StringClass))).makeArray(state, true))+state.numClasses()));
+ (new TypeDescriptor(typeutil.getClass(TypeUtil.StringClass))).makeArray(state))+state.numClasses()));
outstructs.println("#define OBJECTARRAYTYPE "+
(state.getArrayNumber(
- (new TypeDescriptor(typeutil.getClass(TypeUtil.ObjectClass))).makeArray(state, true))+state.numClasses()));
+ (new TypeDescriptor(typeutil.getClass(TypeUtil.ObjectClass))).makeArray(state))+state.numClasses()));
outstructs.println("#define STRINGTYPE "+typeutil.getClass(TypeUtil.StringClass).getId());
outstructs.println("#define CHARARRAYTYPE "+
- (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.CHAR)).makeArray(state, true))+state.numClasses()));
+ (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.CHAR)).makeArray(state))+state.numClasses()));
outstructs.println("#define BYTEARRAYTYPE "+
- (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.BYTE)).makeArray(state, true))+state.numClasses()));
+ (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.BYTE)).makeArray(state))+state.numClasses()));
outstructs.println("#define BYTEARRAYARRAYTYPE "+
- (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.BYTE)).makeArray(state, true).makeArray(state, true))+state.numClasses()));
+ (state.getArrayNumber((new TypeDescriptor(TypeDescriptor.BYTE)).makeArray(state).makeArray(state))+state.numClasses()));
outstructs.println("#define NUMCLASSES "+state.numClasses());
int totalClassSize = state.numClasses() + state.numArrays();
outstructs.println("#define STARTUPTYPE "+typeutil.getClass(TypeUtil.StartupClass).getId());
outstructs.println("#define TAGTYPE "+typeutil.getClass(TypeUtil.TagClass).getId());
outstructs.println("#define TAGARRAYTYPE "+
- (state.getArrayNumber(new TypeDescriptor(typeutil.getClass(TypeUtil.TagClass)).makeArray(state, true))+state.numClasses()));
+ (state.getArrayNumber(new TypeDescriptor(typeutil.getClass(TypeUtil.TagClass)).makeArray(state))+state.numClasses()));
}
}
if (needcomma)
outclassdefs.print(", ");
TypeDescriptor tdelement=arraytable[i].dereference();
- if (tdelement.isArray()||tdelement.isClass())
+ if (tdelement.isArray()||tdelement.isClass()||tdelement.isNull())
outclassdefs.print("sizeof(void *)");
else
outclassdefs.print("sizeof("+tdelement.getSafeSymbol()+")");
for(int i=0; i<objecttemp.numPrimitives(); i++) {
TempDescriptor td=objecttemp.getPrimitive(i);
TypeDescriptor type=td.getType();
- if (type.isNull())
+ if (type.isNull() && !type.isArray())
output.println(" void * "+td.getSafeSymbol()+";");
else if (state.MGC && type.isClass() && type.getClassDesc().isEnum()) {
output.println(" int " + td.getSafeSymbol() + ";");
TypeDescriptor td=parseTypeDescriptor(nn.getChild("basetype"));
Integer numdims=(Integer)nn.getChild("dims").getLiteral();
for(int i=0; i<numdims.intValue(); i++)
- td=td.makeArray(state, true);
+ td=td.makeArray(state);
return td;
} else {
System.out.println(pn.PPrint(2, true));
ParseNode tmp=vardecl;
TypeDescriptor arrayt=t;
while (tmp.getChild("single")==null) {
- arrayt=arrayt.makeArray(state, true);
+ arrayt=arrayt.makeArray(state);
tmp=tmp.getChild("array");
}
String identifier=tmp.getChild("single").getTerminal();
if (pn.getChild("dims_opt").getLiteral()!=null)
num=((Integer)pn.getChild("dims_opt").getLiteral()).intValue();
for(int i=0; i<(args.size()+num); i++)
- td=td.makeArray(state, true);
+ td=td.makeArray(state);
CreateObjectNode con=new CreateObjectNode(td, isglobal, disjointId);
for(int i=0; i<args.size(); i++) {
con.addArgument((ExpressionNode)args.get(i));
if (pn.getChild("dims_opt").getLiteral()!=null)
num=((Integer)pn.getChild("dims_opt").getLiteral()).intValue();
for(int i=0; i<num; i++)
- td=td.makeArray(state, true);
+ td=td.makeArray(state);
CreateObjectNode con=new CreateObjectNode(td, false, null);
// TODO array initializers
ParseNode ipn = pn.getChild("initializer");
ParseNode tmp=vardecl;
TypeDescriptor arrayt=t;
while (tmp.getChild("single")==null) {
- arrayt=arrayt.makeArray(state, true);
+ arrayt=arrayt.makeArray(state);
tmp=tmp.getChild("array");
}
String identifier=tmp.getChild("single").getTerminal();
ParseNode tmp=paramn;
while (tmp.getChild("single")==null) {
- type=type.makeArray(state, true);
+ type=type.makeArray(state);
tmp=tmp.getChild("array");
}
String paramname=tmp.getChild("single").getTerminal();
}
}
if(out_type != null) {
- out_type = out_type.makeArray(state, false);
+ out_type = out_type.makeArray(state);
//out_type.setStatic();
}
ain.setType(out_type);
name.equals("Objectwrapper"));
}
- public TypeDescriptor makeArray(State state, boolean addflag) {
+ public TypeDescriptor makeArray(State state) {
TypeDescriptor td=new TypeDescriptor(getSymbol());
td.arraycount=arraycount+1;
td.type=type;
td.class_desc=class_desc;
- if(addflag) {
- state.addArrayType(td);
- }
+ state.addArrayType(td);
return td;
}
return "float";
else if (isOffset())
return "short";
- else throw new Error("Error Type: "+type);
+ else
+ throw new Error("Error Type: "+type);
}
public String getRepairSymbol() {
else if (type==VOID)
return "void";
else if (type==NULL)
- return "null";
+ return "NULL";
else if (type==TAG)
return TypeUtil.TagClass;
else if (type==OFFSET)