Revision: 4281
Author: metaweta
Date: Wed Sep 22 12:10:53 2010
Log: Fix bug where global reads weren't getting fastpath.
http://codereview.appspot.com/2213046
Fix bug where global reads weren't getting fastpath.
[email protected]
http://code.google.com/p/google-caja/source/detail?r=4281
Modified:
/trunk/src/com/google/caja/parser/quasiliteral/ES53Rewriter.java
/trunk/tests/com/google/caja/parser/quasiliteral/ES53RewriterTest.java
=======================================
--- /trunk/src/com/google/caja/parser/quasiliteral/ES53Rewriter.java Thu
Sep 16 14:15:47 2010
+++ /trunk/src/com/google/caja/parser/quasiliteral/ES53Rewriter.java Wed
Sep 22 12:10:53 2010
@@ -766,7 +766,7 @@
matches="@v",
substitutes="imports_...@fp ?" +
"imports_...@v :" +
- "___.ri(IMPORTS___, @'v')")
+ "___.ri(IMPORTS___, @vname)")
public ParseTreeNode fire(ParseTreeNode node, Scope scope) {
Map<String, ParseTreeNode> bindings = match(node);
if (bindings != null) {
@@ -774,8 +774,7 @@
if (v instanceof Reference) {
Reference vRef = (Reference) v;
if (scope.isOuter(vRef.getIdentifierName())) {
- return QuasiBuilder.substV(
- "___.ri(IMPORTS___, @vname)",
+ return substV(
"fp", newReference(
vRef.getFilePosition(),
vRef.getIdentifierName() + "_v___"),
=======================================
--- /trunk/tests/com/google/caja/parser/quasiliteral/ES53RewriterTest.java
Thu Sep 16 11:07:21 2010
+++ /trunk/tests/com/google/caja/parser/quasiliteral/ES53RewriterTest.java
Wed Sep 22 12:10:53 2010
@@ -660,7 +660,10 @@
+ "var dis___ = IMPORTS___;"
+ "{"
+ " function f(x, y___) {"
- + " return (x + y___) * ___.ri(IMPORTS___, 'z');"
+ + " return (x + y___) *"
+ + " (IMPORTS___.z_v___ ?"
+ + " IMPORTS___.z :"
+ + " ___.ri(IMPORTS___, 'z'));"
+ " }"
+ " IMPORTS___.w___('f', ___.f(f, 'f'));"
+ "}")));
@@ -676,7 +679,10 @@
// x and y___ are formals, but z is free to the function.
+ "var dis___ = IMPORTS___;"
+ "function f(x, y___) {"
- + " return (x + y___) * ___.ri(IMPORTS___, 'z');"
+ + " return (x + y___) *"
+ + " (IMPORTS___.z_v___ ?"
+ + " IMPORTS___.z :"
+ + " ___.ri(IMPORTS___, 'z'));"
+ "}"
// Since the function is synthetic, it is not marked.
)));