| Index: src/compiler/bytecode-graph-builder.cc
|
| diff --git a/src/compiler/bytecode-graph-builder.cc b/src/compiler/bytecode-graph-builder.cc
|
| index c03b8962c58c39f28fcb1aa9d9a4c0569c5acae5..f5d65160ea33f8ca02823eecf56284c264fb7c8b 100644
|
| --- a/src/compiler/bytecode-graph-builder.cc
|
| +++ b/src/compiler/bytecode-graph-builder.cc
|
| @@ -915,6 +915,33 @@ void BytecodeGraphBuilder::VisitLdaLookupContextSlotInsideTypeof() {
|
| BuildLdaLookupContextSlot(TypeofMode::INSIDE_TYPEOF);
|
| }
|
|
|
| +void BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(TypeofMode typeof_mode) {
|
| + // TODO(leszeks): Build the fast path here.
|
| +
|
| + // Slow path, do a runtime load lookup.
|
| + {
|
| + FrameStateBeforeAndAfter states(this);
|
| +
|
| + Node* name =
|
| + jsgraph()->Constant(bytecode_iterator().GetConstantForIndexOperand(0));
|
| +
|
| + const Operator* op =
|
| + javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF
|
| + ? Runtime::kLoadLookupSlot
|
| + : Runtime::kLoadLookupSlotInsideTypeof);
|
| + Node* value = NewNode(op, name);
|
| + environment()->BindAccumulator(value, &states);
|
| + }
|
| +}
|
| +
|
| +void BytecodeGraphBuilder::VisitLdaLookupGlobalSlot() {
|
| + BuildLdaLookupGlobalSlot(TypeofMode::NOT_INSIDE_TYPEOF);
|
| +}
|
| +
|
| +void BytecodeGraphBuilder::VisitLdaLookupGlobalSlotInsideTypeof() {
|
| + BuildLdaLookupGlobalSlot(TypeofMode::INSIDE_TYPEOF);
|
| +}
|
| +
|
| void BytecodeGraphBuilder::BuildStaLookupSlot(LanguageMode language_mode) {
|
| FrameStateBeforeAndAfter states(this);
|
| Node* value = environment()->LookupAccumulator();
|
|
|