| 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 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1019 int wide_idx_2 = vector->GetIndex(slot1) - 2; | 1019 int wide_idx_2 = vector->GetIndex(slot1) - 2; |
| 1020 int wide_idx_3 = vector->GetIndex(slot1) - 2; | 1020 int wide_idx_3 = vector->GetIndex(slot1) - 2; |
| 1021 int wide_idx_4 = vector->GetIndex(slot1) - 2; | 1021 int wide_idx_4 = vector->GetIndex(slot1) - 2; |
| 1022 | 1022 |
| 1023 ExpectedSnippet<const char*> snippets[] = { | 1023 ExpectedSnippet<const char*> snippets[] = { |
| 1024 {"function f(a) { a.name = \"val\"; }\nf({name : \"test\"})", | 1024 {"function f(a) { a.name = \"val\"; }\nf({name : \"test\"})", |
| 1025 0, | 1025 0, |
| 1026 2, | 1026 2, |
| 1027 8, | 1027 8, |
| 1028 { | 1028 { |
| 1029 B(LdaConstant), U8(1), // | 1029 B(LdaConstant), U8(0), // |
| 1030 B(StoreICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), // | 1030 B(StoreICSloppy), A(1, 2), U8(1), U8(vector->GetIndex(slot1)), // |
| 1031 B(LdaUndefined), // | 1031 B(LdaUndefined), // |
| 1032 B(Return), // | 1032 B(Return), // |
| 1033 }, | 1033 }, |
| 1034 2, | 1034 2, |
| 1035 {"name", "val"}}, | 1035 {"val", "name"}}, |
| 1036 {"function f(a) { a[\"key\"] = \"val\"; }\nf({key : \"test\"})", | 1036 {"function f(a) { a[\"key\"] = \"val\"; }\nf({key : \"test\"})", |
| 1037 0, | 1037 0, |
| 1038 2, | 1038 2, |
| 1039 8, | 1039 8, |
| 1040 { | 1040 { |
| 1041 B(LdaConstant), U8(1), // | 1041 B(LdaConstant), U8(0), // |
| 1042 B(StoreICSloppy), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), // | 1042 B(StoreICSloppy), A(1, 2), U8(1), U8(vector->GetIndex(slot1)), // |
| 1043 B(LdaUndefined), // | 1043 B(LdaUndefined), // |
| 1044 B(Return), // | 1044 B(Return), // |
| 1045 }, | 1045 }, |
| 1046 2, | 1046 2, |
| 1047 {"key", "val"}}, | 1047 {"val", "key"}}, |
| 1048 {"function f(a) { a[100] = \"val\"; }\nf({100 : \"test\"})", | 1048 {"function f(a) { a[100] = \"val\"; }\nf({100 : \"test\"})", |
| 1049 kPointerSize, | 1049 kPointerSize, |
| 1050 2, | 1050 2, |
| 1051 12, | 1051 12, |
| 1052 { | 1052 { |
| 1053 B(LdaSmi8), U8(100), // | 1053 B(LdaSmi8), U8(100), // |
| 1054 B(Star), R(0), // | 1054 B(Star), R(0), // |
| 1055 B(LdaConstant), U8(0), // | 1055 B(LdaConstant), U8(0), // |
| 1056 B(KeyedStoreICSloppy), A(1, 2), R(0), // | 1056 B(KeyedStoreICSloppy), A(1, 2), R(0), // |
| 1057 U8(vector->GetIndex(slot1)), // | 1057 U8(vector->GetIndex(slot1)), // |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1086 B(Return), // | 1086 B(Return), // |
| 1087 }, | 1087 }, |
| 1088 1, | 1088 1, |
| 1089 {"name"}}, | 1089 {"name"}}, |
| 1090 {"function f(a) { \"use strict\"; a.name = \"val\"; }\n" | 1090 {"function f(a) { \"use strict\"; a.name = \"val\"; }\n" |
| 1091 "f({name : \"test\"})", | 1091 "f({name : \"test\"})", |
| 1092 0, | 1092 0, |
| 1093 2, | 1093 2, |
| 1094 8, | 1094 8, |
| 1095 { | 1095 { |
| 1096 B(LdaConstant), U8(1), // | 1096 B(LdaConstant), U8(0), // |
| 1097 B(StoreICStrict), A(1, 2), U8(0), U8(vector->GetIndex(slot1)), // | 1097 B(StoreICStrict), A(1, 2), U8(1), U8(vector->GetIndex(slot1)), // |
| 1098 B(LdaUndefined), // | 1098 B(LdaUndefined), // |
| 1099 B(Return), // | 1099 B(Return), // |
| 1100 }, | 1100 }, |
| 1101 2, | 1101 2, |
| 1102 {"name", "val"}}, | 1102 {"val", "name"}}, |
| 1103 {"function f(a, b) { \"use strict\"; a[b] = \"val\"; }\n" | 1103 {"function f(a, b) { \"use strict\"; a[b] = \"val\"; }\n" |
| 1104 "f({arg : \"test\"}, \"arg\")", | 1104 "f({arg : \"test\"}, \"arg\")", |
| 1105 0, | 1105 0, |
| 1106 3, | 1106 3, |
| 1107 8, | 1107 8, |
| 1108 { | 1108 { |
| 1109 B(LdaConstant), U8(0), // | 1109 B(LdaConstant), U8(0), // |
| 1110 B(KeyedStoreICStrict), A(1, 3), A(2, 3), // | 1110 B(KeyedStoreICStrict), A(1, 3), A(2, 3), // |
| 1111 U8(vector->GetIndex(slot1)), // | 1111 U8(vector->GetIndex(slot1)), // |
| 1112 B(LdaUndefined), // | 1112 B(LdaUndefined), // |
| (...skipping 2214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3327 2, | 3327 2, |
| 3328 {InstanceType::FIXED_ARRAY_TYPE, | 3328 {InstanceType::FIXED_ARRAY_TYPE, |
| 3329 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3329 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| 3330 {"return { func: function() { } };", | 3330 {"return { func: function() { } };", |
| 3331 1 * kPointerSize, | 3331 1 * kPointerSize, |
| 3332 1, | 3332 1, |
| 3333 16, | 3333 16, |
| 3334 { | 3334 { |
| 3335 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3335 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
| 3336 B(Star), R(0), // | 3336 B(Star), R(0), // |
| 3337 B(CreateClosure), U8(2), U8(0), // | 3337 B(CreateClosure), U8(1), U8(0), // |
| 3338 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // | 3338 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot1)), // |
| 3339 B(Ldar), R(0), // | 3339 B(Ldar), R(0), // |
| 3340 B(Return), // | 3340 B(Return), // |
| 3341 }, | 3341 }, |
| 3342 3, | 3342 3, |
| 3343 {InstanceType::FIXED_ARRAY_TYPE, | 3343 {InstanceType::FIXED_ARRAY_TYPE, |
| 3344 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3344 InstanceType::SHARED_FUNCTION_INFO_TYPE, |
| 3345 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3345 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| 3346 {"return { func(a) { return a; } };", | 3346 {"return { func(a) { return a; } };", |
| 3347 1 * kPointerSize, | 3347 1 * kPointerSize, |
| 3348 1, | 3348 1, |
| 3349 16, | 3349 16, |
| 3350 { | 3350 { |
| 3351 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3351 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
| 3352 B(Star), R(0), // | 3352 B(Star), R(0), // |
| 3353 B(CreateClosure), U8(2), U8(0), // | 3353 B(CreateClosure), U8(1), U8(0), // |
| 3354 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // | 3354 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot1)), // |
| 3355 B(Ldar), R(0), // | 3355 B(Ldar), R(0), // |
| 3356 B(Return), // | 3356 B(Return), // |
| 3357 }, | 3357 }, |
| 3358 3, | 3358 3, |
| 3359 {InstanceType::FIXED_ARRAY_TYPE, | 3359 {InstanceType::FIXED_ARRAY_TYPE, |
| 3360 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3360 InstanceType::SHARED_FUNCTION_INFO_TYPE, |
| 3361 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3361 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| 3362 {"return { get a() { return 2; } };", | 3362 {"return { get a() { return 2; } };", |
| 3363 5 * kPointerSize, | 3363 5 * kPointerSize, |
| 3364 1, | 3364 1, |
| 3365 29, | 3365 29, |
| 3366 { | 3366 { |
| 3367 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3367 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
| 3368 B(Star), R(0), // | 3368 B(Star), R(0), // |
| 3369 B(LdaConstant), U8(1), // | 3369 B(LdaConstant), U8(1), // |
| 3370 B(Star), R(1), // | 3370 B(Star), R(1), // |
| 3371 B(CreateClosure), U8(2), U8(0), // | 3371 B(CreateClosure), U8(2), U8(0), // |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3652 B(Star), R(1), // | 3652 B(Star), R(1), // |
| 3653 B(LdaZero), // | 3653 B(LdaZero), // |
| 3654 B(Star), R(2), // | 3654 B(Star), R(2), // |
| 3655 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), // | 3655 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), // |
| 3656 B(LdaConstant), U8(1), // | 3656 B(LdaConstant), U8(1), // |
| 3657 B(Star), R(1), // | 3657 B(Star), R(1), // |
| 3658 B(LdaZero), // | 3658 B(LdaZero), // |
| 3659 B(Star), R(2), // | 3659 B(Star), R(2), // |
| 3660 B(CreateObjectLiteral), U8(2), U8(0), U8(has_function_flags), // | 3660 B(CreateObjectLiteral), U8(2), U8(0), U8(has_function_flags), // |
| 3661 B(Star), R(4), // | 3661 B(Star), R(4), // |
| 3662 B(CreateClosure), U8(4), U8(1), // | 3662 B(CreateClosure), U8(3), U8(1), // |
| 3663 B(StoreICSloppy), R(4), U8(3), U8(3), // | 3663 B(StoreICSloppy), R(4), U8(4), U8(3), // |
| 3664 B(CallRuntime), U16(Runtime::kToFastProperties), R(4), U8(1), // | 3664 B(CallRuntime), U16(Runtime::kToFastProperties), R(4), U8(1), // |
| 3665 B(Ldar), R(4), // | 3665 B(Ldar), R(4), // |
| 3666 B(Star), R(3), // | 3666 B(Star), R(3), // |
| 3667 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), U8(3), // | 3667 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), U8(3), // |
| 3668 B(LdaUndefined), // | 3668 B(LdaUndefined), // |
| 3669 B(Return), // | 3669 B(Return), // |
| 3670 }, | 3670 }, |
| 3671 5, | 3671 5, |
| 3672 {InstanceType::FIXED_ARRAY_TYPE, | 3672 {InstanceType::FIXED_ARRAY_TYPE, |
| 3673 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3673 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
| 3674 InstanceType::FIXED_ARRAY_TYPE, | 3674 InstanceType::FIXED_ARRAY_TYPE, |
| 3675 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3675 InstanceType::SHARED_FUNCTION_INFO_TYPE, |
| 3676 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3676 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| 3677 }; | 3677 }; |
| 3678 | 3678 |
| 3679 for (size_t i = 0; i < arraysize(snippets); i++) { | 3679 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 3680 Handle<BytecodeArray> bytecode_array = | 3680 Handle<BytecodeArray> bytecode_array = |
| 3681 helper.MakeTopLevelBytecode(snippets[i].code_snippet); | 3681 helper.MakeTopLevelBytecode(snippets[i].code_snippet); |
| 3682 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3682 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 3683 } | 3683 } |
| 3684 } | 3684 } |
| 3685 | 3685 |
| 3686 | 3686 |
| (...skipping 2103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5790 // inside eval. | 5790 // inside eval. |
| 5791 Handle<BytecodeArray> bytecode_array = | 5791 Handle<BytecodeArray> bytecode_array = |
| 5792 helper.MakeBytecode(script.c_str(), "t", "f"); | 5792 helper.MakeBytecode(script.c_str(), "t", "f"); |
| 5793 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 5793 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 5794 } | 5794 } |
| 5795 } | 5795 } |
| 5796 | 5796 |
| 5797 } // namespace interpreter | 5797 } // namespace interpreter |
| 5798 } // namespace internal | 5798 } // namespace internal |
| 5799 } // namespace v8 | 5799 } // namespace v8 |
| OLD | NEW |