added test script
authorbdemsky <bdemsky>
Fri, 28 Jul 2006 18:34:23 +0000 (18:34 +0000)
committerbdemsky <bdemsky>
Fri, 28 Jul 2006 18:34:23 +0000 (18:34 +0000)
12 files changed:
Robust/src/ClassLibrary/Object.java
Robust/src/ClassLibrary/String.java
Robust/src/ClassLibrary/System.java
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/Flat/FlatElementNode.java
Robust/src/IR/Flat/FlatSetElementNode.java
Robust/src/Main/Main.java
Robust/src/Makefile
Robust/src/Parse/java14.cup
Robust/src/Runtime/runtime.c
Robust/src/Runtime/runtime.h
Robust/src/buildscript [new file with mode: 0755]

index 45736237568829b805b8af1a367960a460395c35..1e66c9565abd3e5726ef4a9355ed9bac11c6f13e 100644 (file)
@@ -1,6 +1,11 @@
 public class Object {
     public native int hashcode();
 
+    public String toString() {
+       return String.valueOf(this);
+    }
+
+
     public boolean equals(Object o) {
        if (o==this)
            return true;
index 35d865bed41543286ec2a40560b503ab0aa90d6b..8f448a7b9f2eb3d95af594a26fdbadde66d49c89 100644 (file)
@@ -4,4 +4,25 @@ public class String {
     public String(char string[]) {
        this.string=string;
     }
+
+    public static String valueOf(Object o) {
+       return o.toString();
+    }
+
+    /*    public static String valueOf(int x) {
+         int length=0;
+         int tmp=x;
+         do {
+         tmp=tmp/10;
+         length=length+1;
+         } while(tmp!=0);
+         char chararray[]=new chararray[length];
+         do {
+         length--;
+         chararray[length]=x%10;
+         x=x/10;
+         } while (length!=0);
+         return new String(chararray);
+         }*/
+
 }
index 7a03cc2e9627b52724b805e80e66efa38d1be6b6..23e5295ea1420b33b66f7094ea3a5df238ddfa21 100644 (file)
@@ -1,4 +1,9 @@
 public class System {
-    public static native void printInt(int x);
+    /*    public static void printInt(int x) {
+       String s=String.valueOf(x);
+       printString(s);
+       }*/
+
     public static native void printString(String s);
+    public static native void printInt(int x);
 }
index 78989dd31f180147650aa448a489121112e09eba..ea8bd2f5f797e14868c20f4df875ffd53f1818ae 100644 (file)
@@ -636,6 +636,12 @@ public class BuildCode {
            type="void *";
        else 
            type=elementtype.getSafeSymbol()+" ";
+
+       if (fen.needsBoundsCheck()) {
+           output.println("if ("+generateTemp(fm, fen.getIndex())+"< 0 || "+generateTemp(fm, fen.getIndex())+" >= "+generateTemp(fm,fen.getSrc()) + "->___length___)");
+           output.println("failedboundschk();");
+       }
+
        output.println(generateTemp(fm, fen.getDst())+"=(("+ type+"*)(((char *) &("+ generateTemp(fm,fen.getSrc())+"->___length___))+sizeof(int)))["+generateTemp(fm, fen.getIndex())+"];");
     }
 
@@ -650,6 +656,11 @@ public class BuildCode {
        else 
            type=elementtype.getSafeSymbol()+" ";
 
+       if (fsen.needsBoundsCheck()) {
+           output.println("if ("+generateTemp(fm, fsen.getIndex())+"< 0 || "+generateTemp(fm, fsen.getIndex())+" >= "+generateTemp(fm,fsen.getDst()) + "->___length___)");
+           output.println("failedboundschk();");
+       }
+
        output.println("(("+type +"*)(((char *) &("+ generateTemp(fm,fsen.getDst())+"->___length___))+sizeof(int)))["+generateTemp(fm, fsen.getIndex())+"]="+generateTemp(fm,fsen.getSrc())+";");
     }
 
index d94affa00eb6549b0dcc65aae2cf8a13b3c5a83e..6edc297bb4e3f005b4da4c8c6de3dace51253725 100644 (file)
@@ -12,6 +12,10 @@ public class FlatElementNode extends FlatNode {
        this.dst=dst;
     }
 
+    public boolean needsBoundsCheck() {
+       return true;
+    }
+
     public TempDescriptor getIndex() {
        return index;
     }
index aac90d3bfd1a2cbb81550dbbc3a9180eacb1bd65..c231e079fc1679458d8765906cc19f833b4cda13 100644 (file)
@@ -12,6 +12,10 @@ public class FlatSetElementNode extends FlatNode {
        this.dst=dst;
     }
 
+    public boolean needsBoundsCheck() {
+       return true;
+    }
+
     public TempDescriptor getSrc() {
        return src;
     }
index da4c77bdb1b0f5406b8752410383a747bcc97870..9f29ce67fbc9a5ab0b2c40b063e386b4b4d72ccf 100644 (file)
@@ -65,7 +65,7 @@ public class Main {
        Lex.Lexer l = new Lex.Lexer(fr);
        java_cup.runtime.lr_parser g;
        g = new Parse.Parser(l);
-       ParseNode p=(ParseNode) g./*debug_*/parse().value;
+       ParseNode p=(ParseNode) g.debug_parse().value;
        state.addParseNode(p);
        if (l.numErrors()!=0) {
            System.out.println("Error parsing Object.java");
index 8d60cc042fa8f8ad7e8e0a15d071c48fe19ce00b..38fe6669ac7f00ab9925beb2a3eb8f03a5ae3e1e 100644 (file)
@@ -46,7 +46,7 @@ all: Parse/Sym.class Parse/Parser.class $(CLASSFILES)
 
 Parse/Parser.java Parse/Sym.java: Parse/java14.cup
        cd Parse && \
-        java -cp ../../cup:$(CLASSPATH) java_cup.Main -parser Parser -symbols Sym < java14.cup
+        java -cp ../../cup:$(CLASSPATH) java_cup.Main -debug -nonterms -parser Parser -symbols Sym < java14.cup
 
 %.class: %.java
        javac -cp ../cup:.:$(CLASSPATH) $<
index 52c5e099354969f2535ed5bf28ed94fe8e679064..6333defd77e80ee411561fcfedbdf521244c6aae 100644 (file)
@@ -340,7 +340,7 @@ flag_effect ::= IDENTIFIER:id LBRACE flag_list:fl RBRACE {:
                RESULT=pn;
        :};
 
-flag_list_opt ::= LPAREN flag_list:fl RPAREN {:RESULT=fl;:}
+flag_list_opt ::= LBRACE flag_list:fl RBRACE {:RESULT=fl;:}
        | {: RESULT = new ParseNode("empty"); :}
        ;
 
@@ -1173,7 +1173,7 @@ primary_no_new_array ::=
 //     |       name DOT THIS
        ;
 class_instance_creation_expression ::=
-               NEW class_or_interface_type:type LPAREN argument_list_opt:args RPAREN flag_effects_opt:feo {: 
+               NEW class_or_interface_type:type LPAREN argument_list_opt:args RPAREN flag_list_opt:feo {: 
                ParseNode pn=new ParseNode("createobject");
                pn.addChild(type);
                pn.addChild(args);
index 5b6afb19355366ad8164abaedf637dd802311006..bb933db3cf89a4361a8362f4ee0395741ef936f6 100644 (file)
@@ -13,7 +13,7 @@ int ___Object______hashcode____(struct ___Object___ * ___this___) {
 }
 
 void ___System______printInt____I(int x) {
-  printf("%d\n",x);
+  printf("%d",x);
 }
 
 void ___System______printString____L___String___(struct ___String___ * s) {
@@ -48,3 +48,13 @@ struct ___String___ * NewString(char *str,int length) {
     ((short *)(((char *)& chararray->___length___)+sizeof(int)))[i]=(short)str[i];  }
   return strobj;
 }
+
+void failedboundschk() {
+  printf("Array out of bounds\n");
+  exit(-1);
+}
+
+void failednullptr() {
+  printf("Dereferenced a null pointer\n");
+  exit(-1);
+}
index 05811d268f2bbfd2c9b1c85915318160dc61a2ca..b84919e75977c6dcb8c82db217e9c108b765541c 100644 (file)
@@ -7,4 +7,7 @@
 void * allocate_new(int type);
 void * allocate_newarray(int type, int length);
 struct ___String___ * NewString(char *str,int length);
+
+void failedboundschk();
+void failednullptr();
 #endif
diff --git a/Robust/src/buildscript b/Robust/src/buildscript
new file mode 100755 (executable)
index 0000000..b7a0c04
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+ROBUSTROOT=~/research/Robust/src
+MAINFILE=$1
+shift
+mkdir tmpbuilddirectory
+java -cp $ROBUSTROOT/../cup/:$ROBUSTROOT Main.Main -classlibrary $ROBUSTROOT/ClassLibrary/ -dir tmpbuilddirectory -mainclass $MAINFILE $@
+gcc -I$ROBUSTROOT/Runtime -Itmpbuilddirectory -O0 -g tmpbuilddirectory/methods.c $ROBUSTROOT/Runtime/runtime.c -o $MAINFILE.bin
\ No newline at end of file