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\"");
}
} 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("}");
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);
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();
}
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;
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();
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;
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++) {
public class BoundsFail {
int a;
- public static void main() {
+ public static void main(String str[]) {
int a[]=new int[10];
a[-1]=2;
}
public class BoundsFail2 {
int a;
- public static void main() {
+ public static void main(String str[]) {
int a[]=new int[10];
a[10]=2;
}
public class BoundsFail3 {
int a;
- public static void main() {
+ public static void main(String str[]) {
int a[]=new int[10];
int b=a[-1];
}
public class BoundsFail4 {
int a;
- public static void main() {
+ public static void main(String str[]) {
int a[]=new int[10];
int b=a[10];
}
dotest Test Test.java
dotest virtualcalltest virtualcalltest.java
dotest IncTest IncTest.java
+dotest CommandLineTest CommandLineTest.java hello hi
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++]++;
class StringTest {
- public static void main() {
+ public static void main(String str[]) {
String a="hello world\n";
System.printString(a);
}
;
}
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;
#!/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
}
public class virtualcalltest {
- public static void main() {
+ public static void main(String str[]) {
A a=null;
B b=new B();