Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 28c6ebb47ed393300ff5e9a73de2b6b5b06f51d4..552eb4b4bb0786412786b96fc3d05001ddb376d3 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -344,7 +344,8 @@ bool AccessorInfo::IsCompatibleReceiverType(Isolate* isolate, |
MaybeHandle<Object> Object::SetPropertyWithAccessor( |
Handle<Object> receiver, Handle<Name> name, Handle<Object> value, |
- Handle<JSObject> holder, Handle<Object> structure, StrictMode strict_mode) { |
+ Handle<JSObject> holder, Handle<Object> structure, |
+ LanguageMode language_mode) { |
Isolate* isolate = name->GetIsolate(); |
// We should never get here to initialize a const with the hole |
@@ -382,7 +383,7 @@ MaybeHandle<Object> Object::SetPropertyWithAccessor( |
return SetPropertyWithDefinedSetter( |
receiver, Handle<JSReceiver>::cast(setter), value); |
} else { |
- if (strict_mode == SLOPPY) return value; |
+ if (is_sloppy(language_mode)) return value; |
Handle<Object> args[2] = { name, holder }; |
THROW_NEW_ERROR( |
isolate, NewTypeError("no_setter_in_callback", HandleVector(args, 2)), |
@@ -484,12 +485,12 @@ static bool FindAllCanWriteHolder(LookupIterator* it) { |
MaybeHandle<Object> JSObject::SetPropertyWithFailedAccessCheck( |
- LookupIterator* it, Handle<Object> value, StrictMode strict_mode) { |
+ LookupIterator* it, Handle<Object> value, LanguageMode language_mode) { |
Handle<JSObject> checked = it->GetHolder<JSObject>(); |
if (FindAllCanWriteHolder(it)) { |
return SetPropertyWithAccessor(it->GetReceiver(), it->name(), value, |
it->GetHolder<JSObject>(), |
- it->GetAccessors(), strict_mode); |
+ it->GetAccessors(), language_mode); |
} |
it->isolate()->ReportFailedAccessCheck(checked, v8::ACCESS_SET); |
@@ -607,7 +608,7 @@ MaybeHandle<Object> Object::GetElementWithReceiver(Isolate* isolate, |
MaybeHandle<Object> Object::SetElementWithReceiver( |
Isolate* isolate, Handle<Object> object, Handle<Object> receiver, |
- uint32_t index, Handle<Object> value, StrictMode strict_mode) { |
+ uint32_t index, Handle<Object> value, LanguageMode language_mode) { |
// Iterate up the prototype chain until an element is found or the null |
// prototype is encountered. |
bool done = false; |
@@ -641,7 +642,7 @@ MaybeHandle<Object> Object::SetElementWithReceiver( |
if (!from_interceptor.has_value) return MaybeHandle<Object>(); |
if ((from_interceptor.value & READ_ONLY) != 0) { |
return WriteToReadOnlyElement(isolate, receiver, index, value, |
- strict_mode); |
+ language_mode); |
} |
done = from_interceptor.value != ABSENT; |
} |
@@ -653,13 +654,13 @@ MaybeHandle<Object> Object::SetElementWithReceiver( |
accessor->GetAttributes(receiver, js_object, index); |
if ((attrs & READ_ONLY) != 0) { |
return WriteToReadOnlyElement(isolate, receiver, index, value, |
- strict_mode); |
+ language_mode); |
} |
Handle<AccessorPair> accessor_pair; |
if (accessor->GetAccessorPair(receiver, js_object, index) |
.ToHandle(&accessor_pair)) { |
- return JSObject::SetElementWithCallback(receiver, accessor_pair, index, |
- value, js_object, strict_mode); |
+ return JSObject::SetElementWithCallback( |
+ receiver, accessor_pair, index, value, js_object, language_mode); |
} else { |
done = attrs != ABSENT; |
} |
@@ -667,16 +668,18 @@ MaybeHandle<Object> Object::SetElementWithReceiver( |
} |
if (!receiver->IsJSObject()) { |
- return WriteToReadOnlyElement(isolate, receiver, index, value, strict_mode); |
+ return WriteToReadOnlyElement(isolate, receiver, index, value, |
+ language_mode); |
} |
Handle<JSObject> target = Handle<JSObject>::cast(receiver); |
ElementsAccessor* accessor = target->GetElementsAccessor(); |
PropertyAttributes attrs = accessor->GetAttributes(receiver, target, index); |
if ((attrs & READ_ONLY) != 0) { |
- return WriteToReadOnlyElement(isolate, receiver, index, value, strict_mode); |
+ return WriteToReadOnlyElement(isolate, receiver, index, value, |
+ language_mode); |
} |
PropertyAttributes new_attrs = attrs != ABSENT ? attrs : NONE; |
- return JSObject::SetElement(target, index, value, new_attrs, strict_mode, |
+ return JSObject::SetElement(target, index, value, new_attrs, language_mode, |
false); |
} |
@@ -2756,16 +2759,16 @@ MaybeHandle<Object> JSObject::SetPropertyWithInterceptor(LookupIterator* it, |
MaybeHandle<Object> Object::SetProperty(Handle<Object> object, |
Handle<Name> name, Handle<Object> value, |
- StrictMode strict_mode, |
+ LanguageMode language_mode, |
StoreFromKeyed store_mode) { |
LookupIterator it(object, name); |
- return SetProperty(&it, value, strict_mode, store_mode); |
+ return SetProperty(&it, value, language_mode, store_mode); |
} |
MaybeHandle<Object> Object::SetProperty(LookupIterator* it, |
Handle<Object> value, |
- StrictMode strict_mode, |
+ LanguageMode language_mode, |
StoreFromKeyed store_mode, |
StorePropertyMode data_store_mode) { |
// Make sure that the top context does not change when doing callbacks or |
@@ -2784,20 +2787,20 @@ MaybeHandle<Object> Object::SetProperty(LookupIterator* it, |
// until we find the property. |
if (it->HasAccess(v8::ACCESS_SET)) break; |
return JSObject::SetPropertyWithFailedAccessCheck(it, value, |
- strict_mode); |
+ language_mode); |
case LookupIterator::JSPROXY: |
if (it->HolderIsReceiverOrHiddenPrototype()) { |
return JSProxy::SetPropertyWithHandler(it->GetHolder<JSProxy>(), |
it->GetReceiver(), it->name(), |
- value, strict_mode); |
+ value, language_mode); |
} else { |
// TODO(verwaest): Use the MaybeHandle to indicate result. |
bool has_result = false; |
MaybeHandle<Object> maybe_result = |
JSProxy::SetPropertyViaPrototypesWithHandler( |
it->GetHolder<JSProxy>(), it->GetReceiver(), it->name(), |
- value, strict_mode, &has_result); |
+ value, language_mode, &has_result); |
if (has_result) return maybe_result; |
done = true; |
} |
@@ -2816,22 +2819,22 @@ MaybeHandle<Object> Object::SetProperty(LookupIterator* it, |
if (!maybe_attributes.has_value) return MaybeHandle<Object>(); |
done = maybe_attributes.value != ABSENT; |
if (done && (maybe_attributes.value & READ_ONLY) != 0) { |
- return WriteToReadOnlyProperty(it, value, strict_mode); |
+ return WriteToReadOnlyProperty(it, value, language_mode); |
} |
} |
break; |
case LookupIterator::ACCESSOR: |
if (it->property_details().IsReadOnly()) { |
- return WriteToReadOnlyProperty(it, value, strict_mode); |
+ return WriteToReadOnlyProperty(it, value, language_mode); |
} |
return SetPropertyWithAccessor(it->GetReceiver(), it->name(), value, |
it->GetHolder<JSObject>(), |
- it->GetAccessors(), strict_mode); |
+ it->GetAccessors(), language_mode); |
case LookupIterator::DATA: |
if (it->property_details().IsReadOnly()) { |
- return WriteToReadOnlyProperty(it, value, strict_mode); |
+ return WriteToReadOnlyProperty(it, value, language_mode); |
} |
if (it->HolderIsReceiverOrHiddenPrototype()) { |
return SetDataProperty(it, value); |
@@ -2850,7 +2853,7 @@ MaybeHandle<Object> Object::SetProperty(LookupIterator* it, |
// If the receiver is the JSGlobalObject, the store was contextual. In case |
// the property did not exist yet on the global object itself, we have to |
// throw a reference error in strict mode. |
- if (it->GetReceiver()->IsJSGlobalObject() && strict_mode == STRICT) { |
+ if (it->GetReceiver()->IsJSGlobalObject() && is_strict(language_mode)) { |
Handle<Object> args[1] = {it->name()}; |
THROW_NEW_ERROR(it->isolate(), |
NewReferenceError("not_defined", HandleVector(args, 1)), |
@@ -2861,18 +2864,17 @@ MaybeHandle<Object> Object::SetProperty(LookupIterator* it, |
LookupIterator own_lookup(it->GetReceiver(), it->name(), |
LookupIterator::OWN); |
- return JSObject::SetProperty(&own_lookup, value, strict_mode, store_mode, |
+ return JSObject::SetProperty(&own_lookup, value, language_mode, store_mode, |
NORMAL_PROPERTY); |
} |
- return AddDataProperty(it, value, NONE, strict_mode, store_mode); |
+ return AddDataProperty(it, value, NONE, language_mode, store_mode); |
} |
-MaybeHandle<Object> Object::WriteToReadOnlyProperty(LookupIterator* it, |
- Handle<Object> value, |
- StrictMode strict_mode) { |
- if (strict_mode != STRICT) return value; |
+MaybeHandle<Object> Object::WriteToReadOnlyProperty( |
+ LookupIterator* it, Handle<Object> value, LanguageMode language_mode) { |
+ if (is_sloppy(language_mode)) return value; |
Handle<Object> args[] = {it->name(), it->GetReceiver()}; |
THROW_NEW_ERROR(it->isolate(), |
@@ -2886,8 +2888,8 @@ MaybeHandle<Object> Object::WriteToReadOnlyElement(Isolate* isolate, |
Handle<Object> receiver, |
uint32_t index, |
Handle<Object> value, |
- StrictMode strict_mode) { |
- if (strict_mode != STRICT) return value; |
+ LanguageMode language_mode) { |
+ if (is_sloppy(language_mode)) return value; |
Handle<Object> args[] = {isolate->factory()->NewNumberFromUint(index), |
receiver}; |
@@ -2936,12 +2938,12 @@ MaybeHandle<Object> Object::SetDataProperty(LookupIterator* it, |
MaybeHandle<Object> Object::AddDataProperty(LookupIterator* it, |
Handle<Object> value, |
PropertyAttributes attributes, |
- StrictMode strict_mode, |
+ LanguageMode language_mode, |
StoreFromKeyed store_mode) { |
DCHECK(!it->GetReceiver()->IsJSProxy()); |
if (!it->GetReceiver()->IsJSObject()) { |
// TODO(verwaest): Throw a TypeError with a more specific message. |
- return WriteToReadOnlyProperty(it, value, strict_mode); |
+ return WriteToReadOnlyProperty(it, value, language_mode); |
} |
Handle<JSObject> receiver = it->GetStoreTarget(); |
@@ -2958,7 +2960,7 @@ MaybeHandle<Object> Object::AddDataProperty(LookupIterator* it, |
// |value| under it->name() with |attributes|. |
it->PrepareTransitionToDataProperty(value, attributes, store_mode); |
if (it->state() != LookupIterator::TRANSITION) { |
- if (strict_mode == SLOPPY) return value; |
+ if (is_sloppy(language_mode)) return value; |
Handle<Object> args[1] = {it->name()}; |
THROW_NEW_ERROR(it->isolate(), |
@@ -2992,11 +2994,8 @@ MaybeHandle<Object> Object::AddDataProperty(LookupIterator* it, |
MaybeHandle<Object> JSObject::SetElementWithCallbackSetterInPrototypes( |
- Handle<JSObject> object, |
- uint32_t index, |
- Handle<Object> value, |
- bool* found, |
- StrictMode strict_mode) { |
+ Handle<JSObject> object, uint32_t index, Handle<Object> value, bool* found, |
+ LanguageMode language_mode) { |
Isolate* isolate = object->GetIsolate(); |
for (PrototypeIterator iter(isolate, object); !iter.IsAtEnd(); |
iter.Advance()) { |
@@ -3004,7 +3003,7 @@ MaybeHandle<Object> JSObject::SetElementWithCallbackSetterInPrototypes( |
return JSProxy::SetPropertyViaPrototypesWithHandler( |
Handle<JSProxy>::cast(PrototypeIterator::GetCurrent(iter)), object, |
isolate->factory()->Uint32ToString(index), // name |
- value, strict_mode, found); |
+ value, language_mode, found); |
} |
Handle<JSObject> js_proto = |
Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)); |
@@ -3030,7 +3029,7 @@ MaybeHandle<Object> JSObject::SetElementWithCallbackSetterInPrototypes( |
*found = true; |
Handle<Object> structure(dictionary->ValueAt(entry), isolate); |
return SetElementWithCallback(object, structure, index, value, js_proto, |
- strict_mode); |
+ language_mode); |
} |
} |
} |
@@ -3413,11 +3412,9 @@ Maybe<bool> JSProxy::HasPropertyWithHandler(Handle<JSProxy> proxy, |
} |
-MaybeHandle<Object> JSProxy::SetPropertyWithHandler(Handle<JSProxy> proxy, |
- Handle<Object> receiver, |
- Handle<Name> name, |
- Handle<Object> value, |
- StrictMode strict_mode) { |
+MaybeHandle<Object> JSProxy::SetPropertyWithHandler( |
+ Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
+ Handle<Object> value, LanguageMode language_mode) { |
Isolate* isolate = proxy->GetIsolate(); |
// TODO(rossberg): adjust once there is a story for symbols vs proxies. |
@@ -3439,7 +3436,7 @@ MaybeHandle<Object> JSProxy::SetPropertyWithHandler(Handle<JSProxy> proxy, |
MaybeHandle<Object> JSProxy::SetPropertyViaPrototypesWithHandler( |
Handle<JSProxy> proxy, Handle<Object> receiver, Handle<Name> name, |
- Handle<Object> value, StrictMode strict_mode, bool* done) { |
+ Handle<Object> value, LanguageMode language_mode, bool* done) { |
Isolate* isolate = proxy->GetIsolate(); |
Handle<Object> handler(proxy->handler(), isolate); // Trap might morph proxy. |
@@ -3510,7 +3507,7 @@ MaybeHandle<Object> JSProxy::SetPropertyViaPrototypesWithHandler( |
DCHECK(writable->IsBoolean()); |
*done = writable->IsFalse(); |
if (!*done) return isolate->factory()->the_hole_value(); |
- if (strict_mode == SLOPPY) return value; |
+ if (is_sloppy(language_mode)) return value; |
Handle<Object> args[] = { name, receiver }; |
THROW_NEW_ERROR(isolate, NewTypeError("strict_read_only_property", |
HandleVector(args, arraysize(args))), |
@@ -3527,7 +3524,7 @@ MaybeHandle<Object> JSProxy::SetPropertyViaPrototypesWithHandler( |
receiver, Handle<JSReceiver>::cast(setter), value); |
} |
- if (strict_mode == SLOPPY) return value; |
+ if (is_sloppy(language_mode)) return value; |
Handle<Object> args2[] = { name, proxy }; |
THROW_NEW_ERROR(isolate, NewTypeError("no_setter_in_callback", |
HandleVector(args2, arraysize(args2))), |
@@ -3535,9 +3532,8 @@ MaybeHandle<Object> JSProxy::SetPropertyViaPrototypesWithHandler( |
} |
-MaybeHandle<Object> JSProxy::DeletePropertyWithHandler(Handle<JSProxy> proxy, |
- Handle<Name> name, |
- StrictMode strict_mode) { |
+MaybeHandle<Object> JSProxy::DeletePropertyWithHandler( |
+ Handle<JSProxy> proxy, Handle<Name> name, LanguageMode language_mode) { |
Isolate* isolate = proxy->GetIsolate(); |
// TODO(rossberg): adjust once there is a story for symbols vs proxies. |
@@ -3555,7 +3551,7 @@ MaybeHandle<Object> JSProxy::DeletePropertyWithHandler(Handle<JSProxy> proxy, |
Object); |
bool result_bool = result->BooleanValue(); |
- if (strict_mode == STRICT && !result_bool) { |
+ if (is_strict(language_mode) && !result_bool) { |
Handle<Object> handler(proxy->handler(), isolate); |
Handle<String> trap_name = isolate->factory()->InternalizeOneByteString( |
STATIC_CHAR_VECTOR("delete")); |
@@ -3568,12 +3564,11 @@ MaybeHandle<Object> JSProxy::DeletePropertyWithHandler(Handle<JSProxy> proxy, |
} |
-MaybeHandle<Object> JSProxy::DeleteElementWithHandler(Handle<JSProxy> proxy, |
- uint32_t index, |
- StrictMode strict_mode) { |
+MaybeHandle<Object> JSProxy::DeleteElementWithHandler( |
+ Handle<JSProxy> proxy, uint32_t index, LanguageMode language_mode) { |
Isolate* isolate = proxy->GetIsolate(); |
Handle<String> name = isolate->factory()->Uint32ToString(index); |
- return JSProxy::DeletePropertyWithHandler(proxy, name, strict_mode); |
+ return JSProxy::DeletePropertyWithHandler(proxy, name, language_mode); |
} |
@@ -4862,7 +4857,7 @@ MaybeHandle<Object> JSObject::DeleteElementWithInterceptor( |
MaybeHandle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
uint32_t index, |
- StrictMode strict_mode) { |
+ LanguageMode language_mode) { |
Isolate* isolate = object->GetIsolate(); |
Factory* factory = isolate->factory(); |
@@ -4875,7 +4870,7 @@ MaybeHandle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
} |
if (object->IsStringObjectWithCharacterAt(index)) { |
- if (strict_mode == STRICT) { |
+ if (is_strict(language_mode)) { |
// Deleting a non-configurable property in strict mode. |
Handle<Object> name = factory->NewNumberFromUint(index); |
Handle<Object> args[2] = { name, object }; |
@@ -4892,7 +4887,7 @@ MaybeHandle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject()); |
return DeleteElement( |
Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)), index, |
- strict_mode); |
+ language_mode); |
} |
Handle<Object> old_value; |
@@ -4917,7 +4912,7 @@ MaybeHandle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
maybe_result = DeleteElementWithInterceptor(object, index); |
} else { |
maybe_result = |
- object->GetElementsAccessor()->Delete(object, index, strict_mode); |
+ object->GetElementsAccessor()->Delete(object, index, language_mode); |
} |
Handle<Object> result; |
ASSIGN_RETURN_ON_EXCEPTION(isolate, result, maybe_result, Object); |
@@ -4965,13 +4960,13 @@ void JSObject::DeleteNormalizedProperty(Handle<JSObject> object, |
MaybeHandle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
Handle<Name> name, |
- StrictMode strict_mode) { |
+ LanguageMode language_mode) { |
// ECMA-262, 3rd, 8.6.2.5 |
DCHECK(name->IsName()); |
uint32_t index = 0; |
if (name->AsArrayIndex(&index)) { |
- return DeleteElement(object, index, strict_mode); |
+ return DeleteElement(object, index, language_mode); |
} |
LookupIterator it(object, name, LookupIterator::HIDDEN); |
@@ -5010,7 +5005,7 @@ MaybeHandle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
case LookupIterator::ACCESSOR: { |
if (!it.IsConfigurable()) { |
// Fail if the property is not configurable. |
- if (strict_mode == STRICT) { |
+ if (is_strict(language_mode)) { |
Handle<Object> args[2] = {name, object}; |
THROW_NEW_ERROR(it.isolate(), |
NewTypeError("strict_delete_property", |
@@ -5052,25 +5047,25 @@ MaybeHandle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
MaybeHandle<Object> JSReceiver::DeleteElement(Handle<JSReceiver> object, |
uint32_t index, |
- StrictMode strict_mode) { |
+ LanguageMode language_mode) { |
if (object->IsJSProxy()) { |
return JSProxy::DeleteElementWithHandler(Handle<JSProxy>::cast(object), |
- index, strict_mode); |
+ index, language_mode); |
} |
return JSObject::DeleteElement(Handle<JSObject>::cast(object), index, |
- strict_mode); |
+ language_mode); |
} |
MaybeHandle<Object> JSReceiver::DeleteProperty(Handle<JSReceiver> object, |
Handle<Name> name, |
- StrictMode strict_mode) { |
+ LanguageMode language_mode) { |
if (object->IsJSProxy()) { |
return JSProxy::DeletePropertyWithHandler(Handle<JSProxy>::cast(object), |
- name, strict_mode); |
+ name, language_mode); |
} |
return JSObject::DeleteProperty(Handle<JSObject>::cast(object), name, |
- strict_mode); |
+ language_mode); |
} |
@@ -9895,16 +9890,17 @@ void JSFunction::SetPrototype(Handle<JSFunction> function, |
bool JSFunction::RemovePrototype() { |
Context* native_context = context()->native_context(); |
- Map* no_prototype_map = shared()->strict_mode() == SLOPPY |
- ? native_context->sloppy_function_without_prototype_map() |
- : native_context->strict_function_without_prototype_map(); |
+ Map* no_prototype_map = |
+ is_strict(shared()->language_mode()) |
+ ? native_context->strict_function_without_prototype_map() |
+ : native_context->sloppy_function_without_prototype_map(); |
if (map() == no_prototype_map) return true; |
#ifdef DEBUG |
- if (map() != (shared()->strict_mode() == SLOPPY |
- ? native_context->sloppy_function_map() |
- : native_context->strict_function_map())) { |
+ if (map() != (is_strict(shared()->language_mode()) |
+ ? native_context->strict_function_map() |
+ : native_context->sloppy_function_map())) { |
return false; |
} |
#endif |
@@ -11291,7 +11287,8 @@ const char* Code::StubType2String(StubType type) { |
void Code::PrintExtraICState(std::ostream& os, // NOLINT |
Kind kind, ExtraICState extra) { |
os << "extra_ic_state = "; |
- if ((kind == STORE_IC || kind == KEYED_STORE_IC) && (extra == STRICT)) { |
+ if ((kind == STORE_IC || kind == KEYED_STORE_IC) && |
+ is_strict(static_cast<LanguageMode>(extra))) { |
os << "STRICT\n"; |
} else { |
os << extra << "\n"; |
@@ -12185,13 +12182,9 @@ MaybeHandle<AccessorPair> JSObject::GetOwnElementAccessorPair( |
MaybeHandle<Object> JSObject::SetElementWithInterceptor( |
- Handle<JSObject> object, |
- uint32_t index, |
- Handle<Object> value, |
- PropertyAttributes attributes, |
- StrictMode strict_mode, |
- bool check_prototype, |
- SetPropertyMode set_mode) { |
+ Handle<JSObject> object, uint32_t index, Handle<Object> value, |
+ PropertyAttributes attributes, LanguageMode language_mode, |
+ bool check_prototype, SetPropertyMode set_mode) { |
Isolate* isolate = object->GetIsolate(); |
// Make sure that the top context does not change when doing |
@@ -12213,9 +12206,7 @@ MaybeHandle<Object> JSObject::SetElementWithInterceptor( |
} |
return SetElementWithoutInterceptor(object, index, value, attributes, |
- strict_mode, |
- check_prototype, |
- set_mode); |
+ language_mode, check_prototype, set_mode); |
} |
@@ -12270,7 +12261,7 @@ MaybeHandle<Object> JSObject::GetElementWithCallback( |
MaybeHandle<Object> JSObject::SetElementWithCallback( |
Handle<Object> object, Handle<Object> structure, uint32_t index, |
- Handle<Object> value, Handle<JSObject> holder, StrictMode strict_mode) { |
+ Handle<Object> value, Handle<JSObject> holder, LanguageMode language_mode) { |
Isolate* isolate = holder->GetIsolate(); |
// We should never get here to initialize a const with the hole |
@@ -12304,7 +12295,7 @@ MaybeHandle<Object> JSObject::SetElementWithCallback( |
return SetPropertyWithDefinedSetter( |
object, Handle<JSReceiver>::cast(setter), value); |
} else { |
- if (strict_mode == SLOPPY) return value; |
+ if (is_sloppy(language_mode)) return value; |
Handle<Object> key(isolate->factory()->NewNumberFromUint(index)); |
Handle<Object> args[2] = { key, holder }; |
THROW_NEW_ERROR( |
@@ -12348,7 +12339,7 @@ bool JSObject::HasDictionaryArgumentsElements() { |
MaybeHandle<Object> JSObject::SetFastElement(Handle<JSObject> object, |
uint32_t index, |
Handle<Object> value, |
- StrictMode strict_mode, |
+ LanguageMode language_mode, |
bool check_prototype) { |
DCHECK(object->HasFastSmiOrObjectElements() || |
object->HasFastArgumentsElements()); |
@@ -12377,7 +12368,7 @@ MaybeHandle<Object> JSObject::SetFastElement(Handle<JSObject> object, |
(index >= capacity || backing_store->get(index)->IsTheHole())) { |
bool found; |
MaybeHandle<Object> result = SetElementWithCallbackSetterInPrototypes( |
- object, index, value, &found, strict_mode); |
+ object, index, value, &found, language_mode); |
if (found) return result; |
} |
@@ -12420,7 +12411,7 @@ MaybeHandle<Object> JSObject::SetFastElement(Handle<JSObject> object, |
} |
if (convert_to_slow) { |
NormalizeElements(object); |
- return SetDictionaryElement(object, index, value, NONE, strict_mode, |
+ return SetDictionaryElement(object, index, value, NONE, language_mode, |
check_prototype); |
} |
} |
@@ -12474,13 +12465,9 @@ MaybeHandle<Object> JSObject::SetFastElement(Handle<JSObject> object, |
MaybeHandle<Object> JSObject::SetDictionaryElement( |
- Handle<JSObject> object, |
- uint32_t index, |
- Handle<Object> value, |
- PropertyAttributes attributes, |
- StrictMode strict_mode, |
- bool check_prototype, |
- SetPropertyMode set_mode) { |
+ Handle<JSObject> object, uint32_t index, Handle<Object> value, |
+ PropertyAttributes attributes, LanguageMode language_mode, |
+ bool check_prototype, SetPropertyMode set_mode) { |
DCHECK(object->HasDictionaryElements() || |
object->HasDictionaryArgumentsElements()); |
Isolate* isolate = object->GetIsolate(); |
@@ -12499,7 +12486,7 @@ MaybeHandle<Object> JSObject::SetDictionaryElement( |
PropertyDetails details = dictionary->DetailsAt(entry); |
if (details.type() == ACCESSOR_CONSTANT && set_mode == SET_PROPERTY) { |
return SetElementWithCallback(object, element, index, value, object, |
- strict_mode); |
+ language_mode); |
} else { |
dictionary->UpdateMaxNumberKey(index); |
// If a value has not been initialized we allow writing to it even if it |
@@ -12509,7 +12496,7 @@ MaybeHandle<Object> JSObject::SetDictionaryElement( |
details = PropertyDetails(attributes, DATA, details.dictionary_index()); |
dictionary->DetailsAtPut(entry, details); |
} else if (details.IsReadOnly() && !element->IsTheHole()) { |
- if (strict_mode == SLOPPY) { |
+ if (is_sloppy(language_mode)) { |
return isolate->factory()->undefined_value(); |
} else { |
Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
@@ -12538,14 +12525,14 @@ MaybeHandle<Object> JSObject::SetDictionaryElement( |
if (check_prototype) { |
bool found; |
MaybeHandle<Object> result = SetElementWithCallbackSetterInPrototypes( |
- object, index, value, &found, strict_mode); |
+ object, index, value, &found, language_mode); |
if (found) return result; |
} |
// When we set the is_extensible flag to false we always force the |
// element into dictionary mode (and force them to stay there). |
if (!object->map()->is_extensible()) { |
- if (strict_mode == SLOPPY) { |
+ if (is_sloppy(language_mode)) { |
return isolate->factory()->undefined_value(); |
} else { |
Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
@@ -12609,12 +12596,11 @@ MaybeHandle<Object> JSObject::SetDictionaryElement( |
return value; |
} |
-MaybeHandle<Object> JSObject::SetFastDoubleElement( |
- Handle<JSObject> object, |
- uint32_t index, |
- Handle<Object> value, |
- StrictMode strict_mode, |
- bool check_prototype) { |
+MaybeHandle<Object> JSObject::SetFastDoubleElement(Handle<JSObject> object, |
+ uint32_t index, |
+ Handle<Object> value, |
+ LanguageMode language_mode, |
+ bool check_prototype) { |
DCHECK(object->HasFastDoubleElements()); |
Handle<FixedArrayBase> base_elms(FixedArrayBase::cast(object->elements())); |
@@ -12627,7 +12613,7 @@ MaybeHandle<Object> JSObject::SetFastDoubleElement( |
Handle<FixedDoubleArray>::cast(base_elms)->is_the_hole(index))) { |
bool found; |
MaybeHandle<Object> result = SetElementWithCallbackSetterInPrototypes( |
- object, index, value, &found, strict_mode); |
+ object, index, value, &found, language_mode); |
if (found) return result; |
} |
@@ -12649,7 +12635,7 @@ MaybeHandle<Object> JSObject::SetFastDoubleElement( |
Handle<Object> result; |
ASSIGN_RETURN_ON_EXCEPTION( |
object->GetIsolate(), result, |
- SetFastElement(object, index, value, strict_mode, check_prototype), |
+ SetFastElement(object, index, value, language_mode, check_prototype), |
Object); |
JSObject::ValidateElements(object); |
return result; |
@@ -12704,38 +12690,36 @@ MaybeHandle<Object> JSObject::SetFastDoubleElement( |
NormalizeElements(object); |
DCHECK(object->HasDictionaryElements()); |
- return SetElement(object, index, value, NONE, strict_mode, check_prototype); |
+ return SetElement(object, index, value, NONE, language_mode, check_prototype); |
} |
MaybeHandle<Object> JSReceiver::SetElement(Handle<JSReceiver> object, |
- uint32_t index, |
- Handle<Object> value, |
+ uint32_t index, Handle<Object> value, |
PropertyAttributes attributes, |
- StrictMode strict_mode) { |
+ LanguageMode language_mode) { |
if (object->IsJSProxy()) { |
- return JSProxy::SetElementWithHandler( |
- Handle<JSProxy>::cast(object), object, index, value, strict_mode); |
+ return JSProxy::SetElementWithHandler(Handle<JSProxy>::cast(object), object, |
+ index, value, language_mode); |
} |
- return JSObject::SetElement( |
- Handle<JSObject>::cast(object), index, value, attributes, strict_mode); |
+ return JSObject::SetElement(Handle<JSObject>::cast(object), index, value, |
+ attributes, language_mode); |
} |
MaybeHandle<Object> JSObject::SetOwnElement(Handle<JSObject> object, |
uint32_t index, |
Handle<Object> value, |
- StrictMode strict_mode) { |
+ LanguageMode language_mode) { |
DCHECK(!object->HasExternalArrayElements()); |
- return JSObject::SetElement(object, index, value, NONE, strict_mode, false); |
+ return JSObject::SetElement(object, index, value, NONE, language_mode, false); |
} |
MaybeHandle<Object> JSObject::SetElement(Handle<JSObject> object, |
- uint32_t index, |
- Handle<Object> value, |
+ uint32_t index, Handle<Object> value, |
PropertyAttributes attributes, |
- StrictMode strict_mode, |
+ LanguageMode language_mode, |
bool check_prototype, |
SetPropertyMode set_mode) { |
Isolate* isolate = object->GetIsolate(); |
@@ -12764,7 +12748,7 @@ MaybeHandle<Object> JSObject::SetElement(Handle<JSObject> object, |
DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject()); |
return SetElement( |
Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)), index, |
- value, attributes, strict_mode, check_prototype, set_mode); |
+ value, attributes, language_mode, check_prototype, set_mode); |
} |
// Don't allow element properties to be redefined for external arrays. |
@@ -12787,10 +12771,12 @@ MaybeHandle<Object> JSObject::SetElement(Handle<JSObject> object, |
if (!object->map()->is_observed()) { |
return object->HasIndexedInterceptor() |
- ? SetElementWithInterceptor(object, index, value, attributes, |
- strict_mode, check_prototype, set_mode) |
- : SetElementWithoutInterceptor(object, index, value, attributes, |
- strict_mode, check_prototype, set_mode); |
+ ? SetElementWithInterceptor(object, index, value, attributes, |
+ language_mode, check_prototype, |
+ set_mode) |
+ : SetElementWithoutInterceptor(object, index, value, attributes, |
+ language_mode, check_prototype, |
+ set_mode); |
} |
Maybe<PropertyAttributes> maybe = |
@@ -12817,12 +12803,11 @@ MaybeHandle<Object> JSObject::SetElement(Handle<JSObject> object, |
ASSIGN_RETURN_ON_EXCEPTION( |
isolate, result, |
object->HasIndexedInterceptor() |
- ? SetElementWithInterceptor( |
- object, index, value, attributes, |
- strict_mode, check_prototype, set_mode) |
- : SetElementWithoutInterceptor( |
- object, index, value, attributes, |
- strict_mode, check_prototype, set_mode), |
+ ? SetElementWithInterceptor(object, index, value, attributes, |
+ language_mode, check_prototype, set_mode) |
+ : SetElementWithoutInterceptor(object, index, value, attributes, |
+ language_mode, check_prototype, |
+ set_mode), |
Object); |
Handle<String> name = isolate->factory()->Uint32ToString(index); |
@@ -12887,13 +12872,9 @@ MaybeHandle<Object> JSObject::SetElement(Handle<JSObject> object, |
MaybeHandle<Object> JSObject::SetElementWithoutInterceptor( |
- Handle<JSObject> object, |
- uint32_t index, |
- Handle<Object> value, |
- PropertyAttributes attributes, |
- StrictMode strict_mode, |
- bool check_prototype, |
- SetPropertyMode set_mode) { |
+ Handle<JSObject> object, uint32_t index, Handle<Object> value, |
+ PropertyAttributes attributes, LanguageMode language_mode, |
+ bool check_prototype, SetPropertyMode set_mode) { |
DCHECK(object->HasDictionaryElements() || |
object->HasDictionaryArgumentsElements() || |
(attributes & (DONT_DELETE | DONT_ENUM | READ_ONLY)) == 0); |
@@ -12910,7 +12891,7 @@ MaybeHandle<Object> JSObject::SetElementWithoutInterceptor( |
} |
if (object->IsJSArray() && JSArray::WouldChangeReadOnlyLength( |
Handle<JSArray>::cast(object), index)) { |
- if (strict_mode == SLOPPY) { |
+ if (is_sloppy(language_mode)) { |
return value; |
} else { |
return JSArray::ReadOnlyLengthError(Handle<JSArray>::cast(object)); |
@@ -12921,10 +12902,11 @@ MaybeHandle<Object> JSObject::SetElementWithoutInterceptor( |
case FAST_ELEMENTS: |
case FAST_HOLEY_SMI_ELEMENTS: |
case FAST_HOLEY_ELEMENTS: |
- return SetFastElement(object, index, value, strict_mode, check_prototype); |
+ return SetFastElement(object, index, value, language_mode, |
+ check_prototype); |
case FAST_DOUBLE_ELEMENTS: |
case FAST_HOLEY_DOUBLE_ELEMENTS: |
- return SetFastDoubleElement(object, index, value, strict_mode, |
+ return SetFastDoubleElement(object, index, value, language_mode, |
check_prototype); |
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ |
@@ -12944,9 +12926,8 @@ MaybeHandle<Object> JSObject::SetElementWithoutInterceptor( |
#undef TYPED_ARRAY_CASE |
case DICTIONARY_ELEMENTS: |
- return SetDictionaryElement(object, index, value, attributes, strict_mode, |
- check_prototype, |
- set_mode); |
+ return SetDictionaryElement(object, index, value, attributes, |
+ language_mode, check_prototype, set_mode); |
case SLOPPY_ARGUMENTS_ELEMENTS: { |
Handle<FixedArray> parameter_map(FixedArray::cast(object->elements())); |
uint32_t length = parameter_map->length(); |
@@ -12970,11 +12951,9 @@ MaybeHandle<Object> JSObject::SetElementWithoutInterceptor( |
Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1))); |
if (arguments->IsDictionary()) { |
return SetDictionaryElement(object, index, value, attributes, |
- strict_mode, |
- check_prototype, |
- set_mode); |
+ language_mode, check_prototype, set_mode); |
} else { |
- return SetFastElement(object, index, value, strict_mode, |
+ return SetFastElement(object, index, value, language_mode, |
check_prototype); |
} |
} |
@@ -14011,14 +13990,12 @@ void Symbol::SymbolShortPrint(std::ostream& os) { |
// StringSharedKeys are used as keys in the eval cache. |
class StringSharedKey : public HashTableKey { |
public: |
- StringSharedKey(Handle<String> source, |
- Handle<SharedFunctionInfo> shared, |
- StrictMode strict_mode, |
- int scope_position) |
+ StringSharedKey(Handle<String> source, Handle<SharedFunctionInfo> shared, |
+ LanguageMode language_mode, int scope_position) |
: source_(source), |
shared_(shared), |
- strict_mode_(strict_mode), |
- scope_position_(scope_position) { } |
+ language_mode_(language_mode), |
+ scope_position_(scope_position) {} |
bool IsMatch(Object* other) OVERRIDE { |
DisallowHeapAllocation no_allocation; |
@@ -14030,10 +14007,10 @@ class StringSharedKey : public HashTableKey { |
FixedArray* other_array = FixedArray::cast(other); |
SharedFunctionInfo* shared = SharedFunctionInfo::cast(other_array->get(0)); |
if (shared != *shared_) return false; |
- int strict_unchecked = Smi::cast(other_array->get(2))->value(); |
- DCHECK(strict_unchecked == SLOPPY || strict_unchecked == STRICT); |
- StrictMode strict_mode = static_cast<StrictMode>(strict_unchecked); |
- if (strict_mode != strict_mode_) return false; |
+ int language_unchecked = Smi::cast(other_array->get(2))->value(); |
+ DCHECK(is_valid_language_mode(language_unchecked)); |
+ LanguageMode language_mode = static_cast<LanguageMode>(language_unchecked); |
+ if (language_mode != language_mode_) return false; |
int scope_position = Smi::cast(other_array->get(3))->value(); |
if (scope_position != scope_position_) return false; |
String* source = String::cast(other_array->get(1)); |
@@ -14042,7 +14019,7 @@ class StringSharedKey : public HashTableKey { |
static uint32_t StringSharedHashHelper(String* source, |
SharedFunctionInfo* shared, |
- StrictMode strict_mode, |
+ LanguageMode language_mode, |
int scope_position) { |
uint32_t hash = source->Hash(); |
if (shared->HasSourceCode()) { |
@@ -14053,14 +14030,15 @@ class StringSharedKey : public HashTableKey { |
// collection. |
Script* script(Script::cast(shared->script())); |
hash ^= String::cast(script->source())->Hash(); |
- if (strict_mode == STRICT) hash ^= 0x8000; |
+ STATIC_ASSERT(LANGUAGE_END == 2); |
+ if (is_strict(language_mode)) hash ^= 0x8000; |
hash += scope_position; |
} |
return hash; |
} |
uint32_t Hash() OVERRIDE { |
- return StringSharedHashHelper(*source_, *shared_, strict_mode_, |
+ return StringSharedHashHelper(*source_, *shared_, language_mode_, |
scope_position_); |
} |
@@ -14072,12 +14050,12 @@ class StringSharedKey : public HashTableKey { |
FixedArray* other_array = FixedArray::cast(obj); |
SharedFunctionInfo* shared = SharedFunctionInfo::cast(other_array->get(0)); |
String* source = String::cast(other_array->get(1)); |
- int strict_unchecked = Smi::cast(other_array->get(2))->value(); |
- DCHECK(strict_unchecked == SLOPPY || strict_unchecked == STRICT); |
- StrictMode strict_mode = static_cast<StrictMode>(strict_unchecked); |
+ int language_unchecked = Smi::cast(other_array->get(2))->value(); |
+ DCHECK(is_valid_language_mode(language_unchecked)); |
+ LanguageMode language_mode = static_cast<LanguageMode>(language_unchecked); |
int scope_position = Smi::cast(other_array->get(3))->value(); |
- return StringSharedHashHelper( |
- source, shared, strict_mode, scope_position); |
+ return StringSharedHashHelper(source, shared, language_mode, |
+ scope_position); |
} |
@@ -14085,7 +14063,7 @@ class StringSharedKey : public HashTableKey { |
Handle<FixedArray> array = isolate->factory()->NewFixedArray(4); |
array->set(0, *shared_); |
array->set(1, *source_); |
- array->set(2, Smi::FromInt(strict_mode_)); |
+ array->set(2, Smi::FromInt(language_mode_)); |
array->set(3, Smi::FromInt(scope_position_)); |
return array; |
} |
@@ -14093,7 +14071,7 @@ class StringSharedKey : public HashTableKey { |
private: |
Handle<String> source_; |
Handle<SharedFunctionInfo> shared_; |
- StrictMode strict_mode_; |
+ LanguageMode language_mode_; |
int scope_position_; |
}; |
@@ -15252,11 +15230,11 @@ Handle<Object> CompilationCacheTable::Lookup(Handle<String> src, |
Handle<Object> CompilationCacheTable::LookupEval( |
Handle<String> src, Handle<SharedFunctionInfo> outer_info, |
- StrictMode strict_mode, int scope_position) { |
+ LanguageMode language_mode, int scope_position) { |
Isolate* isolate = GetIsolate(); |
// Cache key is the tuple (source, outer shared function info, scope position) |
// to unambiguously identify the context chain the cached eval code assumes. |
- StringSharedKey key(src, outer_info, strict_mode, scope_position); |
+ StringSharedKey key(src, outer_info, language_mode, scope_position); |
int entry = FindEntry(&key); |
if (entry == kNotFound) return isolate->factory()->undefined_value(); |
int index = EntryToIndex(entry); |
@@ -15310,7 +15288,7 @@ Handle<CompilationCacheTable> CompilationCacheTable::PutEval( |
Handle<SharedFunctionInfo> outer_info, Handle<SharedFunctionInfo> value, |
int scope_position) { |
Isolate* isolate = cache->GetIsolate(); |
- StringSharedKey key(src, outer_info, value->strict_mode(), scope_position); |
+ StringSharedKey key(src, outer_info, value->language_mode(), scope_position); |
{ |
Handle<Object> k = key.AsHandle(isolate); |
DisallowHeapAllocation no_allocation_scope; |