| 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));
|
| + }
|
| }
|
| }
|
|
|