Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index d668dd377be9e15de6aa0926562617cf2a91d7a3..ef88d90484a51f5497b610ff4dfa41836ab9e980 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -8574,305 +8574,261 @@ TEST(NoPessimisticContextAllocation) { |
int prefix_len = Utf8LengthHelper(prefix); |
int suffix_len = Utf8LengthHelper(suffix); |
+ // Test both normal inner functions and inner arrow functions. |
+ const char* inner_functions[] = {"function inner(%s) { %s }", |
+ "(%s) => { %s }"}; |
+ |
struct { |
+ const char* params; |
const char* source; |
bool ctxt_allocate; |
} inners[] = { |
// Context allocating because we need to: |
- {"function inner() { my_var; }", true}, |
- {"function inner() { if (true) { let my_var; } my_var; }", true}, |
- {"function inner() { eval(\"foo\"); }", true}, |
- {"function inner() { function inner2() { my_var; } }", true}, |
- {"function inner() { function inner2() { eval(\"foo\"); } }", true}, |
- {"function inner() { var {my_var : a} = {my_var}; }", true}, |
- {"function inner() { let {my_var : a} = {my_var}; }", true}, |
- {"function inner() { const {my_var : a} = {my_var}; }", true}, |
- {"function inner(a = my_var) { }", true}, |
- {"function inner() { function inner2(a = my_var) { } }", true}, |
- {"function inner() { (a = my_var) => { } }", true}, |
- {"function inner({a} = {a: my_var}) { }", true}, |
- {"function inner() { function inner2({a} = {a: my_var}) { } }", true}, |
- {"function inner() { ({a} = {a: my_var}) => { } }", true}, |
- {"function inner([a] = [my_var]) { }", true}, |
- {"function inner() { function inner2([a] = [my_var]) { } }", true}, |
- {"function inner() { ([a] = [my_var]) => { } }", true}, |
- {"function inner() { try { } catch (my_var) { } my_var; }", true}, |
- {"function inner() { for (my_var in {}) { my_var; } }", true}, |
- {"function inner() { for (my_var in {}) { } }", true}, |
- {"function inner() { for (my_var of []) { my_var; } }", true}, |
- {"function inner() { for (my_var of []) { } }", true}, |
- {"function inner() { for ([a, my_var, b] in {}) { my_var; } }", true}, |
- {"function inner() { for ([a, my_var, b] of []) { my_var; } }", true}, |
- {"function inner() { for ({x: my_var} in {}) { my_var; } }", true}, |
- {"function inner() { for ({x: my_var} of []) { my_var; } }", true}, |
- {"function inner() { for ({my_var} in {}) { my_var; } }", true}, |
- {"function inner() { for ({my_var} of []) { my_var; } }", true}, |
- {"function inner() { for ({y, x: my_var} in {}) { my_var; } }", true}, |
- {"function inner() { for ({y, x: my_var} of []) { my_var; } }", true}, |
- {"function inner() { for ({a, my_var} in {}) { my_var; } }", true}, |
- {"function inner() { for ({a, my_var} of []) { my_var; } }", true}, |
- {"function inner() { for (let my_var in {}) { } my_var; }", true}, |
- {"function inner() { for (let my_var of []) { } my_var; }", true}, |
- {"function inner() { for (let [a, my_var, b] in {}) { } my_var; }", true}, |
- {"function inner() { for (let [a, my_var, b] of []) { } my_var; }", true}, |
- {"function inner() { for (let {x: my_var} in {}) { } my_var; }", true}, |
- {"function inner() { for (let {x: my_var} of []) { } my_var; }", true}, |
- {"function inner() { for (let {my_var} in {}) { } my_var; }", true}, |
- {"function inner() { for (let {my_var} of []) { } my_var; }", true}, |
- {"function inner() { for (let {y, x: my_var} in {}) { } my_var; }", true}, |
- {"function inner() { for (let {y, x: my_var} of []) { } my_var; }", true}, |
- {"function inner() { for (let {a, my_var} in {}) { } my_var; }", true}, |
- {"function inner() { for (let {a, my_var} of []) { } my_var; }", true}, |
- {"function inner() { for (let my_var = 0; my_var < 1; ++my_var) { } " |
- "my_var }", |
- true}, |
- {"function inner() { 'use strict'; if (true) { function my_var() {} } " |
+ {"", "my_var;", true}, |
+ {"", "if (true) { let my_var; } my_var;", true}, |
+ {"", "eval(\"foo\");", true}, |
+ {"", "function inner2() { my_var; }", true}, |
+ {"", "function inner2() { eval(\"foo\"); }", true}, |
+ {"", "var {my_var : a} = {my_var};", true}, |
+ {"", "let {my_var : a} = {my_var};", true}, |
+ {"", "const {my_var : a} = {my_var};", true}, |
+ {"a = my_var", "", true}, |
+ {"", "function inner2(a = my_var) { }", true}, |
+ {"", "(a = my_var) => { }", true}, |
+ {"{a} = {a: my_var}", "", true}, |
+ {"", "function inner2({a} = {a: my_var}) { }", true}, |
+ {"", "({a} = {a: my_var}) => { }", true}, |
+ {"[a] = [my_var]", "", true}, |
+ {"", "function inner2([a] = [my_var]) { }", true}, |
+ {"", "([a] = [my_var]) => { }", true}, |
+ {"", "try { } catch (my_var) { } my_var;", true}, |
+ {"", "for (my_var in {}) { my_var; }", true}, |
+ {"", "for (my_var in {}) { }", true}, |
+ {"", "for (my_var of []) { my_var; }", true}, |
+ {"", "for (my_var of []) { }", true}, |
+ {"", "for ([a, my_var, b] in {}) { my_var; }", true}, |
+ {"", "for ([a, my_var, b] of []) { my_var; }", true}, |
+ {"", "for ({x: my_var} in {}) { my_var; }", true}, |
+ {"", "for ({x: my_var} of []) { my_var; }", true}, |
+ {"", "for ({my_var} in {}) { my_var; }", true}, |
+ {"", "for ({my_var} of []) { my_var; }", true}, |
+ {"", "for ({y, x: my_var} in {}) { my_var; }", true}, |
+ {"", "for ({y, x: my_var} of []) { my_var; }", true}, |
+ {"", "for ({a, my_var} in {}) { my_var; }", true}, |
+ {"", "for ({a, my_var} of []) { my_var; }", true}, |
+ {"", "for (let my_var in {}) { } my_var;", true}, |
+ {"", "for (let my_var of []) { } my_var;", true}, |
+ {"", "for (let [a, my_var, b] in {}) { } my_var;", true}, |
+ {"", "for (let [a, my_var, b] of []) { } my_var;", true}, |
+ {"", "for (let {x: my_var} in {}) { } my_var;", true}, |
+ {"", "for (let {x: my_var} of []) { } my_var;", true}, |
+ {"", "for (let {my_var} in {}) { } my_var;", true}, |
+ {"", "for (let {my_var} of []) { } my_var;", true}, |
+ {"", "for (let {y, x: my_var} in {}) { } my_var;", true}, |
+ {"", "for (let {y, x: my_var} of []) { } my_var;", true}, |
+ {"", "for (let {a, my_var} in {}) { } my_var;", true}, |
+ {"", "for (let {a, my_var} of []) { } my_var;", true}, |
+ {"", "for (let my_var = 0; my_var < 1; ++my_var) { } my_var;", true}, |
+ {"", "'use strict'; if (true) { function my_var() {} } my_var;", true}, |
+ {"", |
+ "'use strict'; function inner2() { if (true) { function my_var() {} } " |
"my_var; }", |
true}, |
- {"function inner() { 'use strict'; function inner2() { if (true) { " |
- "function my_var() {} } my_var; } }", |
- true}, |
- {"function inner() { function inner2() { 'use strict'; if (true) { " |
- "function my_var() {} } my_var; } }", |
+ {"", |
+ "function inner2() { 'use strict'; if (true) { function my_var() {} } " |
+ "my_var; }", |
true}, |
- {"function inner() { () => { 'use strict'; if (true) { function my_var() " |
- "{} } my_var; } }", |
+ {"", |
+ "() => { 'use strict'; if (true) { function my_var() {} } my_var; }", |
true}, |
- {"function inner() { if (true) { let my_var; if (true) { function " |
- "my_var() {} } } my_var; }", |
+ {"", |
+ "if (true) { let my_var; if (true) { function my_var() {} } } my_var;", |
true}, |
// No pessimistic context allocation: |
- {"function inner() { var my_var; my_var; }", false}, |
- {"function inner() { var my_var; }", false}, |
- {"function inner() { var my_var = 0; }", false}, |
- {"function inner() { if (true) { var my_var; } my_var; }", false}, |
- {"function inner() { let my_var; my_var; }", false}, |
- {"function inner() { let my_var; }", false}, |
- {"function inner() { let my_var = 0; }", false}, |
- {"function inner() { const my_var = 0; my_var; }", false}, |
- {"function inner() { const my_var = 0; }", false}, |
- {"function inner() { var [a, my_var] = [1, 2]; my_var; }", false}, |
- {"function inner() { let [a, my_var] = [1, 2]; my_var; }", false}, |
- {"function inner() { const [a, my_var] = [1, 2]; my_var; }", false}, |
- {"function inner() { var {a: my_var} = {a: 3}; my_var; }", false}, |
- {"function inner() { let {a: my_var} = {a: 3}; my_var; }", false}, |
- {"function inner() { const {a: my_var} = {a: 3}; my_var; }", false}, |
- {"function inner() { var {my_var} = {my_var: 3}; my_var; }", false}, |
- {"function inner() { let {my_var} = {my_var: 3}; my_var; }", false}, |
- {"function inner() { const {my_var} = {my_var: 3}; my_var; }", false}, |
- {"function inner(my_var) { my_var; }", false}, |
- {"function inner(my_var) { }", false}, |
- {"function inner(my_var = 5) { my_var; }", false}, |
- {"function inner(my_var = 5) { }", false}, |
- {"function inner(...my_var) { my_var; }", false}, |
- {"function inner(...my_var) { }", false}, |
- {"function inner([a, my_var, b]) { my_var; }", false}, |
- {"function inner([a, my_var, b]) { }", false}, |
- {"function inner([a, my_var, b] = [1, 2, 3]) { my_var; }", false}, |
- {"function inner([a, my_var, b] = [1, 2, 3]) { }", false}, |
- {"function inner({x: my_var}) { my_var; }", false}, |
- {"function inner({x: my_var}) { }", false}, |
- {"function inner({x: my_var} = {x: 0}) { my_var; }", false}, |
- {"function inner({x: my_var} = {x: 0}) { }", false}, |
- {"function inner({my_var}) { my_var; }", false}, |
- {"function inner({my_var}) { }", false}, |
- {"function inner({my_var} = {my_var: 0}) { my_var; }", false}, |
- {"function inner({my_var} = {my_var: 0}) { }", false}, |
- {"function inner() { function inner2(my_var) { my_var; } }", false}, |
- {"function inner() { function inner2(my_var) { } }", false}, |
- {"function inner() { function inner2(my_var = 5) { my_var; } }", false}, |
- {"function inner() { function inner2(my_var = 5) { } }", false}, |
- {"function inner() { function inner2(...my_var) { my_var; } }", false}, |
- {"function inner() { function inner2(...my_var) { } }", false}, |
- {"function inner() { function inner2([a, my_var, b]) { my_var; } }", |
- false}, |
- {"function inner() { function inner2([a, my_var, b]) { } }", false}, |
- {"function inner() { function inner2([a, my_var, b] = [1, 2, 3]) { " |
- "my_var; } }", |
- false}, |
- {"function inner() { function inner2([a, my_var, b] = [1, 2, 3]) { } }", |
- false}, |
- {"function inner() { function inner2({x: my_var}) { my_var; } }", false}, |
- {"function inner() { function inner2({x: my_var}) { } }", false}, |
- {"function inner() { function inner2({x: my_var} = {x: 0}) { my_var; } }", |
- false}, |
- {"function inner() { function inner2({x: my_var} = {x: 0}) { } }", false}, |
- {"function inner() { function inner2({my_var}) { my_var; } }", false}, |
- {"function inner() { function inner2({my_var}) { } }", false}, |
- {"function inner() { function inner2({my_var} = {my_var: 8}) { my_var; } " |
- "}", |
- false}, |
- {"function inner() { function inner2({my_var} = {my_var: 8}) { } }", |
- false}, |
- {"my_var => my_var; ", false}, |
- {"my_var => { }", false}, |
- {"(my_var = 5) => my_var; ", false}, |
- {"(my_var = 5) => { }", false}, |
- {"(...my_var) => my_var;", false}, |
- {"(...my_var) => { }", false}, |
- {"([a, my_var, b]) => my_var;", false}, |
- {"([a, my_var, b]) => { }", false}, |
- {"([a, my_var, b] = [1, 2, 3]) => my_var;", false}, |
- {"([a, my_var, b] = [1, 2, 3]) => { }", false}, |
- {"({x: my_var}) => my_var;", false}, |
- {"({x: my_var}) => { }", false}, |
- {"({x: my_var} = {x: 0}) => my_var;", false}, |
- {"({x: my_var} = {x: 0}) => { }", false}, |
- {"({my_var}) => my_var;", false}, |
- {"({my_var}) => { }", false}, |
- {"({my_var} = {my_var: 5}) => my_var;", false}, |
- {"({my_var} = {my_var: 5}) => { }", false}, |
- {"({a, my_var}) => my_var;", false}, |
- {"({a, my_var}) => { }", false}, |
- {"({a, my_var} = {a: 0, my_var: 5}) => my_var;", false}, |
- {"({a, my_var} = {a: 0, my_var: 5}) => { }", false}, |
- {"({y, x: my_var}) => my_var;", false}, |
- {"({y, x: my_var}) => { }", false}, |
- {"({y, x: my_var} = {y: 0, x: 0}) => my_var;", false}, |
- {"({y, x: my_var} = {y: 0, x: 0}) => { }", false}, |
- {"function inner() { my_var => my_var; }", false}, |
- {"function inner() { my_var => { }}", false}, |
- {"function inner() { (my_var = 5) => my_var; }", false}, |
- {"function inner() { (my_var = 5) => { }}", false}, |
- {"function inner() { (...my_var) => my_var;}", false}, |
- {"function inner() { (...my_var) => { }}", false}, |
- {"function inner() { ([a, my_var, b]) => my_var;}", false}, |
- {"function inner() { ([a, my_var, b]) => { }}", false}, |
- {"function inner() { ([a, my_var, b] = [1, 2, 3]) => my_var;}", false}, |
- {"function inner() { ([a, my_var, b] = [1, 2, 3]) => { }}", false}, |
- {"function inner() { ({x: my_var}) => my_var;}", false}, |
- {"function inner() { ({x: my_var}) => { }}", false}, |
- {"function inner() { ({x: my_var} = {x: 0}) => my_var;}", false}, |
- {"function inner() { ({x: my_var} = {x: 0}) => { }}", false}, |
- {"function inner() { ({my_var}) => my_var;}", false}, |
- {"function inner() { ({my_var}) => { }}", false}, |
- {"function inner() { ({my_var} = {my_var: 5}) => my_var;}", false}, |
- {"function inner() { ({my_var} = {my_var: 5}) => { }}", false}, |
- {"function inner() { ({a, my_var}) => my_var;}", false}, |
- {"function inner() { ({a, my_var}) => { }}", false}, |
- {"function inner() { ({a, my_var} = {a: 0, my_var: 5}) => my_var;}", |
- false}, |
- {"function inner() { ({a, my_var} = {a: 0, my_var: 5}) => { }}", false}, |
- {"function inner() { ({y, x: my_var}) => my_var;}", false}, |
- {"function inner() { ({y, x: my_var}) => { }}", false}, |
- {"function inner() { ({y, x: my_var} = {y: 0, x: 0}) => my_var;}", false}, |
- {"function inner() { ({y, x: my_var} = {y: 0, x: 0}) => { }}", false}, |
- {"function inner() { try { } catch (my_var) { my_var; } }", false}, |
- {"function inner() { try { } catch ([a, my_var, b]) { my_var; } }", |
- false}, |
- {"function inner() { try { } catch ({x: my_var}) { my_var; } }", false}, |
- {"function inner() { try { } catch ({y, x: my_var}) { my_var; } }", |
- false}, |
- {"function inner() { try { } catch ({my_var}) { my_var; } }", false}, |
- {"function inner() { for (let my_var in {}) { my_var; } }", false}, |
- {"function inner() { for (let my_var in {}) { } }", false}, |
- {"function inner() { for (let my_var of []) { my_var; } }", false}, |
- {"function inner() { for (let my_var of []) { } }", false}, |
- {"function inner() { for (let [a, my_var, b] in {}) { my_var; } }", |
- false}, |
- {"function inner() { for (let [a, my_var, b] of []) { my_var; } }", |
- false}, |
- {"function inner() { for (let {x: my_var} in {}) { my_var; } }", false}, |
- {"function inner() { for (let {x: my_var} of []) { my_var; } }", false}, |
- {"function inner() { for (let {my_var} in {}) { my_var; } }", false}, |
- {"function inner() { for (let {my_var} of []) { my_var; } }", false}, |
- {"function inner() { for (let {y, x: my_var} in {}) { my_var; } }", |
- false}, |
- {"function inner() { for (let {y, x: my_var} of []) { my_var; } }", |
- false}, |
- {"function inner() { for (let {a, my_var} in {}) { my_var; } }", false}, |
- {"function inner() { for (let {a, my_var} of []) { my_var; } }", false}, |
- {"function inner() { for (var my_var in {}) { my_var; } }", false}, |
- {"function inner() { for (var my_var in {}) { } }", false}, |
- {"function inner() { for (var my_var of []) { my_var; } }", false}, |
- {"function inner() { for (var my_var of []) { } }", false}, |
- {"function inner() { for (var [a, my_var, b] in {}) { my_var; } }", |
- false}, |
- {"function inner() { for (var [a, my_var, b] of []) { my_var; } }", |
- false}, |
- {"function inner() { for (var {x: my_var} in {}) { my_var; } }", false}, |
- {"function inner() { for (var {x: my_var} of []) { my_var; } }", false}, |
- {"function inner() { for (var {my_var} in {}) { my_var; } }", false}, |
- {"function inner() { for (var {my_var} of []) { my_var; } }", false}, |
- {"function inner() { for (var {y, x: my_var} in {}) { my_var; } }", |
- false}, |
- {"function inner() { for (var {y, x: my_var} of []) { my_var; } }", |
- false}, |
- {"function inner() { for (var {a, my_var} in {}) { my_var; } }", false}, |
- {"function inner() { for (var {a, my_var} of []) { my_var; } }", false}, |
- {"function inner() { for (var my_var in {}) { } my_var; }", false}, |
- {"function inner() { for (var my_var of []) { } my_var; }", false}, |
- {"function inner() { for (var [a, my_var, b] in {}) { } my_var; }", |
- false}, |
- {"function inner() { for (var [a, my_var, b] of []) { } my_var; }", |
- false}, |
- {"function inner() { for (var {x: my_var} in {}) { } my_var; }", false}, |
- {"function inner() { for (var {x: my_var} of []) { } my_var; }", false}, |
- {"function inner() { for (var {my_var} in {}) { } my_var; }", false}, |
- {"function inner() { for (var {my_var} of []) { } my_var; }", false}, |
- {"function inner() { for (var {y, x: my_var} in {}) { } my_var; }", |
- false}, |
- {"function inner() { for (var {y, x: my_var} of []) { } my_var; }", |
+ {"", "var my_var; my_var;", false}, |
+ {"", "var my_var;", false}, |
+ {"", "var my_var = 0;", false}, |
+ {"", "if (true) { var my_var; } my_var;", false}, |
+ {"", "let my_var; my_var;", false}, |
+ {"", "let my_var;", false}, |
+ {"", "let my_var = 0;", false}, |
+ {"", "const my_var = 0; my_var;", false}, |
+ {"", "const my_var = 0;", false}, |
+ {"", "var [a, my_var] = [1, 2]; my_var;", false}, |
+ {"", "let [a, my_var] = [1, 2]; my_var;", false}, |
+ {"", "const [a, my_var] = [1, 2]; my_var;", false}, |
+ {"", "var {a: my_var} = {a: 3}; my_var;", false}, |
+ {"", "let {a: my_var} = {a: 3}; my_var;", false}, |
+ {"", "const {a: my_var} = {a: 3}; my_var;", false}, |
+ {"", "var {my_var} = {my_var: 3}; my_var;", false}, |
+ {"", "let {my_var} = {my_var: 3}; my_var;", false}, |
+ {"", "const {my_var} = {my_var: 3}; my_var;", false}, |
+ {"my_var", "my_var;", false}, |
+ {"my_var", "", false}, |
+ {"my_var = 5", "my_var;", false}, |
+ {"my_var = 5", "", false}, |
+ {"...my_var", "my_var;", false}, |
+ {"...my_var", "", false}, |
+ {"[a, my_var, b]", "my_var;", false}, |
+ {"[a, my_var, b]", "", false}, |
+ {"[a, my_var, b] = [1, 2, 3]", "my_var;", false}, |
+ {"[a, my_var, b] = [1, 2, 3]", "", false}, |
+ {"{x: my_var}", "my_var;", false}, |
+ {"{x: my_var}", "", false}, |
+ {"{x: my_var} = {x: 0}", "my_var;", false}, |
+ {"{x: my_var} = {x: 0}", "", false}, |
+ {"{my_var}", "my_var;", false}, |
+ {"{my_var}", "", false}, |
+ {"{my_var} = {my_var: 0}", "my_var;", false}, |
+ {"{my_var} = {my_var: 0}", "", false}, |
+ {"", "function inner2(my_var) { my_var; }", false}, |
+ {"", "function inner2(my_var) { }", false}, |
+ {"", "function inner2(my_var = 5) { my_var; }", false}, |
+ {"", "function inner2(my_var = 5) { }", false}, |
+ {"", "function inner2(...my_var) { my_var; }", false}, |
+ {"", "function inner2(...my_var) { }", false}, |
+ {"", "function inner2([a, my_var, b]) { my_var; }", false}, |
+ {"", "function inner2([a, my_var, b]) { }", false}, |
+ {"", "function inner2([a, my_var, b] = [1, 2, 3]) { my_var; }", false}, |
+ {"", "function inner2([a, my_var, b] = [1, 2, 3]) { }", false}, |
+ {"", "function inner2({x: my_var}) { my_var; }", false}, |
+ {"", "function inner2({x: my_var}) { }", false}, |
+ {"", "function inner2({x: my_var} = {x: 0}) { my_var; }", false}, |
+ {"", "function inner2({x: my_var} = {x: 0}) { }", false}, |
+ {"", "function inner2({my_var}) { my_var; }", false}, |
+ {"", "function inner2({my_var}) { }", false}, |
+ {"", "function inner2({my_var} = {my_var: 8}) { my_var; } ", false}, |
+ {"", "function inner2({my_var} = {my_var: 8}) { }", false}, |
+ {"", "my_var => my_var;", false}, |
+ {"", "my_var => { }", false}, |
+ {"", "(my_var = 5) => my_var;", false}, |
+ {"", "(my_var = 5) => { }", false}, |
+ {"", "(...my_var) => my_var;", false}, |
+ {"", "(...my_var) => { }", false}, |
+ {"", "([a, my_var, b]) => my_var;", false}, |
+ {"", "([a, my_var, b]) => { }", false}, |
+ {"", "([a, my_var, b] = [1, 2, 3]) => my_var;", false}, |
+ {"", "([a, my_var, b] = [1, 2, 3]) => { }", false}, |
+ {"", "({x: my_var}) => my_var;", false}, |
+ {"", "({x: my_var}) => { }", false}, |
+ {"", "({x: my_var} = {x: 0}) => my_var;", false}, |
+ {"", "({x: my_var} = {x: 0}) => { }", false}, |
+ {"", "({my_var}) => my_var;", false}, |
+ {"", "({my_var}) => { }", false}, |
+ {"", "({my_var} = {my_var: 5}) => my_var;", false}, |
+ {"", "({my_var} = {my_var: 5}) => { }", false}, |
+ {"", "({a, my_var}) => my_var;", false}, |
+ {"", "({a, my_var}) => { }", false}, |
+ {"", "({a, my_var} = {a: 0, my_var: 5}) => my_var;", false}, |
+ {"", "({a, my_var} = {a: 0, my_var: 5}) => { }", false}, |
+ {"", "({y, x: my_var}) => my_var;", false}, |
+ {"", "({y, x: my_var}) => { }", false}, |
+ {"", "({y, x: my_var} = {y: 0, x: 0}) => my_var;", false}, |
+ {"", "({y, x: my_var} = {y: 0, x: 0}) => { }", false}, |
+ {"", "try { } catch (my_var) { my_var; }", false}, |
+ {"", "try { } catch ([a, my_var, b]) { my_var; }", false}, |
+ {"", "try { } catch ({x: my_var}) { my_var; }", false}, |
+ {"", "try { } catch ({y, x: my_var}) { my_var; }", false}, |
+ {"", "try { } catch ({my_var}) { my_var; }", false}, |
+ {"", "for (let my_var in {}) { my_var; }", false}, |
+ {"", "for (let my_var in {}) { }", false}, |
+ {"", "for (let my_var of []) { my_var; }", false}, |
+ {"", "for (let my_var of []) { }", false}, |
+ {"", "for (let [a, my_var, b] in {}) { my_var; }", false}, |
+ {"", "for (let [a, my_var, b] of []) { my_var; }", false}, |
+ {"", "for (let {x: my_var} in {}) { my_var; }", false}, |
+ {"", "for (let {x: my_var} of []) { my_var; }", false}, |
+ {"", "for (let {my_var} in {}) { my_var; }", false}, |
+ {"", "for (let {my_var} of []) { my_var; }", false}, |
+ {"", "for (let {y, x: my_var} in {}) { my_var; }", false}, |
+ {"", "for (let {y, x: my_var} of []) { my_var; }", false}, |
+ {"", "for (let {a, my_var} in {}) { my_var; }", false}, |
+ {"", "for (let {a, my_var} of []) { my_var; }", false}, |
+ {"", "for (var my_var in {}) { my_var; }", false}, |
+ {"", "for (var my_var in {}) { }", false}, |
+ {"", "for (var my_var of []) { my_var; }", false}, |
+ {"", "for (var my_var of []) { }", false}, |
+ {"", "for (var [a, my_var, b] in {}) { my_var; }", false}, |
+ {"", "for (var [a, my_var, b] of []) { my_var; }", false}, |
+ {"", "for (var {x: my_var} in {}) { my_var; }", false}, |
+ {"", "for (var {x: my_var} of []) { my_var; }", false}, |
+ {"", "for (var {my_var} in {}) { my_var; }", false}, |
+ {"", "for (var {my_var} of []) { my_var; }", false}, |
+ {"", "for (var {y, x: my_var} in {}) { my_var; }", false}, |
+ {"", "for (var {y, x: my_var} of []) { my_var; }", false}, |
+ {"", "for (var {a, my_var} in {}) { my_var; }", false}, |
+ {"", "for (var {a, my_var} of []) { my_var; }", false}, |
+ {"", "for (var my_var in {}) { } my_var;", false}, |
+ {"", "for (var my_var of []) { } my_var;", false}, |
+ {"", "for (var [a, my_var, b] in {}) { } my_var;", false}, |
+ {"", "for (var [a, my_var, b] of []) { } my_var;", false}, |
+ {"", "for (var {x: my_var} in {}) { } my_var;", false}, |
+ {"", "for (var {x: my_var} of []) { } my_var;", false}, |
+ {"", "for (var {my_var} in {}) { } my_var;", false}, |
+ {"", "for (var {my_var} of []) { } my_var;", false}, |
+ {"", "for (var {y, x: my_var} in {}) { } my_var;", false}, |
+ {"", "for (var {y, x: my_var} of []) { } my_var;", false}, |
+ {"", "for (var {a, my_var} in {}) { } my_var;", false}, |
+ {"", "for (var {a, my_var} of []) { } my_var;", false}, |
+ {"", "for (let my_var = 0; my_var < 1; ++my_var) { my_var; }", false}, |
+ {"", "for (var my_var = 0; my_var < 1; ++my_var) { my_var; }", false}, |
+ {"", "for (var my_var = 0; my_var < 1; ++my_var) { } my_var; ", false}, |
+ {"", "for (let a = 0, my_var = 0; my_var < 1; ++my_var) { my_var }", |
false}, |
- {"function inner() { for (var {a, my_var} in {}) { } my_var; }", false}, |
- {"function inner() { for (var {a, my_var} of []) { } my_var; }", false}, |
- {"function inner() { for (let my_var = 0; my_var < 1; ++my_var) { my_var " |
- "} }", |
+ {"", "for (var a = 0, my_var = 0; my_var < 1; ++my_var) { my_var }", |
false}, |
- {"function inner() { for (var my_var = 0; my_var < 1; ++my_var) { my_var " |
- "} }", |
+ {"", "class my_var {}; my_var; ", false}, |
+ {"", "function my_var() {} my_var;", false}, |
+ {"", "if (true) { function my_var() {} } my_var;", false}, |
+ {"", "function inner2() { if (true) { function my_var() {} } my_var; }", |
false}, |
- {"function inner() { for (var my_var = 0; my_var < 1; ++my_var) { } " |
- "my_var }", |
- false}, |
- {"function inner() { for (let a = 0, my_var = 0; my_var < 1; ++my_var) { " |
- "my_var } }", |
- false}, |
- {"function inner() { for (var a = 0, my_var = 0; my_var < 1; ++my_var) { " |
- "my_var } }", |
- false}, |
- {"function inner() { class my_var {}; my_var }", false}, |
- {"function inner() { function my_var() {} my_var; }", false}, |
- {"function inner() { if (true) { function my_var() {} } my_var; }", |
- false}, |
- {"function inner() { function inner2() { if (true) { function my_var() " |
- "{} } my_var; } }", |
- false}, |
- {"function inner() { () => { if (true) { function my_var() {} } my_var; " |
- "} }", |
- false}, |
- {"function inner() { if (true) { var my_var; if (true) { function " |
- "my_var() {} } } my_var; }", |
+ {"", "() => { if (true) { function my_var() {} } my_var; }", false}, |
+ {"", |
+ "if (true) { var my_var; if (true) { function my_var() {} } } my_var;", |
false}, |
}; |
- for (unsigned i = 0; i < arraysize(inners); ++i) { |
- const char* inner = inners[i].source; |
- int inner_len = Utf8LengthHelper(inner); |
- int len = prefix_len + inner_len + suffix_len; |
- i::ScopedVector<char> program(len + 1); |
- i::SNPrintF(program, "%s%s%s", prefix, inner, suffix); |
- i::Handle<i::String> source = |
- factory->InternalizeUtf8String(program.start()); |
- source->PrintOn(stdout); |
- printf("\n"); |
+ for (unsigned inner_ix = 0; inner_ix < arraysize(inner_functions); |
+ ++inner_ix) { |
+ const char* inner_function = inner_functions[inner_ix]; |
+ int inner_function_len = Utf8LengthHelper(inner_function) - 4; |
- i::Handle<i::Script> script = factory->NewScript(source); |
- i::Zone zone(isolate->allocator(), ZONE_NAME); |
- i::ParseInfo info(&zone, script); |
+ for (unsigned i = 0; i < arraysize(inners); ++i) { |
+ int params_len = Utf8LengthHelper(inners[i].params); |
+ int source_len = Utf8LengthHelper(inners[i].source); |
+ int len = prefix_len + inner_function_len + params_len + source_len + |
+ suffix_len; |
+ |
+ i::ScopedVector<char> program(len + 1); |
+ i::SNPrintF(program, "%s", prefix); |
+ i::SNPrintF(program + prefix_len, inner_function, inners[i].params, |
+ inners[i].source); |
+ i::SNPrintF( |
+ program + prefix_len + inner_function_len + params_len + source_len, |
+ "%s", suffix); |
+ |
+ i::Handle<i::String> source = |
+ factory->InternalizeUtf8String(program.start()); |
+ source->PrintOn(stdout); |
+ printf("\n"); |
- CHECK(i::parsing::ParseProgram(&info)); |
- CHECK(i::Compiler::Analyze(&info)); |
- CHECK(info.literal() != NULL); |
- |
- i::Scope* scope = info.literal()->scope()->inner_scope(); |
- DCHECK_NOT_NULL(scope); |
- DCHECK_NULL(scope->sibling()); |
- DCHECK(scope->is_function_scope()); |
- const i::AstRawString* var_name = |
- info.ast_value_factory()->GetOneByteString("my_var"); |
- i::Variable* var = scope->Lookup(var_name); |
- CHECK_EQ(inners[i].ctxt_allocate, |
- i::ScopeTestHelper::MustAllocateInContext(var)); |
+ i::Handle<i::Script> script = factory->NewScript(source); |
+ i::Zone zone(isolate->allocator(), ZONE_NAME); |
+ i::ParseInfo info(&zone, script); |
+ |
+ CHECK(i::parsing::ParseProgram(&info)); |
+ CHECK(i::Compiler::Analyze(&info)); |
+ CHECK(info.literal() != NULL); |
+ |
+ i::Scope* scope = info.literal()->scope()->inner_scope(); |
+ DCHECK_NOT_NULL(scope); |
+ DCHECK_NULL(scope->sibling()); |
+ DCHECK(scope->is_function_scope()); |
+ const i::AstRawString* var_name = |
+ info.ast_value_factory()->GetOneByteString("my_var"); |
+ i::Variable* var = scope->Lookup(var_name); |
+ CHECK_EQ(inners[i].ctxt_allocate, |
+ i::ScopeTestHelper::MustAllocateInContext(var)); |
+ } |
} |
} |