| Index: src/interpreter/bytecode-array-builder.cc
|
| diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc
|
| index abee9f78049502746686633adfe77f2d34e3516f..631e29e3761f6eb09cb6886641fbd604306b5cf0 100644
|
| --- a/src/interpreter/bytecode-array-builder.cc
|
| +++ b/src/interpreter/bytecode-array-builder.cc
|
| @@ -32,17 +32,11 @@ void BytecodeArrayBuilder::set_locals_count(int number_of_locals) {
|
| }
|
|
|
|
|
| -int BytecodeArrayBuilder::locals_count() const { return local_register_count_; }
|
| -
|
| -
|
| void BytecodeArrayBuilder::set_parameter_count(int number_of_parameters) {
|
| parameter_count_ = number_of_parameters;
|
| }
|
|
|
|
|
| -int BytecodeArrayBuilder::parameter_count() const { return parameter_count_; }
|
| -
|
| -
|
| void BytecodeArrayBuilder::set_context_count(int number_of_contexts) {
|
| context_register_count_ = number_of_contexts;
|
| DCHECK_GE(local_register_count_, 0);
|
| @@ -64,20 +58,17 @@ Register BytecodeArrayBuilder::last_context_register() const {
|
|
|
| Register BytecodeArrayBuilder::Parameter(int parameter_index) const {
|
| DCHECK_GE(parameter_index, 0);
|
| - DCHECK_LT(parameter_index, parameter_count_);
|
| - return Register::FromParameterIndex(parameter_index, parameter_count_);
|
| + return Register::FromParameterIndex(parameter_index, parameter_count());
|
| }
|
|
|
|
|
| Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray() {
|
| DCHECK_EQ(bytecode_generated_, false);
|
| - DCHECK_GE(parameter_count_, 0);
|
| - DCHECK_GE(local_register_count_, 0);
|
|
|
| EnsureReturn();
|
|
|
| int bytecode_size = static_cast<int>(bytecodes_.size());
|
| - int register_count = local_register_count_ + temporary_register_count_;
|
| + int register_count = fixed_register_count() + temporary_register_count_;
|
| int frame_size = register_count * kPointerSize;
|
|
|
| Factory* factory = isolate_->factory();
|
| @@ -90,7 +81,7 @@ Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray() {
|
|
|
| Handle<BytecodeArray> output =
|
| factory->NewBytecodeArray(bytecode_size, &bytecodes_.front(), frame_size,
|
| - parameter_count_, constant_pool);
|
| + parameter_count(), constant_pool);
|
| bytecode_generated_ = true;
|
| return output;
|
| }
|
| @@ -291,6 +282,19 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadContextSlot(Register context,
|
| }
|
|
|
|
|
| +BytecodeArrayBuilder& BytecodeArrayBuilder::StoreContextSlot(Register context,
|
| + int slot_index) {
|
| + DCHECK(slot_index >= 0);
|
| + if (FitsInIdx8Operand(slot_index)) {
|
| + Output(Bytecode::kStaContextSlot, context.ToOperand(),
|
| + static_cast<uint8_t>(slot_index));
|
| + } else {
|
| + UNIMPLEMENTED();
|
| + }
|
| + return *this;
|
| +}
|
| +
|
| +
|
| BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
|
| Register object, int feedback_slot, LanguageMode language_mode) {
|
| Bytecode bytecode = BytecodeForLoadIC(language_mode);
|
| @@ -630,9 +634,8 @@ size_t BytecodeArrayBuilder::GetConstantPoolEntry(Handle<Object> object) {
|
|
|
|
|
| int BytecodeArrayBuilder::BorrowTemporaryRegister() {
|
| - DCHECK_GE(local_register_count_, 0);
|
| int temporary_reg_index = temporary_register_next_++;
|
| - int count = temporary_register_next_ - local_register_count_;
|
| + int count = temporary_register_next_ - fixed_register_count();
|
| if (count > temporary_register_count_) {
|
| temporary_register_count_ = count;
|
| }
|
| @@ -663,8 +666,8 @@ bool BytecodeArrayBuilder::OperandIsValid(Bytecode bytecode, int operand_index,
|
| if (reg.is_function_context() || reg.is_function_closure()) {
|
| return true;
|
| } else if (reg.is_parameter()) {
|
| - int parameter_index = reg.ToParameterIndex(parameter_count_);
|
| - return parameter_index >= 0 && parameter_index < parameter_count_;
|
| + int parameter_index = reg.ToParameterIndex(parameter_count());
|
| + return parameter_index >= 0 && parameter_index < parameter_count();
|
| } else {
|
| return (reg.index() >= 0 && reg.index() < temporary_register_next_);
|
| }
|
|
|