changes
[IRC.git] / Robust / src / IR / Flat / BuildCode.java
index c0e5bd474fc4d3eda0deacc91bff61d3fc28699e..77d444ddce11575212694dc78023806370b7f6fe 100644 (file)
@@ -56,7 +56,6 @@ public class BuildCode {
   JavaBuilder javabuilder;
   String strObjType;
 
-  int boundschknum = 0;
 
   public BuildCode(State st, Hashtable temptovar, TypeUtil typeutil, CallGraph callgraph, JavaBuilder javabuilder) {
     this(st, temptovar, typeutil, null, callgraph, javabuilder);
@@ -697,7 +696,11 @@ public class BuildCode {
       outclassdefs.println("  volatile int notifycount;");
       outclassdefs.println("  volatile int objlock;");
       if(state.MULTICOREGC) {
+        //outclassdefs.println("  int marked;");
+      }
+      if(state.PMC) {
         outclassdefs.println("  int marked;");
+       outclassdefs.println("  void * backward;");
       }
     }
     if (state.TASK) {
@@ -711,8 +714,12 @@ public class BuildCode {
         outclassdefs.println("  int mutex;");
         outclassdefs.println("  volatile int lockcount;");
         if(state.MULTICOREGC) {
-          outclassdefs.println("  int marked;");
+          //outclassdefs.println("  int marked;");
         }
+       if(state.PMC) {
+         outclassdefs.println("  int marked;");
+         outclassdefs.println("  void * backward;");
+       }
       }
       if(state.OPTIONAL) {
         outclassdefs.println("  int numfses;");
@@ -1653,7 +1660,11 @@ fldloop:
       classdefout.println("  volatile int notifycount;");
       classdefout.println("  volatile int objlock;");
       if(state.MULTICOREGC) {
+        //classdefout.println("  int marked;");
+      }
+      if(state.PMC) {
         classdefout.println("  int marked;");
+       classdefout.println("  void * backward;");
       }
     }
     if (state.TASK) {
@@ -1668,8 +1679,12 @@ fldloop:
         classdefout.println("  int mutex;");
         classdefout.println("  volatile int lockcount;");
         if(state.MULTICOREGC) {
-          classdefout.println("  int marked;");
+          //classdefout.println("  int marked;");
         }
+       if(state.PMC) {
+         classdefout.println("  int marked;");
+         classdefout.println("  void * backward;");
+       }
       }
       if (state.OPTIONAL) {
         classdefout.println("  int numfses;");
@@ -2284,6 +2299,7 @@ fldloop:
       bcx.additionalCodePreNode(fm, fn, output);
     }
 
+
     switch(fn.kind()) {
     case FKind.FlatAtomicEnterNode:
       generateFlatAtomicEnterNode(fm, (FlatAtomicEnterNode) fn, output);
@@ -2868,9 +2884,11 @@ fldloop:
 
     if (this.state.ARRAYBOUNDARYCHECK && fen.needsBoundsCheck()) {
       output.println("if (unlikely(((unsigned int)"+generateTemp(fm, fen.getIndex())+") >= "+generateTemp(fm,fen.getSrc()) + "->___length___))");
-      output.println("failedboundschk(" + (boundschknum++) + ");");
+      output.println("failedboundschk(__LINE__, " +generateTemp(fm, fen.getIndex()) +", "+ generateTemp(fm, fen.getSrc()) + ");");
     }
     output.println(generateTemp(fm, fen.getDst())+"=(("+ type+"*)(((char *) &("+ generateTemp(fm,fen.getSrc())+"->___length___))+sizeof(int)))["+generateTemp(fm, fen.getIndex())+"];");
+    if (fen.getDst().getType().isPtr())
+      ;
   }
 
   protected void generateFlatSetElementNode(FlatMethod fm, FlatSetElementNode fsen, PrintWriter output) {
@@ -2889,7 +2907,7 @@ fldloop:
 
     if (this.state.ARRAYBOUNDARYCHECK && fsen.needsBoundsCheck()) {
       output.println("if (unlikely(((unsigned int)"+generateTemp(fm, fsen.getIndex())+") >= "+generateTemp(fm,fsen.getDst()) + "->___length___))");
-      output.println("failedboundschk(" + (boundschknum++) + ");");
+      output.println("failedboundschk(__LINE__, " +generateTemp(fm, fsen.getIndex()) +", "+ generateTemp(fm, fsen.getDst()) + ");");
     }
     if (state.FASTCHECK) {
       String dst=generateTemp(fm, fsen.getDst());
@@ -2929,7 +2947,6 @@ fldloop:
       output.println(dst+"->"+nextobjstr+"="+fcrevert+";");
       output.println(fcrevert+"=(struct ___Object___ *)"+dst+";");
     }
-
     for(BuildCodeExtension bcx: extensions) {
       bcx.additionalCodeNewObject(output, dst, fn);
     }