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.
             )));

Reply via email to