3 import Analysis.Disjoint.HeapAnalysis;
4 import Analysis.Disjoint.Alloc;
11 // This BuildCode Extension (BCX) takes a heap analysis
12 // with points-to information and adds a field to objects
13 // at runtime that specifies which allocation site it is
14 // from. This extension supports other extensions.
17 public class BCXallocsiteObjectField implements BuildCodeExtension {
19 protected BuildCode buildCode;
20 protected HeapAnalysis heapAnalysis;
23 public BCXallocsiteObjectField( BuildCode buildCode,
24 HeapAnalysis heapAnalysis ) {
25 this.buildCode = buildCode;
26 this.heapAnalysis = heapAnalysis;
30 public void additionalClassObjectFields(PrintWriter outclassdefs) {
31 outclassdefs.println(" int allocsite;");
34 public void additionalCodeForCommandLineArgs(PrintWriter outmethod, String argsVar) {
35 outmethod.println(argsVar+"->allocsite = "+
36 heapAnalysis.getCmdLineArgsAlloc().getUniqueAllocSiteID()+
41 public void additionalCodeNewObject(PrintWriter outmethod, String dstVar, FlatNew flatNew) {
42 outmethod.println(dstVar+"->allocsite = "+
43 heapAnalysis.getAllocationSiteFromFlatNew( flatNew ).getUniqueAllocSiteID()+
49 public void printExtraArrayFields(PrintWriter outclassdefs) {}
50 public void outputTransCode(PrintWriter output) {}
51 public void buildCodeSetup() {}
52 public void generateSizeArrayExtensions(PrintWriter outclassdefs) {}
53 public void preCodeGenInitialization() {}
54 public void postCodeGenCleanUp() {}
55 public void additionalCodeGen(PrintWriter outmethodheader,
56 PrintWriter outstructs,
57 PrintWriter outmethod) {}
58 public void additionalCodeAtTopOfMain(PrintWriter outmethod) {}
59 public void additionalCodeAtBottomOfMain(PrintWriter outmethod) {}
60 public void additionalIncludesMethodsImplementation(PrintWriter outmethod) {}
61 public void additionalIncludesStructsHeader(PrintWriter outstructs) {}
62 public void additionalCodeAtTopMethodsImplementation(PrintWriter outmethod) {}
63 public void additionalIncludesMethodsHeader(PrintWriter outmethodheader) {}
64 public void additionalCodeAtTopFlatMethodBody(PrintWriter output, FlatMethod fm) {}
65 public void additionalCodePreNode(FlatMethod fm, FlatNode fn, PrintWriter output) {}
66 public void additionalCodePostNode(FlatMethod fm, FlatNode fn, PrintWriter output) {}