Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index 2f74eee69c3ef59c1ae04cf71c365e1c1857da88..5b71e40c6f5ea2e4b98fda254c9bafc017587bba 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -445,14 +445,14 @@ static void LookupForRead(Handle<Object> object, |
} |
holder->LocalLookupRealNamedProperty(*name, lookup); |
- if (lookup->IsProperty()) { |
+ if (lookup->IsFound()) { |
ASSERT(!lookup->IsInterceptor()); |
return; |
} |
Handle<Object> proto(holder->GetPrototype()); |
if (proto->IsNull()) { |
- lookup->NotFound(); |
+ ASSERT(!lookup->IsFound()); |
return; |
} |
@@ -533,7 +533,7 @@ MaybeObject* CallICBase::LoadFunction(State state, |
LookupResult lookup(isolate()); |
LookupForRead(object, name, &lookup); |
- if (!lookup.IsProperty()) { |
+ if (!lookup.IsFound()) { |
// If the object does not have the requested property, check which |
// exception we need to throw. |
return IsContextual(object) |
@@ -900,7 +900,7 @@ MaybeObject* LoadIC::Load(State state, |
LookupForRead(object, name, &lookup); |
// If we did not find a property, check if we need to throw an exception. |
- if (!lookup.IsProperty()) { |
+ if (!lookup.IsFound()) { |
if (IsContextual(object)) { |
return ReferenceError("not_defined", name); |
} |
@@ -1166,7 +1166,7 @@ MaybeObject* KeyedLoadIC::Load(State state, |
LookupForRead(object, name, &lookup); |
// If we did not find a property, check if we need to throw an exception. |
- if (!lookup.IsProperty() && IsContextual(object)) { |
+ if (!lookup.IsFound() && IsContextual(object)) { |
return ReferenceError("not_defined", name); |
} |
@@ -1317,6 +1317,9 @@ static bool LookupForWrite(Handle<JSObject> receiver, |
Handle<String> name, |
LookupResult* lookup) { |
receiver->LocalLookup(*name, lookup); |
+ if (!lookup->IsFound()) { |
+ receiver->map()->LookupTransition(*receiver, *name, lookup); |
+ } |
if (!StoreICableLookup(lookup)) { |
// 2nd chance: There can be accessors somewhere in the prototype chain. Note |
// that we explicitly exclude native accessors for now, because the stubs |