Change main function
authorbdemsky <bdemsky>
Wed, 27 Sep 2006 16:37:26 +0000 (16:37 +0000)
committerbdemsky <bdemsky>
Wed, 27 Sep 2006 16:37:26 +0000 (16:37 +0000)
15 files changed:
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/runtime.c
Robust/src/Runtime/runtime.h
Robust/src/Tests/Array.java
Robust/src/Tests/Array2.java
Robust/src/Tests/BoundsFail.java
Robust/src/Tests/BoundsFail2.java
Robust/src/Tests/BoundsFail3.java
Robust/src/Tests/BoundsFail4.java
Robust/src/Tests/DoTests
Robust/src/Tests/IncTest.java
Robust/src/Tests/StringTest.java
Robust/src/Tests/Test.java
Robust/src/Tests/dotest
Robust/src/Tests/virtualcalltest.java

index 76bcf10eb0a74628a8d478b4576e0645bd4066df..d130c24651e3b5ffb63aef63bd1ae1e69a099291 100644 (file)
@@ -158,6 +158,10 @@ public class BuildCode {
        outmethod.println("#include \"methodheaders.h\"");
        outmethod.println("#include \"virtualtable.h\"");
        outmethod.println("#include <runtime.h>");
+       if (state.main!=null) {
+           outmethod.println("#include <string.h>");       
+       }
+
        if (state.CONSCHECK) {
            outmethod.println("#include \"checkers.h\"");
        }
@@ -214,15 +218,29 @@ public class BuildCode {
        } else if (state.main!=null) {
            /* Generate main method */
            outmethod.println("int main(int argc, const char *argv[]) {");
+           outmethod.println("int i;");
+           outmethod.println("struct ArrayObject * stringarray=allocate_newarray(STRINGARRAYTYPE, argc-1);");
+           outmethod.println("for(i=1;i<argc;i++) {");
+           outmethod.println("int length=strlen(argv[i]);");
+           outmethod.println("struct ___String___ *newstring=NewString(argv[i],length);");
+           outmethod.println("((void **)(((char *)& stringarray->___length___)+sizeof(int)))[i-1]=newstring;");
+           outmethod.println("}");
+
+
            ClassDescriptor cd=typeutil.getClass(state.main);
            Set mainset=cd.getMethodTable().getSet("main");
            for(Iterator mainit=mainset.iterator();mainit.hasNext();) {
                MethodDescriptor md=(MethodDescriptor)mainit.next();
-               if (md.numParameters()!=0)
+               if (md.numParameters()!=1)
+                   continue;
+               if (md.getParameter(0).getType().getArrayCount()!=1)
                    continue;
+               if (!md.getParameter(0).getType().getSymbol().equals("String"))
+                   continue;
+
                if (!md.getModifiers().isStatic())
                    throw new Error("Error: Non static main");
-               outmethod.println("   "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"();");
+               outmethod.println("   "+cd.getSafeSymbol()+md.getSafeSymbol()+"_"+md.getSafeMethodDescriptor()+"(stringarray);");
                break;
            }
            outmethod.println("}");
index 8126ca13f79bb5a60ef8e891d7fc823c2e476238..abf51e71d81f738847d392c4490f7a38a19d5180 100644 (file)
@@ -35,7 +35,7 @@ int main(int argc, char **argv) {
   int i;
   /* Allocate startup object */
   struct ___StartupObject___ *startupobject=(struct ___StartupObject___*) allocate_new(STARTUPTYPE);
-  struct ArrayObject * stringarray=allocate_newarray(STRINGARRAYTYPE, argc); 
+  struct ArrayObject * stringarray=allocate_newarray(STRINGARRAYTYPE, argc-1); 
   failedtasks=genallocatehashtable((unsigned int (*)(void *)) &hashCodetpd, 
                                   (int (*)(void *,void *)) &comparetpd);
   
@@ -49,10 +49,10 @@ int main(int argc, char **argv) {
 
   startupobject->___parameters___=stringarray;
 
-  for(i=0;i<argc;i++) {
+  for(i=1;i<argc;i++) {
     int length=strlen(argv[i]);
     struct ___String___ *newstring=NewString(argv[i],length);
-    ((void **)(((char *)& stringarray->___length___)+sizeof(int)))[i]=newstring;
+    ((void **)(((char *)& stringarray->___length___)+sizeof(int)))[i-1]=newstring;
   }
   executetasks();
   }
@@ -277,7 +277,7 @@ struct ArrayObject * allocate_newarray(int type, int length) {
   return v;
 }
 
-struct ___String___ * NewString(char *str,int length) {
+struct ___String___ * NewString(const char *str,int length) {
   struct ArrayObject * chararray=allocate_newarray(CHARARRAYTYPE, length);
   struct ___String___ * strobj=allocate_new(STRINGTYPE);
   int i;
index d02c7286d041eea3ef10e6e2d31c8af775adfeed..c20578a8264bd83cfc60d7f0534741c273b8b67d 100644 (file)
@@ -5,7 +5,7 @@ extern jmp_buf error_handler;
 
 void * allocate_new(int type);
 struct ArrayObject * allocate_newarray(int type, int length);
-struct ___String___ * NewString(char *str,int length);
+struct ___String___ * NewString(const char *str,int length);
 
 void failedboundschk();
 void failednullptr();
index 7a272d0dd34c6fbf52d75fd1abcf66cf83a24173..28b32f3e1a5a57b8331b78bc7d189ed47881eb0a 100644 (file)
@@ -1,6 +1,6 @@
 public class Array {
     int a;
-    public static void main() {
+    public static void main(String[] st) {
        int a[]=new int[10];
        int i=2;
        a[i]=4;
index 37b0a273b0edd7f42bb3880628bbd723aff441fb..f7b69d47542f74f0cc97d08c7380b4b41b3192fc 100644 (file)
@@ -1,6 +1,6 @@
 public class Array2 {
     int a;
-    public static void main() {
+    public static void main(String str[]) {
        int a[][]=new int[10][20];
        for(int i=0;i<10;i++) {
            for(int j=0;j<20;j++) {
index b836789c0cd85f0cb846d1d69be076b22d593eba..6aff4f2ae6c805b7d7389f928fc4b2774c2e2c46 100644 (file)
@@ -1,6 +1,6 @@
 public class BoundsFail {
     int a;
-    public static void main() {
+    public static void main(String str[]) {
        int a[]=new int[10];
        a[-1]=2;
     }
index 98ac0ec0ef2c589a23272ebfebcb358cfec8c966..abe327cabc2eb7700fe4cd0725ff01d70e7e61f0 100644 (file)
@@ -1,6 +1,6 @@
 public class BoundsFail2 {
     int a;
-    public static void main() {
+    public static void main(String str[]) {
        int a[]=new int[10];
        a[10]=2;
     }
index b439d46133f705872fe9b32714fafdc0f9eb1521..c6949e2fa4dce1e5900b4f62f2b349598bf3fcaa 100644 (file)
@@ -1,6 +1,6 @@
 public class BoundsFail3 {
     int a;
-    public static void main() {
+    public static void main(String str[]) {
        int a[]=new int[10];
        int b=a[-1];
     }
index 0af6e605c271df8e73a5bd549a724deaab4b413d..3eae8e26c8d91913b78a2b282a6c979981d6e4c9 100644 (file)
@@ -1,6 +1,6 @@
 public class BoundsFail4 {
     int a;
-    public static void main() {
+    public static void main(String str[]) {
        int a[]=new int[10];
        int b=a[10];
     }
index b044ba58a1b205b33a01e698336975326dcb8ac5..e6de08baa7e7bd2a5f87703c92b9562f484531be 100755 (executable)
@@ -10,3 +10,4 @@ dotest StringTest StringTest.java
 dotest Test Test.java
 dotest virtualcalltest virtualcalltest.java
 dotest IncTest IncTest.java
+dotest CommandLineTest CommandLineTest.java hello hi
index bedb3d655681bc88c2735c55b637fb8175cae6ca..c48ac10a0706807826764153a6b8155ae9f396c9 100644 (file)
@@ -1,6 +1,6 @@
 public class IncTest {
 
-    public static void main() {
+    public static void main(String str[]) {
        int x[]=new int[20];
        for(int i=0;i<10;) {
            x[i++]++;
index 7114f4a659bcb4d72458854577ad675d7d0a541c..62bd609d64972919e71a1be4dda630706175272e 100644 (file)
@@ -1,5 +1,5 @@
 class StringTest {
-    public static void main() {
+    public static void main(String str[]) {
        String a="hello world\n";
        System.printString(a);
     }
index 85b9c8d4b35b85f3f81392b7fcb4fd8215275a27..6f4f334faf94cf48df0ae81b43386a4a784916dc 100644 (file)
@@ -3,7 +3,7 @@ public class Test {
       ;
     }
     int a;
-    public static void main() {
+    public static void main(String str[]) {
        Test t=new Test();
        for(int i=3;i<10000;i++) {
                boolean flagx=true;
index a57f1d93fe6b5fb7486d01587cb3f3b11e2d1eca..c724ccf8014e546b262238806e2a56f140740301 100755 (executable)
@@ -1,6 +1,11 @@
 #!/bin/bash
-echo Doing Test $1
-../buildscript $1 $2 &>/dev/null
-$1.bin &> output/$1.output
-diff output/$1.output output/$1.output.goal
-rm $1.bin
+ARG1=$1
+ARG2=$2
+shift
+shift
+
+echo Doing Test $ARG1
+../buildscript $ARG1 $ARG2 &>/dev/null
+$ARG1.bin $@ &> output/$ARG1.output
+diff output/$ARG1.output output/$ARG1.output.goal
+rm $ARG1.bin
index 0996eef54f71d13cdd89b02ae281118c61458b8b..1b034ad220ea56321670709149533e0471454d5b 100644 (file)
@@ -30,7 +30,7 @@ class C extends A {
 }
 
 public class virtualcalltest {
-    public static void main() {
+    public static void main(String str[]) {
 
        A a=null;
        B b=new B();