OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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/builtins/builtins-utils.h" | 5 #include "src/builtins/builtins-utils-gen.h" |
6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/code-stub-assembler.h" | 8 #include "src/code-stub-assembler.h" |
9 #include "src/objects-inl.h" | 9 #include "src/objects-inl.h" |
10 | 10 |
11 namespace v8 { | 11 namespace v8 { |
12 namespace internal { | 12 namespace internal { |
13 | 13 |
14 class ConversionBuiltinsAssembler : public CodeStubAssembler { | 14 class ConversionBuiltinsAssembler : public CodeStubAssembler { |
15 public: | 15 public: |
16 explicit ConversionBuiltinsAssembler(compiler::CodeAssemblerState* state) | 16 explicit ConversionBuiltinsAssembler(compiler::CodeAssemblerState* state) |
17 : CodeStubAssembler(state) {} | 17 : CodeStubAssembler(state) {} |
18 | 18 |
19 protected: | 19 protected: |
20 void Generate_NonPrimitiveToPrimitive(ToPrimitiveHint hint); | 20 void Generate_NonPrimitiveToPrimitive(ToPrimitiveHint hint); |
21 | 21 |
22 void Generate_OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint); | 22 void Generate_OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint); |
23 }; | 23 }; |
24 | 24 |
25 Handle<Code> Builtins::NonPrimitiveToPrimitive(ToPrimitiveHint hint) { | |
26 switch (hint) { | |
27 case ToPrimitiveHint::kDefault: | |
28 return NonPrimitiveToPrimitive_Default(); | |
29 case ToPrimitiveHint::kNumber: | |
30 return NonPrimitiveToPrimitive_Number(); | |
31 case ToPrimitiveHint::kString: | |
32 return NonPrimitiveToPrimitive_String(); | |
33 } | |
34 UNREACHABLE(); | |
35 return Handle<Code>::null(); | |
36 } | |
37 | |
38 // ES6 section 7.1.1 ToPrimitive ( input [ , PreferredType ] ) | 25 // ES6 section 7.1.1 ToPrimitive ( input [ , PreferredType ] ) |
39 void ConversionBuiltinsAssembler::Generate_NonPrimitiveToPrimitive( | 26 void ConversionBuiltinsAssembler::Generate_NonPrimitiveToPrimitive( |
40 ToPrimitiveHint hint) { | 27 ToPrimitiveHint hint) { |
41 Node* input = Parameter(TypeConversionDescriptor::kArgument); | 28 Node* input = Parameter(TypeConversionDescriptor::kArgument); |
42 Node* context = Parameter(TypeConversionDescriptor::kContext); | 29 Node* context = Parameter(TypeConversionDescriptor::kContext); |
43 | 30 |
44 // Lookup the @@toPrimitive property on the {input}. | 31 // Lookup the @@toPrimitive property on the {input}. |
45 Node* exotic_to_prim = | 32 Node* exotic_to_prim = |
46 GetProperty(context, input, factory()->to_primitive_symbol()); | 33 GetProperty(context, input, factory()->to_primitive_symbol()); |
47 | 34 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 { | 149 { |
163 GotoIf(Word32NotEqual(input_instance_type, Int32Constant(ODDBALL_TYPE)), | 150 GotoIf(Word32NotEqual(input_instance_type, Int32Constant(ODDBALL_TYPE)), |
164 &runtime); | 151 &runtime); |
165 Return(LoadObjectField(input, Oddball::kToStringOffset)); | 152 Return(LoadObjectField(input, Oddball::kToStringOffset)); |
166 } | 153 } |
167 | 154 |
168 Bind(&runtime); | 155 Bind(&runtime); |
169 { Return(CallRuntime(Runtime::kToString, context, input)); } | 156 { Return(CallRuntime(Runtime::kToString, context, input)); } |
170 } | 157 } |
171 | 158 |
172 Handle<Code> Builtins::OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint) { | |
173 switch (hint) { | |
174 case OrdinaryToPrimitiveHint::kNumber: | |
175 return OrdinaryToPrimitive_Number(); | |
176 case OrdinaryToPrimitiveHint::kString: | |
177 return OrdinaryToPrimitive_String(); | |
178 } | |
179 UNREACHABLE(); | |
180 return Handle<Code>::null(); | |
181 } | |
182 | |
183 // 7.1.1.1 OrdinaryToPrimitive ( O, hint ) | 159 // 7.1.1.1 OrdinaryToPrimitive ( O, hint ) |
184 void ConversionBuiltinsAssembler::Generate_OrdinaryToPrimitive( | 160 void ConversionBuiltinsAssembler::Generate_OrdinaryToPrimitive( |
185 OrdinaryToPrimitiveHint hint) { | 161 OrdinaryToPrimitiveHint hint) { |
186 Node* input = Parameter(TypeConversionDescriptor::kArgument); | 162 Node* input = Parameter(TypeConversionDescriptor::kArgument); |
187 Node* context = Parameter(TypeConversionDescriptor::kContext); | 163 Node* context = Parameter(TypeConversionDescriptor::kContext); |
188 | 164 |
189 Variable var_result(this, MachineRepresentation::kTagged); | 165 Variable var_result(this, MachineRepresentation::kTagged); |
190 Label return_result(this, &var_result); | 166 Label return_result(this, &var_result); |
191 | 167 |
192 Handle<String> method_names[2]; | 168 Handle<String> method_names[2]; |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 | 378 |
403 // ES6 section 12.5.5 typeof operator | 379 // ES6 section 12.5.5 typeof operator |
404 TF_BUILTIN(Typeof, CodeStubAssembler) { | 380 TF_BUILTIN(Typeof, CodeStubAssembler) { |
405 Node* object = Parameter(TypeofDescriptor::kObject); | 381 Node* object = Parameter(TypeofDescriptor::kObject); |
406 | 382 |
407 Return(Typeof(object)); | 383 Return(Typeof(object)); |
408 } | 384 } |
409 | 385 |
410 } // namespace internal | 386 } // namespace internal |
411 } // namespace v8 | 387 } // namespace v8 |
OLD | NEW |