bug fixes
authorbdemsky <bdemsky>
Sat, 10 Nov 2007 01:09:01 +0000 (01:09 +0000)
committerbdemsky <bdemsky>
Sat, 10 Nov 2007 01:09:01 +0000 (01:09 +0000)
Robust/src/Analysis/TaskStateAnalysis/TaskAnalysis.java
Robust/src/ClassLibrary/String.java
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/task.c

index 4ded241a75ead5b7b8e85612a370804f38af8bfa..68bdd6833d98a0c2c24ac7c7218b70eecf9d2809 100644 (file)
@@ -53,19 +53,15 @@ public class TaskAnalysis {
            
            
            /* Adding the flags of the super class */
-           if (cd.getSuper()!=null) {
-               ClassDescriptor superdesc=cd.getSuperDesc();
-               
-               for(Iterator it_cflags=superdesc.getFlags();it_cflags.hasNext();) {     
+           ClassDescriptor tmp=cd;
+           while(tmp!=null) {
+               for(Iterator it_cflags=tmp.getFlags();it_cflags.hasNext();) {   
                    FlagDescriptor fd = (FlagDescriptor)it_cflags.next();
                    vFlags.add(fd);
                }
+               tmp=tmp.getSuperDesc();
            }
 
-           for(Iterator it_cflags=cd.getFlags();it_cflags.hasNext();) {
-               FlagDescriptor fd = (FlagDescriptor)it_cflags.next();
-               vFlags.add(fd);
-           }
 
            if (vFlags.size()!=0) {
                flag=new FlagDescriptor[vFlags.size()];
index 1623a8e678fd160af9c97d8e257412dd733361bd..435f14d4e80bfd3243c3795f7e32d8cc74f15768 100644 (file)
@@ -67,7 +67,7 @@ public class String {
        String str=new String();
        if (beginIndex>this.count||endIndex>this.count||beginIndex>endIndex) {
            // FIXME
-           System.printString("Index error: "+this+" "+beginIndex+" "+endIndex+"\n");
+           System.printString("Index error: "+beginIndex+" "+endIndex+" "+count+"\n"+this);
        }
        str.value=this.value;
        str.count=endIndex-beginIndex;
index 91a96e578b5cc24b47bdd4cad9048306e0425fd3..7174ba9139d61a2ec42670fefd80c80ee576dd98 100644 (file)
@@ -2295,7 +2295,7 @@ public class BuildCode {
                 }      
             } else
                 continue;
-                    // if there is no optionals, there is no need to build the rest of the struct 
+            // if there are no optionals, there is no need to build the rest of the struct 
             
             output.println("struct optionaltaskdescriptor * otdarray"+cdtemp.getSafeSymbol()+"[]={");
             c_otd = ((Hashtable)optionaltaskdescriptors.get(cdtemp)).values();
@@ -2371,7 +2371,7 @@ public class BuildCode {
 
                     Set<OptionalTaskDescriptor> otdset=sa.getOptions(fs, ti);
 
-                    output.print("struct optionaltaskdescriptor * optionaltaskfailure_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex()+"_array[] = {");
+                    output.print("struct optionaltaskdescriptor * optionaltaskfailure_FS"+fscounter+"_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex()+"_array[] = {");
                     boolean needcomma=false;
                     for(Iterator<OptionalTaskDescriptor> otdit=ordertd(otdset).iterator();otdit.hasNext();) {
                         OptionalTaskDescriptor otd=otdit.next();
@@ -2382,11 +2382,11 @@ public class BuildCode {
                     }
                     output.println("};");
 
-                    output.print("struct taskfailure taskfailure_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex()+" = {");
+                    output.print("struct taskfailure taskfailure_FS"+fscounter+"_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex()+" = {");
                     output.print("&task_"+ti.getTask().getSafeSymbol()+", ");
                     output.print(ti.getIndex()+", ");
                     output.print(otdset.size()+", ");
-                    output.print("optionaltaskfailure_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex()+"_array");
+                    output.print("optionaltaskfailure_FS"+fscounter+"_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex()+"_array");
                     output.println("};");
                 }
 
@@ -2403,7 +2403,7 @@ public class BuildCode {
                     if (needcomma)
                         output.print(", ");
                     needcomma=true;
-                    output.print("&taskfailure_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex());
+                    output.print("&taskfailure_FS"+fscounter+"_"+ti.getTask().getSafeSymbol()+"_"+ti.getIndex());
                 }
                 output.println("};\n");
 
index 5dd4e889ab92ba50c7bb0814c82dc7d3ae5c298c..96b78d8cf6feb1731a80c0f415cf7cfc487d75bf 100644 (file)
@@ -758,10 +758,10 @@ void enqueueoptional(struct ___Object___ * currobj, int numfailedfses, int * fai
                currindex=otd->index;
              } else if (currtask!=otd->task||currindex!=otd->index)
                break;
-             totallength+=otd->numenterflags;
+             totallength+=otd->numenterflags;//1 is to store the lengths
            }
            pw=currtask->descriptorarray[currindex]->queue;
-           enterflags=RUNMALLOC(totallength*sizeof(int));
+           enterflags=RUNMALLOC((totallength+numenterflags)*sizeof(int));
            numenterflags=j-start;
 
            offset=0;
@@ -1193,14 +1193,6 @@ void executetasks() {
 #endif
          if(debugtask){
            printf("ENTER %s count=%d\n",currtpd->task->name, (instaccum-instructioncount));
-           {
-             int i;
-             printf("[%x]\n",currtpd);
-             for(i=0;i<currtpd->numParameters;i++) {
-               printf("%x ", currtpd->parameterArray[i]);
-             }
-             printf("\n");
-           }
            ((void (*) (void **)) currtpd->task->taskptr)(taskpointerarray);
            printf("EXIT %s count=%d\n",currtpd->task->name, (instaccum-instructioncount));
          } else
@@ -1349,9 +1341,17 @@ void builditerators(struct taskdescriptor * task, int index, struct parameterwra
        while(ObjhasNext(&objit)) {
         struct ___Object___ * obj=(struct ___Object___ *)Objkey(&objit);
         struct ___Object___ * tagptr=obj->___tags___;
+        int nonfailed=Objdata4(&objit);
+        int numflags=Objdata3(&objit);
+        int flags=Objdata2(&objit);
         Objnext(&objit);
         printf("    Contains %lx\n", obj);
         printf("      flag=%d\n", obj->flag); 
+#ifdef OPTIONAL
+        printf("      flagsstored=%x\n",flags);
+        printf("      numflags=%d\n", numflags);
+        printf("      nonfailed=%d\n",nonfailed);
+#endif
         if (tagptr==NULL) {
         } else if (tagptr->type==TAGTYPE) {
           printf("      tag=%lx\n",tagptr);