Chromium Code Reviews| Index: src/ic.cc |
| diff --git a/src/ic.cc b/src/ic.cc |
| index 7f27d3f9bb777617ba0da92a29c78b8715e1e614..56224cc21f380450f15d718eac957bdbba7a2b39 100644 |
| --- a/src/ic.cc |
| +++ b/src/ic.cc |
| @@ -1709,15 +1709,21 @@ MaybeObject* StoreIC::Store(State state, |
| } |
| LookupResult lookup(isolate()); |
| - if (LookupForWrite(receiver, name, value, &lookup, &state)) { |
| - if (FLAG_use_ic) { |
| - UpdateCaches(&lookup, state, strict_mode, receiver, name, value); |
| - } |
| - } else if (strict_mode == kStrictMode && |
| - !(lookup.IsProperty() && lookup.IsReadOnly()) && |
| - IsUndeclaredGlobal(object)) { |
| + bool can_store = LookupForWrite(receiver, name, value, &lookup, &state); |
| + if (!can_store && |
|
Jakob Kummerow
2013/09/03 09:58:59
nit: I'm finding this heterogeneous if/else cascad
|
| + strict_mode == kStrictMode && |
| + !(lookup.IsProperty() && lookup.IsReadOnly()) && |
| + IsUndeclaredGlobal(object)) { |
| // Strict mode doesn't allow setting non-existent global property. |
| return ReferenceError("not_defined", name); |
| + } else if (FLAG_use_ic && state == UNINITIALIZED) { |
| + Handle<Code> stub = (strict_mode == kStrictMode) |
| + ? pre_monomorphic_stub_strict() |
| + : pre_monomorphic_stub(); |
| + set_target(*stub); |
| + TRACE_IC("StoreIC", name, state, *stub); |
| + } else if (FLAG_use_ic && can_store) { |
| + UpdateCaches(&lookup, state, strict_mode, receiver, name, value); |
| } else if (FLAG_use_ic && |
| (!name->IsCacheable(isolate()) || |
| lookup.IsNormal() || |