make field shadowing work
authorbdemsky <bdemsky>
Fri, 25 Feb 2011 01:05:41 +0000 (01:05 +0000)
committerbdemsky <bdemsky>
Fri, 25 Feb 2011 01:05:41 +0000 (01:05 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/Flat/FieldShadow.java

index 3ee3349f2cdd49a4f2faec57d5735004547cb15b..25f9cbf116da4d016d2c1eaa243db89bd7abab74 100644 (file)
@@ -3254,7 +3254,7 @@ public class BuildCode {
   private void generateFlatFieldNode(FlatMethod fm, LocalityBinding lb, FlatFieldNode ffn, PrintWriter output) {
     if (state.SINGLETM) {
       //single machine transactional memory case
-      String field=(ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol();
+      String field=ffn.getField().getSafeSymbol();
       String src=generateTemp(fm, ffn.getSrc(),lb);
       String dst=generateTemp(fm, ffn.getDst(),lb);
 
@@ -3274,7 +3274,7 @@ public class BuildCode {
     } else if (state.DSM) {
       Integer status=locality.getNodePreTempInfo(lb,ffn).get(ffn.getSrc());
       if (status==LocalityAnalysis.GLOBAL) {
-       String field=(ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol();
+       String field=ffn.getField().getSafeSymbol();
        String src=generateTemp(fm, ffn.getSrc(),lb);
        String dst=generateTemp(fm, ffn.getDst(),lb);
 
@@ -3304,7 +3304,7 @@ public class BuildCode {
       } else if (status==LocalityAnalysis.LOCAL) {
        if (ffn.getField().getType().isPtr()&&
            ffn.getField().isGlobal()) {
-         String field=(ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol();
+         String field=ffn.getField().getSafeSymbol();
          String src=generateTemp(fm, ffn.getSrc(),lb);
          String dst=generateTemp(fm, ffn.getDst(),lb);
          output.println(dst+"="+ src +"->"+field+ ";");
@@ -3351,7 +3351,7 @@ public class BuildCode {
                 output.println("  global_defs_p->" + cn.getSafeSymbol()+"static_block_exe_flag = 1;");
               }
               output.println("}");
-              output.println("#endif // MGC_STATIC_INIT_CHECK"); 
+              output.println("#endif // MGC_STATIC_INIT_CHECK");
             }
           }
         }
@@ -3361,19 +3361,16 @@ public class BuildCode {
           output.println(generateTemp(fm, ffn.getDst(),lb)+"=global_defs_p->"+ 
               ffn.getField().getClassDescriptor().getSafeSymbol()+ffn.getField().getSafeSymbol()+";");
         } else {
-          output.println(generateTemp(fm, ffn.getDst(),lb)+"=*"+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ 
-              (ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol()+";");
+          output.println(generateTemp(fm, ffn.getDst(),lb)+"=*"+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ ffn.getField().getSafeSymbol()+";");
         }
       } else if (ffn.getField().isEnum()) {
           // an Enum value, directly replace the field access as int
           output.println(generateTemp(fm, ffn.getDst(), lb) + "=" + ffn.getField().enumValue() + ";");
          } else {
-        output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ 
-            (ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol()+";");
-      } 
+        output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ ffn.getField().getSafeSymbol()+";");
+      }
     } else {
-        output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ 
-            (ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol()+";");
+        output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ ffn.getField().getSafeSymbol()+";");
       }
     }
   }
index 993bc5afe945aacddaf7b5f7737ae3cd26209a53..2f5f9abbc4800b47f4178a02a18201609b8419b1 100644 (file)
@@ -3,33 +3,33 @@ import IR.*;
 import java.util.*;
 
 public class FieldShadow {
-       public static void handleFieldShadow(State state) {
+  public static void handleFieldShadow(State state) {
     Iterator classit=state.getClassSymbolTable().getDescriptorsIterator();
-               HashMap<ClassDescriptor, HashMap<String,Integer>> namemap=new HashMap<ClassDescriptor,HashMap<String, Integer>>();
+    HashMap<ClassDescriptor, HashMap<String,Integer>> namemap=new HashMap<ClassDescriptor,HashMap<String, Integer>>();
     while(classit.hasNext()) {
       ClassDescriptor cd=(ClassDescriptor)classit.next();
-                       handleClass(cd, state, namemap);
+      handleClass(cd, state, namemap);
     }
-       }
-
-       private static void handleClass(ClassDescriptor cd, State state, HashMap<ClassDescriptor, HashMap<String, Integer>> namemap) {
-               if (cd.getSuperDesc()!=null&&!namemap.containsKey(cd.getSuperDesc()))
-                       handleClass(cd.getSuperDesc(), state, namemap);
-               HashMap<String, Integer> supermap=cd.getSuperDesc()!=null?namemap.get(cd.getSuperDesc()):new HashMap<String, Integer>();
-
-               HashMap<String, Integer> fieldmap=new HashMap<String, Integer>();
-               namemap.put(cd, fieldmap);
-
-               for(Iterator fieldit=cd.getFields();fieldit.hasNext();) {
-                       FieldDescriptor fd=(FieldDescriptor)fieldit.next();
-                       if (supermap.containsKey(fd.getSymbol())) {
-                               Integer oldint=supermap.get(fd.getSymbol());
-                               int newint=oldint.intValue()+1;
-                               namemap.put(fd.getSymbol(), new Integer(newint));
-                               fd.changeSafeSymbol(newint);
-                       } else {
-                               namemap.put(fd.getSymbol(), new Integer(0));
-                       }
-               }
-       }
+  }
+  
+  private static void handleClass(ClassDescriptor cd, State state, HashMap<ClassDescriptor, HashMap<String, Integer>> namemap) {
+    if (cd.getSuperDesc()!=null&&!namemap.containsKey(cd.getSuperDesc()))
+      handleClass(cd.getSuperDesc(), state, namemap);
+    HashMap<String, Integer> supermap=cd.getSuperDesc()!=null?namemap.get(cd.getSuperDesc()):new HashMap<String, Integer>();
+    
+    HashMap<String, Integer> fieldmap=new HashMap<String, Integer>();
+    namemap.put(cd, fieldmap);
+    
+    for(Iterator fieldit=cd.getFields();fieldit.hasNext();) {
+      FieldDescriptor fd=(FieldDescriptor)fieldit.next();
+      if (supermap.containsKey(fd.getSymbol())) {
+       Integer oldint=supermap.get(fd.getSymbol());
+       int newint=oldint.intValue()+1;
+       fieldmap.put(fd.getSymbol(), new Integer(newint));
+       fd.changeSafeSymbol(newint);
+      } else {
+       fieldmap.put(fd.getSymbol(), new Integer(0));
+      }
+    }
+  }
 }
\ No newline at end of file