bug fixes
authorbdemsky <bdemsky>
Thu, 8 Nov 2007 03:05:07 +0000 (03:05 +0000)
committerbdemsky <bdemsky>
Thu, 8 Nov 2007 03:05:07 +0000 (03:05 +0000)
Robust/src/ClassLibrary/String.java
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/Flat/FlatCall.java
Robust/src/IR/Tree/SemanticCheck.java
Robust/src/Runtime/ObjectHash.c
Robust/src/Runtime/ObjectHash.h
Robust/src/Runtime/checkpoint.c
Robust/src/Runtime/task.c

index 99481c09b26fd48150dabe9cad702543e1b199b9..1623a8e678fd160af9c97d8e257412dd733361bd 100644 (file)
@@ -32,7 +32,7 @@ public class String {
        for(int i=0;i<length;i++)
            charstr[i]=(char)str[i+offset];
        this.value=charstr;
-       this.count=str.length;
+       this.count=length;
        this.offset=0;
     }
 
index cf5650c2be7a45a0d8cce24db6512b14b0eb5fe8..a4679e761bfcb0145af2f26358052056c83deb5f 100644 (file)
@@ -340,8 +340,9 @@ public class BuildCode {
                    /* Classify parameters */
                    MethodDescriptor md=(MethodDescriptor)methodit.next();
                    FlatMethod fm=state.getMethodFlat(md);
-                   if (!md.getModifiers().isNative())
+                   if (!md.getModifiers().isNative()) {
                        generateFlatMethod(fm, null, outmethod);
+                   }
                }
            }
        } 
@@ -2136,6 +2137,7 @@ public class BuildCode {
         
     }
 
