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(); |