OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
8 #include "src/interpreter/bytecode-array-iterator.h" | 8 #include "src/interpreter/bytecode-array-iterator.h" |
9 #include "src/interpreter/bytecode-generator.h" | 9 #include "src/interpreter/bytecode-generator.h" |
10 #include "src/interpreter/interpreter.h" | 10 #include "src/interpreter/interpreter.h" |
(...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1066 helper.MakeBytecode(snippets[i].code_snippet, "f"); | 1066 helper.MakeBytecode(snippets[i].code_snippet, "f"); |
1067 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); | 1067 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); |
1068 } | 1068 } |
1069 } | 1069 } |
1070 | 1070 |
1071 | 1071 |
1072 TEST(StoreGlobal) { | 1072 TEST(StoreGlobal) { |
1073 InitializedHandleScope handle_scope; | 1073 InitializedHandleScope handle_scope; |
1074 BytecodeGeneratorHelper helper; | 1074 BytecodeGeneratorHelper helper; |
1075 | 1075 |
1076 ExpectedSnippet<int> snippets[] = { | 1076 ExpectedSnippet<InstanceType> snippets[] = { |
1077 { | 1077 { |
1078 "var a = 1;\nfunction f() { a = 2; }\nf()", | 1078 "var a = 1;\nfunction f() { a = 2; }\nf()", |
1079 0, | 1079 0, |
1080 1, | 1080 1, |
1081 6, | 1081 6, |
1082 { | 1082 { |
1083 B(LdaSmi8), U8(2), // | 1083 B(LdaSmi8), U8(2), // |
1084 B(StaGlobal), _, // | 1084 B(StaGlobalSloppy), _, // |
1085 B(LdaUndefined), // | 1085 B(LdaUndefined), // |
1086 B(Return) // | 1086 B(Return) // |
1087 }, | 1087 }, |
1088 }, | 1088 }, |
1089 { | 1089 { |
1090 "var a = \"test\"; function f(b) { a = b; }\nf(\"global\")", | 1090 "var a = \"test\"; function f(b) { a = b; }\nf(\"global\")", |
1091 0, | 1091 0, |
1092 2, | 1092 2, |
1093 6, | 1093 6, |
1094 { | 1094 { |
1095 B(Ldar), R(helper.kLastParamIndex), // | 1095 B(Ldar), R(helper.kLastParamIndex), // |
1096 B(StaGlobal), _, // | 1096 B(StaGlobalSloppy), _, // |
1097 B(LdaUndefined), // | 1097 B(LdaUndefined), // |
1098 B(Return) // | 1098 B(Return) // |
1099 }, | 1099 }, |
1100 }, | 1100 }, |
| 1101 { |
| 1102 "'use strict'; var a = 1;\nfunction f() { a = 2; }\nf()", |
| 1103 0, |
| 1104 1, |
| 1105 6, |
| 1106 { |
| 1107 B(LdaSmi8), U8(2), // |
| 1108 B(StaGlobalStrict), _, // |
| 1109 B(LdaUndefined), // |
| 1110 B(Return) // |
| 1111 }, |
| 1112 }, |
1101 }; | 1113 }; |
1102 | 1114 |
1103 for (size_t i = 0; i < arraysize(snippets); i++) { | 1115 for (size_t i = 0; i < arraysize(snippets); i++) { |
1104 Handle<BytecodeArray> bytecode_array = | 1116 Handle<BytecodeArray> bytecode_array = |
1105 helper.MakeBytecode(snippets[i].code_snippet, "f"); | 1117 helper.MakeBytecode(snippets[i].code_snippet, "f"); |
1106 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); | 1118 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); |
1107 } | 1119 } |
1108 } | 1120 } |
1109 | 1121 |
1110 | 1122 |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1559 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(2), U8(2), // | 1571 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(2), U8(2), // |
1560 B(LdaConstant), U8(2), // | 1572 B(LdaConstant), U8(2), // |
1561 B(Star), R(2), // | 1573 B(Star), R(2), // |
1562 B(LdaZero), // | 1574 B(LdaZero), // |
1563 B(Star), R(3), // | 1575 B(Star), R(3), // |
1564 B(LdaSmi8), U8(1), // | 1576 B(LdaSmi8), U8(1), // |
1565 B(Star), R(4), // | 1577 B(Star), R(4), // |
1566 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), // | 1578 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), // |
1567 U8(3), // | 1579 U8(3), // |
1568 B(LdaSmi8), U8(2), // | 1580 B(LdaSmi8), U8(2), // |
1569 B(StaGlobal), _, // | 1581 B(StaGlobalSloppy), _, // |
1570 B(Star), R(0), // | 1582 B(Star), R(0), // |
1571 B(Ldar), R(0), // | 1583 B(Ldar), R(0), // |
1572 B(Return) // | 1584 B(Return) // |
1573 }, | 1585 }, |
1574 -1}, | 1586 -1}, |
1575 {"function f() {}\nf();", | 1587 {"function f() {}\nf();", |
1576 4 * kPointerSize, | 1588 4 * kPointerSize, |
1577 1, | 1589 1, |
1578 43, | 1590 43, |
1579 { | 1591 { |
(...skipping 1086 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2666 for (size_t i = 0; i < arraysize(snippets); i++) { | 2678 for (size_t i = 0; i < arraysize(snippets); i++) { |
2667 Handle<BytecodeArray> bytecode_array = | 2679 Handle<BytecodeArray> bytecode_array = |
2668 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 2680 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
2669 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 2681 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
2670 } | 2682 } |
2671 } | 2683 } |
2672 | 2684 |
2673 } // namespace interpreter | 2685 } // namespace interpreter |
2674 } // namespace internal | 2686 } // namespace internal |
2675 } // namespace v8 | 2687 } // namespace v8 |
OLD | NEW |