Index: src/interpreter/interpreter.cc |
diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc |
index b1bd1976339f2c37e451cde252565d75c289d5d3..7ebd7e8e4fd7472018fe7253be9114a268473450 100644 |
--- a/src/interpreter/interpreter.cc |
+++ b/src/interpreter/interpreter.cc |
@@ -423,6 +423,77 @@ void Interpreter::DoStaContextSlot(compiler::InterpreterAssembler* assembler) { |
} |
+// LdaLookupSlot <name_index> <context> |
+// |
+// Lookup the object with the name in constant pool entry |name_index| |
+// dynamically. |
+void Interpreter::DoLdaLookupSlot(compiler::InterpreterAssembler* assembler) { |
+ Node* index = __ BytecodeOperandIdx(0); |
+ Node* name = __ LoadConstantPoolEntry(index); |
+ Node* reg_index = __ BytecodeOperandReg(1); |
+ Node* context = __ LoadRegister(reg_index); |
+ Node* result = |
+ __ CallRuntime(Runtime::kInterpreterLoadLookupSlotCallee, context, name); |
+ __ SetAccumulator(result); |
+ __ Dispatch(); |
+} |
+ |
+ |
+// LdaLookupSlotInsideTypeof <name_index> <context> |
+// |
+// Lookup the object with the name in constant pool entry |name_index| |
+// dynamically without causing a NoReferenceError. |
+void Interpreter::DoLdaLookupSlotInsideTypeof( |
+ compiler::InterpreterAssembler* assembler) { |
+ Node* index = __ BytecodeOperandIdx(0); |
+ Node* name = __ LoadConstantPoolEntry(index); |
+ Node* reg_index = __ BytecodeOperandReg(1); |
+ Node* context = __ LoadRegister(reg_index); |
+ Node* result = __ CallRuntime( |
+ Runtime::kInterpreterLoadLookupSlotNoReferenceErrorValue, context, name); |
+ __ SetAccumulator(result); |
+ __ Dispatch(); |
+} |
+ |
+ |
+// StaLookupSlotSloppy <name_index> <context> |
+// |
+// Store the object in accumulator to the object with the name in constant |
+// pool entry |name_index| in sloppy mode. |
+void Interpreter::DoStaLookupSlotSloppy( |
+ compiler::InterpreterAssembler* assembler) { |
+ Node* value = __ GetAccumulator(); |
+ Node* index = __ BytecodeOperandIdx(0); |
+ Node* name = __ LoadConstantPoolEntry(index); |
+ Node* reg_index = __ BytecodeOperandReg(1); |
+ Node* context = __ LoadRegister(reg_index); |
+ Node* language_mode = __ NumberConstant(LanguageMode::SLOPPY); |
+ Node* result = __ CallRuntime(Runtime::kStoreLookupSlot, value, context, name, |
+ language_mode); |
+ __ SetAccumulator(result); |
+ __ Dispatch(); |
+} |
+ |
+ |
+// StaLookupSlotStrict <name_index> <context> |
+// |
+// Store the object in accumulator to the object with the name in constant |
+// pool entry |name_index| in strict mode. |
+void Interpreter::DoStaLookupSlotStrict( |
+ compiler::InterpreterAssembler* assembler) { |
+ Node* value = __ GetAccumulator(); |
+ Node* index = __ BytecodeOperandIdx(0); |
+ Node* name = __ LoadConstantPoolEntry(index); |
+ Node* reg_index = __ BytecodeOperandReg(1); |
+ Node* context = __ LoadRegister(reg_index); |
+ Node* language_mode = __ NumberConstant(LanguageMode::STRICT); |
+ Node* result = __ CallRuntime(Runtime::kStoreLookupSlot, value, context, name, |
+ language_mode); |
+ __ SetAccumulator(result); |
+ __ Dispatch(); |
+} |
+ |
+ |
void Interpreter::DoLoadIC(Callable ic, |
compiler::InterpreterAssembler* assembler) { |
Node* code_target = __ HeapConstant(ic.code()); |