OLD | NEW |
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 678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 BytecodeArrayBuilder& BytecodeArrayBuilder::CallRuntime( | 689 BytecodeArrayBuilder& BytecodeArrayBuilder::CallRuntime( |
690 Runtime::FunctionId function_id, Register first_arg, size_t arg_count) { | 690 Runtime::FunctionId function_id, Register first_arg, size_t arg_count) { |
691 DCHECK(FitsInIdx16Operand(function_id)); | 691 DCHECK(FitsInIdx16Operand(function_id)); |
692 DCHECK(FitsInIdx8Operand(arg_count)); | 692 DCHECK(FitsInIdx8Operand(arg_count)); |
693 Output(Bytecode::kCallRuntime, static_cast<uint16_t>(function_id), | 693 Output(Bytecode::kCallRuntime, static_cast<uint16_t>(function_id), |
694 first_arg.ToOperand(), static_cast<uint8_t>(arg_count)); | 694 first_arg.ToOperand(), static_cast<uint8_t>(arg_count)); |
695 return *this; | 695 return *this; |
696 } | 696 } |
697 | 697 |
698 | 698 |
| 699 BytecodeArrayBuilder& BytecodeArrayBuilder::Delete(Register object, |
| 700 LanguageMode language_mode) { |
| 701 Output(BytecodeForDelete(language_mode), object.ToOperand()); |
| 702 return *this; |
| 703 } |
| 704 |
| 705 |
699 size_t BytecodeArrayBuilder::GetConstantPoolEntry(Handle<Object> object) { | 706 size_t BytecodeArrayBuilder::GetConstantPoolEntry(Handle<Object> object) { |
700 // These constants shouldn't be added to the constant pool, the should use | 707 // These constants shouldn't be added to the constant pool, the should use |
701 // specialzed bytecodes instead. | 708 // specialzed bytecodes instead. |
702 DCHECK(!object.is_identical_to(isolate_->factory()->undefined_value())); | 709 DCHECK(!object.is_identical_to(isolate_->factory()->undefined_value())); |
703 DCHECK(!object.is_identical_to(isolate_->factory()->null_value())); | 710 DCHECK(!object.is_identical_to(isolate_->factory()->null_value())); |
704 DCHECK(!object.is_identical_to(isolate_->factory()->the_hole_value())); | 711 DCHECK(!object.is_identical_to(isolate_->factory()->the_hole_value())); |
705 DCHECK(!object.is_identical_to(isolate_->factory()->true_value())); | 712 DCHECK(!object.is_identical_to(isolate_->factory()->true_value())); |
706 DCHECK(!object.is_identical_to(isolate_->factory()->false_value())); | 713 DCHECK(!object.is_identical_to(isolate_->factory()->false_value())); |
707 | 714 |
708 size_t* entry = constants_map_.Find(object); | 715 size_t* entry = constants_map_.Find(object); |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1009 case CreateArgumentsType::kUnmappedArguments: | 1016 case CreateArgumentsType::kUnmappedArguments: |
1010 return Bytecode::kCreateUnmappedArguments; | 1017 return Bytecode::kCreateUnmappedArguments; |
1011 default: | 1018 default: |
1012 UNREACHABLE(); | 1019 UNREACHABLE(); |
1013 } | 1020 } |
1014 return static_cast<Bytecode>(-1); | 1021 return static_cast<Bytecode>(-1); |
1015 } | 1022 } |
1016 | 1023 |
1017 | 1024 |
1018 // static | 1025 // static |
| 1026 Bytecode BytecodeArrayBuilder::BytecodeForDelete(LanguageMode language_mode) { |
| 1027 switch (language_mode) { |
| 1028 case SLOPPY: |
| 1029 return Bytecode::kDeletePropertySloppy; |
| 1030 case STRICT: |
| 1031 return Bytecode::kDeletePropertyStrict; |
| 1032 case STRONG: |
| 1033 UNIMPLEMENTED(); |
| 1034 default: |
| 1035 UNREACHABLE(); |
| 1036 } |
| 1037 return static_cast<Bytecode>(-1); |
| 1038 } |
| 1039 |
| 1040 |
| 1041 // static |
1019 bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) { | 1042 bool BytecodeArrayBuilder::FitsInIdx8Operand(int value) { |
1020 return kMinUInt8 <= value && value <= kMaxUInt8; | 1043 return kMinUInt8 <= value && value <= kMaxUInt8; |
1021 } | 1044 } |
1022 | 1045 |
1023 | 1046 |
1024 // static | 1047 // static |
1025 bool BytecodeArrayBuilder::FitsInIdx8Operand(size_t value) { | 1048 bool BytecodeArrayBuilder::FitsInIdx8Operand(size_t value) { |
1026 return value <= static_cast<size_t>(kMaxUInt8); | 1049 return value <= static_cast<size_t>(kMaxUInt8); |
1027 } | 1050 } |
1028 | 1051 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1075 DCHECK_GT(next_consecutive_count_, 0); | 1098 DCHECK_GT(next_consecutive_count_, 0); |
1076 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); | 1099 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); |
1077 allocated_.push_back(next_consecutive_register_); | 1100 allocated_.push_back(next_consecutive_register_); |
1078 next_consecutive_count_--; | 1101 next_consecutive_count_--; |
1079 return Register(next_consecutive_register_++); | 1102 return Register(next_consecutive_register_++); |
1080 } | 1103 } |
1081 | 1104 |
1082 } // namespace interpreter | 1105 } // namespace interpreter |
1083 } // namespace internal | 1106 } // namespace internal |
1084 } // namespace v8 | 1107 } // namespace v8 |
OLD | NEW |