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.h" | 5 #include "src/builtins/builtins.h" |
6 #include "src/builtins/builtins-utils.h" | 6 #include "src/builtins/builtins-utils.h" |
7 | 7 |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 // Check if the {position} is already a Smi. | 311 // Check if the {position} is already a Smi. |
312 Variable var_position(assembler, MachineRepresentation::kTagged); | 312 Variable var_position(assembler, MachineRepresentation::kTagged); |
313 var_position.Bind(position); | 313 var_position.Bind(position); |
314 Label if_positionissmi(assembler), | 314 Label if_positionissmi(assembler), |
315 if_positionisnotsmi(assembler, Label::kDeferred); | 315 if_positionisnotsmi(assembler, Label::kDeferred); |
316 assembler->Branch(assembler->WordIsSmi(position), &if_positionissmi, | 316 assembler->Branch(assembler->WordIsSmi(position), &if_positionissmi, |
317 &if_positionisnotsmi); | 317 &if_positionisnotsmi); |
318 assembler->Bind(&if_positionisnotsmi); | 318 assembler->Bind(&if_positionisnotsmi); |
319 { | 319 { |
320 // Convert the {position} to an Integer via the ToIntegerStub. | 320 // Convert the {position} to an Integer via the ToIntegerStub. |
321 Callable callable = CodeFactory::ToInteger(assembler->isolate()); | 321 Node* index = assembler->ToInteger(context, position); |
322 Node* index = assembler->CallStub(callable, context, position); | |
323 | 322 |
324 // Check if the resulting {index} is now a Smi. | 323 // Check if the resulting {index} is now a Smi. |
325 Label if_indexissmi(assembler, Label::kDeferred), | 324 Label if_indexissmi(assembler, Label::kDeferred), |
326 if_indexisnotsmi(assembler, Label::kDeferred); | 325 if_indexisnotsmi(assembler, Label::kDeferred); |
327 assembler->Branch(assembler->WordIsSmi(index), &if_indexissmi, | 326 assembler->Branch(assembler->WordIsSmi(index), &if_indexissmi, |
328 &if_indexisnotsmi); | 327 &if_indexisnotsmi); |
329 | 328 |
330 assembler->Bind(&if_indexissmi); | 329 assembler->Bind(&if_indexissmi); |
331 { | 330 { |
332 var_position.Bind(index); | 331 var_position.Bind(index); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 // Check if the {position} is already a Smi. | 405 // Check if the {position} is already a Smi. |
407 Variable var_position(assembler, MachineRepresentation::kTagged); | 406 Variable var_position(assembler, MachineRepresentation::kTagged); |
408 var_position.Bind(position); | 407 var_position.Bind(position); |
409 Label if_positionissmi(assembler), | 408 Label if_positionissmi(assembler), |
410 if_positionisnotsmi(assembler, Label::kDeferred); | 409 if_positionisnotsmi(assembler, Label::kDeferred); |
411 assembler->Branch(assembler->WordIsSmi(position), &if_positionissmi, | 410 assembler->Branch(assembler->WordIsSmi(position), &if_positionissmi, |
412 &if_positionisnotsmi); | 411 &if_positionisnotsmi); |
413 assembler->Bind(&if_positionisnotsmi); | 412 assembler->Bind(&if_positionisnotsmi); |
414 { | 413 { |
415 // Convert the {position} to an Integer via the ToIntegerStub. | 414 // Convert the {position} to an Integer via the ToIntegerStub. |
416 Callable callable = CodeFactory::ToInteger(assembler->isolate()); | 415 Node* index = assembler->ToInteger(context, position); |
417 Node* index = assembler->CallStub(callable, context, position); | |
418 | 416 |
419 // Check if the resulting {index} is now a Smi. | 417 // Check if the resulting {index} is now a Smi. |
420 Label if_indexissmi(assembler, Label::kDeferred), | 418 Label if_indexissmi(assembler, Label::kDeferred), |
421 if_indexisnotsmi(assembler, Label::kDeferred); | 419 if_indexisnotsmi(assembler, Label::kDeferred); |
422 assembler->Branch(assembler->WordIsSmi(index), &if_indexissmi, | 420 assembler->Branch(assembler->WordIsSmi(index), &if_indexissmi, |
423 &if_indexisnotsmi); | 421 &if_indexisnotsmi); |
424 | 422 |
425 assembler->Bind(&if_indexissmi); | 423 assembler->Bind(&if_indexissmi); |
426 { | 424 { |
427 var_position.Bind(index); | 425 var_position.Bind(index); |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
665 } | 663 } |
666 | 664 |
667 iterator->set_string(isolate->heap()->empty_string()); | 665 iterator->set_string(isolate->heap()->empty_string()); |
668 | 666 |
669 return *isolate->factory()->NewJSIteratorResult( | 667 return *isolate->factory()->NewJSIteratorResult( |
670 isolate->factory()->undefined_value(), true); | 668 isolate->factory()->undefined_value(), true); |
671 } | 669 } |
672 | 670 |
673 } // namespace internal | 671 } // namespace internal |
674 } // namespace v8 | 672 } // namespace v8 |
OLD | NEW |