230b20a73803d313f0deed221983de2e0e4a7285
[IRC.git] / Robust / src / IR / Flat / BCXallocsiteObjectField.java
1 package IR.Flat;
2
3 import Analysis.Disjoint.HeapAnalysis;
4 import Analysis.Disjoint.Alloc;
5 import IR.*;
6
7 import java.io.*;
8 import java.util.*;
9
10
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.
15
16
17 public class BCXallocsiteObjectField implements BuildCodeExtension {
18   
19   protected BuildCode    buildCode;
20   protected HeapAnalysis heapAnalysis;
21   
22
23   public BCXallocsiteObjectField( BuildCode    buildCode,
24                                   HeapAnalysis heapAnalysis ) {
25     this.buildCode    = buildCode;
26     this.heapAnalysis = heapAnalysis;
27   }
28   
29   
30   public void additionalClassObjectFields(PrintWriter outclassdefs) {
31     outclassdefs.println("  int allocsite;");    
32   }
33
34   public void additionalCodeForCommandLineArgs(PrintWriter outmethod, String argsVar) {
35     outmethod.println(argsVar+"->allocsite = "+
36                       heapAnalysis.getCmdLineArgsAlloc().getUniqueAllocSiteID()+
37                       ";"
38                       );
39   }
40
41   public void additionalCodeNewObject(PrintWriter outmethod, String dstVar, FlatNew flatNew) {
42     outmethod.println(dstVar+"->allocsite = "+
43                       heapAnalysis.getAllocationSiteFromFlatNew( flatNew ).getUniqueAllocSiteID()+
44                       ";"
45                       );
46   }
47
48
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) {}
67 }