Create analysis model for string literals in disjointness analysis that supports...
[IRC.git] / Robust / src / IR / Flat / BCXallocsiteObjectField.java
index 3d33ad25afb2dd2d9ae71ee86e7720a6800612aa..03312575ff52c065afba33f90756167ec94c2d0a 100644 (file)
@@ -21,7 +21,7 @@ public class BCXallocsiteObjectField implements BuildCodeExtension {
   protected HeapAnalysis heapAnalysis;
   
   protected ClassDescriptor cdString;
-  protected FieldDescriptor argBytes;
+  protected FieldDescriptor strBytes;
 
 
   public BCXallocsiteObjectField( BuildCode    buildCode,
@@ -30,31 +30,30 @@ public class BCXallocsiteObjectField implements BuildCodeExtension {
     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)))";
     
@@ -70,7 +69,7 @@ public class BCXallocsiteObjectField implements BuildCodeExtension {
                       ";"
                       );
     outmethod.println("    "+argsAccess+"[i]->"+
-                      argBytes.getSafeSymbol()+
+                      strBytes.getSafeSymbol()+
                       "->allocsite = "+
                       heapAnalysis.getCmdLineArgBytesAlloc().getUniqueAllocSiteID()+
                       ";"
@@ -94,6 +93,13 @@ public class BCXallocsiteObjectField implements BuildCodeExtension {
                    heapAnalysis.getNewStringLiteralAlloc().getUniqueAllocSiteID()+
                    ";"
                    );    
+
+    output.println(dstVar+"->"+
+                   strBytes.getSafeSymbol()+
+                   "->allocsite = "+
+                   heapAnalysis.getNewStringLiteralBytesAlloc().getUniqueAllocSiteID()+
+                   ";"
+                   );
   }