Bug fixes for allowing multiple task parameters
authorbdemsky <bdemsky>
Wed, 1 Nov 2006 05:49:58 +0000 (05:49 +0000)
committerbdemsky <bdemsky>
Wed, 1 Nov 2006 05:49:58 +0000 (05:49 +0000)
Bug in getBytes routine

Robust/src/ClassLibrary/String.java
Robust/src/IR/Flat/FlatLiteralNode.java
Robust/src/IR/Tree/SemanticCheck.java
Robust/src/Runtime/runtime.c

index 9bb42aa66bede4c51054833774d280cf8a098c02..065f7c8c67c5285ecddf9158b23dece2cdcbf4f1 100644 (file)
@@ -96,7 +96,7 @@ public class String {
 
     public byte[] getBytes() {
        byte str[]=new byte[count];
-       for(int i=0;i<value.length;i++)
+       for(int i=0;i<count;i++)
            str[i]=(byte)value[i+offset];
        return str;
     }
index ba5e58cbde298886159e766be73b1745654551b4..60595435036aab1ba6767197f5c639f013081867 100644 (file)
@@ -36,6 +36,8 @@ public class FlatLiteralNode extends FlatNode {
            char x=st.charAt(i);
            if (x=='\n')
                new_st+="\\n";
+           else if (x=='\r')
+               new_st+="\\r";
            else if (x=='"')
                new_st+="'"+'"'+"'";
            else new_st+=x;
index c0040f51cf24f1075fdbe4e6b83a265c1cafca41..a4b24b4546f83d4e6f9a7e4b97bc7c107768d236 100644 (file)
@@ -135,12 +135,12 @@ public class SemanticCheck {
                throw new Error("Cannot have non-object argument to a task");
            ClassDescriptor cd=param_type.getClassDesc();
            checkFlagExpressionNode(cd, fen);
-           checkFlagEffects(td, td.getFlagEffects());
-
-           /* Check that the task code is valid */
-           BlockNode bn=state.getMethodBody(td);
-           checkBlockNode(td, td.getParameterTable(),bn);
        }
+
+       checkFlagEffects(td, td.getFlagEffects());
+       /* Check that the task code is valid */
+       BlockNode bn=state.getMethodBody(td);
+       checkBlockNode(td, td.getParameterTable(),bn);
     }
 
     public void checkFlagExpressionNode(ClassDescriptor cd, FlagExpressionNode fen) {
@@ -627,6 +627,7 @@ public class SemanticCheck {
            throw new Error("Error with method call to "+min.getMethodName());
        ClassDescriptor classtolookin=typetolookin.getClassDesc();
        System.out.println("Method name="+min.getMethodName());
+
        Set methoddescriptorset=classtolookin.getMethodTable().getSet(min.getMethodName());
        MethodDescriptor bestmd=null;
        NextMethod:
index a3563ae7455d6347bd996cfe043ed19cb3324555..b1972f97608c3249ca24634110276a1e1a5c5ddb 100644 (file)
@@ -123,10 +123,13 @@ void flagorand(void * ptr, int ormask, int andmask) {
                newindex=j;
              } else {
                RuntimeHashiterator(pw->objectset, &iteratorarray[j]);
-               if (RunhasNext(&iteratorarray[j]))
-                 taskpointerarray[j]=(void *) Runnext(&iteratorarray[j]);
-               else
+               if (RunhasNext(&iteratorarray[j])) {
+                 taskpointerarray[j]=(void *) Runkey(&iteratorarray[j]);
+                 Runnext(&iteratorarray[j]);
+               } else {
+                 done=0;
                  break; /* No tasks to dispatch */
+               }
              }
            }
            /* Queue task items... */
@@ -142,7 +145,7 @@ void flagorand(void * ptr, int ormask, int andmask) {
              if (!gencontains(failedtasks, tpd))
                addNewItem(activetasks, tpd);
              
-             /* This loop iterates to the next paramter combination */
+             /* This loop iterates to the next parameter combination */
              for(j=0;j<numparams;j++) {
                if (j==newindex) {
                  if ((j+1)==numparams)
@@ -150,7 +153,8 @@ void flagorand(void * ptr, int ormask, int andmask) {
                  continue;
                }
                if (RunhasNext(&iteratorarray[j])) {
-                 taskpointerarray[j]=(void *) Runnext(&iteratorarray[j]);
+                 taskpointerarray[j]=(void *) Runkey(&iteratorarray[j]);
+                 Runnext(&iteratorarray[j]);
                  break;
                } else if ((j+1)!=numparams) {
                  RuntimeHashiterator(task->descriptorarray[j]->queue, &iteratorarray[j]);