package x10.parser; import java.util.ArrayList; import java.io.File; public class GenOpTestCases { public static void testCoercions() { for (int i=0; i<6; i++) for (int j=0; j<6; j++) if (i!=j) System.err.println("w"+i+" = w"+j+";"); } public static void main(String[] args) { if (false) { testCoercions(); return; } // Part 1: Output an X10 class // Part 2: runs AddErrMarkers on it if (args.length==0) { System.err.println("You need to run GenOpTestCases like the x10 compiler, with at least one argument: OUTPUT_FILE\nFor example: java GenOpTestCases Output.x10\n"); System.exit(-1); } new GenOpTestCases(args).run(); } private final String[] args; private final File output; GenOpTestCases(String[] args) { this.args = args; this.output = new File(args[0]); } void run() { writeTest(); // part 2 AddErrMarkers.main(args); } void writeTest() { ArrayList<String> lines = new ArrayList<String>(); lines.add("class TestInstanceOperators {"); int c = 0; ArrayList<String> types = new ArrayList<String>(); ArrayList<String> terms = new ArrayList<String>(); for (String t : typesAndInit) { String[] typeAndInit = t.split("="); assert typeAndInit.length==2 : t; types.add(typeAndInit[0]); String varName = "w"+c; lines.add("\tvar "+varName+":"+t+";"); terms.add(varName); c++; } lines.add("\n"); for (String numericLit : numericLiterals) { terms.add(numericLit); terms.add("(-"+numericLit+")"); } for (String otherLit : otherLiterals) { terms.add(otherLit); } int i=1; (i)++; ArrayList<String> exprs = new ArrayList<String>(); for (String op : unaryPostfixOps) for (String arg : terms) exprs.add(arg+op); for (String op : unaryPrefixOps) for (String arg : terms) exprs.add(op+arg); for (String op : binaryOps) for (String arg1 : terms) for (String arg2 : terms) exprs.add(arg1+op+arg2); for (String res : types) for (String expr : exprs) lines.add("\tdef m"+(c++)+"():void { var l:"+res+" = "+expr+"; }"); lines.add("}"); AutoGenSentences.writeFile(output,lines); } // todo: do a java subset and a C++ subset (so we can see what is different between them and X10) //,String=null,Char='a',Point=null,Region=null // ,Any=null,Object=null,Place=here,Array[Int]=null,Array[Double]=null //Float=0,Double=0,Byte=0,Int=0,Long=0,Short=0,UByte=0,UInt=0,ULong=0,UShort=0 //Double=0,Long=0,String=null,Char='a',Point=null,Region=null String[] typesAndInit = "Float=0,Double=0,Byte=0,Int=0,Long=0,Short=0,UByte=0,UInt=0,ULong=0,UShort=0,Point=null".split(","); // todo later add: Arithmetic[.], Bitwise[.], Ordered[.] //,2147483648,4294967295,4294967296,9007199254740992L,9007199254740993L String[] numericLiterals = "0,1.1f,2.2,127,128,255,256,32767,32768,65535,65536,16777216,16777217,2147483647".split(","); // see numericConversionValid, also a "-" version for each literal String[] otherLiterals = new String[0];//"'\\0','1',\"\",\"0\",[],[0],[1.1],here".split(","); String[] binaryOps = new String[0]; //<,==,<=,>=,!=,||,&&,+,-,*,/,%,|,&,^,<<,>>,>>> String[] unaryPrefixOps = "-".split(",");//"~,-,++,--,+,!".split(","); String[] unaryPostfixOps = "++".split(",");//"++,--".split(","); }