Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(578)

Side by Side Diff: src/builtins/builtins-conversion.cc

Issue 2504913002: Revert of [refactoring] Split CodeAssemblerState out of CodeAssembler (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/builtins/builtins-boolean.cc ('k') | src/builtins/builtins-date.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.h" 5 #include "src/builtins/builtins.h"
6 #include "src/builtins/builtins-utils.h" 6 #include "src/builtins/builtins-utils.h"
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 Callable callable = CodeFactory::OrdinaryToPrimitive( 88 Callable callable = CodeFactory::OrdinaryToPrimitive(
89 assembler->isolate(), (hint == ToPrimitiveHint::kString) 89 assembler->isolate(), (hint == ToPrimitiveHint::kString)
90 ? OrdinaryToPrimitiveHint::kString 90 ? OrdinaryToPrimitiveHint::kString
91 : OrdinaryToPrimitiveHint::kNumber); 91 : OrdinaryToPrimitiveHint::kNumber);
92 assembler->TailCallStub(callable, context, input); 92 assembler->TailCallStub(callable, context, input);
93 } 93 }
94 } 94 }
95 } // anonymous namespace 95 } // anonymous namespace
96 96
97 void Builtins::Generate_NonPrimitiveToPrimitive_Default( 97 void Builtins::Generate_NonPrimitiveToPrimitive_Default(
98 compiler::CodeAssemblerState* state) { 98 CodeStubAssembler* assembler) {
99 CodeStubAssembler assembler(state); 99 Generate_NonPrimitiveToPrimitive(assembler, ToPrimitiveHint::kDefault);
100 Generate_NonPrimitiveToPrimitive(&assembler, ToPrimitiveHint::kDefault);
101 } 100 }
102 101
103 void Builtins::Generate_NonPrimitiveToPrimitive_Number( 102 void Builtins::Generate_NonPrimitiveToPrimitive_Number(
104 compiler::CodeAssemblerState* state) { 103 CodeStubAssembler* assembler) {
105 CodeStubAssembler assembler(state); 104 Generate_NonPrimitiveToPrimitive(assembler, ToPrimitiveHint::kNumber);
106 Generate_NonPrimitiveToPrimitive(&assembler, ToPrimitiveHint::kNumber);
107 } 105 }
108 106
109 void Builtins::Generate_NonPrimitiveToPrimitive_String( 107 void Builtins::Generate_NonPrimitiveToPrimitive_String(
110 compiler::CodeAssemblerState* state) { 108 CodeStubAssembler* assembler) {
111 CodeStubAssembler assembler(state); 109 Generate_NonPrimitiveToPrimitive(assembler, ToPrimitiveHint::kString);
112 Generate_NonPrimitiveToPrimitive(&assembler, ToPrimitiveHint::kString);
113 } 110 }
114 111
115 void Builtins::Generate_StringToNumber(compiler::CodeAssemblerState* state) { 112 void Builtins::Generate_StringToNumber(CodeStubAssembler* assembler) {
116 typedef compiler::Node Node; 113 typedef compiler::Node Node;
117 typedef TypeConversionDescriptor Descriptor; 114 typedef TypeConversionDescriptor Descriptor;
118 CodeStubAssembler assembler(state);
119 115
120 Node* input = assembler.Parameter(Descriptor::kArgument); 116 Node* input = assembler->Parameter(Descriptor::kArgument);
121 Node* context = assembler.Parameter(Descriptor::kContext); 117 Node* context = assembler->Parameter(Descriptor::kContext);
122 118
123 assembler.Return(assembler.StringToNumber(context, input)); 119 assembler->Return(assembler->StringToNumber(context, input));
124 } 120 }
125 121
126 void Builtins::Generate_ToName(compiler::CodeAssemblerState* state) { 122 void Builtins::Generate_ToName(CodeStubAssembler* assembler) {
127 typedef compiler::Node Node; 123 typedef compiler::Node Node;
128 typedef TypeConversionDescriptor Descriptor; 124 typedef TypeConversionDescriptor Descriptor;
129 CodeStubAssembler assembler(state);
130 125
131 Node* input = assembler.Parameter(Descriptor::kArgument); 126 Node* input = assembler->Parameter(Descriptor::kArgument);
132 Node* context = assembler.Parameter(Descriptor::kContext); 127 Node* context = assembler->Parameter(Descriptor::kContext);
133 128
134 assembler.Return(assembler.ToName(context, input)); 129 assembler->Return(assembler->ToName(context, input));
135 } 130 }
136 131
137 // static 132 // static
138 void Builtins::Generate_NonNumberToNumber(compiler::CodeAssemblerState* state) { 133 void Builtins::Generate_NonNumberToNumber(CodeStubAssembler* assembler) {
139 typedef compiler::Node Node; 134 typedef compiler::Node Node;
140 typedef TypeConversionDescriptor Descriptor; 135 typedef TypeConversionDescriptor Descriptor;
141 CodeStubAssembler assembler(state);
142 136
143 Node* input = assembler.Parameter(Descriptor::kArgument); 137 Node* input = assembler->Parameter(Descriptor::kArgument);
144 Node* context = assembler.Parameter(Descriptor::kContext); 138 Node* context = assembler->Parameter(Descriptor::kContext);
145 139
146 assembler.Return(assembler.NonNumberToNumber(context, input)); 140 assembler->Return(assembler->NonNumberToNumber(context, input));
147 } 141 }
148 142
149 // ES6 section 7.1.3 ToNumber ( argument ) 143 // ES6 section 7.1.3 ToNumber ( argument )
150 void Builtins::Generate_ToNumber(compiler::CodeAssemblerState* state) { 144 void Builtins::Generate_ToNumber(CodeStubAssembler* assembler) {
151 typedef compiler::Node Node; 145 typedef compiler::Node Node;
152 typedef TypeConversionDescriptor Descriptor; 146 typedef TypeConversionDescriptor Descriptor;
153 CodeStubAssembler assembler(state);
154 147
155 Node* input = assembler.Parameter(Descriptor::kArgument); 148 Node* input = assembler->Parameter(Descriptor::kArgument);
156 Node* context = assembler.Parameter(Descriptor::kContext); 149 Node* context = assembler->Parameter(Descriptor::kContext);
157 150
158 assembler.Return(assembler.ToNumber(context, input)); 151 assembler->Return(assembler->ToNumber(context, input));
159 } 152 }
160 153
161 void Builtins::Generate_ToString(compiler::CodeAssemblerState* state) { 154 void Builtins::Generate_ToString(CodeStubAssembler* assembler) {
162 typedef CodeStubAssembler::Label Label; 155 typedef CodeStubAssembler::Label Label;
163 typedef compiler::Node Node; 156 typedef compiler::Node Node;
164 typedef TypeConversionDescriptor Descriptor; 157 typedef TypeConversionDescriptor Descriptor;
165 CodeStubAssembler assembler(state);
166 158
167 Node* input = assembler.Parameter(Descriptor::kArgument); 159 Node* input = assembler->Parameter(Descriptor::kArgument);
168 Node* context = assembler.Parameter(Descriptor::kContext); 160 Node* context = assembler->Parameter(Descriptor::kContext);
169 161
170 Label is_number(&assembler); 162 Label is_number(assembler);
171 Label runtime(&assembler); 163 Label runtime(assembler);
172 164
173 assembler.GotoIf(assembler.TaggedIsSmi(input), &is_number); 165 assembler->GotoIf(assembler->TaggedIsSmi(input), &is_number);
174 166
175 Node* input_map = assembler.LoadMap(input); 167 Node* input_map = assembler->LoadMap(input);
176 Node* input_instance_type = assembler.LoadMapInstanceType(input_map); 168 Node* input_instance_type = assembler->LoadMapInstanceType(input_map);
177 169
178 Label not_string(&assembler); 170 Label not_string(assembler);
179 assembler.GotoUnless(assembler.IsStringInstanceType(input_instance_type), 171 assembler->GotoUnless(assembler->IsStringInstanceType(input_instance_type),
180 &not_string); 172 &not_string);
181 assembler.Return(input); 173 assembler->Return(input);
182 174
183 Label not_heap_number(&assembler); 175 Label not_heap_number(assembler);
184 176
185 assembler.Bind(&not_string); 177 assembler->Bind(&not_string);
186 { 178 {
187 assembler.GotoUnless( 179 assembler->GotoUnless(
188 assembler.WordEqual(input_map, assembler.HeapNumberMapConstant()), 180 assembler->WordEqual(input_map, assembler->HeapNumberMapConstant()),
189 &not_heap_number); 181 &not_heap_number);
190 assembler.Goto(&is_number); 182 assembler->Goto(&is_number);
191 } 183 }
192 184
193 assembler.Bind(&is_number); 185 assembler->Bind(&is_number);
194 { assembler.Return(assembler.NumberToString(context, input)); } 186 { assembler->Return(assembler->NumberToString(context, input)); }
195 187
196 assembler.Bind(&not_heap_number); 188 assembler->Bind(&not_heap_number);
197 { 189 {
198 assembler.GotoIf( 190 assembler->GotoIf(
199 assembler.Word32NotEqual(input_instance_type, 191 assembler->Word32NotEqual(input_instance_type,
200 assembler.Int32Constant(ODDBALL_TYPE)), 192 assembler->Int32Constant(ODDBALL_TYPE)),
201 &runtime); 193 &runtime);
202 assembler.Return( 194 assembler->Return(
203 assembler.LoadObjectField(input, Oddball::kToStringOffset)); 195 assembler->LoadObjectField(input, Oddball::kToStringOffset));
204 } 196 }
205 197
206 assembler.Bind(&runtime); 198 assembler->Bind(&runtime);
207 { 199 {
208 assembler.Return(assembler.CallRuntime(Runtime::kToString, context, input)); 200 assembler->Return(
201 assembler->CallRuntime(Runtime::kToString, context, input));
209 } 202 }
210 } 203 }
211 204
212 Handle<Code> Builtins::OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint) { 205 Handle<Code> Builtins::OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint) {
213 switch (hint) { 206 switch (hint) {
214 case OrdinaryToPrimitiveHint::kNumber: 207 case OrdinaryToPrimitiveHint::kNumber:
215 return OrdinaryToPrimitive_Number(); 208 return OrdinaryToPrimitive_Number();
216 case OrdinaryToPrimitiveHint::kString: 209 case OrdinaryToPrimitiveHint::kString:
217 return OrdinaryToPrimitive_String(); 210 return OrdinaryToPrimitive_String();
218 } 211 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 } 276 }
284 277
285 assembler->TailCallRuntime(Runtime::kThrowCannotConvertToPrimitive, context); 278 assembler->TailCallRuntime(Runtime::kThrowCannotConvertToPrimitive, context);
286 279
287 assembler->Bind(&return_result); 280 assembler->Bind(&return_result);
288 assembler->Return(var_result.value()); 281 assembler->Return(var_result.value());
289 } 282 }
290 } // anonymous namespace 283 } // anonymous namespace
291 284
292 void Builtins::Generate_OrdinaryToPrimitive_Number( 285 void Builtins::Generate_OrdinaryToPrimitive_Number(
293 compiler::CodeAssemblerState* state) { 286 CodeStubAssembler* assembler) {
294 CodeStubAssembler assembler(state); 287 Generate_OrdinaryToPrimitive(assembler, OrdinaryToPrimitiveHint::kNumber);
295 Generate_OrdinaryToPrimitive(&assembler, OrdinaryToPrimitiveHint::kNumber);
296 } 288 }
297 289
298 void Builtins::Generate_OrdinaryToPrimitive_String( 290 void Builtins::Generate_OrdinaryToPrimitive_String(
299 compiler::CodeAssemblerState* state) { 291 CodeStubAssembler* assembler) {
300 CodeStubAssembler assembler(state); 292 Generate_OrdinaryToPrimitive(assembler, OrdinaryToPrimitiveHint::kString);
301 Generate_OrdinaryToPrimitive(&assembler, OrdinaryToPrimitiveHint::kString);
302 } 293 }
303 294
304 // ES6 section 7.1.2 ToBoolean ( argument ) 295 // ES6 section 7.1.2 ToBoolean ( argument )
305 void Builtins::Generate_ToBoolean(compiler::CodeAssemblerState* state) { 296 void Builtins::Generate_ToBoolean(CodeStubAssembler* assembler) {
306 typedef compiler::Node Node; 297 typedef compiler::Node Node;
307 typedef CodeStubAssembler::Label Label; 298 typedef CodeStubAssembler::Label Label;
308 typedef TypeConversionDescriptor Descriptor; 299 typedef TypeConversionDescriptor Descriptor;
309 CodeStubAssembler assembler(state);
310 300
311 Node* value = assembler.Parameter(Descriptor::kArgument); 301 Node* value = assembler->Parameter(Descriptor::kArgument);
312 302
313 Label return_true(&assembler), return_false(&assembler); 303 Label return_true(assembler), return_false(assembler);
314 assembler.BranchIfToBooleanIsTrue(value, &return_true, &return_false); 304 assembler->BranchIfToBooleanIsTrue(value, &return_true, &return_false);
315 305
316 assembler.Bind(&return_true); 306 assembler->Bind(&return_true);
317 assembler.Return(assembler.BooleanConstant(true)); 307 assembler->Return(assembler->BooleanConstant(true));
318 308
319 assembler.Bind(&return_false); 309 assembler->Bind(&return_false);
320 assembler.Return(assembler.BooleanConstant(false)); 310 assembler->Return(assembler->BooleanConstant(false));
321 } 311 }
322 312
323 void Builtins::Generate_ToLength(compiler::CodeAssemblerState* state) { 313 void Builtins::Generate_ToLength(CodeStubAssembler* assembler) {
324 typedef CodeStubAssembler::Label Label; 314 typedef CodeStubAssembler::Label Label;
325 typedef compiler::Node Node; 315 typedef compiler::Node Node;
326 typedef CodeStubAssembler::Variable Variable; 316 typedef CodeStubAssembler::Variable Variable;
327 CodeStubAssembler assembler(state);
328 317
329 Node* context = assembler.Parameter(1); 318 Node* context = assembler->Parameter(1);
330 319
331 // We might need to loop once for ToNumber conversion. 320 // We might need to loop once for ToNumber conversion.
332 Variable var_len(&assembler, MachineRepresentation::kTagged); 321 Variable var_len(assembler, MachineRepresentation::kTagged);
333 Label loop(&assembler, &var_len); 322 Label loop(assembler, &var_len);
334 var_len.Bind(assembler.Parameter(0)); 323 var_len.Bind(assembler->Parameter(0));
335 assembler.Goto(&loop); 324 assembler->Goto(&loop);
336 assembler.Bind(&loop); 325 assembler->Bind(&loop);
337 { 326 {
338 // Shared entry points. 327 // Shared entry points.
339 Label return_len(&assembler), 328 Label return_len(assembler),
340 return_two53minus1(&assembler, Label::kDeferred), 329 return_two53minus1(assembler, Label::kDeferred),
341 return_zero(&assembler, Label::kDeferred); 330 return_zero(assembler, Label::kDeferred);
342 331
343 // Load the current {len} value. 332 // Load the current {len} value.
344 Node* len = var_len.value(); 333 Node* len = var_len.value();
345 334
346 // Check if {len} is a positive Smi. 335 // Check if {len} is a positive Smi.
347 assembler.GotoIf(assembler.WordIsPositiveSmi(len), &return_len); 336 assembler->GotoIf(assembler->WordIsPositiveSmi(len), &return_len);
348 337
349 // Check if {len} is a (negative) Smi. 338 // Check if {len} is a (negative) Smi.
350 assembler.GotoIf(assembler.TaggedIsSmi(len), &return_zero); 339 assembler->GotoIf(assembler->TaggedIsSmi(len), &return_zero);
351 340
352 // Check if {len} is a HeapNumber. 341 // Check if {len} is a HeapNumber.
353 Label if_lenisheapnumber(&assembler), 342 Label if_lenisheapnumber(assembler),
354 if_lenisnotheapnumber(&assembler, Label::kDeferred); 343 if_lenisnotheapnumber(assembler, Label::kDeferred);
355 assembler.Branch(assembler.IsHeapNumberMap(assembler.LoadMap(len)), 344 assembler->Branch(assembler->IsHeapNumberMap(assembler->LoadMap(len)),
356 &if_lenisheapnumber, &if_lenisnotheapnumber); 345 &if_lenisheapnumber, &if_lenisnotheapnumber);
357 346
358 assembler.Bind(&if_lenisheapnumber); 347 assembler->Bind(&if_lenisheapnumber);
359 { 348 {
360 // Load the floating-point value of {len}. 349 // Load the floating-point value of {len}.
361 Node* len_value = assembler.LoadHeapNumberValue(len); 350 Node* len_value = assembler->LoadHeapNumberValue(len);
362 351
363 // Check if {len} is not greater than zero. 352 // Check if {len} is not greater than zero.
364 assembler.GotoUnless(assembler.Float64GreaterThan( 353 assembler->GotoUnless(assembler->Float64GreaterThan(
365 len_value, assembler.Float64Constant(0.0)), 354 len_value, assembler->Float64Constant(0.0)),
366 &return_zero); 355 &return_zero);
367 356
368 // Check if {len} is greater than or equal to 2^53-1. 357 // Check if {len} is greater than or equal to 2^53-1.
369 assembler.GotoIf( 358 assembler->GotoIf(
370 assembler.Float64GreaterThanOrEqual( 359 assembler->Float64GreaterThanOrEqual(
371 len_value, assembler.Float64Constant(kMaxSafeInteger)), 360 len_value, assembler->Float64Constant(kMaxSafeInteger)),
372 &return_two53minus1); 361 &return_two53minus1);
373 362
374 // Round the {len} towards -Infinity. 363 // Round the {len} towards -Infinity.
375 Node* value = assembler.Float64Floor(len_value); 364 Node* value = assembler->Float64Floor(len_value);
376 Node* result = assembler.ChangeFloat64ToTagged(value); 365 Node* result = assembler->ChangeFloat64ToTagged(value);
377 assembler.Return(result); 366 assembler->Return(result);
378 } 367 }
379 368
380 assembler.Bind(&if_lenisnotheapnumber); 369 assembler->Bind(&if_lenisnotheapnumber);
381 { 370 {
382 // Need to convert {len} to a Number first. 371 // Need to convert {len} to a Number first.
383 Callable callable = CodeFactory::NonNumberToNumber(assembler.isolate()); 372 Callable callable = CodeFactory::NonNumberToNumber(assembler->isolate());
384 var_len.Bind(assembler.CallStub(callable, context, len)); 373 var_len.Bind(assembler->CallStub(callable, context, len));
385 assembler.Goto(&loop); 374 assembler->Goto(&loop);
386 } 375 }
387 376
388 assembler.Bind(&return_len); 377 assembler->Bind(&return_len);
389 assembler.Return(var_len.value()); 378 assembler->Return(var_len.value());
390 379
391 assembler.Bind(&return_two53minus1); 380 assembler->Bind(&return_two53minus1);
392 assembler.Return(assembler.NumberConstant(kMaxSafeInteger)); 381 assembler->Return(assembler->NumberConstant(kMaxSafeInteger));
393 382
394 assembler.Bind(&return_zero); 383 assembler->Bind(&return_zero);
395 assembler.Return(assembler.SmiConstant(Smi::kZero)); 384 assembler->Return(assembler->SmiConstant(Smi::kZero));
396 } 385 }
397 } 386 }
398 387
399 void Builtins::Generate_ToInteger(compiler::CodeAssemblerState* state) { 388 void Builtins::Generate_ToInteger(CodeStubAssembler* assembler) {
400 typedef TypeConversionDescriptor Descriptor; 389 typedef TypeConversionDescriptor Descriptor;
401 CodeStubAssembler assembler(state);
402 390
403 compiler::Node* input = assembler.Parameter(Descriptor::kArgument); 391 compiler::Node* input = assembler->Parameter(Descriptor::kArgument);
404 compiler::Node* context = assembler.Parameter(Descriptor::kContext); 392 compiler::Node* context = assembler->Parameter(Descriptor::kContext);
405 393
406 assembler.Return(assembler.ToInteger(context, input)); 394 assembler->Return(assembler->ToInteger(context, input));
407 } 395 }
408 396
409 // ES6 section 7.1.13 ToObject (argument) 397 // ES6 section 7.1.13 ToObject (argument)
410 void Builtins::Generate_ToObject(compiler::CodeAssemblerState* state) { 398 void Builtins::Generate_ToObject(CodeStubAssembler* assembler) {
411 typedef compiler::Node Node; 399 typedef compiler::Node Node;
412 typedef CodeStubAssembler::Label Label; 400 typedef CodeStubAssembler::Label Label;
413 typedef CodeStubAssembler::Variable Variable; 401 typedef CodeStubAssembler::Variable Variable;
414 typedef TypeConversionDescriptor Descriptor; 402 typedef TypeConversionDescriptor Descriptor;
415 CodeStubAssembler assembler(state);
416 403
417 Label if_number(&assembler, Label::kDeferred), if_notsmi(&assembler), 404 Label if_number(assembler, Label::kDeferred), if_notsmi(assembler),
418 if_jsreceiver(&assembler), if_noconstructor(&assembler, Label::kDeferred), 405 if_jsreceiver(assembler), if_noconstructor(assembler, Label::kDeferred),
419 if_wrapjsvalue(&assembler); 406 if_wrapjsvalue(assembler);
420 407
421 Node* object = assembler.Parameter(Descriptor::kArgument); 408 Node* object = assembler->Parameter(Descriptor::kArgument);
422 Node* context = assembler.Parameter(Descriptor::kContext); 409 Node* context = assembler->Parameter(Descriptor::kContext);
423 410
424 Variable constructor_function_index_var(&assembler, 411 Variable constructor_function_index_var(assembler,
425 MachineType::PointerRepresentation()); 412 MachineType::PointerRepresentation());
426 413
427 assembler.Branch(assembler.TaggedIsSmi(object), &if_number, &if_notsmi); 414 assembler->Branch(assembler->TaggedIsSmi(object), &if_number, &if_notsmi);
428 415
429 assembler.Bind(&if_notsmi); 416 assembler->Bind(&if_notsmi);
430 Node* map = assembler.LoadMap(object); 417 Node* map = assembler->LoadMap(object);
431 418
432 assembler.GotoIf(assembler.IsHeapNumberMap(map), &if_number); 419 assembler->GotoIf(assembler->IsHeapNumberMap(map), &if_number);
433 420
434 Node* instance_type = assembler.LoadMapInstanceType(map); 421 Node* instance_type = assembler->LoadMapInstanceType(map);
435 assembler.GotoIf(assembler.IsJSReceiverInstanceType(instance_type), 422 assembler->GotoIf(assembler->IsJSReceiverInstanceType(instance_type),
436 &if_jsreceiver); 423 &if_jsreceiver);
437 424
438 Node* constructor_function_index = 425 Node* constructor_function_index =
439 assembler.LoadMapConstructorFunctionIndex(map); 426 assembler->LoadMapConstructorFunctionIndex(map);
440 assembler.GotoIf(assembler.WordEqual(constructor_function_index, 427 assembler->GotoIf(assembler->WordEqual(constructor_function_index,
441 assembler.IntPtrConstant( 428 assembler->IntPtrConstant(
442 Map::kNoConstructorFunctionIndex)), 429 Map::kNoConstructorFunctionIndex)),
443 &if_noconstructor); 430 &if_noconstructor);
444 constructor_function_index_var.Bind(constructor_function_index); 431 constructor_function_index_var.Bind(constructor_function_index);
445 assembler.Goto(&if_wrapjsvalue); 432 assembler->Goto(&if_wrapjsvalue);
446 433
447 assembler.Bind(&if_number); 434 assembler->Bind(&if_number);
448 constructor_function_index_var.Bind( 435 constructor_function_index_var.Bind(
449 assembler.IntPtrConstant(Context::NUMBER_FUNCTION_INDEX)); 436 assembler->IntPtrConstant(Context::NUMBER_FUNCTION_INDEX));
450 assembler.Goto(&if_wrapjsvalue); 437 assembler->Goto(&if_wrapjsvalue);
451 438
452 assembler.Bind(&if_wrapjsvalue); 439 assembler->Bind(&if_wrapjsvalue);
453 Node* native_context = assembler.LoadNativeContext(context); 440 Node* native_context = assembler->LoadNativeContext(context);
454 Node* constructor = assembler.LoadFixedArrayElement( 441 Node* constructor = assembler->LoadFixedArrayElement(
455 native_context, constructor_function_index_var.value(), 0, 442 native_context, constructor_function_index_var.value(), 0,
456 CodeStubAssembler::INTPTR_PARAMETERS); 443 CodeStubAssembler::INTPTR_PARAMETERS);
457 Node* initial_map = assembler.LoadObjectField( 444 Node* initial_map = assembler->LoadObjectField(
458 constructor, JSFunction::kPrototypeOrInitialMapOffset); 445 constructor, JSFunction::kPrototypeOrInitialMapOffset);
459 Node* js_value = assembler.Allocate(JSValue::kSize); 446 Node* js_value = assembler->Allocate(JSValue::kSize);
460 assembler.StoreMapNoWriteBarrier(js_value, initial_map); 447 assembler->StoreMapNoWriteBarrier(js_value, initial_map);
461 assembler.StoreObjectFieldRoot(js_value, JSValue::kPropertiesOffset, 448 assembler->StoreObjectFieldRoot(js_value, JSValue::kPropertiesOffset,
462 Heap::kEmptyFixedArrayRootIndex); 449 Heap::kEmptyFixedArrayRootIndex);
463 assembler.StoreObjectFieldRoot(js_value, JSObject::kElementsOffset, 450 assembler->StoreObjectFieldRoot(js_value, JSObject::kElementsOffset,
464 Heap::kEmptyFixedArrayRootIndex); 451 Heap::kEmptyFixedArrayRootIndex);
465 assembler.StoreObjectField(js_value, JSValue::kValueOffset, object); 452 assembler->StoreObjectField(js_value, JSValue::kValueOffset, object);
466 assembler.Return(js_value); 453 assembler->Return(js_value);
467 454
468 assembler.Bind(&if_noconstructor); 455 assembler->Bind(&if_noconstructor);
469 assembler.TailCallRuntime( 456 assembler->TailCallRuntime(
470 Runtime::kThrowUndefinedOrNullToObject, context, 457 Runtime::kThrowUndefinedOrNullToObject, context,
471 assembler.HeapConstant( 458 assembler->HeapConstant(assembler->factory()->NewStringFromAsciiChecked(
472 assembler.factory()->NewStringFromAsciiChecked("ToObject", TENURED))); 459 "ToObject", TENURED)));
473 460
474 assembler.Bind(&if_jsreceiver); 461 assembler->Bind(&if_jsreceiver);
475 assembler.Return(object); 462 assembler->Return(object);
476 } 463 }
477 464
478 // ES6 section 12.5.5 typeof operator 465 // ES6 section 12.5.5 typeof operator
479 void Builtins::Generate_Typeof(compiler::CodeAssemblerState* state) { 466 void Builtins::Generate_Typeof(CodeStubAssembler* assembler) {
480 typedef compiler::Node Node; 467 typedef compiler::Node Node;
481 typedef TypeofDescriptor Descriptor; 468 typedef TypeofDescriptor Descriptor;
482 CodeStubAssembler assembler(state);
483 469
484 Node* object = assembler.Parameter(Descriptor::kObject); 470 Node* object = assembler->Parameter(Descriptor::kObject);
485 Node* context = assembler.Parameter(Descriptor::kContext); 471 Node* context = assembler->Parameter(Descriptor::kContext);
486 472
487 assembler.Return(assembler.Typeof(object, context)); 473 assembler->Return(assembler->Typeof(object, context));
488 } 474 }
489 475
490 } // namespace internal 476 } // namespace internal
491 } // namespace v8 477 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins-boolean.cc ('k') | src/builtins/builtins-date.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698