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 3808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3819 FeedbackVectorSlot slot1 = feedback_spec.AddStoreICSlot(); | 3819 FeedbackVectorSlot slot1 = feedback_spec.AddStoreICSlot(); |
3820 | 3820 |
3821 Handle<i::TypeFeedbackVector> vector = | 3821 Handle<i::TypeFeedbackVector> vector = |
3822 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); | 3822 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); |
3823 | 3823 |
3824 int simple_flags = ObjectLiteral::kFastElements | | 3824 int simple_flags = ObjectLiteral::kFastElements | |
3825 ObjectLiteral::kShallowProperties | | 3825 ObjectLiteral::kShallowProperties | |
3826 ObjectLiteral::kDisableMementos; | 3826 ObjectLiteral::kDisableMementos; |
3827 int deep_elements_flags = | 3827 int deep_elements_flags = |
3828 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; | 3828 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
| 3829 |
| 3830 // clang-format off |
3829 ExpectedSnippet<InstanceType> snippets[] = { | 3831 ExpectedSnippet<InstanceType> snippets[] = { |
3830 {"return { };", | 3832 {"return { };", |
3831 kPointerSize, | 3833 kPointerSize, |
3832 1, | 3834 1, |
3833 7, | 3835 7, |
3834 { | 3836 { |
3835 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // | 3837 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // |
3836 B(Star), R(0), // | 3838 B(Star), R(0), // |
3837 B(Return) // | 3839 B(Return) // |
3838 }, | 3840 }, |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4023 B(Star), R(0), // | 4025 B(Star), R(0), // |
4024 B(Mov), R(0), R(1), // | 4026 B(Mov), R(0), R(1), // |
4025 B(LdaNull), B(Star), R(2), // | 4027 B(LdaNull), B(Star), R(2), // |
4026 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(1), U8(2), // | 4028 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(1), U8(2), // |
4027 B(Ldar), R(0), // | 4029 B(Ldar), R(0), // |
4028 B(Return), // | 4030 B(Return), // |
4029 }, | 4031 }, |
4030 1, | 4032 1, |
4031 {InstanceType::FIXED_ARRAY_TYPE}}, | 4033 {InstanceType::FIXED_ARRAY_TYPE}}, |
4032 {"var a = 'test'; return { [a]: 1 }", | 4034 {"var a = 'test'; return { [a]: 1 }", |
4033 6 * kPointerSize, | 4035 7 * kPointerSize, |
4034 1, | 4036 1, |
4035 33, | 4037 36, |
4036 { | 4038 { |
4037 B(LdaConstant), U8(0), // | 4039 B(LdaConstant), U8(0), // |
4038 B(Star), R(0), // | 4040 B(Star), R(0), // |
4039 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // | 4041 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // |
4040 B(Star), R(1), // | 4042 B(Star), R(1), // |
4041 B(Mov), R(1), R(2), // | 4043 B(Mov), R(1), R(2), // |
4042 B(Ldar), R(0), // | 4044 B(Ldar), R(0), // |
4043 B(ToName), // | 4045 B(ToName), // |
4044 B(Star), R(3), // | 4046 B(Star), R(3), // |
4045 B(LdaSmi8), U8(1), // | 4047 B(LdaSmi8), U8(1), // |
4046 B(Star), R(4), // | 4048 B(Star), R(4), // |
4047 B(LdaZero), // | 4049 B(LdaZero), // |
4048 B(Star), R(5), // | 4050 B(Star), R(5), // |
4049 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // | 4051 B(LdaZero), // |
4050 U8(4), // | 4052 B(Star), R(6), // |
| 4053 B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(2), // |
| 4054 U8(5), // |
4051 B(Ldar), R(1), // | 4055 B(Ldar), R(1), // |
4052 B(Return), // | 4056 B(Return), // |
4053 }, | 4057 }, |
4054 2, | 4058 2, |
4055 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4059 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4056 InstanceType::FIXED_ARRAY_TYPE}}, | 4060 InstanceType::FIXED_ARRAY_TYPE}}, |
4057 {"var a = 'test'; return { val: a, [a]: 1 }", | 4061 {"var a = 'test'; return { val: a, [a]: 1 }", |
4058 6 * kPointerSize, | 4062 7 * kPointerSize, |
4059 1, | 4063 1, |
4060 39, | 4064 42, |
4061 { | 4065 { |
4062 B(LdaConstant), U8(0), // | 4066 B(LdaConstant), U8(0), // |
4063 B(Star), R(0), // | 4067 B(Star), R(0), // |
4064 B(CreateObjectLiteral), U8(1), U8(0), U8(deep_elements_flags), // | 4068 B(CreateObjectLiteral), U8(1), U8(0), U8(deep_elements_flags), // |
4065 B(Star), R(1), // | 4069 B(Star), R(1), // |
4066 B(Ldar), R(0), // | 4070 B(Ldar), R(0), // |
4067 B(StoreICSloppy), R(1), U8(2), U8(vector->GetIndex(slot1)), // | 4071 B(StoreICSloppy), R(1), U8(2), U8(vector->GetIndex(slot1)), // |
4068 B(Mov), R(1), R(2), // | 4072 B(Mov), R(1), R(2), // |
4069 B(Ldar), R(0), // | 4073 B(Ldar), R(0), // |
4070 B(ToName), // | 4074 B(ToName), // |
4071 B(Star), R(3), // | 4075 B(Star), R(3), // |
4072 B(LdaSmi8), U8(1), // | 4076 B(LdaSmi8), U8(1), // |
4073 B(Star), R(4), // | 4077 B(Star), R(4), // |
4074 B(LdaZero), // | 4078 B(LdaZero), // |
4075 B(Star), R(5), // | 4079 B(Star), R(5), // |
4076 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // | 4080 B(LdaZero), // |
4077 U8(4), // | 4081 B(Star), R(6), // |
| 4082 B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(2), // |
| 4083 U8(5), // |
4078 B(Ldar), R(1), // | 4084 B(Ldar), R(1), // |
4079 B(Return), // | 4085 B(Return), // |
4080 }, | 4086 }, |
4081 3, | 4087 3, |
4082 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4088 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4083 InstanceType::FIXED_ARRAY_TYPE, | 4089 InstanceType::FIXED_ARRAY_TYPE, |
4084 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4090 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
4085 {"var a = 'test'; return { [a]: 1, __proto__: {} }", | 4091 {"var a = 'test'; return { [a]: 1, __proto__: {} }", |
4086 6 * kPointerSize, | 4092 7 * kPointerSize, |
4087 1, | 4093 1, |
4088 49, | 4094 52, |
4089 { | 4095 { |
4090 B(LdaConstant), U8(0), // | 4096 B(LdaConstant), U8(0), // |
4091 B(Star), R(0), // | 4097 B(Star), R(0), // |
4092 B(CreateObjectLiteral), U8(1), U8(1), U8(simple_flags), // | 4098 B(CreateObjectLiteral), U8(1), U8(1), U8(simple_flags), // |
4093 B(Star), R(1), // | 4099 B(Star), R(1), // |
4094 B(Mov), R(1), R(2), // | 4100 B(Mov), R(1), R(2), // |
4095 B(Ldar), R(0), // | 4101 B(Ldar), R(0), // |
4096 B(ToName), // | 4102 B(ToName), // |
4097 B(Star), R(3), // | 4103 B(Star), R(3), // |
4098 B(LdaSmi8), U8(1), // | 4104 B(LdaSmi8), U8(1), // |
4099 B(Star), R(4), // | 4105 B(Star), R(4), // |
4100 B(LdaZero), // | 4106 B(LdaZero), // |
4101 B(Star), R(5), // | 4107 B(Star), R(5), // |
4102 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // | 4108 B(LdaZero), // |
4103 U8(4), // | 4109 B(Star), R(6), // |
| 4110 B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(2), // |
| 4111 U8(5), // |
4104 B(Mov), R(1), R(2), // | 4112 B(Mov), R(1), R(2), // |
4105 B(CreateObjectLiteral), U8(1), U8(0), U8(13), // | 4113 B(CreateObjectLiteral), U8(1), U8(0), U8(13), // |
4106 B(Star), R(4), // | 4114 B(Star), R(4), // |
4107 B(Star), R(3), // | 4115 B(Star), R(3), // |
4108 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(2), U8(2), // | 4116 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(2), U8(2), // |
4109 B(Ldar), R(1), // | 4117 B(Ldar), R(1), // |
4110 B(Return), // | 4118 B(Return), // |
4111 }, | 4119 }, |
4112 2, | 4120 2, |
4113 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4121 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4114 InstanceType::FIXED_ARRAY_TYPE}}, | 4122 InstanceType::FIXED_ARRAY_TYPE}}, |
4115 {"var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };", | 4123 {"var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };", |
4116 6 * kPointerSize, | 4124 7 * kPointerSize, |
4117 1, | 4125 1, |
4118 73, | 4126 76, |
4119 { | 4127 { |
4120 B(LdaConstant), U8(0), // | 4128 B(LdaConstant), U8(0), // |
4121 B(Star), R(0), // | 4129 B(Star), R(0), // |
4122 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // | 4130 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // |
4123 B(Star), R(1), // | 4131 B(Star), R(1), // |
4124 B(Mov), R(1), R(2), // | 4132 B(Mov), R(1), R(2), // |
4125 B(Ldar), R(0), // | 4133 B(Ldar), R(0), // |
4126 B(ToName), // | 4134 B(ToName), // |
4127 B(Star), R(3), // | 4135 B(Star), R(3), // |
4128 B(LdaConstant), U8(2), // | 4136 B(LdaConstant), U8(2), // |
4129 B(Star), R(4), // | 4137 B(Star), R(4), // |
4130 B(LdaZero), // | 4138 B(LdaZero), // |
4131 B(Star), R(5), // | 4139 B(Star), R(5), // |
4132 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // | 4140 B(LdaZero), // |
4133 U8(4), // | 4141 B(Star), R(6), // |
| 4142 B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(2), // |
| 4143 U8(5), // |
4134 B(Mov), R(1), R(2), // | 4144 B(Mov), R(1), R(2), // |
4135 B(LdaConstant), U8(3), // | 4145 B(LdaConstant), U8(3), // |
4136 B(Star), R(3), // | 4146 B(Star), R(3), // |
4137 B(CreateClosure), U8(4), U8(0), // | 4147 B(CreateClosure), U8(4), U8(0), // |
4138 B(Star), R(4), // | 4148 B(Star), R(4), // |
4139 B(LdaZero), // | 4149 B(LdaZero), // |
4140 B(Star), R(5), // | 4150 B(Star), R(5), // |
4141 B(CallRuntime), U16(Runtime::kDefineGetterPropertyUnchecked), // | 4151 B(CallRuntime), U16(Runtime::kDefineGetterPropertyUnchecked), // |
4142 R(2), U8(4), // | 4152 R(2), U8(4), // |
4143 B(Mov), R(1), R(2), // | 4153 B(Mov), R(1), R(2), // |
4144 B(LdaConstant), U8(3), // | 4154 B(LdaConstant), U8(3), // |
4145 B(Star), R(3), // | 4155 B(Star), R(3), // |
4146 B(CreateClosure), U8(5), U8(0), // | 4156 B(CreateClosure), U8(5), U8(0), // |
4147 B(Star), R(4), // | 4157 B(Star), R(4), // |
4148 B(LdaZero), // | 4158 B(LdaZero), // |
4149 B(Star), R(5), // | 4159 B(Star), R(5), // |
4150 B(CallRuntime), U16(Runtime::kDefineSetterPropertyUnchecked), // | 4160 B(CallRuntime), U16(Runtime::kDefineSetterPropertyUnchecked), // |
4151 R(2), U8(4), // | 4161 R(2), U8(4), // |
4152 B(Ldar), R(1), // | 4162 B(Ldar), R(1), // |
4153 B(Return), // | 4163 B(Return), // |
4154 }, | 4164 }, |
4155 6, | 4165 6, |
4156 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4166 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4157 InstanceType::FIXED_ARRAY_TYPE, | 4167 InstanceType::FIXED_ARRAY_TYPE, |
4158 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4168 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4159 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4169 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4160 InstanceType::SHARED_FUNCTION_INFO_TYPE, | 4170 InstanceType::SHARED_FUNCTION_INFO_TYPE, |
4161 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 4171 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
4162 }; | 4172 }; |
| 4173 // clang-format on |
4163 | 4174 |
4164 for (size_t i = 0; i < arraysize(snippets); i++) { | 4175 for (size_t i = 0; i < arraysize(snippets); i++) { |
4165 Handle<BytecodeArray> bytecode_array = | 4176 Handle<BytecodeArray> bytecode_array = |
4166 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 4177 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
4167 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 4178 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
4168 } | 4179 } |
4169 } | 4180 } |
4170 | 4181 |
4171 | 4182 |
4172 TEST(ObjectLiteralsWide) { | 4183 TEST(ObjectLiteralsWide) { |
(...skipping 3386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7559 Handle<BytecodeArray> bytecode_array = | 7570 Handle<BytecodeArray> bytecode_array = |
7560 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 7571 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
7561 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 7572 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
7562 } | 7573 } |
7563 FLAG_harmony_do_expressions = old_flag; | 7574 FLAG_harmony_do_expressions = old_flag; |
7564 } | 7575 } |
7565 | 7576 |
7566 } // namespace interpreter | 7577 } // namespace interpreter |
7567 } // namespace internal | 7578 } // namespace internal |
7568 } // namespace v8 | 7579 } // namespace v8 |
OLD | NEW |