| 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 941 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 952 B(LdaConstant), U8(0), // | 952 B(LdaConstant), U8(0), // |
| 953 B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // | 953 B(LoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // |
| 954 B(Return)}, | 954 B(Return)}, |
| 955 1, | 955 1, |
| 956 {"t"}}, | 956 {"t"}}, |
| 957 }; | 957 }; |
| 958 | 958 |
| 959 for (size_t i = 0; i < arraysize(snippets); i++) { | 959 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 960 Handle<BytecodeArray> bytecode_array = | 960 Handle<BytecodeArray> bytecode_array = |
| 961 helper.MakeBytecode(snippets[i].code_snippet, "f"); | 961 helper.MakeBytecode(snippets[i].code_snippet, "f"); |
| 962 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); | 962 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 963 } | 963 } |
| 964 } | 964 } |
| 965 | 965 |
| 966 | 966 |
| 967 TEST(StoreUnallocated) { | 967 TEST(StoreUnallocated) { |
| 968 InitializedHandleScope handle_scope; | 968 InitializedHandleScope handle_scope; |
| 969 BytecodeGeneratorHelper helper; | 969 BytecodeGeneratorHelper helper; |
| 970 Zone zone; | 970 Zone zone; |
| 971 | 971 |
| 972 int context_reg = Register::function_context().index(); | 972 int context_reg = Register::function_context().index(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 B(StoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot1)), // | 1009 B(StoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot1)), // |
| 1010 B(LdaUndefined), // | 1010 B(LdaUndefined), // |
| 1011 B(Return)}, | 1011 B(Return)}, |
| 1012 1, | 1012 1, |
| 1013 {"t"}}, | 1013 {"t"}}, |
| 1014 }; | 1014 }; |
| 1015 | 1015 |
| 1016 for (size_t i = 0; i < arraysize(snippets); i++) { | 1016 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 1017 Handle<BytecodeArray> bytecode_array = | 1017 Handle<BytecodeArray> bytecode_array = |
| 1018 helper.MakeBytecode(snippets[i].code_snippet, "f"); | 1018 helper.MakeBytecode(snippets[i].code_snippet, "f"); |
| 1019 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); | 1019 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 1020 } | 1020 } |
| 1021 } | 1021 } |
| 1022 | 1022 |
| 1023 | 1023 |
| 1024 TEST(CallRuntime) { | 1024 TEST(CallRuntime) { |
| 1025 InitializedHandleScope handle_scope; | 1025 InitializedHandleScope handle_scope; |
| 1026 BytecodeGeneratorHelper helper; | 1026 BytecodeGeneratorHelper helper; |
| 1027 | 1027 |
| 1028 ExpectedSnippet<int> snippets[] = { | 1028 ExpectedSnippet<int> snippets[] = { |
| 1029 { | 1029 { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1061 B(Star), R(1), // | 1061 B(Star), R(1), // |
| 1062 B(CallRuntime), U16(Runtime::kAdd), R(0), U8(2), // | 1062 B(CallRuntime), U16(Runtime::kAdd), R(0), U8(2), // |
| 1063 B(Return) // | 1063 B(Return) // |
| 1064 }, | 1064 }, |
| 1065 }, | 1065 }, |
| 1066 }; | 1066 }; |
| 1067 | 1067 |
| 1068 for (size_t i = 0; i < arraysize(snippets); i++) { | 1068 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 1069 Handle<BytecodeArray> bytecode_array = | 1069 Handle<BytecodeArray> bytecode_array = |
| 1070 helper.MakeBytecode(snippets[i].code_snippet, "f"); | 1070 helper.MakeBytecode(snippets[i].code_snippet, "f"); |
| 1071 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); | 1071 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 1072 } | 1072 } |
| 1073 } | 1073 } |
| 1074 | 1074 |
| 1075 | 1075 |
| 1076 TEST(IfConditions) { | 1076 TEST(IfConditions) { |
| 1077 InitializedHandleScope handle_scope; | 1077 InitializedHandleScope handle_scope; |
| 1078 BytecodeGeneratorHelper helper; | 1078 BytecodeGeneratorHelper helper; |
| 1079 | 1079 |
| 1080 Handle<Object> unused = helper.factory()->undefined_value(); | 1080 Handle<Object> unused = helper.factory()->undefined_value(); |
| 1081 | 1081 |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1243 } | 1243 } |
| 1244 } | 1244 } |
| 1245 | 1245 |
| 1246 | 1246 |
| 1247 TEST(DeclareGlobals) { | 1247 TEST(DeclareGlobals) { |
| 1248 InitializedHandleScope handle_scope; | 1248 InitializedHandleScope handle_scope; |
| 1249 BytecodeGeneratorHelper helper; | 1249 BytecodeGeneratorHelper helper; |
| 1250 | 1250 |
| 1251 ExpectedSnippet<int> snippets[] = { | 1251 ExpectedSnippet<int> snippets[] = { |
| 1252 {"var a = 1;", | 1252 {"var a = 1;", |
| 1253 4 * kPointerSize, | 1253 5 * kPointerSize, |
| 1254 1, | 1254 1, |
| 1255 30, | 1255 45, |
| 1256 { | 1256 { |
| 1257 B(LdaConstant), U8(0), // | 1257 B(Ldar), R(Register::function_closure().index()), // |
| 1258 B(Star), R(1), // | 1258 B(Star), R(2), // |
| 1259 B(LdaZero), // | 1259 B(LdaConstant), U8(0), // |
| 1260 B(Star), R(2), // | 1260 B(Star), R(3), // |
| 1261 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), // | 1261 B(CallRuntime), U16(Runtime::kNewScriptContext), R(2), U8(2), // |
| 1262 B(LdaConstant), U8(1), // | 1262 B(PushContext), R(1), // |
| 1263 B(Star), R(1), // | 1263 B(LdaConstant), U8(1), // |
| 1264 B(LdaZero), // | 1264 B(Star), R(2), // |
| 1265 B(Star), R(2), // | 1265 B(LdaZero), // |
| 1266 B(LdaSmi8), U8(1), // | 1266 B(Star), R(3), // |
| 1267 B(Star), R(3), // | 1267 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(2), U8(2), // |
| 1268 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), // | 1268 B(LdaConstant), U8(2), // |
| 1269 U8(3), // | 1269 B(Star), R(2), // |
| 1270 B(LdaUndefined), // | 1270 B(LdaZero), // |
| 1271 B(Return) // | 1271 B(Star), R(3), // |
| 1272 B(LdaSmi8), U8(1), // |
| 1273 B(Star), R(4), // |
| 1274 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), // |
| 1275 U8(3), // |
| 1276 B(LdaUndefined), // |
| 1277 B(Return) // |
| 1272 }, | 1278 }, |
| 1273 -1}, | 1279 -1}, |
| 1274 {"function f() {}", | 1280 {"function f() {}", |
| 1275 2 * kPointerSize, | 1281 3 * kPointerSize, |
| 1276 1, | 1282 1, |
| 1277 14, | 1283 29, |
| 1278 { | 1284 { |
| 1279 B(LdaConstant), U8(0), // | 1285 B(Ldar), R(Register::function_closure().index()), // |
| 1280 B(Star), R(0), // | 1286 B(Star), R(1), // |
| 1281 B(LdaZero), // | 1287 B(LdaConstant), U8(0), // |
| 1282 B(Star), R(1), // | 1288 B(Star), R(2), // |
| 1283 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(0), U8(2), // | 1289 B(CallRuntime), U16(Runtime::kNewScriptContext), R(1), U8(2), // |
| 1284 B(LdaUndefined), // | 1290 B(PushContext), R(0), // |
| 1285 B(Return) // | 1291 B(LdaConstant), U8(1), // |
| 1292 B(Star), R(1), // |
| 1293 B(LdaZero), // |
| 1294 B(Star), R(2), // |
| 1295 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), // |
| 1296 B(LdaUndefined), // |
| 1297 B(Return) // |
| 1298 }, |
| 1299 -1}, |
| 1300 {"var a = 1;\na=2;", |
| 1301 5 * kPointerSize, |
| 1302 1, |
| 1303 52, |
| 1304 { |
| 1305 B(Ldar), R(Register::function_closure().index()), // |
| 1306 B(Star), R(2), // |
| 1307 B(LdaConstant), U8(0), // |
| 1308 B(Star), R(3), // |
| 1309 B(CallRuntime), U16(Runtime::kNewScriptContext), R(2), U8(2), // |
| 1310 B(PushContext), R(1), // |
| 1311 B(LdaConstant), U8(1), // |
| 1312 B(Star), R(2), // |
| 1313 B(LdaZero), // |
| 1314 B(Star), R(3), // |
| 1315 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(2), U8(2), // |
| 1316 B(LdaConstant), U8(2), // |
| 1317 B(Star), R(2), // |
| 1318 B(LdaZero), // |
| 1319 B(Star), R(3), // |
| 1320 B(LdaSmi8), U8(1), // |
| 1321 B(Star), R(4), // |
| 1322 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(2), // |
| 1323 U8(3), // |
| 1324 B(LdaSmi8), U8(2), // |
| 1325 B(StaGlobal), _, // |
| 1326 B(Star), R(0), // |
| 1327 B(Ldar), R(0), // |
| 1328 B(Return) // |
| 1329 }, |
| 1330 -1}, |
| 1331 {"function f() {}\nf();", |
| 1332 4 * kPointerSize, |
| 1333 1, |
| 1334 43, |
| 1335 { |
| 1336 B(Ldar), R(Register::function_closure().index()), // |
| 1337 B(Star), R(2), // |
| 1338 B(LdaConstant), U8(0), // |
| 1339 B(Star), R(3), // |
| 1340 B(CallRuntime), U16(Runtime::kNewScriptContext), R(2), U8(2), // |
| 1341 B(PushContext), R(1), // |
| 1342 B(LdaConstant), U8(1), // |
| 1343 B(Star), R(2), // |
| 1344 B(LdaZero), // |
| 1345 B(Star), R(3), // |
| 1346 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(2), U8(2), // |
| 1347 B(LdaUndefined), // |
| 1348 B(Star), R(3), // |
| 1349 B(LdaGlobal), _, // |
| 1350 B(Star), R(2), // |
| 1351 B(Call), R(2), R(3), U8(0), // |
| 1352 B(Star), R(0), // |
| 1353 B(Ldar), R(0), // |
| 1354 B(Return) // |
| 1286 }, | 1355 }, |
| 1287 -1}, | 1356 -1}, |
| 1288 }; | 1357 }; |
| 1289 | 1358 |
| 1290 for (size_t i = 0; i < arraysize(snippets); i++) { | 1359 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 1291 Handle<BytecodeArray> bytecode_array = | 1360 Handle<BytecodeArray> bytecode_array = |
| 1292 helper.MakeTopLevelBytecode(snippets[i].code_snippet); | 1361 helper.MakeTopLevelBytecode(snippets[i].code_snippet); |
| 1293 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); | 1362 CheckBytecodeArrayEqual(snippets[i], bytecode_array, true); |
| 1294 } | 1363 } |
| 1295 } | 1364 } |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1671 Handle<BytecodeArray> bytecode_array = | 1740 Handle<BytecodeArray> bytecode_array = |
| 1672 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 1741 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| 1673 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 1742 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 1674 } | 1743 } |
| 1675 } | 1744 } |
| 1676 | 1745 |
| 1677 | 1746 |
| 1678 } // namespace interpreter | 1747 } // namespace interpreter |
| 1679 } // namespace internal | 1748 } // namespace internal |
| 1680 } // namespace v8 | 1749 } // namespace v8 |
| OLD | NEW |