| Index: src/objects.cc | 
| diff --git a/src/objects.cc b/src/objects.cc | 
| index f2397f58e15ac73972a482e2665837bcefe805ab..194bc18fae61d308432940c2842e28b98f09acfc 100644 | 
| --- a/src/objects.cc | 
| +++ b/src/objects.cc | 
| @@ -9429,6 +9429,7 @@ MaybeObject* JSObject::SetFastElementsCapacityAndLength( | 
| Heap* heap = GetHeap(); | 
| // We should never end in here with a pixel or external array. | 
| ASSERT(!HasExternalArrayElements()); | 
| +  ASSERT(!map()->is_observed()); | 
|  | 
| // Allocate a new fast elements backing store. | 
| FixedArray* new_elements; | 
| @@ -9493,6 +9494,7 @@ MaybeObject* JSObject::SetFastDoubleElementsCapacityAndLength( | 
| Heap* heap = GetHeap(); | 
| // We should never end in here with a pixel or external array. | 
| ASSERT(!HasExternalArrayElements()); | 
| +  ASSERT(!map()->is_observed()); | 
|  | 
| FixedArrayBase* elems; | 
| { MaybeObject* maybe_obj = | 
| @@ -10636,6 +10638,7 @@ Handle<Object> JSObject::TransitionElementsKind(Handle<JSObject> object, | 
|  | 
|  | 
| MaybeObject* JSObject::TransitionElementsKind(ElementsKind to_kind) { | 
| +  ASSERT(!map()->is_observed()); | 
| ElementsKind from_kind = map()->elements_kind(); | 
|  | 
| if (IsFastHoleyElementsKind(from_kind)) { | 
| @@ -10892,6 +10895,9 @@ bool JSObject::ShouldConvertToFastElements() { | 
| // An object requiring access checks is never allowed to have fast | 
| // elements.  If it had fast elements we would skip security checks. | 
| if (IsAccessCheckNeeded()) return false; | 
| +  // Observed objects may not go to fast mode because they rely on map checks, | 
| +  // and for fast elements we sometimes check element kinds only. | 
| +  if (FLAG_harmony_observation && map()->is_observed()) return false; | 
|  | 
| FixedArray* elements = FixedArray::cast(this->elements()); | 
| SeededNumberDictionary* dictionary = NULL; | 
|  |