Index: src/interpreter/bytecode-array-builder.cc |
diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc |
index 1e7f824a4a97e349a98fb8e43f5877456f66ba0f..a41d332a307db4f2e6e57d1bde2f6fcb3873f996 100644 |
--- a/src/interpreter/bytecode-array-builder.cc |
+++ b/src/interpreter/bytecode-array-builder.cc |
@@ -264,10 +264,12 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister( |
} |
-BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(int slot_index) { |
- DCHECK(slot_index >= 0); |
- if (FitsInIdx8Operand(slot_index)) { |
- Output(Bytecode::kLdaGlobal, static_cast<uint8_t>(slot_index)); |
+BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal( |
+ size_t name_index, int feedback_slot, LanguageMode language_mode) { |
+ Bytecode bytecode = BytecodeForLoadGlobal(language_mode); |
+ if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { |
+ Output(bytecode, static_cast<uint8_t>(name_index), |
+ static_cast<uint8_t>(feedback_slot)); |
} else { |
UNIMPLEMENTED(); |
} |
@@ -276,11 +278,11 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(int slot_index) { |
BytecodeArrayBuilder& BytecodeArrayBuilder::StoreGlobal( |
- int slot_index, LanguageMode language_mode) { |
- DCHECK(slot_index >= 0); |
+ size_t name_index, int feedback_slot, LanguageMode language_mode) { |
Bytecode bytecode = BytecodeForStoreGlobal(language_mode); |
- if (FitsInIdx8Operand(slot_index)) { |
- Output(bytecode, static_cast<uint8_t>(slot_index)); |
+ if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { |
+ Output(bytecode, static_cast<uint8_t>(name_index), |
+ static_cast<uint8_t>(feedback_slot)); |
} else { |
UNIMPLEMENTED(); |
} |
@@ -315,10 +317,12 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreContextSlot(Register context, |
BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty( |
- Register object, int feedback_slot, LanguageMode language_mode) { |
+ Register object, size_t name_index, int feedback_slot, |
+ LanguageMode language_mode) { |
Bytecode bytecode = BytecodeForLoadIC(language_mode); |
- if (FitsInIdx8Operand(feedback_slot)) { |
- Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot)); |
+ if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { |
+ Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index), |
+ static_cast<uint8_t>(feedback_slot)); |
} else { |
UNIMPLEMENTED(); |
} |
@@ -339,11 +343,11 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty( |
BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty( |
- Register object, Register name, int feedback_slot, |
+ Register object, size_t name_index, int feedback_slot, |
LanguageMode language_mode) { |
Bytecode bytecode = BytecodeForStoreIC(language_mode); |
- if (FitsInIdx8Operand(feedback_slot)) { |
- Output(bytecode, object.ToOperand(), name.ToOperand(), |
+ if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { |
+ Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index), |
static_cast<uint8_t>(feedback_slot)); |
} else { |
UNIMPLEMENTED(); |
@@ -919,6 +923,23 @@ Bytecode BytecodeArrayBuilder::BytecodeForKeyedStoreIC( |
// static |
+Bytecode BytecodeArrayBuilder::BytecodeForLoadGlobal( |
Igor Sheludko
2015/10/22 09:58:36
It would be necessary to also propagate a TypeofMo
rmcilroy
2015/10/22 10:13:20
What does TypeofMode get used for, I can't see it
rmcilroy
2015/10/22 13:27:48
Added a TODO in BytecodeGenerator VisitTypeOf for
Igor Sheludko
2015/11/03 17:52:56
See LoadIC::ShoudlThrowReferenceError(). Referenci
rmcilroy
2015/11/03 18:26:12
Yeah, I figured this out and landed the fix in htt
|
+ LanguageMode language_mode) { |
+ switch (language_mode) { |
+ case SLOPPY: |
+ return Bytecode::kLdaGlobalSloppy; |
+ case STRICT: |
+ return Bytecode::kLdaGlobalStrict; |
+ case STRONG: |
+ UNIMPLEMENTED(); |
+ default: |
+ UNREACHABLE(); |
+ } |
+ return static_cast<Bytecode>(-1); |
+} |
+ |
+ |
+// static |
Bytecode BytecodeArrayBuilder::BytecodeForStoreGlobal( |
LanguageMode language_mode) { |
switch (language_mode) { |