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

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

Issue 1531693002: [Interpreter] Implement ForIn in bytecode graph builder. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@oth-0009-phi
Patch Set: Re-work ForInPrepare. Created 5 years 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 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 case Bytecode::kTestInstanceOf: 630 case Bytecode::kTestInstanceOf:
631 case Bytecode::kTestIn: 631 case Bytecode::kTestIn:
632 case Bytecode::kForInDone: 632 case Bytecode::kForInDone:
633 return false; 633 return false;
634 default: 634 default:
635 return true; 635 return true;
636 } 636 }
637 } 637 }
638 638
639 639
640 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToJSObject() {
641 Output(Bytecode::kToObject);
642 return *this;
643 }
644
645
646 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToName() { 640 BytecodeArrayBuilder& BytecodeArrayBuilder::CastAccumulatorToName() {
647 if (LastBytecodeInSameBlock()) { 641 if (LastBytecodeInSameBlock()) {
648 PreviousBytecodeHelper previous_bytecode(*this); 642 PreviousBytecodeHelper previous_bytecode(*this);
649 switch (previous_bytecode.GetBytecode()) { 643 switch (previous_bytecode.GetBytecode()) {
650 case Bytecode::kToName: 644 case Bytecode::kToName:
651 case Bytecode::kTypeOf: 645 case Bytecode::kTypeOf:
652 return *this; 646 return *this;
653 case Bytecode::kLdaConstantWide: 647 case Bytecode::kLdaConstantWide:
654 case Bytecode::kLdaConstant: { 648 case Bytecode::kLdaConstant: {
655 Handle<Object> object = previous_bytecode.GetConstantForIndexOperand(0); 649 Handle<Object> object = previous_bytecode.GetConstantForIndexOperand(0);
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 } 843 }
850 844
851 845
852 BytecodeArrayBuilder& BytecodeArrayBuilder::Return() { 846 BytecodeArrayBuilder& BytecodeArrayBuilder::Return() {
853 Output(Bytecode::kReturn); 847 Output(Bytecode::kReturn);
854 exit_seen_in_block_ = true; 848 exit_seen_in_block_ = true;
855 return *this; 849 return *this;
856 } 850 }
857 851
858 852
859 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInPrepare(Register receiver) { 853 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInPrepare(
860 Output(Bytecode::kForInPrepare, receiver.ToOperand()); 854 Register receiver, Register cache_type, Register cache_array,
855 Register cache_length) {
856 Output(Bytecode::kForInPrepare, receiver.ToOperand(), cache_type.ToOperand(),
857 cache_array.ToOperand(), cache_length.ToOperand());
861 return *this; 858 return *this;
862 } 859 }
863 860
864 861
865 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInNext(Register for_in_state, 862 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInNext(Register receiver,
863 Register cache_type,
864 Register cache_array,
866 Register index) { 865 Register index) {
867 Output(Bytecode::kForInNext, for_in_state.ToOperand(), index.ToOperand()); 866 Output(Bytecode::kForInNext, receiver.ToOperand(), cache_type.ToOperand(),
867 cache_array.ToOperand(), index.ToOperand());
868 return *this; 868 return *this;
869 } 869 }
870 870
871 871
872 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInDone(Register for_in_state) { 872 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInDone(Register index,
873 Output(Bytecode::kForInDone, for_in_state.ToOperand()); 873 Register cache_length) {
874 Output(Bytecode::kForInDone, index.ToOperand(), cache_length.ToOperand());
875
874 return *this; 876 return *this;
875 } 877 }
876 878
879
880 BytecodeArrayBuilder& BytecodeArrayBuilder::ForInStep(Register index) {
881 Output(Bytecode::kForInStep, index.ToOperand());
882 return *this;
883 }
884
877 885
878 void BytecodeArrayBuilder::LeaveBasicBlock() { 886 void BytecodeArrayBuilder::LeaveBasicBlock() {
879 last_block_end_ = bytecodes()->size(); 887 last_block_end_ = bytecodes()->size();
880 exit_seen_in_block_ = false; 888 exit_seen_in_block_ = false;
881 } 889 }
882 890
883 891
884 void BytecodeArrayBuilder::EnsureReturn() { 892 void BytecodeArrayBuilder::EnsureReturn() {
885 if (!exit_seen_in_block_) { 893 if (!exit_seen_in_block_) {
886 LoadUndefined(); 894 LoadUndefined();
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 DCHECK_GT(next_consecutive_count_, 0); 1436 DCHECK_GT(next_consecutive_count_, 0);
1429 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); 1437 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_);
1430 allocated_.push_back(next_consecutive_register_); 1438 allocated_.push_back(next_consecutive_register_);
1431 next_consecutive_count_--; 1439 next_consecutive_count_--;
1432 return Register(next_consecutive_register_++); 1440 return Register(next_consecutive_register_++);
1433 } 1441 }
1434 1442
1435 } // namespace interpreter 1443 } // namespace interpreter
1436 } // namespace internal 1444 } // namespace internal
1437 } // namespace v8 1445 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698