Bug fixes...
authorbdemsky <bdemsky>
Fri, 3 Nov 2006 06:53:00 +0000 (06:53 +0000)
committerbdemsky <bdemsky>
Fri, 3 Nov 2006 06:53:00 +0000 (06:53 +0000)
Robust/src/ClassLibrary/HashMap.java
Robust/src/ClassLibrary/HashMapIterator.java
Robust/src/ClassLibrary/Integer.java
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/checkpoint.c
Robust/src/Runtime/socket.c

index 2d6201de66faa7f9937e4c82a5d922f8ba50e649..d977e0527443c957188a0136455f4cc85c82e8ae 100644 (file)
@@ -65,6 +65,7 @@ public class HashMap {
                numItems--;
                return oldvalue;
            }
+           ptr=ptr.next;
        }
        return null;
     }
@@ -76,6 +77,7 @@ public class HashMap {
            if (ptr.key.equals(key)) {
                return ptr.value;
            }
+           ptr=ptr.next;
        }
        return null;
     }
@@ -87,6 +89,7 @@ public class HashMap {
            if (ptr.key.equals(key)) {
                return true;
            }
+           ptr=ptr.next;
        }
        return false;
     }
@@ -105,6 +108,7 @@ public class HashMap {
                ptr.value=value;
                return oldvalue;
            }
+           ptr=ptr.next;
        }
        HashEntry he=new HashEntry();
        he.value=value;
@@ -113,5 +117,4 @@ public class HashMap {
        table[bin]=he;
        return null;
     }
-
 }
index c0f0eb48e7baaf4d29ec512a4f453e2925ac06b6..70e1a405ccd52c7a4f43b47b008352c3518e9498 100644 (file)
@@ -12,16 +12,16 @@ class HashMapIterator {
     }
 
     public boolean hasNext() {
-       if (he.next!=null)
+       if (he!=null&&he.next!=null)
            return true;
        int i=bin;
-       while(map.table[i]==null&&(i<map.table.length))
+       while((i<map.table.length)&&map.table[i]==null)
            i++;
        return (i<map.table.length);
     }
 
     public Object next() {
-       if (he.next!=null) {
+       if (he!=null&&he.next!=null) {
            he=he.next;
            Object o;
            if (type==0)
@@ -30,10 +30,11 @@ class HashMapIterator {
                o=he.value;
            return o;
        }
-       while((map.table[bin]==null)&&(bin<map.table.length))
+       while((bin<map.table.length)&&
+             (map.table[bin]==null))
            bin++;
        if (bin<map.table.length) {
-           he=map.table[bin];
+           he=map.table[bin++];
            Object o;
            if (type==0)
                o=he.key;
@@ -42,5 +43,4 @@ class HashMapIterator {
            return o;
        } else System.error();
     }
-
 }
index 4ce665f94193147b144248dd0cdf76994760cb6e..06c621e12fcf2759e0732bfe73fc3023f91ad26c 100644 (file)
@@ -22,11 +22,16 @@ public class Integer {
        boolean isNeg=false;
        int start=0;
        byte[] chars=str.getBytes();
-       if (chars[0]=='-') {
+
+       while(chars[start]==' '||chars[start]=='\t')
+           start++;
+
+       if (chars[start]=='-') {
            isNeg=true;
-           start=1;
+           start++;
        }
-       for(int i=start;i<str.length();i++) {
+       boolean cont=true;
+       for(int i=start;cont&&i<str.length();i++) {
            byte b=chars[i];
            int val;
            if (b>='0'&&b<='9')
@@ -35,9 +40,12 @@ public class Integer {
                val=10+b-'a';
            else if (b>='A'&&b<='Z')
                val=10+b-'A';
-           if (val>=radix)
-               System.error();
-           value=value*radix+val;
+           else cont=false;
+           if (cont) {
+               if (val>=radix)
+                   System.error();
+               value=value*radix+val;
+           }
        }
        if (isNeg)
            value=-value;
index 7a123a216750f79bbdefe2b8a8f66ef6634e2da0..e3394adc5ff1e9e152c6defa3bb92885030bbd93 100644 (file)
@@ -1181,7 +1181,12 @@ public class BuildCode {
 
     private void generateFlatCastNode(FlatMethod fm, FlatCastNode fcn, PrintWriter output) {
        /* TODO: Do type check here */
-       output.println(generateTemp(fm,fcn.getDst())+"=("+fcn.getType().getSafeSymbol()+")"+generateTemp(fm,fcn.getSrc())+";");
+       if (fcn.getType().isArray()) {
+           ;
+       } else if (fcn.getType().isClass())
+           output.println(generateTemp(fm,fcn.getDst())+"=(struct "+fcn.getType().getSafeSymbol()+" *)"+generateTemp(fm,fcn.getSrc())+";");
+       else
+           output.println(generateTemp(fm,fcn.getDst())+"=("+fcn.getType().getSafeSymbol()+")"+generateTemp(fm,fcn.getSrc())+";");
     }
 
     private void generateFlatLiteralNode(FlatMethod fm, FlatLiteralNode fln, PrintWriter output) {
index b7efc1de670223aaf4a7008cc8eae10f8d486d7f..f47488d658c831d79f0c5c744d51cb1e386e7793 100644 (file)
@@ -33,6 +33,7 @@ void ** makecheckpoint(int numparams, void ** srcpointer, struct RuntimeHash * f
       } else if (((int)pointer)==1) {
        /* Array of pointers */
        struct ArrayObject *ao=(struct ArrayObject *) ptr;
+       struct ArrayObject *ao_cpy=(struct ArrayObject *) cpy;
        int length=ao->___length___;
        int i;
        for(i=0;i<length;i++) {
@@ -40,13 +41,13 @@ void ** makecheckpoint(int numparams, void ** srcpointer, struct RuntimeHash * f
          if (objptr==NULL) {
            ((void **)(((char *)& ao->___length___)+sizeof(int)))[i]=NULL;
          } else if (RuntimeHashcontainskey(forward, (int) objptr))
-           RuntimeHashget(forward,(int) objptr,(int *) &((void **)(((char *)& ao->___length___)+sizeof(int)))[i]);
+           RuntimeHashget(forward,(int) objptr,(int *) &((void **)(((char *)& ao_cpy->___length___)+sizeof(int)))[i]);
          else {
            void * copy=createcopy(objptr);
            RuntimeHashadd(forward, (int) objptr, (int)copy);
            RuntimeHashadd(reverse, (int) copy, (int) objptr);
            RuntimeHashadd(todo, (int) objptr, (int) objptr);
-           ((void **)(((char *)& ao->___length___)+sizeof(int)))[i]=copy;
+           ((void **)(((char *)& ao_cpy->___length___)+sizeof(int)))[i]=copy;
          }
        }
       } else {
index 190aae55513d3d982e4b18fb9ab7052a84b1d360..ac05ff89e1f338559ef6bcf2c0c847f113818deb 100644 (file)
@@ -96,7 +96,7 @@ void ___Socket______nativeWrite_____AR_B(struct ___Socket___ * sock, struct Arra
   if (bytewritten!=length) {
     printf("ERROR IN NATIVEWRITE\n");
   }
-  flagorand(sock,0,0xFFFFFFFE);
+  //  flagorand(sock,0,0xFFFFFFFE);
 }
 
 int ___Socket______nativeRead_____AR_B(struct ___Socket___ * sock, struct ArrayObject * ao) {