| Index: src/compiler/js-generic-lowering.cc
|
| diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc
|
| index bad30ffd0cea10235c2ca995631adc80cc56c94a..d512519948c3ecc8201029791da23f2b9c006205 100644
|
| --- a/src/compiler/js-generic-lowering.cc
|
| +++ b/src/compiler/js-generic-lowering.cc
|
| @@ -186,14 +186,23 @@ void JSGenericLowering::ReplaceWithBuiltinCall(Node* node,
|
| CodeFactory::CallFunction(isolate(), nargs - 1, NO_CALL_FUNCTION_FLAGS);
|
| CallDescriptor* desc = linkage()->GetStubCallDescriptor(
|
| callable.descriptor(), nargs, FlagsForNode(node), properties);
|
| - // TODO(mstarzinger): Accessing the builtins object this way prevents sharing
|
| - // of code across native contexts. Fix this by loading from given context.
|
| - Handle<JSFunction> function(
|
| - JSFunction::cast(info()->context()->builtins()->javascript_builtin(id)));
|
| + Node* global_object = graph()->NewNode(
|
| + machine()->Load(kMachAnyTagged), NodeProperties::GetContextInput(node),
|
| + jsgraph()->IntPtrConstant(
|
| + Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)),
|
| + NodeProperties::GetEffectInput(node), graph()->start());
|
| + Node* builtins_object = graph()->NewNode(
|
| + machine()->Load(kMachAnyTagged), global_object,
|
| + jsgraph()->IntPtrConstant(GlobalObject::kBuiltinsOffset - kHeapObjectTag),
|
| + NodeProperties::GetEffectInput(node), graph()->start());
|
| + Node* function = graph()->NewNode(
|
| + machine()->Load(kMachAnyTagged), builtins_object,
|
| + jsgraph()->IntPtrConstant(JSBuiltinsObject::OffsetOfFunctionWithId(id) -
|
| + kHeapObjectTag),
|
| + NodeProperties::GetEffectInput(node), graph()->start());
|
| Node* stub_code = jsgraph()->HeapConstant(callable.code());
|
| - Node* function_node = jsgraph()->HeapConstant(function);
|
| PatchInsertInput(node, 0, stub_code);
|
| - PatchInsertInput(node, 1, function_node);
|
| + PatchInsertInput(node, 1, function);
|
| PatchOperator(node, common()->Call(desc));
|
| }
|
|
|
| @@ -291,8 +300,8 @@ void JSGenericLowering::LowerJSStoreNamed(Node* node) {
|
|
|
| void JSGenericLowering::LowerJSDeleteProperty(Node* node) {
|
| StrictMode strict_mode = OpParameter<StrictMode>(node);
|
| - PatchInsertInput(node, 2, jsgraph()->SmiConstant(strict_mode));
|
| ReplaceWithBuiltinCall(node, Builtins::DELETE, 3);
|
| + PatchInsertInput(node, 4, jsgraph()->SmiConstant(strict_mode));
|
| }
|
|
|
|
|
|
|