| Index: src/hydrogen.cc | 
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc | 
| index 7a9dc90cc43e18d317324fcab7a35600edc2c77a..a8a3b109c9c52ce64b68d2bfb787f14750c6f566 100644 | 
| --- a/src/hydrogen.cc | 
| +++ b/src/hydrogen.cc | 
| @@ -7696,6 +7696,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( | 
| if (receiver_map->instance_type() != JS_ARRAY_TYPE) return false; | 
| ElementsKind elements_kind = receiver_map->elements_kind(); | 
| if (!IsFastElementsKind(elements_kind)) return false; | 
| +      if (receiver_map->is_observed()) return false; | 
| +      ASSERT(receiver_map->is_extensible()); | 
|  | 
| Drop(expr->arguments()->length()); | 
| HValue* result; | 
| @@ -7758,6 +7760,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( | 
| if (receiver_map->instance_type() != JS_ARRAY_TYPE) return false; | 
| ElementsKind elements_kind = receiver_map->elements_kind(); | 
| if (!IsFastElementsKind(elements_kind)) return false; | 
| +      if (receiver_map->is_observed()) return false; | 
| +      ASSERT(receiver_map->is_extensible()); | 
|  | 
| // If there may be elements accessors in the prototype chain, the fast | 
| // inlined version can't be used. | 
| @@ -7770,31 +7774,29 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( | 
| Handle<JSObject> prototype(JSObject::cast(receiver_map->prototype())); | 
| BuildCheckPrototypeMaps(prototype, Handle<JSObject>()); | 
|  | 
| -      HValue* op_vals[] = { | 
| -        context(), | 
| -        // Receiver. | 
| -        environment()->ExpressionStackAt(expr->arguments()->length()) | 
| -      }; | 
| - | 
| const int argc = expr->arguments()->length(); | 
| -      // Includes receiver. | 
| -      PushArgumentsFromEnvironment(argc + 1); | 
| +      if (argc != 1) return false; | 
|  | 
| -      CallInterfaceDescriptor* descriptor = | 
| -          isolate()->call_descriptor(Isolate::CallHandler); | 
| +      HValue* value_to_push = Pop(); | 
| +      HValue* array = Pop(); | 
|  | 
| -      ArrayPushStub stub(receiver_map->elements_kind(), argc); | 
| -      Handle<Code> code = stub.GetCode(isolate()); | 
| -      HConstant* code_value = Add<HConstant>(code); | 
| +      HValue* length = Add<HLoadNamedField>(array, static_cast<HValue*>(NULL), | 
| +          HObjectAccess::ForArrayLength(elements_kind)); | 
|  | 
| -      ASSERT((sizeof(op_vals) / kPointerSize) == | 
| -             descriptor->environment_length()); | 
| +      { | 
| +        NoObservableSideEffectsScope scope(this); | 
| + | 
| +        bool is_array = receiver_map->instance_type() == JS_ARRAY_TYPE; | 
| +        BuildUncheckedMonomorphicElementAccess(array, length, | 
| +                                               value_to_push, is_array, | 
| +                                               elements_kind, STORE, | 
| +                                               NEVER_RETURN_HOLE, | 
| +                                               STORE_AND_GROW_NO_TRANSITION); | 
| +      } | 
|  | 
| -      HInstruction* call = New<HCallWithDescriptor>( | 
| -          code_value, argc + 1, descriptor, | 
| -          Vector<HValue*>(op_vals, descriptor->environment_length())); | 
| +      HInstruction* new_size = NewUncasted<HAdd>(length, Add<HConstant>(argc)); | 
| Drop(1);  // Drop function. | 
| -      ast_context()->ReturnInstruction(call, expr->id()); | 
| +      ast_context()->ReturnInstruction(new_size, expr->id()); | 
| return true; | 
| } | 
| default: | 
|  |