| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 98b2461dc10385a95d6ea03eea0c85c226df83e8..e88c74a364c8da3e42715649fabd05c7d6999abe 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -429,18 +429,16 @@ void LoadIC::Clear(Isolate* isolate, Address address, Code* target) {
|
| void StoreIC::Clear(Isolate* isolate, Address address, Code* target) {
|
| if (IsCleared(target)) return;
|
| SetTargetAtAddress(address,
|
| - (Code::GetStrictMode(target->extra_ic_state()) == kStrictMode)
|
| - ? *pre_monomorphic_stub_strict(isolate)
|
| - : *pre_monomorphic_stub(isolate));
|
| + *pre_monomorphic_stub(
|
| + isolate, Code::GetStrictMode(target->extra_ic_state())));
|
| }
|
|
|
|
|
| void KeyedStoreIC::Clear(Isolate* isolate, Address address, Code* target) {
|
| if (IsCleared(target)) return;
|
| SetTargetAtAddress(address,
|
| - (Code::GetStrictMode(target->extra_ic_state()) == kStrictMode)
|
| - ? *pre_monomorphic_stub_strict(isolate)
|
| - : *pre_monomorphic_stub(isolate));
|
| + *pre_monomorphic_stub(
|
| + isolate, Code::GetStrictMode(target->extra_ic_state())));
|
| }
|
|
|
|
|
| @@ -994,8 +992,7 @@ static bool AddOneReceiverMapIfMissing(MapHandleList* receiver_maps,
|
| bool IC::UpdatePolymorphicIC(State state,
|
| Handle<HeapObject> receiver,
|
| Handle<String> name,
|
| - Handle<Code> code,
|
| - StrictModeFlag strict_mode) {
|
| + Handle<Code> code) {
|
| if (!code->is_handler()) return false;
|
|
|
| MapHandleList receiver_maps;
|
| @@ -1046,7 +1043,7 @@ bool IC::UpdatePolymorphicIC(State state,
|
| }
|
|
|
| Handle<Code> ic = isolate()->stub_cache()->ComputePolymorphicIC(
|
| - &receiver_maps, &handlers, number_of_valid_maps, name, strict_mode);
|
| + &receiver_maps, &handlers, number_of_valid_maps, name, strict_mode());
|
| set_target(*ic);
|
| return true;
|
| }
|
| @@ -1054,11 +1051,10 @@ bool IC::UpdatePolymorphicIC(State state,
|
|
|
| void IC::UpdateMonomorphicIC(Handle<HeapObject> receiver,
|
| Handle<Code> handler,
|
| - Handle<String> name,
|
| - StrictModeFlag strict_mode) {
|
| + Handle<String> name) {
|
| if (!handler->is_handler()) return set_target(*handler);
|
| Handle<Code> ic = isolate()->stub_cache()->ComputeMonomorphicIC(
|
| - receiver, handler, name, strict_mode);
|
| + receiver, handler, name, strict_mode());
|
| set_target(*ic);
|
| }
|
|
|
| @@ -1096,7 +1092,6 @@ bool IC::IsTransitionedMapOfMonomorphicTarget(Map* receiver_map) {
|
| // Since GC may have been invoked, by the time PatchCache is called, |state| is
|
| // not necessarily equal to target()->state().
|
| void IC::PatchCache(State state,
|
| - StrictModeFlag strict_mode,
|
| Handle<HeapObject> receiver,
|
| Handle<String> name,
|
| Handle<Code> code) {
|
| @@ -1104,7 +1099,7 @@ void IC::PatchCache(State state,
|
| case UNINITIALIZED:
|
| case PREMONOMORPHIC:
|
| case MONOMORPHIC_PROTOTYPE_FAILURE:
|
| - UpdateMonomorphicIC(receiver, code, name, strict_mode);
|
| + UpdateMonomorphicIC(receiver, code, name);
|
| break;
|
| case MONOMORPHIC:
|
| // Only move to megamorphic if the target changes.
|
| @@ -1118,10 +1113,10 @@ void IC::PatchCache(State state,
|
| }
|
| if (is_same_handler
|
| && IsTransitionedMapOfMonomorphicTarget(receiver->map())) {
|
| - UpdateMonomorphicIC(receiver, code, name, strict_mode);
|
| + UpdateMonomorphicIC(receiver, code, name);
|
| break;
|
| }
|
| - if (UpdatePolymorphicIC(state, receiver, name, code, strict_mode)) {
|
| + if (UpdatePolymorphicIC(state, receiver, name, code)) {
|
| break;
|
| }
|
|
|
| @@ -1129,9 +1124,7 @@ void IC::PatchCache(State state,
|
| }
|
|
|
| UpdateMegamorphicCache(receiver->map(), *name, *code);
|
| - set_target((strict_mode == kStrictMode)
|
| - ? *megamorphic_stub_strict()
|
| - : *megamorphic_stub());
|
| + set_target(*megamorphic_stub());
|
| }
|
| break;
|
| case MEGAMORPHIC:
|
| @@ -1139,20 +1132,16 @@ void IC::PatchCache(State state,
|
| break;
|
| case POLYMORPHIC:
|
| if (target()->is_load_stub() || target()->is_store_stub()) {
|
| - if (UpdatePolymorphicIC(state, receiver, name, code, strict_mode)) {
|
| + if (UpdatePolymorphicIC(state, receiver, name, code)) {
|
| break;
|
| }
|
| CopyICToMegamorphicCache(name);
|
| UpdateMegamorphicCache(receiver->map(), *name, *code);
|
| - set_target((strict_mode == kStrictMode)
|
| - ? *megamorphic_stub_strict()
|
| - : *megamorphic_stub());
|
| + set_target(*megamorphic_stub());
|
| } else {
|
| // When trying to patch a polymorphic keyed load/store element stub
|
| // with anything other than another polymorphic stub, go generic.
|
| - set_target((strict_mode == kStrictMode)
|
| - ? *generic_stub_strict()
|
| - : *generic_stub());
|
| + set_target(*generic_stub());
|
| }
|
| break;
|
| case DEBUG_STUB:
|
| @@ -1238,7 +1227,7 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
|
| if (code.is_null()) code = slow_stub();
|
| }
|
|
|
| - PatchCache(state, kNonStrictMode, receiver, name, code);
|
| + PatchCache(state, receiver, name, code);
|
| TRACE_IC("LoadIC", name, state, target());
|
| }
|
|
|
| @@ -1607,7 +1596,6 @@ static bool LookupForWrite(Handle<JSObject> receiver,
|
|
|
|
|
| MaybeObject* StoreIC::Store(State state,
|
| - StrictModeFlag strict_mode,
|
| Handle<Object> object,
|
| Handle<String> name,
|
| Handle<Object> value,
|
| @@ -1615,7 +1603,7 @@ MaybeObject* StoreIC::Store(State state,
|
| // Handle proxies.
|
| if (object->IsJSProxy()) {
|
| Handle<Object> result = JSReceiver::SetProperty(
|
| - Handle<JSReceiver>::cast(object), name, value, NONE, strict_mode);
|
| + Handle<JSReceiver>::cast(object), name, value, NONE, strict_mode());
|
| RETURN_IF_EMPTY_HANDLE(isolate(), result);
|
| return *result;
|
| }
|
| @@ -1627,7 +1615,7 @@ MaybeObject* StoreIC::Store(State state,
|
| }
|
|
|
| // The length property of string values is read-only. Throw in strict mode.
|
| - if (strict_mode == kStrictMode && object->IsString() &&
|
| + if (strict_mode() == kStrictMode && object->IsString() &&
|
| name->Equals(isolate()->heap()->length_string())) {
|
| return TypeError("strict_read_only_property", object, name);
|
| }
|
| @@ -1648,7 +1636,7 @@ MaybeObject* StoreIC::Store(State state,
|
| uint32_t index;
|
| if (name->AsArrayIndex(&index)) {
|
| Handle<Object> result =
|
| - JSObject::SetElement(receiver, index, value, NONE, strict_mode);
|
| + JSObject::SetElement(receiver, index, value, NONE, strict_mode());
|
| RETURN_IF_EMPTY_HANDLE(isolate(), result);
|
| return *value;
|
| }
|
| @@ -1656,7 +1644,7 @@ MaybeObject* StoreIC::Store(State state,
|
| // Observed objects are always modified through the runtime.
|
| if (FLAG_harmony_observation && receiver->map()->is_observed()) {
|
| Handle<Object> result = JSReceiver::SetProperty(
|
| - receiver, name, value, NONE, strict_mode, store_mode);
|
| + receiver, name, value, NONE, strict_mode(), store_mode);
|
| RETURN_IF_EMPTY_HANDLE(isolate(), result);
|
| return *result;
|
| }
|
| @@ -1672,11 +1660,11 @@ MaybeObject* StoreIC::Store(State state,
|
| receiver->HasFastProperties() &&
|
| !receiver->map()->is_frozen()) {
|
| Handle<Code> stub =
|
| - StoreArrayLengthStub(kind(), strict_mode).GetCode(isolate());
|
| + StoreArrayLengthStub(kind(), strict_mode()).GetCode(isolate());
|
| set_target(*stub);
|
| TRACE_IC("StoreIC", name, state, *stub);
|
| Handle<Object> result = JSReceiver::SetProperty(
|
| - receiver, name, value, NONE, strict_mode, store_mode);
|
| + receiver, name, value, NONE, strict_mode(), store_mode);
|
| RETURN_IF_EMPTY_HANDLE(isolate(), result);
|
| return *result;
|
| }
|
| @@ -1685,14 +1673,12 @@ MaybeObject* StoreIC::Store(State state,
|
| if (use_ic && kind() != Code::KEYED_STORE_IC) {
|
| // Generate a generic stub that goes to the runtime when we see a global
|
| // proxy as receiver.
|
| - Handle<Code> stub = (strict_mode == kStrictMode)
|
| - ? global_proxy_stub_strict()
|
| - : global_proxy_stub();
|
| + Handle<Code> stub = global_proxy_stub();
|
| set_target(*stub);
|
| TRACE_IC("StoreIC", name, state, *stub);
|
| }
|
| Handle<Object> result = JSReceiver::SetProperty(
|
| - receiver, name, value, NONE, strict_mode, store_mode);
|
| + receiver, name, value, NONE, strict_mode(), store_mode);
|
| RETURN_IF_EMPTY_HANDLE(isolate(), result);
|
| return *result;
|
| }
|
| @@ -1700,7 +1686,7 @@ MaybeObject* StoreIC::Store(State state,
|
| LookupResult lookup(isolate());
|
| bool can_store = LookupForWrite(receiver, name, value, &lookup, &state);
|
| if (!can_store &&
|
| - strict_mode == kStrictMode &&
|
| + strict_mode() == kStrictMode &&
|
| !(lookup.IsProperty() && lookup.IsReadOnly()) &&
|
| IsUndeclaredGlobal(object)) {
|
| // Strict mode doesn't allow setting non-existent global property.
|
| @@ -1708,25 +1694,22 @@ MaybeObject* StoreIC::Store(State state,
|
| }
|
| if (use_ic) {
|
| if (state == UNINITIALIZED) {
|
| - Handle<Code> stub = (strict_mode == kStrictMode)
|
| - ? pre_monomorphic_stub_strict()
|
| - : pre_monomorphic_stub();
|
| + Handle<Code> stub = pre_monomorphic_stub();
|
| set_target(*stub);
|
| TRACE_IC("StoreIC", name, state, *stub);
|
| } else if (can_store) {
|
| - UpdateCaches(&lookup, state, strict_mode, receiver, name, value);
|
| + UpdateCaches(&lookup, state, receiver, name, value);
|
| } else if (!name->IsCacheable(isolate()) ||
|
| lookup.IsNormal() ||
|
| (lookup.IsField() && lookup.CanHoldValue(value))) {
|
| - Handle<Code> stub = (strict_mode == kStrictMode) ? generic_stub_strict()
|
| - : generic_stub();
|
| + Handle<Code> stub = generic_stub();
|
| set_target(*stub);
|
| }
|
| }
|
|
|
| // Set the property.
|
| Handle<Object> result = JSReceiver::SetProperty(
|
| - receiver, name, value, NONE, strict_mode, store_mode);
|
| + receiver, name, value, NONE, strict_mode(), store_mode);
|
| RETURN_IF_EMPTY_HANDLE(isolate(), result);
|
| return *result;
|
| }
|
| @@ -1734,7 +1717,6 @@ MaybeObject* StoreIC::Store(State state,
|
|
|
| void StoreIC::UpdateCaches(LookupResult* lookup,
|
| State state,
|
| - StrictModeFlag strict_mode,
|
| Handle<JSObject> receiver,
|
| Handle<String> name,
|
| Handle<Object> value) {
|
| @@ -1744,22 +1726,18 @@ void StoreIC::UpdateCaches(LookupResult* lookup,
|
| // These are not cacheable, so we never see such LookupResults here.
|
| ASSERT(!lookup->IsHandler());
|
|
|
| - Handle<Code> code = ComputeStoreMonomorphic(
|
| - lookup, strict_mode, receiver, name, value);
|
| + Handle<Code> code = ComputeStoreMonomorphic(lookup, receiver, name, value);
|
| if (code.is_null()) {
|
| - Handle<Code> stub = strict_mode == kStrictMode
|
| - ? generic_stub_strict() : generic_stub();
|
| - set_target(*stub);
|
| + set_target(*generic_stub());
|
| return;
|
| }
|
|
|
| - PatchCache(state, strict_mode, receiver, name, code);
|
| + PatchCache(state, receiver, name, code);
|
| TRACE_IC("StoreIC", name, state, target());
|
| }
|
|
|
|
|
| Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| - StrictModeFlag strict_mode,
|
| Handle<JSObject> receiver,
|
| Handle<String> name,
|
| Handle<Object> value) {
|
| @@ -1767,7 +1745,7 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| switch (lookup->type()) {
|
| case FIELD:
|
| return isolate()->stub_cache()->ComputeStoreField(
|
| - name, receiver, lookup, strict_mode);
|
| + name, receiver, lookup, strict_mode());
|
| case NORMAL:
|
| if (receiver->IsGlobalObject()) {
|
| // The stub generated for the global object picks the value directly
|
| @@ -1777,10 +1755,10 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| Handle<PropertyCell> cell(
|
| global->GetPropertyCell(lookup), isolate());
|
| return isolate()->stub_cache()->ComputeStoreGlobal(
|
| - name, global, cell, value, strict_mode);
|
| + name, global, cell, value, strict_mode());
|
| }
|
| ASSERT(holder.is_identical_to(receiver));
|
| - return isolate()->stub_cache()->ComputeStoreNormal(strict_mode);
|
| + return isolate()->stub_cache()->ComputeStoreNormal(strict_mode());
|
| case CALLBACKS: {
|
| Handle<Object> callback(lookup->GetCallbackObject(), isolate());
|
| if (callback->IsExecutableAccessorInfo()) {
|
| @@ -1790,7 +1768,7 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| if (!holder->HasFastProperties()) break;
|
| if (!info->IsCompatibleReceiver(*receiver)) break;
|
| return isolate()->stub_cache()->ComputeStoreCallback(
|
| - name, receiver, holder, info, strict_mode);
|
| + name, receiver, holder, info, strict_mode());
|
| } else if (callback->IsAccessorPair()) {
|
| Handle<Object> setter(
|
| Handle<AccessorPair>::cast(callback)->setter(), isolate());
|
| @@ -1802,11 +1780,11 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| if (call_optimization.is_simple_api_call() &&
|
| call_optimization.IsCompatibleReceiver(*receiver)) {
|
| return isolate()->stub_cache()->ComputeStoreCallback(
|
| - name, receiver, holder, call_optimization, strict_mode);
|
| + name, receiver, holder, call_optimization, strict_mode());
|
| }
|
| return isolate()->stub_cache()->ComputeStoreViaSetter(
|
| name, receiver, holder, Handle<JSFunction>::cast(setter),
|
| - strict_mode);
|
| + strict_mode());
|
| }
|
| // TODO(dcarney): Handle correctly.
|
| if (callback->IsDeclaredAccessorInfo()) break;
|
| @@ -1817,7 +1795,7 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| case INTERCEPTOR:
|
| ASSERT(!receiver->GetNamedInterceptor()->setter()->IsUndefined());
|
| return isolate()->stub_cache()->ComputeStoreInterceptor(
|
| - name, receiver, strict_mode);
|
| + name, receiver, strict_mode());
|
| case CONSTANT:
|
| break;
|
| case TRANSITION: {
|
| @@ -1833,7 +1811,7 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| if (details.type() == CALLBACKS || details.attributes() != NONE) break;
|
|
|
| return isolate()->stub_cache()->ComputeStoreTransition(
|
| - name, receiver, lookup, transition, strict_mode);
|
| + name, receiver, lookup, transition, strict_mode());
|
| }
|
| case NONEXISTENT:
|
| case HANDLER:
|
| @@ -1845,14 +1823,13 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
|
|
|
|
| Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| - KeyedAccessStoreMode store_mode,
|
| - StrictModeFlag strict_mode) {
|
| + KeyedAccessStoreMode store_mode) {
|
| // Don't handle megamorphic property accesses for INTERCEPTORS or CALLBACKS
|
| // via megamorphic stubs, since they don't have a map in their relocation info
|
| // and so the stubs can't be harvested for the object needed for a map check.
|
| if (target()->type() != Code::NORMAL) {
|
| TRACE_GENERIC_IC(isolate(), "KeyedIC", "non-NORMAL target type");
|
| - return strict_mode == kStrictMode ? generic_stub_strict() : generic_stub();
|
| + return generic_stub();
|
| }
|
|
|
| State ic_state = target()->ic_state();
|
| @@ -1863,7 +1840,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| Handle<Map> monomorphic_map = ComputeTransitionedMap(receiver, store_mode);
|
| store_mode = GetNonTransitioningStoreMode(store_mode);
|
| return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| - monomorphic_map, strict_mode, store_mode);
|
| + monomorphic_map, strict_mode(), store_mode);
|
| }
|
|
|
| MapHandleList target_receiver_maps;
|
| @@ -1872,9 +1849,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| // In the case that there is a non-map-specific IC is installed (e.g. keyed
|
| // stores into properties in dictionary mode), then there will be not
|
| // receiver maps in the target.
|
| - return strict_mode == kStrictMode
|
| - ? generic_stub_strict()
|
| - : generic_stub();
|
| + return generic_stub();
|
| }
|
|
|
| // There are several special cases where an IC that is MONOMORPHIC can still
|
| @@ -1896,7 +1871,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| // Element family is the same, use the "worst" case map.
|
| store_mode = GetNonTransitioningStoreMode(store_mode);
|
| return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| - transitioned_receiver_map, strict_mode, store_mode);
|
| + transitioned_receiver_map, strict_mode(), store_mode);
|
| } else if (*previous_receiver_map == receiver->map() &&
|
| old_store_mode == STANDARD_STORE &&
|
| (IsGrowStoreMode(store_mode) ||
|
| @@ -1906,7 +1881,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| // grow at the end of the array, handle OOB accesses or copy COW arrays
|
| // and still stay MONOMORPHIC.
|
| return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| - receiver_map, strict_mode, store_mode);
|
| + receiver_map, strict_mode(), store_mode);
|
| }
|
| }
|
|
|
| @@ -1926,14 +1901,14 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| // If the miss wasn't due to an unseen map, a polymorphic stub
|
| // won't help, use the generic stub.
|
| TRACE_GENERIC_IC(isolate(), "KeyedIC", "same map added twice");
|
| - return strict_mode == kStrictMode ? generic_stub_strict() : generic_stub();
|
| + return generic_stub();
|
| }
|
|
|
| // If the maximum number of receiver maps has been exceeded, use the generic
|
| // version of the IC.
|
| if (target_receiver_maps.length() > kMaxKeyedPolymorphism) {
|
| TRACE_GENERIC_IC(isolate(), "KeyedIC", "max polymorph exceeded");
|
| - return strict_mode == kStrictMode ? generic_stub_strict() : generic_stub();
|
| + return generic_stub();
|
| }
|
|
|
| // Make sure all polymorphic handlers have the same store mode, otherwise the
|
| @@ -1944,9 +1919,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| store_mode = old_store_mode;
|
| } else if (store_mode != old_store_mode) {
|
| TRACE_GENERIC_IC(isolate(), "KeyedIC", "store mode mismatch");
|
| - return strict_mode == kStrictMode
|
| - ? generic_stub_strict()
|
| - : generic_stub();
|
| + return generic_stub();
|
| }
|
| }
|
|
|
| @@ -1964,14 +1937,12 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| external_arrays != target_receiver_maps.length()) {
|
| TRACE_GENERIC_IC(isolate(), "KeyedIC",
|
| "unsupported combination of external and normal arrays");
|
| - return strict_mode == kStrictMode
|
| - ? generic_stub_strict()
|
| - : generic_stub();
|
| + return generic_stub();
|
| }
|
| }
|
|
|
| return isolate()->stub_cache()->ComputeStoreElementPolymorphic(
|
| - &target_receiver_maps, store_mode, strict_mode);
|
| + &target_receiver_maps, store_mode, strict_mode());
|
| }
|
|
|
|
|
| @@ -2095,7 +2066,6 @@ KeyedAccessStoreMode KeyedStoreIC::GetStoreMode(Handle<JSObject> receiver,
|
|
|
|
|
| MaybeObject* KeyedStoreIC::Store(State state,
|
| - StrictModeFlag strict_mode,
|
| Handle<Object> object,
|
| Handle<Object> key,
|
| Handle<Object> value,
|
| @@ -2106,7 +2076,6 @@ MaybeObject* KeyedStoreIC::Store(State state,
|
|
|
| if (key->IsInternalizedString()) {
|
| return StoreIC::Store(state,
|
| - strict_mode,
|
| object,
|
| Handle<String>::cast(key),
|
| value,
|
| @@ -2126,9 +2095,7 @@ MaybeObject* KeyedStoreIC::Store(State state,
|
| ASSERT(!(use_ic && object->IsJSGlobalProxy()));
|
|
|
| if (use_ic) {
|
| - Handle<Code> stub = (strict_mode == kStrictMode)
|
| - ? generic_stub_strict()
|
| - : generic_stub();
|
| + Handle<Code> stub = generic_stub();
|
| if (miss_mode != MISS_FORCE_GENERIC) {
|
| if (object->IsJSObject()) {
|
| Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| @@ -2142,7 +2109,7 @@ MaybeObject* KeyedStoreIC::Store(State state,
|
| } else if (key_is_smi_like &&
|
| (target() != *non_strict_arguments_stub())) {
|
| KeyedAccessStoreMode store_mode = GetStoreMode(receiver, key, value);
|
| - stub = StoreElementStub(receiver, store_mode, strict_mode);
|
| + stub = StoreElementStub(receiver, store_mode);
|
| } else {
|
| TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "key not a number");
|
| }
|
| @@ -2158,12 +2125,11 @@ MaybeObject* KeyedStoreIC::Store(State state,
|
| }
|
|
|
| return Runtime::SetObjectPropertyOrFail(
|
| - isolate(), object , key, value, NONE, strict_mode);
|
| + isolate(), object , key, value, NONE, strict_mode());
|
| }
|
|
|
|
|
| Handle<Code> KeyedStoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| - StrictModeFlag strict_mode,
|
| Handle<JSObject> receiver,
|
| Handle<String> name,
|
| Handle<Object> value) {
|
| @@ -2173,7 +2139,7 @@ Handle<Code> KeyedStoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| switch (lookup->type()) {
|
| case FIELD:
|
| return isolate()->stub_cache()->ComputeKeyedStoreField(
|
| - name, receiver, lookup, strict_mode);
|
| + name, receiver, lookup, strict_mode());
|
| case TRANSITION: {
|
| // Explicitly pass in the receiver map since LookupForWrite may have
|
| // stored something else than the receiver in the holder.
|
| @@ -2186,7 +2152,7 @@ Handle<Code> KeyedStoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
|
|
| if (details.type() != CALLBACKS && details.attributes() == NONE) {
|
| return isolate()->stub_cache()->ComputeKeyedStoreTransition(
|
| - name, receiver, lookup, transition, strict_mode);
|
| + name, receiver, lookup, transition, strict_mode());
|
| }
|
| // fall through.
|
| }
|
| @@ -2196,9 +2162,7 @@ Handle<Code> KeyedStoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
|
| case INTERCEPTOR:
|
| // Always rewrite to the generic case so that we do not
|
| // repeatedly try to rewrite.
|
| - return (strict_mode == kStrictMode)
|
| - ? generic_stub_strict()
|
| - : generic_stub();
|
| + return generic_stub();
|
| case HANDLER:
|
| case NONEXISTENT:
|
| UNREACHABLE();
|
| @@ -2309,9 +2273,7 @@ RUNTIME_FUNCTION(MaybeObject*, StoreIC_Miss) {
|
| ASSERT(args.length() == 3);
|
| StoreIC ic(IC::NO_EXTRA_FRAME, isolate);
|
| IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
| - Code::ExtraICState extra_ic_state = ic.target()->extra_ic_state();
|
| return ic.Store(state,
|
| - Code::GetStrictMode(extra_ic_state),
|
| args.at<Object>(0),
|
| args.at<String>(1),
|
| args.at<Object>(2));
|
| @@ -2323,9 +2285,7 @@ RUNTIME_FUNCTION(MaybeObject*, StoreIC_MissFromStubFailure) {
|
| ASSERT(args.length() == 3);
|
| StoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
|
| IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
| - Code::ExtraICState extra_ic_state = ic.target()->extra_ic_state();
|
| return ic.Store(state,
|
| - Code::GetStrictMode(extra_ic_state),
|
| args.at<Object>(0),
|
| args.at<String>(1),
|
| args.at<Object>(2));
|
| @@ -2412,9 +2372,7 @@ RUNTIME_FUNCTION(MaybeObject*, KeyedStoreIC_Miss) {
|
| ASSERT(args.length() == 3);
|
| KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate);
|
| IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
| - Code::ExtraICState extra_ic_state = ic.target()->extra_ic_state();
|
| return ic.Store(state,
|
| - Code::GetStrictMode(extra_ic_state),
|
| args.at<Object>(0),
|
| args.at<Object>(1),
|
| args.at<Object>(2),
|
| @@ -2427,9 +2385,7 @@ RUNTIME_FUNCTION(MaybeObject*, KeyedStoreIC_MissFromStubFailure) {
|
| ASSERT(args.length() == 3);
|
| KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
|
| IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
| - Code::ExtraICState extra_ic_state = ic.target()->extra_ic_state();
|
| return ic.Store(state,
|
| - Code::GetStrictMode(extra_ic_state),
|
| args.at<Object>(0),
|
| args.at<Object>(1),
|
| args.at<Object>(2),
|
| @@ -2478,9 +2434,7 @@ RUNTIME_FUNCTION(MaybeObject*, KeyedStoreIC_MissForceGeneric) {
|
| ASSERT(args.length() == 3);
|
| KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate);
|
| IC::State state = IC::StateFrom(ic.target(), args[0], args[1]);
|
| - Code::ExtraICState extra_ic_state = ic.target()->extra_ic_state();
|
| return ic.Store(state,
|
| - Code::GetStrictMode(extra_ic_state),
|
| args.at<Object>(0),
|
| args.at<Object>(1),
|
| args.at<Object>(2),
|
|
|