| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 23f5a0a142b75636f24dda1fd9c5bd45fdc21b59..b5c4eabf7a95010a9d94948abe36b1a1e0cb603c 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -3508,16 +3508,15 @@ HAllocate* HGraphBuilder::JSArrayBuilder::AllocateArray(
|
| }
|
|
|
|
|
| -HValue* HGraphBuilder::AddLoadJSBuiltin(Builtins::JavaScript builtin) {
|
| +HValue* HGraphBuilder::AddLoadJSBuiltin(int context_index) {
|
| HValue* global_object = Add<HLoadNamedField>(
|
| context(), nullptr,
|
| HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
|
| HObjectAccess access = HObjectAccess::ForObservableJSObjectOffset(
|
| - GlobalObject::kBuiltinsOffset);
|
| - HValue* builtins = Add<HLoadNamedField>(global_object, nullptr, access);
|
| - HObjectAccess function_access = HObjectAccess::ForObservableJSObjectOffset(
|
| - JSBuiltinsObject::OffsetOfFunctionWithId(builtin));
|
| - return Add<HLoadNamedField>(builtins, nullptr, function_access);
|
| + GlobalObject::kNativeContextOffset);
|
| + HValue* native_context = Add<HLoadNamedField>(global_object, nullptr, access);
|
| + HObjectAccess function_access = HObjectAccess::ForContextSlot(context_index);
|
| + return Add<HLoadNamedField>(native_context, nullptr, function_access);
|
| }
|
|
|
|
|
| @@ -10911,7 +10910,8 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| left = BuildNumberToString(left, left_type);
|
| } else if (!left_type->Is(Type::String())) {
|
| DCHECK(right_type->Is(Type::String()));
|
| - HValue* function = AddLoadJSBuiltin(Builtins::STRING_ADD_RIGHT);
|
| + HValue* function =
|
| + AddLoadJSBuiltin(Context::STRING_ADD_RIGHT_BUILTIN_INDEX);
|
| Add<HPushArguments>(left, right);
|
| return AddUncasted<HInvokeFunction>(function, 2);
|
| }
|
| @@ -10922,7 +10922,8 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| right = BuildNumberToString(right, right_type);
|
| } else if (!right_type->Is(Type::String())) {
|
| DCHECK(left_type->Is(Type::String()));
|
| - HValue* function = AddLoadJSBuiltin(Builtins::STRING_ADD_LEFT);
|
| + HValue* function =
|
| + AddLoadJSBuiltin(Context::STRING_ADD_LEFT_BUILTIN_INDEX);
|
| Add<HPushArguments>(left, right);
|
| return AddUncasted<HInvokeFunction>(function, 2);
|
| }
|
| @@ -10990,7 +10991,7 @@ HValue* HGraphBuilder::BuildBinaryOperation(
|
| // operation in optimized code, which is more expensive, than a stub call.
|
| if (graph()->info()->IsStub() && is_non_primitive) {
|
| HValue* function =
|
| - AddLoadJSBuiltin(BinaryOpIC::TokenToJSBuiltin(op, strength));
|
| + AddLoadJSBuiltin(BinaryOpIC::TokenToContextIndex(op, strength));
|
| Add<HPushArguments>(left, right);
|
| instr = AddUncasted<HInvokeFunction>(function, 2);
|
| } else {
|
| @@ -11352,7 +11353,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| return ast_context()->ReturnInstruction(result, expr->id());
|
|
|
| } else if (op == Token::IN) {
|
| - HValue* function = AddLoadJSBuiltin(Builtins::IN);
|
| + HValue* function = AddLoadJSBuiltin(Context::IN_BUILTIN_INDEX);
|
| Add<HPushArguments>(left, right);
|
| // TODO(olivf) InvokeFunction produces a check for the parameter count,
|
| // even though we are certain to pass the correct number of arguments here.
|
|
|