Index: src/compiler/js-context-specialization.cc |
diff --git a/src/compiler/js-context-specialization.cc b/src/compiler/js-context-specialization.cc |
index a39b66fbc85a002665117d75a26ad20cc7ce8114..bb44f5928bb0efe87537c116b605189550f6ea49 100644 |
--- a/src/compiler/js-context-specialization.cc |
+++ b/src/compiler/js-context-specialization.cc |
@@ -5,9 +5,11 @@ |
#include "src/compiler/js-context-specialization.h" |
#include "src/compiler/common-operator.h" |
+#include "src/compiler/js-graph.h" |
#include "src/compiler/js-operator.h" |
#include "src/compiler/node-matchers.h" |
#include "src/compiler/node-properties.h" |
+#include "src/contexts.h" |
namespace v8 { |
namespace internal { |
@@ -27,7 +29,7 @@ Reduction JSContextSpecializer::Reduce(Node* node) { |
Reduction JSContextSpecializer::ReduceJSLoadContext(Node* node) { |
DCHECK_EQ(IrOpcode::kJSLoadContext, node->opcode()); |
- HeapObjectMatcher<Context> m(NodeProperties::GetValueInput(node, 0)); |
+ HeapObjectMatcher m(NodeProperties::GetValueInput(node, 0)); |
// If the context is not constant, no reduction can occur. |
if (!m.HasValue()) { |
return NoChange(); |
@@ -36,9 +38,9 @@ Reduction JSContextSpecializer::ReduceJSLoadContext(Node* node) { |
const ContextAccess& access = ContextAccessOf(node->op()); |
// Find the right parent context. |
- Context* context = *m.Value().handle(); |
+ Handle<Context> context = Handle<Context>::cast(m.Value().handle()); |
for (size_t i = access.depth(); i > 0; --i) { |
- context = context->previous(); |
+ context = handle(context->previous(), isolate()); |
} |
// If the access itself is mutable, only fold-in the parent. |
@@ -50,13 +52,11 @@ Reduction JSContextSpecializer::ReduceJSLoadContext(Node* node) { |
const Operator* op = jsgraph_->javascript()->LoadContext( |
0, access.index(), access.immutable()); |
node->set_op(op); |
- Handle<Object> context_handle = |
- Handle<Object>(context, jsgraph_->isolate()); |
- node->ReplaceInput(0, jsgraph_->Constant(context_handle)); |
+ node->ReplaceInput(0, jsgraph_->Constant(context)); |
return Changed(node); |
} |
- Handle<Object> value = Handle<Object>( |
- context->get(static_cast<int>(access.index())), jsgraph_->isolate()); |
+ Handle<Object> value = |
+ handle(context->get(static_cast<int>(access.index())), isolate()); |
// Even though the context slot is immutable, the context might have escaped |
// before the function to which it belongs has initialized the slot. |
@@ -78,7 +78,7 @@ Reduction JSContextSpecializer::ReduceJSLoadContext(Node* node) { |
Reduction JSContextSpecializer::ReduceJSStoreContext(Node* node) { |
DCHECK_EQ(IrOpcode::kJSStoreContext, node->opcode()); |
- HeapObjectMatcher<Context> m(NodeProperties::GetValueInput(node, 0)); |
+ HeapObjectMatcher m(NodeProperties::GetValueInput(node, 0)); |
// If the context is not constant, no reduction can occur. |
if (!m.HasValue()) { |
return NoChange(); |
@@ -92,20 +92,24 @@ Reduction JSContextSpecializer::ReduceJSStoreContext(Node* node) { |
} |
// Find the right parent context. |
- Context* context = *m.Value().handle(); |
+ Handle<Context> context = Handle<Context>::cast(m.Value().handle()); |
for (size_t i = access.depth(); i > 0; --i) { |
- context = context->previous(); |
+ context = handle(context->previous(), isolate()); |
} |
- const Operator* op = jsgraph_->javascript()->StoreContext(0, access.index()); |
- node->set_op(op); |
- Handle<Object> new_context_handle = |
- Handle<Object>(context, jsgraph_->isolate()); |
- node->ReplaceInput(0, jsgraph_->Constant(new_context_handle)); |
- |
+ node->set_op(javascript()->StoreContext(0, access.index())); |
+ node->ReplaceInput(0, jsgraph_->Constant(context)); |
return Changed(node); |
} |
+ |
+Isolate* JSContextSpecializer::isolate() const { return jsgraph()->isolate(); } |
+ |
+ |
+JSOperatorBuilder* JSContextSpecializer::javascript() const { |
+ return jsgraph()->javascript(); |
+} |
+ |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |