Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 56980266af249194862def6a90b425c7364003b7..7c5d7df04366d65053a554cbd0f554c4729685d7 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -5559,6 +5559,17 @@ void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) { |
instr->SetDependsOnFlag(kGlobalVars); |
return ast_context()->ReturnInstruction(instr, expr->id()); |
} |
+ } else if (variable->IsGlobalSlot()) { |
+ DCHECK(variable->index() > 0); |
+ DCHECK(variable->IsStaticGlobalObjectProperty()); |
+ // Each var occupies two slots in the context: for reads and writes. |
+ int slot_index = variable->index(); |
+ int depth = scope()->ContextChainLength(variable->scope()); |
+ |
+ HLoadGlobalViaContext* instr = |
+ New<HLoadGlobalViaContext>(variable->name(), depth, slot_index); |
+ return ast_context()->ReturnInstruction(instr, expr->id()); |
+ |
} else { |
HValue* global_object = Add<HLoadNamedField>( |
context(), nullptr, |
@@ -6780,6 +6791,19 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment( |
if (instr->HasObservableSideEffects()) { |
Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); |
} |
+ } else if (var->IsGlobalSlot()) { |
+ DCHECK(var->index() > 0); |
+ DCHECK(var->IsStaticGlobalObjectProperty()); |
+ // Each var occupies two slots in the context: for reads and writes. |
+ int slot_index = var->index() + 1; |
+ int depth = scope()->ContextChainLength(var->scope()); |
+ |
+ HStoreGlobalViaContext* instr = Add<HStoreGlobalViaContext>( |
+ var->name(), value, depth, slot_index, function_language_mode()); |
+ USE(instr); |
+ DCHECK(instr->HasObservableSideEffects()); |
+ Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); |
+ |
} else { |
HValue* global_object = Add<HLoadNamedField>( |
context(), nullptr, |