| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 8556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8567 i::Isolate* isolate = CcTest::i_isolate(); | 8567 i::Isolate* isolate = CcTest::i_isolate(); |
| 8568 i::Factory* factory = isolate->factory(); | 8568 i::Factory* factory = isolate->factory(); |
| 8569 i::HandleScope scope(isolate); | 8569 i::HandleScope scope(isolate); |
| 8570 LocalContext env; | 8570 LocalContext env; |
| 8571 | 8571 |
| 8572 const char* prefix = "(function outer() { var my_var; "; | 8572 const char* prefix = "(function outer() { var my_var; "; |
| 8573 const char* suffix = " })();"; | 8573 const char* suffix = " })();"; |
| 8574 int prefix_len = Utf8LengthHelper(prefix); | 8574 int prefix_len = Utf8LengthHelper(prefix); |
| 8575 int suffix_len = Utf8LengthHelper(suffix); | 8575 int suffix_len = Utf8LengthHelper(suffix); |
| 8576 | 8576 |
| 8577 // Test both normal inner functions and inner arrow functions. |
| 8578 const char* inner_functions[] = {"function inner(%s) { %s }", |
| 8579 "(%s) => { %s }"}; |
| 8580 |
| 8577 struct { | 8581 struct { |
| 8582 const char* params; |
| 8578 const char* source; | 8583 const char* source; |
| 8579 bool ctxt_allocate; | 8584 bool ctxt_allocate; |
| 8580 } inners[] = { | 8585 } inners[] = { |
| 8581 // Context allocating because we need to: | 8586 // Context allocating because we need to: |
| 8582 {"function inner() { my_var; }", true}, | 8587 {"", "my_var;", true}, |
| 8583 {"function inner() { if (true) { let my_var; } my_var; }", true}, | 8588 {"", "if (true) { let my_var; } my_var;", true}, |
| 8584 {"function inner() { eval(\"foo\"); }", true}, | 8589 {"", "eval(\"foo\");", true}, |
| 8585 {"function inner() { function inner2() { my_var; } }", true}, | 8590 {"", "function inner2() { my_var; }", true}, |
| 8586 {"function inner() { function inner2() { eval(\"foo\"); } }", true}, | 8591 {"", "function inner2() { eval(\"foo\"); }", true}, |
| 8587 {"function inner() { var {my_var : a} = {my_var}; }", true}, | 8592 {"", "var {my_var : a} = {my_var};", true}, |
| 8588 {"function inner() { let {my_var : a} = {my_var}; }", true}, | 8593 {"", "let {my_var : a} = {my_var};", true}, |
| 8589 {"function inner() { const {my_var : a} = {my_var}; }", true}, | 8594 {"", "const {my_var : a} = {my_var};", true}, |
| 8590 {"function inner(a = my_var) { }", true}, | 8595 {"a = my_var", "", true}, |
| 8591 {"function inner() { function inner2(a = my_var) { } }", true}, | 8596 {"", "function inner2(a = my_var) { }", true}, |
| 8592 {"function inner() { (a = my_var) => { } }", true}, | 8597 {"", "(a = my_var) => { }", true}, |
| 8593 {"function inner({a} = {a: my_var}) { }", true}, | 8598 {"{a} = {a: my_var}", "", true}, |
| 8594 {"function inner() { function inner2({a} = {a: my_var}) { } }", true}, | 8599 {"", "function inner2({a} = {a: my_var}) { }", true}, |
| 8595 {"function inner() { ({a} = {a: my_var}) => { } }", true}, | 8600 {"", "({a} = {a: my_var}) => { }", true}, |
| 8596 {"function inner([a] = [my_var]) { }", true}, | 8601 {"[a] = [my_var]", "", true}, |
| 8597 {"function inner() { function inner2([a] = [my_var]) { } }", true}, | 8602 {"", "function inner2([a] = [my_var]) { }", true}, |
| 8598 {"function inner() { ([a] = [my_var]) => { } }", true}, | 8603 {"", "([a] = [my_var]) => { }", true}, |
| 8599 {"function inner() { try { } catch (my_var) { } my_var; }", true}, | 8604 {"", "try { } catch (my_var) { } my_var;", true}, |
| 8600 {"function inner() { for (my_var in {}) { my_var; } }", true}, | 8605 {"", "for (my_var in {}) { my_var; }", true}, |
| 8601 {"function inner() { for (my_var in {}) { } }", true}, | 8606 {"", "for (my_var in {}) { }", true}, |
| 8602 {"function inner() { for (my_var of []) { my_var; } }", true}, | 8607 {"", "for (my_var of []) { my_var; }", true}, |
| 8603 {"function inner() { for (my_var of []) { } }", true}, | 8608 {"", "for (my_var of []) { }", true}, |
| 8604 {"function inner() { for ([a, my_var, b] in {}) { my_var; } }", true}, | 8609 {"", "for ([a, my_var, b] in {}) { my_var; }", true}, |
| 8605 {"function inner() { for ([a, my_var, b] of []) { my_var; } }", true}, | 8610 {"", "for ([a, my_var, b] of []) { my_var; }", true}, |
| 8606 {"function inner() { for ({x: my_var} in {}) { my_var; } }", true}, | 8611 {"", "for ({x: my_var} in {}) { my_var; }", true}, |
| 8607 {"function inner() { for ({x: my_var} of []) { my_var; } }", true}, | 8612 {"", "for ({x: my_var} of []) { my_var; }", true}, |
| 8608 {"function inner() { for ({my_var} in {}) { my_var; } }", true}, | 8613 {"", "for ({my_var} in {}) { my_var; }", true}, |
| 8609 {"function inner() { for ({my_var} of []) { my_var; } }", true}, | 8614 {"", "for ({my_var} of []) { my_var; }", true}, |
| 8610 {"function inner() { for ({y, x: my_var} in {}) { my_var; } }", true}, | 8615 {"", "for ({y, x: my_var} in {}) { my_var; }", true}, |
| 8611 {"function inner() { for ({y, x: my_var} of []) { my_var; } }", true}, | 8616 {"", "for ({y, x: my_var} of []) { my_var; }", true}, |
| 8612 {"function inner() { for ({a, my_var} in {}) { my_var; } }", true}, | 8617 {"", "for ({a, my_var} in {}) { my_var; }", true}, |
| 8613 {"function inner() { for ({a, my_var} of []) { my_var; } }", true}, | 8618 {"", "for ({a, my_var} of []) { my_var; }", true}, |
| 8614 {"function inner() { for (let my_var in {}) { } my_var; }", true}, | 8619 {"", "for (let my_var in {}) { } my_var;", true}, |
| 8615 {"function inner() { for (let my_var of []) { } my_var; }", true}, | 8620 {"", "for (let my_var of []) { } my_var;", true}, |
| 8616 {"function inner() { for (let [a, my_var, b] in {}) { } my_var; }", true}, | 8621 {"", "for (let [a, my_var, b] in {}) { } my_var;", true}, |
| 8617 {"function inner() { for (let [a, my_var, b] of []) { } my_var; }", true}, | 8622 {"", "for (let [a, my_var, b] of []) { } my_var;", true}, |
| 8618 {"function inner() { for (let {x: my_var} in {}) { } my_var; }", true}, | 8623 {"", "for (let {x: my_var} in {}) { } my_var;", true}, |
| 8619 {"function inner() { for (let {x: my_var} of []) { } my_var; }", true}, | 8624 {"", "for (let {x: my_var} of []) { } my_var;", true}, |
| 8620 {"function inner() { for (let {my_var} in {}) { } my_var; }", true}, | 8625 {"", "for (let {my_var} in {}) { } my_var;", true}, |
| 8621 {"function inner() { for (let {my_var} of []) { } my_var; }", true}, | 8626 {"", "for (let {my_var} of []) { } my_var;", true}, |
| 8622 {"function inner() { for (let {y, x: my_var} in {}) { } my_var; }", true}, | 8627 {"", "for (let {y, x: my_var} in {}) { } my_var;", true}, |
| 8623 {"function inner() { for (let {y, x: my_var} of []) { } my_var; }", true}, | 8628 {"", "for (let {y, x: my_var} of []) { } my_var;", true}, |
| 8624 {"function inner() { for (let {a, my_var} in {}) { } my_var; }", true}, | 8629 {"", "for (let {a, my_var} in {}) { } my_var;", true}, |
| 8625 {"function inner() { for (let {a, my_var} of []) { } my_var; }", true}, | 8630 {"", "for (let {a, my_var} of []) { } my_var;", true}, |
| 8626 {"function inner() { for (let my_var = 0; my_var < 1; ++my_var) { } " | 8631 {"", "for (let my_var = 0; my_var < 1; ++my_var) { } my_var;", true}, |
| 8627 "my_var }", | 8632 {"", "'use strict'; if (true) { function my_var() {} } my_var;", true}, |
| 8628 true}, | 8633 {"", |
| 8629 {"function inner() { 'use strict'; if (true) { function my_var() {} } " | 8634 "'use strict'; function inner2() { if (true) { function my_var() {} } " |
| 8630 "my_var; }", | 8635 "my_var; }", |
| 8631 true}, | 8636 true}, |
| 8632 {"function inner() { 'use strict'; function inner2() { if (true) { " | 8637 {"", |
| 8633 "function my_var() {} } my_var; } }", | 8638 "function inner2() { 'use strict'; if (true) { function my_var() {} } " |
| 8634 true}, | 8639 "my_var; }", |
| 8635 {"function inner() { function inner2() { 'use strict'; if (true) { " | 8640 true}, |
| 8636 "function my_var() {} } my_var; } }", | 8641 {"", |
| 8637 true}, | 8642 "() => { 'use strict'; if (true) { function my_var() {} } my_var; }", |
| 8638 {"function inner() { () => { 'use strict'; if (true) { function my_var() " | 8643 true}, |
| 8639 "{} } my_var; } }", | 8644 {"", |
| 8640 true}, | 8645 "if (true) { let my_var; if (true) { function my_var() {} } } my_var;", |
| 8641 {"function inner() { if (true) { let my_var; if (true) { function " | |
| 8642 "my_var() {} } } my_var; }", | |
| 8643 true}, | 8646 true}, |
| 8644 // No pessimistic context allocation: | 8647 // No pessimistic context allocation: |
| 8645 {"function inner() { var my_var; my_var; }", false}, | 8648 {"", "var my_var; my_var;", false}, |
| 8646 {"function inner() { var my_var; }", false}, | 8649 {"", "var my_var;", false}, |
| 8647 {"function inner() { var my_var = 0; }", false}, | 8650 {"", "var my_var = 0;", false}, |
| 8648 {"function inner() { if (true) { var my_var; } my_var; }", false}, | 8651 {"", "if (true) { var my_var; } my_var;", false}, |
| 8649 {"function inner() { let my_var; my_var; }", false}, | 8652 {"", "let my_var; my_var;", false}, |
| 8650 {"function inner() { let my_var; }", false}, | 8653 {"", "let my_var;", false}, |
| 8651 {"function inner() { let my_var = 0; }", false}, | 8654 {"", "let my_var = 0;", false}, |
| 8652 {"function inner() { const my_var = 0; my_var; }", false}, | 8655 {"", "const my_var = 0; my_var;", false}, |
| 8653 {"function inner() { const my_var = 0; }", false}, | 8656 {"", "const my_var = 0;", false}, |
| 8654 {"function inner() { var [a, my_var] = [1, 2]; my_var; }", false}, | 8657 {"", "var [a, my_var] = [1, 2]; my_var;", false}, |
| 8655 {"function inner() { let [a, my_var] = [1, 2]; my_var; }", false}, | 8658 {"", "let [a, my_var] = [1, 2]; my_var;", false}, |
| 8656 {"function inner() { const [a, my_var] = [1, 2]; my_var; }", false}, | 8659 {"", "const [a, my_var] = [1, 2]; my_var;", false}, |
| 8657 {"function inner() { var {a: my_var} = {a: 3}; my_var; }", false}, | 8660 {"", "var {a: my_var} = {a: 3}; my_var;", false}, |
| 8658 {"function inner() { let {a: my_var} = {a: 3}; my_var; }", false}, | 8661 {"", "let {a: my_var} = {a: 3}; my_var;", false}, |
| 8659 {"function inner() { const {a: my_var} = {a: 3}; my_var; }", false}, | 8662 {"", "const {a: my_var} = {a: 3}; my_var;", false}, |
| 8660 {"function inner() { var {my_var} = {my_var: 3}; my_var; }", false}, | 8663 {"", "var {my_var} = {my_var: 3}; my_var;", false}, |
| 8661 {"function inner() { let {my_var} = {my_var: 3}; my_var; }", false}, | 8664 {"", "let {my_var} = {my_var: 3}; my_var;", false}, |
| 8662 {"function inner() { const {my_var} = {my_var: 3}; my_var; }", false}, | 8665 {"", "const {my_var} = {my_var: 3}; my_var;", false}, |
| 8663 {"function inner(my_var) { my_var; }", false}, | 8666 {"my_var", "my_var;", false}, |
| 8664 {"function inner(my_var) { }", false}, | 8667 {"my_var", "", false}, |
| 8665 {"function inner(my_var = 5) { my_var; }", false}, | 8668 {"my_var = 5", "my_var;", false}, |
| 8666 {"function inner(my_var = 5) { }", false}, | 8669 {"my_var = 5", "", false}, |
| 8667 {"function inner(...my_var) { my_var; }", false}, | 8670 {"...my_var", "my_var;", false}, |
| 8668 {"function inner(...my_var) { }", false}, | 8671 {"...my_var", "", false}, |
| 8669 {"function inner([a, my_var, b]) { my_var; }", false}, | 8672 {"[a, my_var, b]", "my_var;", false}, |
| 8670 {"function inner([a, my_var, b]) { }", false}, | 8673 {"[a, my_var, b]", "", false}, |
| 8671 {"function inner([a, my_var, b] = [1, 2, 3]) { my_var; }", false}, | 8674 {"[a, my_var, b] = [1, 2, 3]", "my_var;", false}, |
| 8672 {"function inner([a, my_var, b] = [1, 2, 3]) { }", false}, | 8675 {"[a, my_var, b] = [1, 2, 3]", "", false}, |
| 8673 {"function inner({x: my_var}) { my_var; }", false}, | 8676 {"{x: my_var}", "my_var;", false}, |
| 8674 {"function inner({x: my_var}) { }", false}, | 8677 {"{x: my_var}", "", false}, |
| 8675 {"function inner({x: my_var} = {x: 0}) { my_var; }", false}, | 8678 {"{x: my_var} = {x: 0}", "my_var;", false}, |
| 8676 {"function inner({x: my_var} = {x: 0}) { }", false}, | 8679 {"{x: my_var} = {x: 0}", "", false}, |
| 8677 {"function inner({my_var}) { my_var; }", false}, | 8680 {"{my_var}", "my_var;", false}, |
| 8678 {"function inner({my_var}) { }", false}, | 8681 {"{my_var}", "", false}, |
| 8679 {"function inner({my_var} = {my_var: 0}) { my_var; }", false}, | 8682 {"{my_var} = {my_var: 0}", "my_var;", false}, |
| 8680 {"function inner({my_var} = {my_var: 0}) { }", false}, | 8683 {"{my_var} = {my_var: 0}", "", false}, |
| 8681 {"function inner() { function inner2(my_var) { my_var; } }", false}, | 8684 {"", "function inner2(my_var) { my_var; }", false}, |
| 8682 {"function inner() { function inner2(my_var) { } }", false}, | 8685 {"", "function inner2(my_var) { }", false}, |
| 8683 {"function inner() { function inner2(my_var = 5) { my_var; } }", false}, | 8686 {"", "function inner2(my_var = 5) { my_var; }", false}, |
| 8684 {"function inner() { function inner2(my_var = 5) { } }", false}, | 8687 {"", "function inner2(my_var = 5) { }", false}, |
| 8685 {"function inner() { function inner2(...my_var) { my_var; } }", false}, | 8688 {"", "function inner2(...my_var) { my_var; }", false}, |
| 8686 {"function inner() { function inner2(...my_var) { } }", false}, | 8689 {"", "function inner2(...my_var) { }", false}, |
| 8687 {"function inner() { function inner2([a, my_var, b]) { my_var; } }", | 8690 {"", "function inner2([a, my_var, b]) { my_var; }", false}, |
| 8688 false}, | 8691 {"", "function inner2([a, my_var, b]) { }", false}, |
| 8689 {"function inner() { function inner2([a, my_var, b]) { } }", false}, | 8692 {"", "function inner2([a, my_var, b] = [1, 2, 3]) { my_var; }", false}, |
| 8690 {"function inner() { function inner2([a, my_var, b] = [1, 2, 3]) { " | 8693 {"", "function inner2([a, my_var, b] = [1, 2, 3]) { }", false}, |
| 8691 "my_var; } }", | 8694 {"", "function inner2({x: my_var}) { my_var; }", false}, |
| 8692 false}, | 8695 {"", "function inner2({x: my_var}) { }", false}, |
| 8693 {"function inner() { function inner2([a, my_var, b] = [1, 2, 3]) { } }", | 8696 {"", "function inner2({x: my_var} = {x: 0}) { my_var; }", false}, |
| 8694 false}, | 8697 {"", "function inner2({x: my_var} = {x: 0}) { }", false}, |
| 8695 {"function inner() { function inner2({x: my_var}) { my_var; } }", false}, | 8698 {"", "function inner2({my_var}) { my_var; }", false}, |
| 8696 {"function inner() { function inner2({x: my_var}) { } }", false}, | 8699 {"", "function inner2({my_var}) { }", false}, |
| 8697 {"function inner() { function inner2({x: my_var} = {x: 0}) { my_var; } }", | 8700 {"", "function inner2({my_var} = {my_var: 8}) { my_var; } ", false}, |
| 8698 false}, | 8701 {"", "function inner2({my_var} = {my_var: 8}) { }", false}, |
| 8699 {"function inner() { function inner2({x: my_var} = {x: 0}) { } }", false}, | 8702 {"", "my_var => my_var;", false}, |
| 8700 {"function inner() { function inner2({my_var}) { my_var; } }", false}, | 8703 {"", "my_var => { }", false}, |
| 8701 {"function inner() { function inner2({my_var}) { } }", false}, | 8704 {"", "(my_var = 5) => my_var;", false}, |
| 8702 {"function inner() { function inner2({my_var} = {my_var: 8}) { my_var; } " | 8705 {"", "(my_var = 5) => { }", false}, |
| 8703 "}", | 8706 {"", "(...my_var) => my_var;", false}, |
| 8704 false}, | 8707 {"", "(...my_var) => { }", false}, |
| 8705 {"function inner() { function inner2({my_var} = {my_var: 8}) { } }", | 8708 {"", "([a, my_var, b]) => my_var;", false}, |
| 8706 false}, | 8709 {"", "([a, my_var, b]) => { }", false}, |
| 8707 {"my_var => my_var; ", false}, | 8710 {"", "([a, my_var, b] = [1, 2, 3]) => my_var;", false}, |
| 8708 {"my_var => { }", false}, | 8711 {"", "([a, my_var, b] = [1, 2, 3]) => { }", false}, |
| 8709 {"(my_var = 5) => my_var; ", false}, | 8712 {"", "({x: my_var}) => my_var;", false}, |
| 8710 {"(my_var = 5) => { }", false}, | 8713 {"", "({x: my_var}) => { }", false}, |
| 8711 {"(...my_var) => my_var;", false}, | 8714 {"", "({x: my_var} = {x: 0}) => my_var;", false}, |
| 8712 {"(...my_var) => { }", false}, | 8715 {"", "({x: my_var} = {x: 0}) => { }", false}, |
| 8713 {"([a, my_var, b]) => my_var;", false}, | 8716 {"", "({my_var}) => my_var;", false}, |
| 8714 {"([a, my_var, b]) => { }", false}, | 8717 {"", "({my_var}) => { }", false}, |
| 8715 {"([a, my_var, b] = [1, 2, 3]) => my_var;", false}, | 8718 {"", "({my_var} = {my_var: 5}) => my_var;", false}, |
| 8716 {"([a, my_var, b] = [1, 2, 3]) => { }", false}, | 8719 {"", "({my_var} = {my_var: 5}) => { }", false}, |
| 8717 {"({x: my_var}) => my_var;", false}, | 8720 {"", "({a, my_var}) => my_var;", false}, |
| 8718 {"({x: my_var}) => { }", false}, | 8721 {"", "({a, my_var}) => { }", false}, |
| 8719 {"({x: my_var} = {x: 0}) => my_var;", false}, | 8722 {"", "({a, my_var} = {a: 0, my_var: 5}) => my_var;", false}, |
| 8720 {"({x: my_var} = {x: 0}) => { }", false}, | 8723 {"", "({a, my_var} = {a: 0, my_var: 5}) => { }", false}, |
| 8721 {"({my_var}) => my_var;", false}, | 8724 {"", "({y, x: my_var}) => my_var;", false}, |
| 8722 {"({my_var}) => { }", false}, | 8725 {"", "({y, x: my_var}) => { }", false}, |
| 8723 {"({my_var} = {my_var: 5}) => my_var;", false}, | 8726 {"", "({y, x: my_var} = {y: 0, x: 0}) => my_var;", false}, |
| 8724 {"({my_var} = {my_var: 5}) => { }", false}, | 8727 {"", "({y, x: my_var} = {y: 0, x: 0}) => { }", false}, |
| 8725 {"({a, my_var}) => my_var;", false}, | 8728 {"", "try { } catch (my_var) { my_var; }", false}, |
| 8726 {"({a, my_var}) => { }", false}, | 8729 {"", "try { } catch ([a, my_var, b]) { my_var; }", false}, |
| 8727 {"({a, my_var} = {a: 0, my_var: 5}) => my_var;", false}, | 8730 {"", "try { } catch ({x: my_var}) { my_var; }", false}, |
| 8728 {"({a, my_var} = {a: 0, my_var: 5}) => { }", false}, | 8731 {"", "try { } catch ({y, x: my_var}) { my_var; }", false}, |
| 8729 {"({y, x: my_var}) => my_var;", false}, | 8732 {"", "try { } catch ({my_var}) { my_var; }", false}, |
| 8730 {"({y, x: my_var}) => { }", false}, | 8733 {"", "for (let my_var in {}) { my_var; }", false}, |
| 8731 {"({y, x: my_var} = {y: 0, x: 0}) => my_var;", false}, | 8734 {"", "for (let my_var in {}) { }", false}, |
| 8732 {"({y, x: my_var} = {y: 0, x: 0}) => { }", false}, | 8735 {"", "for (let my_var of []) { my_var; }", false}, |
| 8733 {"function inner() { my_var => my_var; }", false}, | 8736 {"", "for (let my_var of []) { }", false}, |
| 8734 {"function inner() { my_var => { }}", false}, | 8737 {"", "for (let [a, my_var, b] in {}) { my_var; }", false}, |
| 8735 {"function inner() { (my_var = 5) => my_var; }", false}, | 8738 {"", "for (let [a, my_var, b] of []) { my_var; }", false}, |
| 8736 {"function inner() { (my_var = 5) => { }}", false}, | 8739 {"", "for (let {x: my_var} in {}) { my_var; }", false}, |
| 8737 {"function inner() { (...my_var) => my_var;}", false}, | 8740 {"", "for (let {x: my_var} of []) { my_var; }", false}, |
| 8738 {"function inner() { (...my_var) => { }}", false}, | 8741 {"", "for (let {my_var} in {}) { my_var; }", false}, |
| 8739 {"function inner() { ([a, my_var, b]) => my_var;}", false}, | 8742 {"", "for (let {my_var} of []) { my_var; }", false}, |
| 8740 {"function inner() { ([a, my_var, b]) => { }}", false}, | 8743 {"", "for (let {y, x: my_var} in {}) { my_var; }", false}, |
| 8741 {"function inner() { ([a, my_var, b] = [1, 2, 3]) => my_var;}", false}, | 8744 {"", "for (let {y, x: my_var} of []) { my_var; }", false}, |
| 8742 {"function inner() { ([a, my_var, b] = [1, 2, 3]) => { }}", false}, | 8745 {"", "for (let {a, my_var} in {}) { my_var; }", false}, |
| 8743 {"function inner() { ({x: my_var}) => my_var;}", false}, | 8746 {"", "for (let {a, my_var} of []) { my_var; }", false}, |
| 8744 {"function inner() { ({x: my_var}) => { }}", false}, | 8747 {"", "for (var my_var in {}) { my_var; }", false}, |
| 8745 {"function inner() { ({x: my_var} = {x: 0}) => my_var;}", false}, | 8748 {"", "for (var my_var in {}) { }", false}, |
| 8746 {"function inner() { ({x: my_var} = {x: 0}) => { }}", false}, | 8749 {"", "for (var my_var of []) { my_var; }", false}, |
| 8747 {"function inner() { ({my_var}) => my_var;}", false}, | 8750 {"", "for (var my_var of []) { }", false}, |
| 8748 {"function inner() { ({my_var}) => { }}", false}, | 8751 {"", "for (var [a, my_var, b] in {}) { my_var; }", false}, |
| 8749 {"function inner() { ({my_var} = {my_var: 5}) => my_var;}", false}, | 8752 {"", "for (var [a, my_var, b] of []) { my_var; }", false}, |
| 8750 {"function inner() { ({my_var} = {my_var: 5}) => { }}", false}, | 8753 {"", "for (var {x: my_var} in {}) { my_var; }", false}, |
| 8751 {"function inner() { ({a, my_var}) => my_var;}", false}, | 8754 {"", "for (var {x: my_var} of []) { my_var; }", false}, |
| 8752 {"function inner() { ({a, my_var}) => { }}", false}, | 8755 {"", "for (var {my_var} in {}) { my_var; }", false}, |
| 8753 {"function inner() { ({a, my_var} = {a: 0, my_var: 5}) => my_var;}", | 8756 {"", "for (var {my_var} of []) { my_var; }", false}, |
| 8754 false}, | 8757 {"", "for (var {y, x: my_var} in {}) { my_var; }", false}, |
| 8755 {"function inner() { ({a, my_var} = {a: 0, my_var: 5}) => { }}", false}, | 8758 {"", "for (var {y, x: my_var} of []) { my_var; }", false}, |
| 8756 {"function inner() { ({y, x: my_var}) => my_var;}", false}, | 8759 {"", "for (var {a, my_var} in {}) { my_var; }", false}, |
| 8757 {"function inner() { ({y, x: my_var}) => { }}", false}, | 8760 {"", "for (var {a, my_var} of []) { my_var; }", false}, |
| 8758 {"function inner() { ({y, x: my_var} = {y: 0, x: 0}) => my_var;}", false}, | 8761 {"", "for (var my_var in {}) { } my_var;", false}, |
| 8759 {"function inner() { ({y, x: my_var} = {y: 0, x: 0}) => { }}", false}, | 8762 {"", "for (var my_var of []) { } my_var;", false}, |
| 8760 {"function inner() { try { } catch (my_var) { my_var; } }", false}, | 8763 {"", "for (var [a, my_var, b] in {}) { } my_var;", false}, |
| 8761 {"function inner() { try { } catch ([a, my_var, b]) { my_var; } }", | 8764 {"", "for (var [a, my_var, b] of []) { } my_var;", false}, |
| 8762 false}, | 8765 {"", "for (var {x: my_var} in {}) { } my_var;", false}, |
| 8763 {"function inner() { try { } catch ({x: my_var}) { my_var; } }", false}, | 8766 {"", "for (var {x: my_var} of []) { } my_var;", false}, |
| 8764 {"function inner() { try { } catch ({y, x: my_var}) { my_var; } }", | 8767 {"", "for (var {my_var} in {}) { } my_var;", false}, |
| 8765 false}, | 8768 {"", "for (var {my_var} of []) { } my_var;", false}, |
| 8766 {"function inner() { try { } catch ({my_var}) { my_var; } }", false}, | 8769 {"", "for (var {y, x: my_var} in {}) { } my_var;", false}, |
| 8767 {"function inner() { for (let my_var in {}) { my_var; } }", false}, | 8770 {"", "for (var {y, x: my_var} of []) { } my_var;", false}, |
| 8768 {"function inner() { for (let my_var in {}) { } }", false}, | 8771 {"", "for (var {a, my_var} in {}) { } my_var;", false}, |
| 8769 {"function inner() { for (let my_var of []) { my_var; } }", false}, | 8772 {"", "for (var {a, my_var} of []) { } my_var;", false}, |
| 8770 {"function inner() { for (let my_var of []) { } }", false}, | 8773 {"", "for (let my_var = 0; my_var < 1; ++my_var) { my_var; }", false}, |
| 8771 {"function inner() { for (let [a, my_var, b] in {}) { my_var; } }", | 8774 {"", "for (var my_var = 0; my_var < 1; ++my_var) { my_var; }", false}, |
| 8772 false}, | 8775 {"", "for (var my_var = 0; my_var < 1; ++my_var) { } my_var; ", false}, |
| 8773 {"function inner() { for (let [a, my_var, b] of []) { my_var; } }", | 8776 {"", "for (let a = 0, my_var = 0; my_var < 1; ++my_var) { my_var }", |
| 8774 false}, | 8777 false}, |
| 8775 {"function inner() { for (let {x: my_var} in {}) { my_var; } }", false}, | 8778 {"", "for (var a = 0, my_var = 0; my_var < 1; ++my_var) { my_var }", |
| 8776 {"function inner() { for (let {x: my_var} of []) { my_var; } }", false}, | 8779 false}, |
| 8777 {"function inner() { for (let {my_var} in {}) { my_var; } }", false}, | 8780 {"", "class my_var {}; my_var; ", false}, |
| 8778 {"function inner() { for (let {my_var} of []) { my_var; } }", false}, | 8781 {"", "function my_var() {} my_var;", false}, |
| 8779 {"function inner() { for (let {y, x: my_var} in {}) { my_var; } }", | 8782 {"", "if (true) { function my_var() {} } my_var;", false}, |
| 8780 false}, | 8783 {"", "function inner2() { if (true) { function my_var() {} } my_var; }", |
| 8781 {"function inner() { for (let {y, x: my_var} of []) { my_var; } }", | 8784 false}, |
| 8782 false}, | 8785 {"", "() => { if (true) { function my_var() {} } my_var; }", false}, |
| 8783 {"function inner() { for (let {a, my_var} in {}) { my_var; } }", false}, | 8786 {"", |
| 8784 {"function inner() { for (let {a, my_var} of []) { my_var; } }", false}, | 8787 "if (true) { var my_var; if (true) { function my_var() {} } } my_var;", |
| 8785 {"function inner() { for (var my_var in {}) { my_var; } }", false}, | |
| 8786 {"function inner() { for (var my_var in {}) { } }", false}, | |
| 8787 {"function inner() { for (var my_var of []) { my_var; } }", false}, | |
| 8788 {"function inner() { for (var my_var of []) { } }", false}, | |
| 8789 {"function inner() { for (var [a, my_var, b] in {}) { my_var; } }", | |
| 8790 false}, | |
| 8791 {"function inner() { for (var [a, my_var, b] of []) { my_var; } }", | |
| 8792 false}, | |
| 8793 {"function inner() { for (var {x: my_var} in {}) { my_var; } }", false}, | |
| 8794 {"function inner() { for (var {x: my_var} of []) { my_var; } }", false}, | |
| 8795 {"function inner() { for (var {my_var} in {}) { my_var; } }", false}, | |
| 8796 {"function inner() { for (var {my_var} of []) { my_var; } }", false}, | |
| 8797 {"function inner() { for (var {y, x: my_var} in {}) { my_var; } }", | |
| 8798 false}, | |
| 8799 {"function inner() { for (var {y, x: my_var} of []) { my_var; } }", | |
| 8800 false}, | |
| 8801 {"function inner() { for (var {a, my_var} in {}) { my_var; } }", false}, | |
| 8802 {"function inner() { for (var {a, my_var} of []) { my_var; } }", false}, | |
| 8803 {"function inner() { for (var my_var in {}) { } my_var; }", false}, | |
| 8804 {"function inner() { for (var my_var of []) { } my_var; }", false}, | |
| 8805 {"function inner() { for (var [a, my_var, b] in {}) { } my_var; }", | |
| 8806 false}, | |
| 8807 {"function inner() { for (var [a, my_var, b] of []) { } my_var; }", | |
| 8808 false}, | |
| 8809 {"function inner() { for (var {x: my_var} in {}) { } my_var; }", false}, | |
| 8810 {"function inner() { for (var {x: my_var} of []) { } my_var; }", false}, | |
| 8811 {"function inner() { for (var {my_var} in {}) { } my_var; }", false}, | |
| 8812 {"function inner() { for (var {my_var} of []) { } my_var; }", false}, | |
| 8813 {"function inner() { for (var {y, x: my_var} in {}) { } my_var; }", | |
| 8814 false}, | |
| 8815 {"function inner() { for (var {y, x: my_var} of []) { } my_var; }", | |
| 8816 false}, | |
| 8817 {"function inner() { for (var {a, my_var} in {}) { } my_var; }", false}, | |
| 8818 {"function inner() { for (var {a, my_var} of []) { } my_var; }", false}, | |
| 8819 {"function inner() { for (let my_var = 0; my_var < 1; ++my_var) { my_var " | |
| 8820 "} }", | |
| 8821 false}, | |
| 8822 {"function inner() { for (var my_var = 0; my_var < 1; ++my_var) { my_var " | |
| 8823 "} }", | |
| 8824 false}, | |
| 8825 {"function inner() { for (var my_var = 0; my_var < 1; ++my_var) { } " | |
| 8826 "my_var }", | |
| 8827 false}, | |
| 8828 {"function inner() { for (let a = 0, my_var = 0; my_var < 1; ++my_var) { " | |
| 8829 "my_var } }", | |
| 8830 false}, | |
| 8831 {"function inner() { for (var a = 0, my_var = 0; my_var < 1; ++my_var) { " | |
| 8832 "my_var } }", | |
| 8833 false}, | |
| 8834 {"function inner() { class my_var {}; my_var }", false}, | |
| 8835 {"function inner() { function my_var() {} my_var; }", false}, | |
| 8836 {"function inner() { if (true) { function my_var() {} } my_var; }", | |
| 8837 false}, | |
| 8838 {"function inner() { function inner2() { if (true) { function my_var() " | |
| 8839 "{} } my_var; } }", | |
| 8840 false}, | |
| 8841 {"function inner() { () => { if (true) { function my_var() {} } my_var; " | |
| 8842 "} }", | |
| 8843 false}, | |
| 8844 {"function inner() { if (true) { var my_var; if (true) { function " | |
| 8845 "my_var() {} } } my_var; }", | |
| 8846 false}, | 8788 false}, |
| 8847 }; | 8789 }; |
| 8848 | 8790 |
| 8849 for (unsigned i = 0; i < arraysize(inners); ++i) { | 8791 for (unsigned inner_ix = 0; inner_ix < arraysize(inner_functions); |
| 8850 const char* inner = inners[i].source; | 8792 ++inner_ix) { |
| 8851 int inner_len = Utf8LengthHelper(inner); | 8793 const char* inner_function = inner_functions[inner_ix]; |
| 8852 int len = prefix_len + inner_len + suffix_len; | 8794 int inner_function_len = Utf8LengthHelper(inner_function) - 4; |
| 8853 i::ScopedVector<char> program(len + 1); | 8795 |
| 8854 i::SNPrintF(program, "%s%s%s", prefix, inner, suffix); | 8796 for (unsigned i = 0; i < arraysize(inners); ++i) { |
| 8855 i::Handle<i::String> source = | 8797 int params_len = Utf8LengthHelper(inners[i].params); |
| 8856 factory->InternalizeUtf8String(program.start()); | 8798 int source_len = Utf8LengthHelper(inners[i].source); |
| 8857 source->PrintOn(stdout); | 8799 int len = prefix_len + inner_function_len + params_len + source_len + |
| 8858 printf("\n"); | 8800 suffix_len; |
| 8859 | 8801 |
| 8860 i::Handle<i::Script> script = factory->NewScript(source); | 8802 i::ScopedVector<char> program(len + 1); |
| 8861 i::Zone zone(isolate->allocator(), ZONE_NAME); | 8803 i::SNPrintF(program, "%s", prefix); |
| 8862 i::ParseInfo info(&zone, script); | 8804 i::SNPrintF(program + prefix_len, inner_function, inners[i].params, |
| 8863 | 8805 inners[i].source); |
| 8864 CHECK(i::parsing::ParseProgram(&info)); | 8806 i::SNPrintF( |
| 8865 CHECK(i::Compiler::Analyze(&info)); | 8807 program + prefix_len + inner_function_len + params_len + source_len, |
| 8866 CHECK(info.literal() != NULL); | 8808 "%s", suffix); |
| 8867 | 8809 |
| 8868 i::Scope* scope = info.literal()->scope()->inner_scope(); | 8810 i::Handle<i::String> source = |
| 8869 DCHECK_NOT_NULL(scope); | 8811 factory->InternalizeUtf8String(program.start()); |
| 8870 DCHECK_NULL(scope->sibling()); | 8812 source->PrintOn(stdout); |
| 8871 DCHECK(scope->is_function_scope()); | 8813 printf("\n"); |
| 8872 const i::AstRawString* var_name = | 8814 |
| 8873 info.ast_value_factory()->GetOneByteString("my_var"); | 8815 i::Handle<i::Script> script = factory->NewScript(source); |
| 8874 i::Variable* var = scope->Lookup(var_name); | 8816 i::Zone zone(isolate->allocator(), ZONE_NAME); |
| 8875 CHECK_EQ(inners[i].ctxt_allocate, | 8817 i::ParseInfo info(&zone, script); |
| 8876 i::ScopeTestHelper::MustAllocateInContext(var)); | 8818 |
| 8819 CHECK(i::parsing::ParseProgram(&info)); |
| 8820 CHECK(i::Compiler::Analyze(&info)); |
| 8821 CHECK(info.literal() != NULL); |
| 8822 |
| 8823 i::Scope* scope = info.literal()->scope()->inner_scope(); |
| 8824 DCHECK_NOT_NULL(scope); |
| 8825 DCHECK_NULL(scope->sibling()); |
| 8826 DCHECK(scope->is_function_scope()); |
| 8827 const i::AstRawString* var_name = |
| 8828 info.ast_value_factory()->GetOneByteString("my_var"); |
| 8829 i::Variable* var = scope->Lookup(var_name); |
| 8830 CHECK_EQ(inners[i].ctxt_allocate, |
| 8831 i::ScopeTestHelper::MustAllocateInContext(var)); |
| 8832 } |
| 8877 } | 8833 } |
| 8878 } | 8834 } |
| OLD | NEW |