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']");
}