fix bug
authorbdemsky <bdemsky>
Mon, 9 Mar 2009 23:29:02 +0000 (23:29 +0000)
committerbdemsky <bdemsky>
Mon, 9 Mar 2009 23:29:02 +0000 (23:29 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/Flat/BuildFlat.java
Robust/src/IR/Flat/FlatOffsetNode.java
Robust/src/IR/Tree/OffsetNode.java
Robust/src/IR/Tree/SemanticCheck.java
Robust/src/IR/TypeUtil.java

index 0e69ab9155279f1616b63817d2e73278cda4f666..6ef224b1ce6734228bc3e04af7ea83fa7fffb23b 100644 (file)
@@ -1605,11 +1605,9 @@ public class BuildCode {
 
   public void generateFlatOffsetNode(FlatMethod fm, LocalityBinding lb, FlatOffsetNode fofn, PrintWriter output) {
     output.println("/* FlatOffsetNode */");
-    ClassDescriptor cn = fofn.getClassDesc();
-    FieldDescriptor fd = fofn.getField();
-    System.out.println("ClassDescriptor cn =" + cn.toString() + " FieldDescriptor fd =" + fd.toString());
-    System.out.println("TempDescriptor td =" + fofn.getDst().toString() + "Type of TempDescriptor =" + fofn.getDst().getType());
-    output.println("((struct "+cn.getSafeSymbol() +" *)0)->"+ fd.getSafeSymbol()+";");
+    FieldDescriptor fd=fofn.getField();
+    output.println(generateTemp(fm, fofn.getDst(),lb)+ " = (short) (&((struct "+fofn.getClassType().getSafeSymbol() +" *)0)->"+ fd.getSafeSymbol()+");");
+    output.println("/* offset */");
   }
 
   public void generateFlatPrefetchNode(FlatMethod fm, LocalityBinding lb, FlatPrefetchNode fpn, PrintWriter output) {
@@ -2368,16 +2366,6 @@ public class BuildCode {
   }
 
   private void generateFlatLiteralNode(FlatMethod fm, LocalityBinding lb, FlatLiteralNode fln, PrintWriter output) {
-    if (fln.getType().isOffset()) {
-      if (fln.getValue() instanceof OffsetNode) {
-       OffsetNode ofn = (OffsetNode) fln.getValue();
-       output.println(generateTemp(fm, fln.getDst(),lb)+
-                      " = (short) (&((struct "+ofn.getClassDesc().getSafeSymbol() +" *)0)->"+
-                      ofn.getField().getSafeSymbol()+");");
-      }
-      output.println("/* offset */");
-      return;
-    }
     if (fln.getValue()==null)
       output.println(generateTemp(fm, fln.getDst(),lb)+"=0;");
     else if (fln.getType().getSymbol().equals(TypeUtil.StringClass)) {
index 069c178dc9bfc48ab9e456a9e423776addc79b0b..ff9553f4df5776db2565f30cc602fd4b59777ffb 100644 (file)
@@ -205,16 +205,8 @@ public class BuildFlat {
   }
 
   private NodePair flattenOffsetNode(OffsetNode ofn, TempDescriptor out_temp) {
-    FlatLiteralNode fln = new FlatLiteralNode(ofn.getType(), ofn, out_temp);
+    FlatOffsetNode fln = new FlatOffsetNode(ofn.getClassType(), ofn.getField(), out_temp);
     return new NodePair(fln, fln);
-    /* Another possible approach
-       ClassDescriptor cd = ofn.getClassDesc();
-       FieldDescriptor fd = ofn.getField();
-       FlatOffsetNode fon = new FlatOffsetNode(fd, cd, out_temp);
-       TypeDescriptor type=new TypeDescriptor(ofn.getType());
-       System.out.println("TempDescriptor out_temp = " + out_temp.toString() + "Type of out_temp = " + out_temp.getType());
-       return new NodePair(fon, fon);
-     */
   }
 
   private NodePair flattenCreateObjectNode(CreateObjectNode con,TempDescriptor out_temp) {
index def02ea758ad9803083bc7018ad301516c9a2061..e9c61db2c5ebaf0c4f545b8aa22f22192cbf9d15 100644 (file)
@@ -1,28 +1,28 @@
 package IR.Flat;
-import IR.ClassDescriptor;
+import IR.TypeDescriptor;
 import IR.FieldDescriptor;
 
 public class FlatOffsetNode extends FlatNode {
-  TempDescriptor dest;
-  ClassDescriptor cd;
+  TempDescriptor dst;
   FieldDescriptor field;
+  TypeDescriptor baseclass;
 
-  public FlatOffsetNode(FieldDescriptor field, ClassDescriptor cd, TempDescriptor dest) {
-    this.cd = cd;
+  public FlatOffsetNode(TypeDescriptor classtype, FieldDescriptor field, TempDescriptor dst) {
+    this.baseclass=classtype;
     this.field = field;
-    this.dest = dest;
+    this.dst = dst;
   }
 
-  public FieldDescriptor getField() {
-    return field;
+  public TypeDescriptor getClassType() {
+    return baseclass;
   }
 
-  public ClassDescriptor getClassDesc() {
-    return cd;
+  public FieldDescriptor getField() {
+    return field;
   }
 
   public String toString() {
-    return "FlatOffsetNode_"+ dest.toString()+"="+"{ "+ cd.toString()+", "+field.getSymbol()+" }";
+    return "FlatOffsetNode_"+ dst.toString()+"="+"{ "+ field.getSymbol()+" }";
   }
 
   public int kind() {
@@ -30,6 +30,10 @@ public class FlatOffsetNode extends FlatNode {
   }
 
   public TempDescriptor getDst() {
-    return dest;
+    return dst;
+  }
+
+  public TempDescriptor [] writesTemps() {
+    return new TempDescriptor[] {dst};
   }
 }
index 2c032a00b34b2580d9f1a1040e77aedfcc9e92cc..74ba651d5730f9541096057ee2b179b19ad917a1 100644 (file)
@@ -26,8 +26,8 @@ public class OffsetNode extends ExpressionNode {
     return fd;
   }
 
-  public ClassDescriptor getClassDesc() {
-    return td.getClassDesc();
+  public TypeDescriptor getClassType() {
+    return td;
   }
 
   public TypeDescriptor getType() {
index 50737a4b9536dd32944118e34f9f04286d6c8122..50eb360c3b76135f0e3235278efdeb6c6e8e586c 100644 (file)
@@ -419,7 +419,7 @@ public class SemanticCheck {
       return;
 
     case Kind.OffsetNode:
-      checkOffsetNode(md, nametable, (OffsetNode)en, new TypeDescriptor(TypeDescriptor.OFFSET));
+      checkOffsetNode(md, nametable, (OffsetNode)en, td);
       return;
 
     case Kind.TertiaryNode:
index 4bdc79e648b3dd369aeb8cb2c1aa86c9eaef69a0..f80b2a77f0e8fe7cd870a538e148377cc2b12357 100644 (file)
@@ -292,6 +292,7 @@ NextMethod:
   }
 
   private boolean isSuper(ClassDescriptor possiblesuper, ClassDescriptor cd2) {
+
     while(cd2!=null) {
       cd2=getSuper(cd2);
       if (cd2==possiblesuper)