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___"),