Reviewers: jasvir,

Description:
Fix bug where global reads weren't getting fastpath.

Please review this at http://codereview.appspot.com/2213046/

Affected files:
  M     src/com/google/caja/parser/quasiliteral/ES53Rewriter.java
  M     tests/com/google/caja/parser/quasiliteral/ES53RewriterTest.java


Index: tests/com/google/caja/parser/quasiliteral/ES53RewriterTest.java
===================================================================
--- tests/com/google/caja/parser/quasiliteral/ES53RewriterTest.java (revision 4280) +++ tests/com/google/caja/parser/quasiliteral/ES53RewriterTest.java (working copy)
@@ -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.
             )));
Index: src/com/google/caja/parser/quasiliteral/ES53Rewriter.java
===================================================================
--- src/com/google/caja/parser/quasiliteral/ES53Rewriter.java (revision 4280)
+++ src/com/google/caja/parser/quasiliteral/ES53Rewriter.java   (working copy)
@@ -775,7 +775,7 @@
             Reference vRef = (Reference) v;
             if (scope.isOuter(vRef.getIdentifierName())) {
               return QuasiBuilder.substV(
-                  "___.ri(IMPORTS___, @vname)",
+ "imports_...@fp ? imports_...@v : ___.ri(IMPORTS___, @vname)",
                   "fp", newReference(
                       vRef.getFilePosition(),
                       vRef.getIdentifierName() + "_v___"),


Reply via email to