protected HeapAnalysis heapAnalysis;
protected ClassDescriptor cdString;
- protected FieldDescriptor argBytes;
+ protected FieldDescriptor strBytes;
public BCXallocsiteObjectField( BuildCode buildCode,
this.buildCode = buildCode;
this.typeUtil = typeUtil;
this.heapAnalysis = heapAnalysis;
- }
-
-
- public void additionalClassObjectFields(PrintWriter outclassdefs) {
- outclassdefs.println(" int allocsite;");
- }
-
-
- public void additionalCodeForCommandLineArgs(PrintWriter outmethod, String argsVar) {
cdString = typeUtil.getClass( typeUtil.StringClass );
assert cdString != null;
- argBytes = null;
+ strBytes = null;
Iterator sFieldsItr = cdString.getFields();
while( sFieldsItr.hasNext() ) {
FieldDescriptor fd = (FieldDescriptor) sFieldsItr.next();
if( fd.getSymbol().equals( typeUtil.StringClassValueField ) ) {
- argBytes = fd;
+ strBytes = fd;
break;
}
}
- assert argBytes != null;
+ assert strBytes != null;
+ }
+
+
+ public void additionalClassObjectFields(PrintWriter outclassdefs) {
+ outclassdefs.println(" int allocsite;");
+ }
+ public void additionalCodeForCommandLineArgs(PrintWriter outmethod, String argsVar) {
+
String argsAccess = "((struct "+cdString.getSafeSymbol()+
" **)(((char *)& "+argsVar+"->___length___)+sizeof(int)))";
";"
);
outmethod.println(" "+argsAccess+"[i]->"+
- argBytes.getSafeSymbol()+
+ strBytes.getSafeSymbol()+
"->allocsite = "+
heapAnalysis.getCmdLineArgBytesAlloc().getUniqueAllocSiteID()+
";"
heapAnalysis.getNewStringLiteralAlloc().getUniqueAllocSiteID()+
";"
);
+
+ output.println(dstVar+"->"+
+ strBytes.getSafeSymbol()+
+ "->allocsite = "+
+ heapAnalysis.getNewStringLiteralBytesAlloc().getUniqueAllocSiteID()+
+ ";"
+ );
}