From c6cf0548909cb33df21f20cc9d1fc529fbc72863 Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Mon, 11 Aug 2014 01:49:22 +0200 Subject: [PATCH 1/3] Test for bug #1936 - nested constructor casts --- app/test/resources/bug1936.expected | 29 +++++++++++++++++++ app/test/resources/bug1936.pde | 1 + .../processing/mode/java/ParserTests.java | 5 ++++ 3 files changed, 35 insertions(+) create mode 100644 app/test/resources/bug1936.expected create mode 100644 app/test/resources/bug1936.pde diff --git a/app/test/resources/bug1936.expected b/app/test/resources/bug1936.expected new file mode 100644 index 000000000..dd06677b0 --- /dev/null +++ b/app/test/resources/bug1936.expected @@ -0,0 +1,29 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import java.util.HashMap; +import java.util.ArrayList; +import java.io.File; +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +public class bug1936 extends PApplet { + public void setup() { +char a = PApplet.parseChar(PApplet.parseByte(PApplet.parseInt("15"))); + noLoop(); + } + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "bug1936" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/app/test/resources/bug1936.pde b/app/test/resources/bug1936.pde new file mode 100644 index 000000000..95d332a4e --- /dev/null +++ b/app/test/resources/bug1936.pde @@ -0,0 +1 @@ +char a = char(byte(int("15"))); \ No newline at end of file diff --git a/app/test/src/test/processing/mode/java/ParserTests.java b/app/test/src/test/processing/mode/java/ParserTests.java index eca3de658..ed5b47411 100644 --- a/app/test/src/test/processing/mode/java/ParserTests.java +++ b/app/test/src/test/processing/mode/java/ParserTests.java @@ -271,6 +271,11 @@ public class ParserTests { public void bug1534() { expectGood("bug1534"); } + + @Test + public void bug1936() { + expectGood("bug1936"); + } @Test public void bug315g() { From 8cd54e52abf40ea0becafbba146c88ae1f90253a Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Mon, 11 Aug 2014 01:53:52 +0200 Subject: [PATCH 2/3] Fixes #1936 - nested constructor casts Fixes #1936. Tokens can be null when Recognizer uses "guess" mode, which was not accounted for. --- app/src/processing/mode/java/preproc/pde.g | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/processing/mode/java/preproc/pde.g b/app/src/processing/mode/java/preproc/pde.g index 0537f2b85..4355c2b79 100644 --- a/app/src/processing/mode/java/preproc/pde.g +++ b/app/src/processing/mode/java/preproc/pde.g @@ -194,13 +194,14 @@ constructorCast! // if this is a string literal, make sure the type we're trying to cast // to is one of the supported ones // - { #e.getType() != STRING_LITERAL || - ( #t.getType() == LITERAL_byte || + { (#e == null) || + ( (#e.getType() != STRING_LITERAL) || + ( #t.getType() == LITERAL_boolean || #t.getType() == LITERAL_double || #t.getType() == LITERAL_float || #t.getType() == LITERAL_int || #t.getType() == LITERAL_long || - #t.getType() == LITERAL_short ) }? + #t.getType() == LITERAL_short )) }? // create the node // {#constructorCast = #(#[CONSTRUCTOR_CAST,"CONSTRUCTOR_CAST"], t, e);} From fcd3ff99cbf8567b3af86422ceb80fa581c641c5 Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Mon, 11 Aug 2014 01:56:16 +0200 Subject: [PATCH 3/3] Corrected constructor cast method name Changed `float[] parseByte(byte[])` to `float[] parseFloat(byte[])` --- core/src/processing/core/PApplet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java index 2c6e4b9d4..e1e06b240 100755 --- a/core/src/processing/core/PApplet.java +++ b/core/src/processing/core/PApplet.java @@ -9635,7 +9635,7 @@ public class PApplet extends Applet } */ - static final public float[] parseByte(byte what[]) { + static final public float[] parseFloat(byte what[]) { float floaties[] = new float[what.length]; for (int i = 0; i < what.length; i++) { floaties[i] = what[i];