+    //CHECK OVER THIS -- THERE COULD BE SOME ERRORS HERE
     int generateOptionalPredicate(Predicate predicate, OptionalTaskDescriptor otd, ClassDescriptor cdtemp, PrintWriter output) {
        int predicateindex = 0;
        //iterate through the classes concerned by the predicate
index e5a344e3a291c31b18c43aca450eca3ea6a4dc0f..e05e86e4fddf19842d184c27d21f3577a0095763 100644 (file)
@@ -36,9 +36,12 @@ public class FlatCall extends FlatNode {
 
     public String toString() {
        String st="";
-       if (dst==null)
-           st+=method.getSymbol()+"(";
-       else
+       if (dst==null) {
+           if (method==null)
+               st+="null(";
+           else
+               st+=method.getSymbol()+"(";
+       } else
            st+=dst+"="+method.getSymbol()+"(";
        if (this_temp!=null) {
            st+=this_temp;
index 145f8efa6b343793e39952ed96d38d9c8241d14d..12538e16e10872d4752c002ae5eeeeebe4f985bd 100644 (file)
@@ -101,7 +101,7 @@ public class SemanticCheck {
            //Make sure the variable is declared as a parameter to the task
            VarDescriptor vd=(VarDescriptor)td.getParameterTable().get(varname);
            if (vd==null)
-               throw new Error("Parameter "+varname+" in Flag Effects not declared");
+               throw new Error("Parameter "+varname+" in Flag Effects not declared in "+td);
            fe.setVar(vd);
 
            //Make sure it correspods to a class
@@ -280,7 +280,7 @@ public class SemanticCheck {
            (d instanceof FieldDescriptor)) {
            nametable.add(vd);
        } else
-           throw new Error(vd.getSymbol()+" defined a second time");
+           throw new Error(vd.getSymbol()+" in "+md+" defined a second time");
        if (dn.getExpression()!=null)
            checkExpressionNode(md, nametable, dn.getExpression(), vd.getType());
     }
@@ -413,7 +413,7 @@ public class SemanticCheck {
        else
            fd=(FieldDescriptor) ltd.getClassDesc().getFieldTable().get(fieldname);
        if (fd==null)
-           throw new Error("Unknown field "+fieldname + " in "+fan.printNode(0));
+           throw new Error("Unknown field "+fieldname + " in "+fan.printNode(0)+" in "+md);
        fan.setField(fd);
        if (td!=null)
            if (!typeutil.isSuperorType(td,fan.getType()))
@@ -641,7 +641,7 @@ public class SemanticCheck {
                }
            }
            if (bestmd==null)
-               throw new Error("No method found for "+con.printNode(0));
+               throw new Error("No method found for "+con.printNode(0)+" in "+md);
            con.setConstructor(bestmd);
        }
     }
@@ -749,7 +749,7 @@ public class SemanticCheck {
            }
        }
        if (bestmd==null)
-           throw new Error("No method found for :"+min.printNode(0)+" in class: " + classtolookin);
+           throw new Error("No method found for :"+min.printNode(0)+" in class: " + classtolookin+" in "+md);
        min.setMethod(bestmd);
 
        if ((td!=null)&&(min.getType()!=null)&&!typeutil.isSuperorType(td,  min.getType()))
index cfbf92bae06969256826a5a7053b69c13fd2bc91..239331e486ccf9aeb7635ad59a20f324993261cb 100755 (executable)
@@ -252,6 +252,7 @@ inline int ObjhasNext(struct ObjectIterator *thisvar) {
 inline int Objnext(struct ObjectIterator *thisvar) {
   int curr=thisvar->cur->data;
   thisvar->cur=thisvar->cur->next;
+  return curr;
 }
 
 inline int Objkey(struct ObjectIterator *thisvar) {
index 6128f78dcea559bdcfef116d5fd9cb8f6d5929b0..4a7774a951bc30cceae15cbc1935c40f84577859 100755 (executable)
@@ -65,7 +65,7 @@ inline struct ObjectIterator * noargallocateObjectIterator();
 
 inline struct ObjectIterator * allocateObjectIterator(struct ObjectNode *start);
 
-inline int ObjasNext(struct ObjectIterator *thisvar);
+inline int ObjhasNext(struct ObjectIterator *thisvar);
 
 inline int Objnext(struct ObjectIterator *thisvar);
 
index 64373652fac82c3c5820ad274d0ac8ecd8eb3cd4..7fe10c42fc10f1791140a2710fa647f2354ce4af 100644 (file)
@@ -43,7 +43,6 @@ void freemalloc() {
   }
 }
 
-
 void ** makecheckpoint(int numparams, void ** srcpointer, struct RuntimeHash * forward, struct RuntimeHash * reverse) {
 #ifdef PRECISE_GC
   void **newarray=cpmalloc(sizeof(void *)*numparams);
@@ -96,7 +95,7 @@ void ** makecheckpoint(int numparams, void ** srcpointer, struct RuntimeHash * f
        for(i=0;i<length;i++) {
          void *objptr=((void **)(((char *)& ao->___length___)+sizeof(int)))[i];
          if (objptr==NULL) {
-           ((void **)(((char *)& ao->___length___)+sizeof(int)))[i]=NULL;
+           ((void **)(((char *)& ao_cpy->___length___)+sizeof(int)))[i]=NULL;
          } else if (RuntimeHashcontainskey(forward, (int) objptr))
            RuntimeHashget(forward,(int) objptr,(int *) &((void **)(((char *)& ao_cpy->___length___)+sizeof(int)))[i]);
          else {
@@ -207,7 +206,6 @@ void restorecheckpoint(int numparams, void ** original, void ** checkpoint, stru
        int length=ao->___length___;
        int cpysize=sizeof(struct ArrayObject)+length*size;
        memcpy(cpy, ptr, cpysize);
-
       } else if ((int)pointer==1) {
        /* Array of pointers */
        struct ArrayObject *ao=(struct ArrayObject *) ptr;
index bee156d401cd759729fce03763be4e9d8b171790..4e5a79c6b2f9445c51e6484c5eedcf175c485451 100644 (file)
@@ -403,7 +403,7 @@ void flagbody(struct ___Object___ *ptr, int flag) {
            int tagid=parameter->tagarray[2*i+1];
            int j;
            for(j=0;j<ao->___cachedCode___;j++) {
-             if (tagid==ARRAYGET(ao, struct ___TagDescriptor___*, i)->flag)
+             if (tagid==ARRAYGET(ao, struct ___TagDescriptor___*, j)->flag)
                goto foundtag;
            }
            goto nextloop;
@@ -1174,7 +1174,7 @@ void executetasks() {
          }
          /* Actually call task */
 #ifdef PRECISE_GC
-         ((int *)taskpointerarray)[0]=currtpd->task->numParameters;
+         ((int *)taskpointerarray)[0]=currtpd->numParameters;
          taskpointerarray[1]=NULL;
 #endif
 #ifdef OPTIONAL
@@ -1319,7 +1319,39 @@ void builditerators(struct taskdescriptor * task, int index, struct parameterwra
   }
 }
 
-
+ void printdebug() {
+   int i;
+   int j;
+   for(i=0;i<numtasks;i++) {
+     struct taskdescriptor * task=taskarray[i];
+     printf("%s\n", task->name);
+     for(j=0;j<task->numParameters;j++) {
+       struct parameterdescriptor *param=task->descriptorarray[j];
+       struct parameterwrapper *parameter=param->queue;
+       struct ObjectHash * set=parameter->objectset;
+       struct ObjectIterator objit;
+       printf("  Parameter %d\n", j);
+       ObjectHashiterator(set, &objit);
+       while(ObjhasNext(&objit)) {
+        struct ___Object___ * obj=(struct ___Object___ *)Objkey(&objit);
+        struct ___Object___ * tagptr=obj->___tags___;
+        Objnext(&objit);
+        printf("    Contains %lx\n", obj);
+        printf("      flag=%d\n", obj->flag); 
+        if (tagptr==NULL) {
+        } else if (tagptr->type==TAGTYPE) {
+          printf("      tag=%lx\n",tagptr);
+        } else {
+          int tagindex=0;
+          struct ArrayObject *ao=(struct ArrayObject *)tagptr;
+          for(;tagindex<ao->___cachedCode___;tagindex++) {
+            printf("      tag=%lx\n",ARRAYGET(ao, struct ___TagDescriptor___*, tagindex));
+          }
+        }
+       }
+     }
+   }
+ }
  
 
 /* This function processes the task information to create queues for