From: <dal...@us...> - 2014-04-18 21:06:35
|
Revision: 23500 http://sourceforge.net/p/jedit/svn/23500 Author: daleanson Date: 2014-04-18 21:06:32 +0000 (Fri, 18 Apr 2014) Log Message: ----------- Added tests for conversions. All tests pass. Modified Paths: -------------- plugins/JavaSideKick/trunk/clean_jj/1.8/JavaParser.class plugins/JavaSideKick/trunk/clean_jj/1.8/JavaParser.java plugins/JavaSideKick/trunk/clean_jj/1.8/build.xml plugins/JavaSideKick/trunk/clean_jj/1.8/java18_clean.jj plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/ArrayTest.java Added Paths: ----------- plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/Conversions.java Modified: plugins/JavaSideKick/trunk/clean_jj/1.8/JavaParser.class =================================================================== (Binary files differ) Modified: plugins/JavaSideKick/trunk/clean_jj/1.8/JavaParser.java =================================================================== --- plugins/JavaSideKick/trunk/clean_jj/1.8/JavaParser.java 2014-04-18 20:51:13 UTC (rev 23499) +++ plugins/JavaSideKick/trunk/clean_jj/1.8/JavaParser.java 2014-04-18 21:06:32 UTC (rev 23500) @@ -339,11 +339,11 @@ trace_call("ReferenceType"); try { if (jj_2_3(3)) { - ClassOrInterfaceType(); + ArrayType(); } else if (jj_2_4(3)) { TypeVariable(); } else if (jj_2_5(3)) { - ArrayType(); + ClassOrInterfaceType(); } else { jj_consume_token(-1); throw new ParseException(); @@ -9879,7 +9879,7 @@ } private boolean jj_3_15() { - if (jj_3R_96()) return true; + if (jj_3R_98()) return true; Token xsp; while (true) { xsp = jj_scanpos; @@ -10094,7 +10094,7 @@ } private boolean jj_3_12() { - if (jj_3R_96()) return true; + if (jj_3R_98()) return true; if (jj_3R_103()) return true; return false; } @@ -10109,7 +10109,7 @@ return false; } - private boolean jj_3R_98() { + private boolean jj_3R_96() { Token xsp; xsp = jj_scanpos; if (jj_3_11()) { @@ -10227,7 +10227,7 @@ return false; } - private boolean jj_3R_96() { + private boolean jj_3R_98() { Token xsp; xsp = jj_scanpos; if (jj_3_6()) { @@ -10348,11 +10348,6 @@ return false; } - private boolean jj_3R_429() { - if (jj_3R_155()) return true; - return false; - } - private boolean jj_3R_333() { Token xsp; xsp = jj_scanpos; @@ -10372,6 +10367,11 @@ return false; } + private boolean jj_3R_429() { + if (jj_3R_155()) return true; + return false; + } + private boolean jj_3R_383() { if (jj_3R_138()) return true; return false; @@ -10387,36 +10387,36 @@ return false; } - private boolean jj_3R_287() { + private boolean jj_3R_95() { Token xsp; xsp = jj_scanpos; - if (jj_3R_381()) { + if (jj_3R_219()) { jj_scanpos = xsp; - if (jj_3R_382()) { - jj_scanpos = xsp; - if (jj_3R_383()) return true; + if (jj_3R_220()) return true; } - } return false; } - private boolean jj_3R_381() { - if (jj_3R_187()) return true; + private boolean jj_3R_219() { + if (jj_3R_333()) return true; return false; } - private boolean jj_3R_95() { + private boolean jj_3R_287() { Token xsp; xsp = jj_scanpos; - if (jj_3R_219()) { + if (jj_3R_381()) { jj_scanpos = xsp; - if (jj_3R_220()) return true; + if (jj_3R_382()) { + jj_scanpos = xsp; + if (jj_3R_383()) return true; } + } return false; } - private boolean jj_3R_219() { - if (jj_3R_333()) return true; + private boolean jj_3R_381() { + if (jj_3R_187()) return true; return false; } @@ -10430,18 +10430,6 @@ return false; } - private boolean jj_3R_166() { - if (jj_3R_287()) return true; - if (jj_3R_288()) return true; - if (jj_3R_118()) return true; - return false; - } - - private boolean jj_3_156() { - if (jj_3R_166()) return true; - return false; - } - private boolean jj_3R_94() { Token xsp; while (true) { @@ -10456,6 +10444,18 @@ return false; } + private boolean jj_3R_166() { + if (jj_3R_287()) return true; + if (jj_3R_288()) return true; + if (jj_3R_118()) return true; + return false; + } + + private boolean jj_3_156() { + if (jj_3R_166()) return true; + return false; + } + private boolean jj_3R_428() { if (jj_3R_101()) return true; return false; @@ -10731,7 +10731,7 @@ private boolean jj_3_151() { if (jj_scan_token(NEW)) return true; - if (jj_3R_96()) return true; + if (jj_3R_98()) return true; if (jj_3R_103()) return true; if (jj_3R_117()) return true; return false; @@ -10762,7 +10762,7 @@ private boolean jj_3_149() { if (jj_scan_token(NEW)) return true; - if (jj_3R_96()) return true; + if (jj_3R_98()) return true; if (jj_3R_200()) return true; Token xsp; xsp = jj_scanpos; @@ -10807,7 +10807,7 @@ } private boolean jj_3_145() { - if (jj_3R_98()) return true; + if (jj_3R_96()) return true; if (jj_scan_token(126)) return true; if (jj_scan_token(NEW)) return true; return false; Modified: plugins/JavaSideKick/trunk/clean_jj/1.8/build.xml =================================================================== --- plugins/JavaSideKick/trunk/clean_jj/1.8/build.xml 2014-04-18 20:51:13 UTC (rev 23499) +++ plugins/JavaSideKick/trunk/clean_jj/1.8/build.xml 2014-04-18 21:06:32 UTC (rev 23500) @@ -74,6 +74,9 @@ <antcall target="FloatingPointOperations" inheritrefs="true"/> + <antcall + target="Conversions" + inheritrefs="true"/> </target> <!-- ======================================================================== @@ -395,6 +398,27 @@ </fail> </target> + <target + name="Conversions"> + <java + classname="JavaParser" + fork="true" + resultproperty="Conversionserror"> + <classpath + refid="classpathref"/> + <arg + value="test_files/Conversions.java"/> + </java> + <fail + message="Conversions failed: ${Conversionserror}"> + <condition> + <not> + <equals arg1="${Conversionserror}" arg2="0" trim="true"/> + </not> + </condition> + </fail> + </target> + <!-- ======================================================================== Target: javacc clean and create ========================================================================= --> Modified: plugins/JavaSideKick/trunk/clean_jj/1.8/java18_clean.jj =================================================================== --- plugins/JavaSideKick/trunk/clean_jj/1.8/java18_clean.jj 2014-04-18 20:51:13 UTC (rev 23499) +++ plugins/JavaSideKick/trunk/clean_jj/1.8/java18_clean.jj 2014-04-18 21:06:32 UTC (rev 23500) @@ -547,14 +547,13 @@ {} { LOOKAHEAD(3) - ClassOrInterfaceType() + ArrayType() | LOOKAHEAD(3) TypeVariable() | LOOKAHEAD(3) - ArrayType() - + ClassOrInterfaceType() } void ClassOrInterfaceType(): Modified: plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/ArrayTest.java =================================================================== --- plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/ArrayTest.java 2014-04-18 20:51:13 UTC (rev 23499) +++ plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/ArrayTest.java 2014-04-18 21:06:32 UTC (rev 23500) @@ -11,10 +11,12 @@ // int cn = rw.myNumbers(); //int d = 7; //int a = b + c; - for (int i = 0; i < 100; i++) { - float z = 1.0f / i; - if (z * i != 1.0f) - System.out.print(" " + i); - } + // for (int i = 0; i < 100; i++) { + // float z = 1.0f / i; + // if (z * i != 1.0f) + // System.out.print(" " + i); + // } + ColoredPoint[] cpa = (ColoredPoint[])pa; + } } \ No newline at end of file Added: plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/Conversions.java =================================================================== --- plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/Conversions.java (rev 0) +++ plugins/JavaSideKick/trunk/clean_jj/1.8/test_files/Conversions.java 2014-04-18 21:06:32 UTC (rev 23500) @@ -0,0 +1,199 @@ +// Chapter 5, conversions +class Test { + public static void main(String[] args) { + // Casting conversion (5.4) of a float literal to + // type int. Without the cast operator, this would + // be a compile-time error, because this is a + // narrowing conversion (5.1.3): + int i = (int)12.5f; + + // String conversion (5.4) of i's int value: + System.out.println("(int)12.5f==" + i); + + // Assignment conversion (5.2) of i's value to type + // float. This is a widening conversion (5.1.2): + float f = i; + + // String conversion of f's float value: + System.out.println("after float widening: " + f); + + // Numeric promotion (5.6) of i's value to type + // float. This is a binary numeric promotion. + // After promotion, the operation is float*float: + System.out.print(f); + f = f * i; + + // Two string conversions of i and f: + System.out.println("*" + i + "==" + f); + + // Invocation conversion (5.3) of f's value + // to type double, needed because the method Math.sin + // accepts only a double argument: + double d = Math.sin(f); + + // Two string conversions of f and d: + System.out.println("Math.sin(" + f + ")==" + d); + } + + public static void narrowingAndWidening() { + int big = 1234567890; + float approx = big; + System.out.println(big - (int)approx); + float fmin = Float.NEGATIVE_INFINITY; + float fmax = Float.POSITIVE_INFINITY; + System.out.println("long: " + (long)fmin + + ".." + (long)fmax); + System.out.println("int: " + (int)fmin + + ".." + (int)fmax); + System.out.println("short: " + (short)fmin + + ".." + (short)fmax); + System.out.println("char: " + (int)(char)fmin + + ".." + (int)(char)fmax); + System.out.println("byte: " + (byte)fmin + + ".." + (byte)fmax); + // A narrowing of int to short loses high bits: + System.out.println("(short)0x12345678==0x" + + Integer.toHexString((short)0x12345678)); + // An int value too big for byte changes sign and magnitude: + System.out.println("(byte)255==" + (byte)255); + // A float value too big to fit gives largest int value: + System.out.println("(int)1e20f==" + (int)1e20f); + // A NaN converted to int yields zero: + System.out.println("(int)NaN==" + (int)Float.NaN); + // A double value too large for float yields infinity: + System.out.println("(float)-1e100==" + (float)-1e100); + // A double value too small for float underflows to zero: + System.out.println("(float)1e-50==" + (float)1e-50); + } + + public static void reverse(List<?> list) { rev(list); } + private static <T> void rev(List<T> list) { + List<T> tmp = new ArrayList<T>(list); + for (int i = 0; i < list.size(); i++) { + list.set(i, tmp.get(list.size() - i - 1)); + } + } + + public static void assignmentConversions() { + short s = 12; // narrow 12 to short + float f = s; // widen short to float + System.out.println("f=" + f); + char c = '\u0123'; + long l = c; // widen char to long + System.out.println("l=0x" + Long.toString(l,16)); + f = 1.23f; + double d = f; // widen float to double + System.out.println("d=" + d); + } + + public static void referenceTypeConversions() { + // Assignments to variables of class type: + Point p = new Point(); + p = new Point3D(); + // OK because Point3D is a subclass of Point + Point3D p3d = p; + // Error: will require a cast because a Point + // might not be a Point3D (even though it is, + // dynamically, in this example.) + + // Assignments to variables of type Object: + Object o = p; // OK: any object to Object + int[] a = new int[3]; + Object o2 = a; // OK: an array to Object + + // Assignments to variables of interface type: + ColoredPoint cp = new ColoredPoint(); + Colorable c = cp; + // OK: ColoredPoint implements Colorable + + // Assignments to variables of array type: + byte[] b = new byte[4]; + a = b; + // Error: these are not arrays of the same primitive type + Point3D[] p3da = new Point3D[3]; + Point[] pa = p3da; + // OK: since we can assign a Point3D to a Point + p3da = pa; + // Error: (cast needed) since a Point + // can't be assigned to a Point3D + } + + public static void ArrayConversions() { + long[] veclong = new long[100]; + Object o = veclong; // okay + Long l = veclong; // compile-time error + short[] vecshort = veclong; // compile-time error + Point[] pvec = new Point[100]; + ColoredPoint[] cpvec = new ColoredPoint[100]; + pvec = cpvec; // okay + pvec[0] = new Point(); // okay at compile time, + // but would throw an + // exception at run time + cpvec = pvec; // compile-time error + } + + public static void castingConversions() { + Point p = new Point(); + ColoredPoint cp = new ColoredPoint(); + Colorable c; + // The following may cause errors at run time because + // we cannot be sure they will succeed; this possibility + // is suggested by the casts: + cp = (ColoredPoint)p; // p might not reference an + // object which is a ColoredPoint + // or a subclass of ColoredPoint + c = (Colorable)p; // p might not be Colorable + // The following are incorrect at compile time because + // they can never succeed as explained in the text: + Long l = (Long)p; // compile-time error #1 + EndPoint e = new EndPoint(); + c = (Colorable)e; // compile-time error #2 + } + + public static void castingConversionsForArrays() { + Point[] pa = new ColoredPoint[4]; + pa[0] = new ColoredPoint(2, 2, 12); + pa[1] = new ColoredPoint(4, 5, 24); + ColoredPoint[] cpa = (ColoredPoint[])pa; + System.out.print("cpa: {"); + for (int i = 0; i < cpa.length; i++) + System.out.print((i == 0 ? " " : ", ") + cpa[i]); + System.out.println(" }"); + } + + public static void unaryNumericPromotions() { + byte b = 2; + int a[] = new int[b]; // dimension expression promotion + char c = '\u0001'; + a[c] = 1; // index expression promotion + a[0] = -c; // unary - promotion + System.out.println("a: " + a[0] + "," + a[1]); + b = -1; + int i = ~b; // bitwise complement promotion + System.out.println("~0x" + Integer.toHexString(b) + + "==0x" + Integer.toHexString(i)); + i = b << 4L; // shift promotion (left operand) + System.out.println("0x" + Integer.toHexString(b) + + "<<4L==0x" + Integer.toHexString(i)); + } + + public static void binaryNumericPromotions() { + int i = 0; + float f = 1.0f; + double d = 2.0; + // First int*float is promoted to float*float, then + // float==double is promoted to double==double: + if (i * f == d) System.out.println("oops"); + + // A char&byte is promoted to int&int: + byte b = 0x1f; + char c = 'G'; + int control = c & b; + System.out.println(Integer.toHexString(control)); + + // Here int:float is promoted to float:float: + f = (b==0) ? i : 4.0f; + System.out.println(1.0/f); + } + +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |