Commit 9e6691fb authored by marja's avatar marja Committed by Commit bot

Preparsing inner funcs: simplify test-parsing/NoPessimisticContextAllocation.

Reduce duplication of the inner function declaration + now we get the
test for inner arrow functions for free (if we later implement lazy
inner arrow functions).

BUG=v8:5501, v8:5516

Review-Url: https://codereview.chromium.org/2637003005
Cr-Commit-Position: refs/heads/master@{#42412}
parent 47684fe8
......@@ -8634,305 +8634,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; }",
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 "
"} }",
{"", "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 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 (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));
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment