| OLD | NEW |
| 1 // Copyright 2007-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2008 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 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 context.Check("let x = 4; x", EXPECT_RESULT, Number::New(isolate, 4)); | 669 context.Check("let x = 4; x", EXPECT_RESULT, Number::New(isolate, 4)); |
| 670 } | 670 } |
| 671 context.Check("let y = 2; x", EXPECT_RESULT, | 671 context.Check("let y = 2; x", EXPECT_RESULT, |
| 672 Number::New(isolate, cond ? 1 : 4)); | 672 Number::New(isolate, cond ? 1 : 4)); |
| 673 } | 673 } |
| 674 } | 674 } |
| 675 | 675 |
| 676 | 676 |
| 677 TEST(CrossScriptReferencesHarmony) { | 677 TEST(CrossScriptReferencesHarmony) { |
| 678 i::FLAG_harmony_scoping = true; | 678 i::FLAG_harmony_scoping = true; |
| 679 i::FLAG_harmony_modules = true; | |
| 680 | 679 |
| 681 v8::Isolate* isolate = CcTest::isolate(); | 680 v8::Isolate* isolate = CcTest::isolate(); |
| 682 HandleScope scope(isolate); | 681 HandleScope scope(isolate); |
| 683 | 682 |
| 684 // Check that simple cross-script global scope access works. | 683 // Check that simple cross-script global scope access works. |
| 685 const char* decs[] = { | 684 const char* decs[] = { |
| 686 "'use strict'; var x = 1; x", "x", | 685 "'use strict'; var x = 1; x", "x", |
| 687 "'use strict'; function x() { return 1 }; x()", "x()", | 686 "'use strict'; function x() { return 1 }; x()", "x()", |
| 688 "'use strict'; let x = 1; x", "x", | 687 "'use strict'; let x = 1; x", "x", |
| 689 "'use strict'; const x = 1; x", "x", | 688 "'use strict'; const x = 1; x", "x", |
| 690 "'use strict'; module x { export let a = 1 }; x.a", "x.a", | |
| 691 NULL | 689 NULL |
| 692 }; | 690 }; |
| 693 | 691 |
| 694 for (int i = 0; decs[i] != NULL; i += 2) { | 692 for (int i = 0; decs[i] != NULL; i += 2) { |
| 695 SimpleContext context; | 693 SimpleContext context; |
| 696 context.Check(decs[i], EXPECT_RESULT, Number::New(isolate, 1)); | 694 context.Check(decs[i], EXPECT_RESULT, Number::New(isolate, 1)); |
| 697 context.Check(decs[i+1], EXPECT_RESULT, Number::New(isolate, 1)); | 695 context.Check(decs[i+1], EXPECT_RESULT, Number::New(isolate, 1)); |
| 698 } | 696 } |
| 699 | 697 |
| 700 // Check that cross-script global scope access works with late declarations. | 698 // Check that cross-script global scope access works with late declarations. |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 EXPECT_RESULT, Number::New(isolate, 4)); | 814 EXPECT_RESULT, Number::New(isolate, 4)); |
| 817 context.Check(script2, | 815 context.Check(script2, |
| 818 EXPECT_RESULT, Number::New(isolate, 5)); | 816 EXPECT_RESULT, Number::New(isolate, 5)); |
| 819 } | 817 } |
| 820 } | 818 } |
| 821 | 819 |
| 822 | 820 |
| 823 TEST(GlobalLexicalOSR) { | 821 TEST(GlobalLexicalOSR) { |
| 824 i::FLAG_use_strict = true; | 822 i::FLAG_use_strict = true; |
| 825 i::FLAG_harmony_scoping = true; | 823 i::FLAG_harmony_scoping = true; |
| 826 i::FLAG_harmony_modules = true; | |
| 827 | 824 |
| 828 v8::Isolate* isolate = CcTest::isolate(); | 825 v8::Isolate* isolate = CcTest::isolate(); |
| 829 HandleScope scope(isolate); | 826 HandleScope scope(isolate); |
| 830 SimpleContext context; | 827 SimpleContext context; |
| 831 | 828 |
| 832 context.Check("'use strict';" | 829 context.Check("'use strict';" |
| 833 "let x = 1; x;", | 830 "let x = 1; x;", |
| 834 EXPECT_RESULT, Number::New(isolate, 1)); | 831 EXPECT_RESULT, Number::New(isolate, 1)); |
| 835 context.Check("'use strict';" | 832 context.Check("'use strict';" |
| 836 "let y = 2*x;" | 833 "let y = 2*x;" |
| 837 "++x;" | 834 "++x;" |
| 838 "let z = 0;" | 835 "let z = 0;" |
| 839 "const limit = 100000;" | 836 "const limit = 100000;" |
| 840 "for (var i = 0; i < limit; ++i) {" | 837 "for (var i = 0; i < limit; ++i) {" |
| 841 " z += x + y;" | 838 " z += x + y;" |
| 842 "}" | 839 "}" |
| 843 "z;", | 840 "z;", |
| 844 EXPECT_RESULT, Number::New(isolate, 400000)); | 841 EXPECT_RESULT, Number::New(isolate, 400000)); |
| 845 } | 842 } |
| 846 | 843 |
| 847 | 844 |
| 848 TEST(CrossScriptConflicts) { | 845 TEST(CrossScriptConflicts) { |
| 849 i::FLAG_use_strict = true; | 846 i::FLAG_use_strict = true; |
| 850 i::FLAG_harmony_scoping = true; | 847 i::FLAG_harmony_scoping = true; |
| 851 i::FLAG_harmony_modules = true; | |
| 852 | 848 |
| 853 HandleScope scope(CcTest::isolate()); | 849 HandleScope scope(CcTest::isolate()); |
| 854 | 850 |
| 855 const char* firsts[] = { | 851 const char* firsts[] = { |
| 856 "var x = 1; x", | 852 "var x = 1; x", |
| 857 "function x() { return 1 }; x()", | 853 "function x() { return 1 }; x()", |
| 858 "let x = 1; x", | 854 "let x = 1; x", |
| 859 "const x = 1; x", | 855 "const x = 1; x", |
| 860 "module x { export let a = 1 }; x.a", | |
| 861 NULL | 856 NULL |
| 862 }; | 857 }; |
| 863 const char* seconds[] = { | 858 const char* seconds[] = { |
| 864 "var x = 2; x", | 859 "var x = 2; x", |
| 865 "function x() { return 2 }; x()", | 860 "function x() { return 2 }; x()", |
| 866 "let x = 2; x", | 861 "let x = 2; x", |
| 867 "const x = 2; x", | 862 "const x = 2; x", |
| 868 "module x { export let a = 2 }; x.a", | |
| 869 NULL | 863 NULL |
| 870 }; | 864 }; |
| 871 | 865 |
| 872 for (int i = 0; firsts[i] != NULL; ++i) { | 866 for (int i = 0; firsts[i] != NULL; ++i) { |
| 873 for (int j = 0; seconds[j] != NULL; ++j) { | 867 for (int j = 0; seconds[j] != NULL; ++j) { |
| 874 SimpleContext context; | 868 SimpleContext context; |
| 875 context.Check(firsts[i], EXPECT_RESULT, | 869 context.Check(firsts[i], EXPECT_RESULT, |
| 876 Number::New(CcTest::isolate(), 1)); | 870 Number::New(CcTest::isolate(), 1)); |
| 877 bool success_case = i < 2 && j < 2; | 871 bool success_case = i < 2 && j < 2; |
| 878 Local<Value> success_result; | 872 Local<Value> success_result; |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1144 context.Check("'use strict';const x = 1; x", EXPECT_RESULT, | 1138 context.Check("'use strict';const x = 1; x", EXPECT_RESULT, |
| 1145 Number::New(CcTest::isolate(), 1)); | 1139 Number::New(CcTest::isolate(), 1)); |
| 1146 context.Check("f();", EXPECT_EXCEPTION); | 1140 context.Check("f();", EXPECT_EXCEPTION); |
| 1147 context.Check("x", EXPECT_RESULT, Number::New(CcTest::isolate(), 1)); | 1141 context.Check("x", EXPECT_RESULT, Number::New(CcTest::isolate(), 1)); |
| 1148 context.Check("f();", EXPECT_EXCEPTION); | 1142 context.Check("f();", EXPECT_EXCEPTION); |
| 1149 context.Check("x", EXPECT_RESULT, Number::New(CcTest::isolate(), 1)); | 1143 context.Check("x", EXPECT_RESULT, Number::New(CcTest::isolate(), 1)); |
| 1150 context.Check("%OptimizeFunctionOnNextCall(f);f();", EXPECT_EXCEPTION); | 1144 context.Check("%OptimizeFunctionOnNextCall(f);f();", EXPECT_EXCEPTION); |
| 1151 context.Check("x", EXPECT_RESULT, Number::New(CcTest::isolate(), 1)); | 1145 context.Check("x", EXPECT_RESULT, Number::New(CcTest::isolate(), 1)); |
| 1152 } | 1146 } |
| 1153 } | 1147 } |
| OLD | NEW |