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

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 1422033002: [Interpreter] Add support for for..in. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Update comments. Created 5 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
OLDNEW
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/interpreter/bytecode-array-builder.h" 5 #include "src/interpreter/bytecode-array-builder.h"
6 6
7 namespace v8 { 7 namespace v8 {
8 namespace internal { 8 namespace internal {
9 namespace interpreter { 9 namespace interpreter {
10 10
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 256
257 257
258 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadFalse() { 258 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadFalse() {
259 Output(Bytecode::kLdaFalse); 259 Output(Bytecode::kLdaFalse);
260 return *this; 260 return *this;
261 } 261 }
262 262
263 263
264 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadAccumulatorWithRegister( 264 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadAccumulatorWithRegister(
265 Register reg) { 265 Register reg) {
266 // TODO(oth): Avoid loading the accumulator with the register if the
267 // previous bytecode stored the accumulator with the same register.
rmcilroy 2015/10/28 13:46:22 Same could apply for StoreAccumulatorInRegister co
oth 2015/10/28 22:50:40 Comment added.
266 Output(Bytecode::kLdar, reg.ToOperand()); 268 Output(Bytecode::kLdar, reg.ToOperand());
267 return *this; 269 return *this;
268 } 270 }
269 271
270 272
271 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister( 273 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister(
272 Register reg) { 274 Register reg) {
273 Output(Bytecode::kStar, reg.ToOperand()); 275 Output(Bytecode::kStar, reg.ToOperand());
274 return *this; 276 return *this;
275 } 277 }
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 default: 476 default:
475 // Fall through to output kToBoolean. 477 // Fall through to output kToBoolean.
476 break; 478 break;
477 } 479 }
478 } 480 }
479 Output(Bytecode::kToBoolean); 481 Output(Bytecode::kToBoolean);
480 return *this; 482 return *this;
481 } 483 }
482 484
483 485
486 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToJSObject() {
487 Output(Bytecode::kToObject);
488 return *this;
489 }
490
491
484 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToName() { 492 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToName() {
485 Output(Bytecode::kToName); 493 Output(Bytecode::kToName);
486 return *this; 494 return *this;
487 } 495 }
488 496
489 497
490 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToNumber() { 498 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToNumber() {
491 // TODO(rmcilroy): consider omitting if the preceeding bytecode always returns 499 // TODO(rmcilroy): consider omitting if the preceeding bytecode always returns
492 // a number. 500 // a number.
493 Output(Bytecode::kToNumber); 501 Output(Bytecode::kToNumber);
(...skipping 30 matching lines...) Expand all
524 case Bytecode::kJump: 532 case Bytecode::kJump:
525 return Bytecode::kJumpConstant; 533 return Bytecode::kJumpConstant;
526 case Bytecode::kJumpIfTrue: 534 case Bytecode::kJumpIfTrue:
527 return Bytecode::kJumpIfTrueConstant; 535 return Bytecode::kJumpIfTrueConstant;
528 case Bytecode::kJumpIfFalse: 536 case Bytecode::kJumpIfFalse:
529 return Bytecode::kJumpIfFalseConstant; 537 return Bytecode::kJumpIfFalseConstant;
530 case Bytecode::kJumpIfToBooleanTrue: 538 case Bytecode::kJumpIfToBooleanTrue:
531 return Bytecode::kJumpIfToBooleanTrueConstant; 539 return Bytecode::kJumpIfToBooleanTrueConstant;
532 case Bytecode::kJumpIfToBooleanFalse: 540 case Bytecode::kJumpIfToBooleanFalse:
533 return Bytecode::kJumpIfToBooleanFalseConstant; 541 return Bytecode::kJumpIfToBooleanFalseConstant;
542 case Bytecode::kJumpIfNull:
543 return Bytecode::kJumpIfNullConstant;
544 case Bytecode::kJumpIfUndefined:
545 return Bytecode::kJumpIfUndefinedConstant;
534 default: 546 default:
535 UNREACHABLE(); 547 UNREACHABLE();
536 return Bytecode::kJumpConstant; 548 return Bytecode::kJumpConstant;
537 } 549 }
538 } 550 }
539 551
540 552
541 void BytecodeArrayBuilder::PatchJump( 553 void BytecodeArrayBuilder::PatchJump(
542 const ZoneVector<uint8_t>::iterator& jump_target, 554 const ZoneVector<uint8_t>::iterator& jump_target,
543 ZoneVector<uint8_t>::iterator jump_location) { 555 ZoneVector<uint8_t>::iterator jump_location) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 return OutputJump(Bytecode::kJumpIfToBooleanTrue, label); 636 return OutputJump(Bytecode::kJumpIfToBooleanTrue, label);
625 } 637 }
626 638
627 639
628 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfToBooleanFalse( 640 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfToBooleanFalse(
629 BytecodeLabel* label) { 641 BytecodeLabel* label) {
630 return OutputJump(Bytecode::kJumpIfToBooleanFalse, label); 642 return OutputJump(Bytecode::kJumpIfToBooleanFalse, label);
631 } 643 }
632 644
633 645
646 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfNull(BytecodeLabel* label) {
647 return OutputJump(Bytecode::kJumpIfNull, label);
648 }
649
650
651 BytecodeArrayBuilder& BytecodeArrayBuilder::JumpIfUndefined(
652 BytecodeLabel* label) {
653 return OutputJump(Bytecode::kJumpIfUndefined, label);
654 }
655
656
634 BytecodeArrayBuilder& BytecodeArrayBuilder::Throw() { 657 BytecodeArrayBuilder& BytecodeArrayBuilder::Throw() {
635 Output(Bytecode::kThrow); 658 Output(Bytecode::kThrow);
636 exit_seen_in_block_ = true; 659 exit_seen_in_block_ = true;
637 return *this; 660 return *this;
638 } 661 }
639 662
640 663
641 BytecodeArrayBuilder& BytecodeArrayBuilder::Return() { 664 BytecodeArrayBuilder& BytecodeArrayBuilder::Return() {
642 Output(Bytecode::kReturn); 665 Output(Bytecode::kReturn);
643 exit_seen_in_block_ = true; 666 exit_seen_in_block_ = true;
644 return *this; 667 return *this;
645 } 668 }
646 669
647 670
671 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInPrepare(Register receiver) {
672 Output(Bytecode::kForInPrepare, receiver.ToOperand());
673 return *this;
674 }
675
676
677 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInNext(Register for_in_state) {
678 Output(Bytecode::kForInNext, for_in_state.ToOperand());
679 return *this;
680 }
681
682
683 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInDone(Register for_in_state) {
684 Output(Bytecode::kForInDone, for_in_state.ToOperand());
685 return *this;
686 }
687
688
648 BytecodeArrayBuilder& BytecodeArrayBuilder::EnterBlock() { return *this; } 689 BytecodeArrayBuilder& BytecodeArrayBuilder::EnterBlock() { return *this; }
649 690
650 691
651 BytecodeArrayBuilder& BytecodeArrayBuilder::LeaveBlock() { 692 BytecodeArrayBuilder& BytecodeArrayBuilder::LeaveBlock() {
652 last_block_end_ = bytecodes()->size(); 693 last_block_end_ = bytecodes()->size();
653 exit_seen_in_block_ = false; 694 exit_seen_in_block_ = false;
654 return *this; 695 return *this;
655 } 696 }
656 697
657 698
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 DCHECK_GT(next_consecutive_count_, 0); 1148 DCHECK_GT(next_consecutive_count_, 0);
1108 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); 1149 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_);
1109 allocated_.push_back(next_consecutive_register_); 1150 allocated_.push_back(next_consecutive_register_);
1110 next_consecutive_count_--; 1151 next_consecutive_count_--;
1111 return Register(next_consecutive_register_++); 1152 return Register(next_consecutive_register_++);
1112 } 1153 }
1113 1154
1114 } // namespace interpreter 1155 } // namespace interpreter
1115 } // namespace internal 1156 } // namespace internal
1116 } // namespace v8 1157 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698