| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index ceeca282056abb1f05c63498f7ea73be4c0439f3..c4afafa2d8500b2bffc377d946bddd32eef40bd0 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -6284,7 +6284,7 @@ void HGraphBuilder::VisitProperty(Property* expr) {
|
| }
|
|
|
|
|
| -void HGraphBuilder::AddCheckConstantFunction(Call* expr,
|
| +void HGraphBuilder::AddCheckConstantFunction(Handle<JSObject> holder,
|
| HValue* receiver,
|
| Handle<Map> receiver_map,
|
| bool smi_and_map_check) {
|
| @@ -6296,10 +6296,9 @@ void HGraphBuilder::AddCheckConstantFunction(Call* expr,
|
| AddInstruction(HCheckMaps::NewWithTransitions(receiver, receiver_map,
|
| zone()));
|
| }
|
| - if (!expr->holder().is_null()) {
|
| + if (!holder.is_null()) {
|
| AddInstruction(new(zone()) HCheckPrototypeMaps(
|
| - Handle<JSObject>(JSObject::cast(receiver_map->prototype())),
|
| - expr->holder()));
|
| + Handle<JSObject>(JSObject::cast(receiver_map->prototype())), holder));
|
| }
|
| }
|
|
|
| @@ -6382,7 +6381,7 @@ void HGraphBuilder::HandlePolymorphicCallNamed(Call* expr,
|
|
|
| set_current_block(if_true);
|
| expr->ComputeTarget(map, name);
|
| - AddCheckConstantFunction(expr, receiver, map, false);
|
| + AddCheckConstantFunction(expr->holder(), receiver, map, false);
|
| if (FLAG_trace_inlining && FLAG_polymorphic_inlining) {
|
| Handle<JSFunction> caller = info()->closure();
|
| SmartArrayPointer<char> caller_name =
|
| @@ -6889,7 +6888,7 @@ bool HGraphBuilder::TryInlineBuiltinMethodCall(Call* expr,
|
| case kMathCos:
|
| case kMathTan:
|
| if (argument_count == 2 && check_type == RECEIVER_MAP_CHECK) {
|
| - AddCheckConstantFunction(expr, receiver, receiver_map, true);
|
| + AddCheckConstantFunction(expr->holder(), receiver, receiver_map, true);
|
| HValue* argument = Pop();
|
| HValue* context = environment()->LookupContext();
|
| Drop(1); // Receiver.
|
| @@ -6902,7 +6901,7 @@ bool HGraphBuilder::TryInlineBuiltinMethodCall(Call* expr,
|
| break;
|
| case kMathPow:
|
| if (argument_count == 3 && check_type == RECEIVER_MAP_CHECK) {
|
| - AddCheckConstantFunction(expr, receiver, receiver_map, true);
|
| + AddCheckConstantFunction(expr->holder(), receiver, receiver_map, true);
|
| HValue* right = Pop();
|
| HValue* left = Pop();
|
| Pop(); // Pop receiver.
|
| @@ -6944,7 +6943,7 @@ bool HGraphBuilder::TryInlineBuiltinMethodCall(Call* expr,
|
| break;
|
| case kMathRandom:
|
| if (argument_count == 1 && check_type == RECEIVER_MAP_CHECK) {
|
| - AddCheckConstantFunction(expr, receiver, receiver_map, true);
|
| + AddCheckConstantFunction(expr->holder(), receiver, receiver_map, true);
|
| Drop(1); // Receiver.
|
| HValue* context = environment()->LookupContext();
|
| HGlobalObject* global_object = new(zone()) HGlobalObject(context);
|
| @@ -6957,7 +6956,7 @@ bool HGraphBuilder::TryInlineBuiltinMethodCall(Call* expr,
|
| case kMathMax:
|
| case kMathMin:
|
| if (argument_count == 3 && check_type == RECEIVER_MAP_CHECK) {
|
| - AddCheckConstantFunction(expr, receiver, receiver_map, true);
|
| + AddCheckConstantFunction(expr->holder(), receiver, receiver_map, true);
|
| HValue* right = Pop();
|
| HValue* left = Pop();
|
| Pop(); // Pop receiver.
|
| @@ -7073,7 +7072,7 @@ bool HGraphBuilder::TryCallApply(Call* expr) {
|
| VisitForValue(prop->obj());
|
| if (HasStackOverflow() || current_block() == NULL) return true;
|
| HValue* function = Top();
|
| - AddCheckConstantFunction(expr, function, function_map, true);
|
| + AddCheckConstantFunction(expr->holder(), function, function_map, true);
|
| Drop(1);
|
|
|
| VisitForValue(args->at(0));
|
| @@ -7192,7 +7191,7 @@ void HGraphBuilder::VisitCall(Call* expr) {
|
| call = PreProcessCall(
|
| new(zone()) HCallNamed(context, name, argument_count));
|
| } else {
|
| - AddCheckConstantFunction(expr, receiver, receiver_map, true);
|
| + AddCheckConstantFunction(expr->holder(), receiver, receiver_map, true);
|
|
|
| if (TryInlineCall(expr)) return;
|
| call = PreProcessCall(
|
|
|