| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 431e46e5f3271852b47146c843b61986419e4cde..c982dd29614ac1eb06495a93e93591c04cc35933 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -145,15 +145,15 @@
|
| }
|
|
|
|
|
| -Handle<Object> JSReceiver::GetDataProperty(Handle<JSReceiver> object,
|
| - Handle<Name> key) {
|
| +Handle<Object> JSObject::GetDataProperty(Handle<JSObject> object,
|
| + Handle<Name> key) {
|
| LookupIterator it(object, key,
|
| LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR);
|
| return GetDataProperty(&it);
|
| }
|
|
|
|
|
| -Handle<Object> JSReceiver::GetDataProperty(LookupIterator* it) {
|
| +Handle<Object> JSObject::GetDataProperty(LookupIterator* it) {
|
| for (; it->IsFound(); it->Next()) {
|
| switch (it->state()) {
|
| case LookupIterator::INTERCEPTOR:
|
| @@ -389,10 +389,11 @@
|
| receiver, Handle<JSReceiver>::cast(setter), value);
|
| } else {
|
| if (is_sloppy(language_mode)) return value;
|
| - THROW_NEW_ERROR(
|
| - isolate,
|
| - NewTypeError(MessageTemplate::kNoSetterInCallback, name, holder),
|
| - Object);
|
| + Handle<Object> args[] = {name, holder};
|
| + THROW_NEW_ERROR(isolate,
|
| + NewTypeError("no_setter_in_callback",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
| }
|
|
|
| @@ -3321,10 +3322,10 @@
|
| Isolate* isolate, Handle<Object> receiver, Handle<Object> name,
|
| Handle<Object> value, LanguageMode language_mode) {
|
| if (is_sloppy(language_mode)) return value;
|
| - THROW_NEW_ERROR(
|
| - isolate,
|
| - NewTypeError(MessageTemplate::kStrictReadOnlyProperty, name, receiver),
|
| - Object);
|
| + Handle<Object> args[] = {name, receiver};
|
| + THROW_NEW_ERROR(isolate, NewTypeError("strict_read_only_property",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
|
|
|
|
| @@ -3409,10 +3410,12 @@
|
| it->PrepareTransitionToDataProperty(value, attributes, store_mode);
|
| if (it->state() != LookupIterator::TRANSITION) {
|
| if (is_sloppy(language_mode)) return value;
|
| - THROW_NEW_ERROR(
|
| - it->isolate(),
|
| - NewTypeError(MessageTemplate::kObjectNotExtensible, it->name()),
|
| - Object);
|
| +
|
| + Handle<Object> args[] = {it->name()};
|
| + THROW_NEW_ERROR(it->isolate(),
|
| + NewTypeError("object_not_extensible",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
| it->ApplyTransitionToDataProperty();
|
|
|
| @@ -3966,9 +3969,10 @@
|
| }
|
|
|
| if (is_sloppy(language_mode)) return value;
|
| - THROW_NEW_ERROR(
|
| - isolate, NewTypeError(MessageTemplate::kNoSetterInCallback, name, proxy),
|
| - Object);
|
| + Handle<Object> args2[] = { name, proxy };
|
| + THROW_NEW_ERROR(isolate, NewTypeError("no_setter_in_callback",
|
| + HandleVector(args2, arraysize(args2))),
|
| + Object);
|
| }
|
|
|
|
|
| @@ -3993,10 +3997,12 @@
|
| bool result_bool = result->BooleanValue();
|
| if (is_strict(language_mode) && !result_bool) {
|
| Handle<Object> handler(proxy->handler(), isolate);
|
| - THROW_NEW_ERROR(
|
| - isolate,
|
| - NewTypeError(MessageTemplate::kProxyHandlerDeleteFailed, handler),
|
| - Object);
|
| + Handle<String> trap_name = isolate->factory()->InternalizeOneByteString(
|
| + STATIC_CHAR_VECTOR("delete"));
|
| + Handle<Object> args[] = { handler, trap_name };
|
| + THROW_NEW_ERROR(isolate, NewTypeError("handler_failed",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
| return isolate->factory()->ToBoolean(result_bool);
|
| }
|
| @@ -5307,10 +5313,11 @@
|
| if (is_strict(language_mode)) {
|
| // Deleting a non-configurable property in strict mode.
|
| Handle<Object> name = factory->NewNumberFromUint(index);
|
| - THROW_NEW_ERROR(
|
| - isolate,
|
| - NewTypeError(MessageTemplate::kStrictDeleteProperty, name, object),
|
| - Object);
|
| + Handle<Object> args[] = {name, object};
|
| + THROW_NEW_ERROR(isolate,
|
| + NewTypeError("strict_delete_property",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
| return factory->false_value();
|
| }
|
| @@ -5440,9 +5447,10 @@
|
| if (!it.IsConfigurable()) {
|
| // Fail if the property is not configurable.
|
| if (is_strict(language_mode)) {
|
| + Handle<Object> args[] = {name, object};
|
| THROW_NEW_ERROR(it.isolate(),
|
| - NewTypeError(MessageTemplate::kStrictDeleteProperty,
|
| - name, object),
|
| + NewTypeError("strict_delete_property",
|
| + HandleVector(args, arraysize(args))),
|
| Object);
|
| }
|
| return it.isolate()->factory()->false_value();
|
| @@ -5663,9 +5671,10 @@
|
| // It's not possible to seal objects with external array elements
|
| if (object->HasExternalArrayElements() ||
|
| object->HasFixedTypedArrayElements()) {
|
| - THROW_NEW_ERROR(
|
| - isolate, NewTypeError(MessageTemplate::kCannotPreventExtExternalArray),
|
| - Object);
|
| + THROW_NEW_ERROR(isolate,
|
| + NewTypeError("cant_prevent_ext_external_array_elements",
|
| + HandleVector(&object, 1)),
|
| + Object);
|
| }
|
|
|
| // If there are fast elements we normalize.
|
| @@ -5771,9 +5780,10 @@
|
| // It's not possible to seal or freeze objects with external array elements
|
| if (object->HasExternalArrayElements() ||
|
| object->HasFixedTypedArrayElements()) {
|
| - THROW_NEW_ERROR(
|
| - isolate, NewTypeError(MessageTemplate::kCannotPreventExtExternalArray),
|
| - Object);
|
| + THROW_NEW_ERROR(isolate,
|
| + NewTypeError("cant_prevent_ext_external_array_elements",
|
| + HandleVector(&object, 1)),
|
| + Object);
|
| }
|
|
|
| Handle<SeededNumberDictionary> new_element_dictionary;
|
| @@ -10512,7 +10522,7 @@
|
| Handle<String> JSFunction::GetDebugName(Handle<JSFunction> function) {
|
| Isolate* isolate = function->GetIsolate();
|
| Handle<Object> name =
|
| - JSReceiver::GetDataProperty(function, isolate->factory()->name_string());
|
| + JSObject::GetDataProperty(function, isolate->factory()->name_string());
|
| if (name->IsString()) return Handle<String>::cast(name);
|
| return handle(function->shared()->DebugName(), isolate);
|
| }
|
| @@ -12586,8 +12596,9 @@
|
| // or [[Extensible]] must not violate the invariants defined in the preceding
|
| // paragraph.
|
| if (!object->map()->is_extensible()) {
|
| - THROW_NEW_ERROR(isolate,
|
| - NewTypeError(MessageTemplate::kNonExtensibleProto, object),
|
| + Handle<Object> args[] = { object };
|
| + THROW_NEW_ERROR(isolate, NewTypeError("non_extensible_proto",
|
| + HandleVector(args, arraysize(args))),
|
| Object);
|
| }
|
|
|
| @@ -12617,9 +12628,11 @@
|
| Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter));
|
| iter.Advance();
|
| if (!real_receiver->map()->is_extensible()) {
|
| - THROW_NEW_ERROR(
|
| - isolate, NewTypeError(MessageTemplate::kNonExtensibleProto, object),
|
| - Object);
|
| + Handle<Object> args[] = {object};
|
| + THROW_NEW_ERROR(isolate,
|
| + NewTypeError("non_extensible_proto",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
| }
|
| }
|
| @@ -12799,10 +12812,11 @@
|
| } else {
|
| if (is_sloppy(language_mode)) return value;
|
| Handle<Object> key(isolate->factory()->NewNumberFromUint(index));
|
| - THROW_NEW_ERROR(
|
| - isolate,
|
| - NewTypeError(MessageTemplate::kNoSetterInCallback, key, holder),
|
| - Object);
|
| + Handle<Object> args[] = {key, holder};
|
| + THROW_NEW_ERROR(isolate,
|
| + NewTypeError("no_setter_in_callback",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
| }
|
|
|
| @@ -13041,9 +13055,11 @@
|
| } else {
|
| Handle<Object> number = isolate->factory()->NewNumberFromUint(index);
|
| Handle<String> name = isolate->factory()->NumberToString(number);
|
| - THROW_NEW_ERROR(
|
| - isolate, NewTypeError(MessageTemplate::kObjectNotExtensible, name),
|
| - Object);
|
| + Handle<Object> args[] = {name};
|
| + THROW_NEW_ERROR(isolate,
|
| + NewTypeError("object_not_extensible",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
| }
|
|
|
| @@ -13260,8 +13276,11 @@
|
| if ((object->HasExternalArrayElements() ||
|
| object->HasFixedTypedArrayElements()) &&
|
| set_mode == DEFINE_PROPERTY) {
|
| - THROW_NEW_ERROR(
|
| - isolate, NewTypeError(MessageTemplate::kRedefineExternalArray), Object);
|
| + Handle<Object> number = isolate->factory()->NewNumberFromUint(index);
|
| + Handle<Object> args[] = { object, number };
|
| + THROW_NEW_ERROR(isolate, NewTypeError("redef_external_array_element",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
|
|
| // Normalize the elements to enable attributes on the property.
|
| @@ -13704,10 +13723,10 @@
|
| MaybeHandle<Object> JSArray::ReadOnlyLengthError(Handle<JSArray> array) {
|
| Isolate* isolate = array->GetIsolate();
|
| Handle<Name> length = isolate->factory()->length_string();
|
| - THROW_NEW_ERROR(
|
| - isolate,
|
| - NewTypeError(MessageTemplate::kStrictReadOnlyProperty, length, array),
|
| - Object);
|
| + Handle<Object> args[] = {length, array};
|
| + THROW_NEW_ERROR(isolate, NewTypeError("strict_read_only_property",
|
| + HandleVector(args, arraysize(args))),
|
| + Object);
|
| }
|
|
|
|
|
|
|