Fix for Issue #3796, "syntax error due to inlining of numeric literal into jsni function". Field or method references on numeric literals only work if the numeric literal is surrounded by parentheses or has a space. "42.foo" is not legal, but "(42).foo" and "42 .foo" are. git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5686 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java index 8b0b03e..78dc37c 100644 --- a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java +++ b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
@@ -562,6 +562,13 @@ if (q != null) { _parenPush(x, q, false); accept(q); + if (q instanceof JsNumberLiteral) { + /** + * Fix for Issue #3796. "42.foo" is not allowed, but + * "42 .foo" is. + */ + _space(); + } _parenPop(x, q, false); _dot(); }
diff --git a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java index 4fc4188..b5d3479 100644 --- a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java +++ b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java
@@ -100,6 +100,10 @@ doTest("new (new (new MyClass()))"); } + public void testNumberLiteralNameRef() throws Exception { + doTest("(42).nameRef"); + } + public void testObjectDeclarationArrayAccess() throws Exception { doTest("({ a : 'b'})['a']"); }