Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/objects.cc

Issue 516913003: Do not expose termination exceptions to the Exception API. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: address comment Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/jsregexp.cc ('k') | src/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 Handle<Name> name, 417 Handle<Name> name,
418 Handle<JSObject> holder, 418 Handle<JSObject> holder,
419 Handle<Object> structure) { 419 Handle<Object> structure) {
420 Isolate* isolate = name->GetIsolate(); 420 Isolate* isolate = name->GetIsolate();
421 DCHECK(!structure->IsForeign()); 421 DCHECK(!structure->IsForeign());
422 // api style callbacks. 422 // api style callbacks.
423 if (structure->IsAccessorInfo()) { 423 if (structure->IsAccessorInfo()) {
424 Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(structure); 424 Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(structure);
425 if (!info->IsCompatibleReceiver(*receiver)) { 425 if (!info->IsCompatibleReceiver(*receiver)) {
426 Handle<Object> args[2] = { name, receiver }; 426 Handle<Object> args[2] = { name, receiver };
427 Handle<Object> error = 427 THROW_NEW_ERROR(isolate,
428 isolate->factory()->NewTypeError("incompatible_method_receiver", 428 NewTypeError("incompatible_method_receiver",
429 HandleVector(args, 429 HandleVector(args, arraysize(args))),
430 arraysize(args))); 430 Object);
431 return isolate->Throw<Object>(error);
432 } 431 }
433 if (structure->IsDeclaredAccessorInfo()) { 432 if (structure->IsDeclaredAccessorInfo()) {
434 return GetDeclaredAccessorProperty( 433 return GetDeclaredAccessorProperty(
435 receiver, 434 receiver,
436 Handle<DeclaredAccessorInfo>::cast(structure), 435 Handle<DeclaredAccessorInfo>::cast(structure),
437 isolate); 436 isolate);
438 } 437 }
439 438
440 Handle<ExecutableAccessorInfo> data = 439 Handle<ExecutableAccessorInfo> data =
441 Handle<ExecutableAccessorInfo>::cast(structure); 440 Handle<ExecutableAccessorInfo>::cast(structure);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 // We should never get here to initialize a const with the hole 488 // We should never get here to initialize a const with the hole
490 // value since a const declaration would conflict with the setter. 489 // value since a const declaration would conflict with the setter.
491 DCHECK(!structure->IsForeign()); 490 DCHECK(!structure->IsForeign());
492 if (structure->IsExecutableAccessorInfo()) { 491 if (structure->IsExecutableAccessorInfo()) {
493 // Don't call executable accessor setters with non-JSObject receivers. 492 // Don't call executable accessor setters with non-JSObject receivers.
494 if (!receiver->IsJSObject()) return value; 493 if (!receiver->IsJSObject()) return value;
495 // api style callbacks 494 // api style callbacks
496 ExecutableAccessorInfo* info = ExecutableAccessorInfo::cast(*structure); 495 ExecutableAccessorInfo* info = ExecutableAccessorInfo::cast(*structure);
497 if (!info->IsCompatibleReceiver(*receiver)) { 496 if (!info->IsCompatibleReceiver(*receiver)) {
498 Handle<Object> args[2] = { name, receiver }; 497 Handle<Object> args[2] = { name, receiver };
499 Handle<Object> error = 498 THROW_NEW_ERROR(isolate,
500 isolate->factory()->NewTypeError("incompatible_method_receiver", 499 NewTypeError("incompatible_method_receiver",
501 HandleVector(args, 500 HandleVector(args, arraysize(args))),
502 arraysize(args))); 501 Object);
503 return isolate->Throw<Object>(error);
504 } 502 }
505 Object* call_obj = info->setter(); 503 Object* call_obj = info->setter();
506 v8::AccessorNameSetterCallback call_fun = 504 v8::AccessorNameSetterCallback call_fun =
507 v8::ToCData<v8::AccessorNameSetterCallback>(call_obj); 505 v8::ToCData<v8::AccessorNameSetterCallback>(call_obj);
508 if (call_fun == NULL) return value; 506 if (call_fun == NULL) return value;
509 LOG(isolate, ApiNamedPropertyAccess("store", *holder, *name)); 507 LOG(isolate, ApiNamedPropertyAccess("store", *holder, *name));
510 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder); 508 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder);
511 args.Call(call_fun, 509 args.Call(call_fun,
512 v8::Utils::ToLocal(name), 510 v8::Utils::ToLocal(name),
513 v8::Utils::ToLocal(value)); 511 v8::Utils::ToLocal(value));
514 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); 512 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
515 return value; 513 return value;
516 } 514 }
517 515
518 if (structure->IsAccessorPair()) { 516 if (structure->IsAccessorPair()) {
519 Handle<Object> setter(AccessorPair::cast(*structure)->setter(), isolate); 517 Handle<Object> setter(AccessorPair::cast(*structure)->setter(), isolate);
520 if (setter->IsSpecFunction()) { 518 if (setter->IsSpecFunction()) {
521 // TODO(rossberg): nicer would be to cast to some JSCallable here... 519 // TODO(rossberg): nicer would be to cast to some JSCallable here...
522 return SetPropertyWithDefinedSetter( 520 return SetPropertyWithDefinedSetter(
523 receiver, Handle<JSReceiver>::cast(setter), value); 521 receiver, Handle<JSReceiver>::cast(setter), value);
524 } else { 522 } else {
525 if (strict_mode == SLOPPY) return value; 523 if (strict_mode == SLOPPY) return value;
526 Handle<Object> args[2] = { name, holder }; 524 Handle<Object> args[2] = { name, holder };
527 Handle<Object> error = 525 THROW_NEW_ERROR(
528 isolate->factory()->NewTypeError("no_setter_in_callback", 526 isolate, NewTypeError("no_setter_in_callback", HandleVector(args, 2)),
529 HandleVector(args, 2)); 527 Object);
530 return isolate->Throw<Object>(error);
531 } 528 }
532 } 529 }
533 530
534 // TODO(dcarney): Handle correctly. 531 // TODO(dcarney): Handle correctly.
535 if (structure->IsDeclaredAccessorInfo()) { 532 if (structure->IsDeclaredAccessorInfo()) {
536 return value; 533 return value;
537 } 534 }
538 535
539 UNREACHABLE(); 536 UNREACHABLE();
540 return MaybeHandle<Object>(); 537 return MaybeHandle<Object>();
(...skipping 2361 matching lines...) Expand 10 before | Expand all | Expand 10 after
2902 } 2899 }
2903 2900
2904 if (done) break; 2901 if (done) break;
2905 } 2902 }
2906 2903
2907 // If the receiver is the JSGlobalObject, the store was contextual. In case 2904 // If the receiver is the JSGlobalObject, the store was contextual. In case
2908 // the property did not exist yet on the global object itself, we have to 2905 // the property did not exist yet on the global object itself, we have to
2909 // throw a reference error in strict mode. 2906 // throw a reference error in strict mode.
2910 if (it->GetReceiver()->IsJSGlobalObject() && strict_mode == STRICT) { 2907 if (it->GetReceiver()->IsJSGlobalObject() && strict_mode == STRICT) {
2911 Handle<Object> args[1] = {it->name()}; 2908 Handle<Object> args[1] = {it->name()};
2912 Handle<Object> error = it->isolate()->factory()->NewReferenceError( 2909 THROW_NEW_ERROR(it->isolate(),
2913 "not_defined", HandleVector(args, 1)); 2910 NewReferenceError("not_defined", HandleVector(args, 1)),
2914 return it->isolate()->Throw<Object>(error); 2911 Object);
2915 } 2912 }
2916 2913
2917 return AddDataProperty(it, value, NONE, strict_mode, store_mode); 2914 return AddDataProperty(it, value, NONE, strict_mode, store_mode);
2918 } 2915 }
2919 2916
2920 2917
2921 MaybeHandle<Object> Object::WriteToReadOnlyProperty(LookupIterator* it, 2918 MaybeHandle<Object> Object::WriteToReadOnlyProperty(LookupIterator* it,
2922 Handle<Object> value, 2919 Handle<Object> value,
2923 StrictMode strict_mode) { 2920 StrictMode strict_mode) {
2924 if (strict_mode != STRICT) return value; 2921 if (strict_mode != STRICT) return value;
2925 2922
2926 Handle<Object> args[] = {it->name(), it->GetReceiver()}; 2923 Handle<Object> args[] = {it->name(), it->GetReceiver()};
2927 Handle<Object> error = it->factory()->NewTypeError( 2924 THROW_NEW_ERROR(it->isolate(),
2928 "strict_read_only_property", HandleVector(args, arraysize(args))); 2925 NewTypeError("strict_read_only_property",
2929 return it->isolate()->Throw<Object>(error); 2926 HandleVector(args, arraysize(args))),
2927 Object);
2930 } 2928 }
2931 2929
2932 2930
2933 Handle<Object> Object::SetDataProperty(LookupIterator* it, 2931 Handle<Object> Object::SetDataProperty(LookupIterator* it,
2934 Handle<Object> value) { 2932 Handle<Object> value) {
2935 // Proxies are handled on the WithHandler path. Other non-JSObjects cannot 2933 // Proxies are handled on the WithHandler path. Other non-JSObjects cannot
2936 // have own properties. 2934 // have own properties.
2937 Handle<JSObject> receiver = Handle<JSObject>::cast(it->GetReceiver()); 2935 Handle<JSObject> receiver = Handle<JSObject>::cast(it->GetReceiver());
2938 2936
2939 // Store on the holder which may be hidden behind the receiver. 2937 // Store on the holder which may be hidden behind the receiver.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2982 // instead. If the prototype is Null, the proxy is detached. 2980 // instead. If the prototype is Null, the proxy is detached.
2983 if (receiver->IsJSGlobalProxy()) return value; 2981 if (receiver->IsJSGlobalProxy()) return value;
2984 2982
2985 // Possibly migrate to the most up-to-date map that will be able to store 2983 // Possibly migrate to the most up-to-date map that will be able to store
2986 // |value| under it->name() with |attributes|. 2984 // |value| under it->name() with |attributes|.
2987 it->PrepareTransitionToDataProperty(value, attributes, store_mode); 2985 it->PrepareTransitionToDataProperty(value, attributes, store_mode);
2988 if (it->state() != LookupIterator::TRANSITION) { 2986 if (it->state() != LookupIterator::TRANSITION) {
2989 if (strict_mode == SLOPPY) return value; 2987 if (strict_mode == SLOPPY) return value;
2990 2988
2991 Handle<Object> args[1] = {it->name()}; 2989 Handle<Object> args[1] = {it->name()};
2992 Handle<Object> error = it->factory()->NewTypeError( 2990 THROW_NEW_ERROR(it->isolate(),
2993 "object_not_extensible", HandleVector(args, arraysize(args))); 2991 NewTypeError("object_not_extensible",
2994 return it->isolate()->Throw<Object>(error); 2992 HandleVector(args, arraysize(args))),
2993 Object);
2995 } 2994 }
2996 it->ApplyTransitionToDataProperty(); 2995 it->ApplyTransitionToDataProperty();
2997 2996
2998 // TODO(verwaest): Encapsulate dictionary handling better. 2997 // TODO(verwaest): Encapsulate dictionary handling better.
2999 if (receiver->map()->is_dictionary_map()) { 2998 if (receiver->map()->is_dictionary_map()) {
3000 // TODO(verwaest): Probably should ensure this is done beforehand. 2999 // TODO(verwaest): Probably should ensure this is done beforehand.
3001 it->InternalizeName(); 3000 it->InternalizeName();
3002 JSObject::AddSlowProperty(receiver, it->name(), value, attributes); 3001 JSObject::AddSlowProperty(receiver, it->name(), value, attributes);
3003 } else { 3002 } else {
3004 // Write the property value. 3003 // Write the property value.
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
3476 isolate->factory()->InternalizeOneByteString( 3475 isolate->factory()->InternalizeOneByteString(
3477 STATIC_ASCII_VECTOR("configurable_")); 3476 STATIC_ASCII_VECTOR("configurable_"));
3478 Handle<Object> configurable = 3477 Handle<Object> configurable =
3479 Object::GetProperty(desc, configurable_name).ToHandleChecked(); 3478 Object::GetProperty(desc, configurable_name).ToHandleChecked();
3480 DCHECK(configurable->IsBoolean()); 3479 DCHECK(configurable->IsBoolean());
3481 if (configurable->IsFalse()) { 3480 if (configurable->IsFalse()) {
3482 Handle<String> trap = 3481 Handle<String> trap =
3483 isolate->factory()->InternalizeOneByteString( 3482 isolate->factory()->InternalizeOneByteString(
3484 STATIC_ASCII_VECTOR("getPropertyDescriptor")); 3483 STATIC_ASCII_VECTOR("getPropertyDescriptor"));
3485 Handle<Object> args[] = { handler, trap, name }; 3484 Handle<Object> args[] = { handler, trap, name };
3486 Handle<Object> error = isolate->factory()->NewTypeError( 3485 THROW_NEW_ERROR(isolate, NewTypeError("proxy_prop_not_configurable",
3487 "proxy_prop_not_configurable", HandleVector(args, arraysize(args))); 3486 HandleVector(args, arraysize(args))),
3488 return isolate->Throw<Object>(error); 3487 Object);
3489 } 3488 }
3490 DCHECK(configurable->IsTrue()); 3489 DCHECK(configurable->IsTrue());
3491 3490
3492 // Check for DataDescriptor. 3491 // Check for DataDescriptor.
3493 Handle<String> hasWritable_name = 3492 Handle<String> hasWritable_name =
3494 isolate->factory()->InternalizeOneByteString( 3493 isolate->factory()->InternalizeOneByteString(
3495 STATIC_ASCII_VECTOR("hasWritable_")); 3494 STATIC_ASCII_VECTOR("hasWritable_"));
3496 Handle<Object> hasWritable = 3495 Handle<Object> hasWritable =
3497 Object::GetProperty(desc, hasWritable_name).ToHandleChecked(); 3496 Object::GetProperty(desc, hasWritable_name).ToHandleChecked();
3498 DCHECK(hasWritable->IsBoolean()); 3497 DCHECK(hasWritable->IsBoolean());
3499 if (hasWritable->IsTrue()) { 3498 if (hasWritable->IsTrue()) {
3500 Handle<String> writable_name = 3499 Handle<String> writable_name =
3501 isolate->factory()->InternalizeOneByteString( 3500 isolate->factory()->InternalizeOneByteString(
3502 STATIC_ASCII_VECTOR("writable_")); 3501 STATIC_ASCII_VECTOR("writable_"));
3503 Handle<Object> writable = 3502 Handle<Object> writable =
3504 Object::GetProperty(desc, writable_name).ToHandleChecked(); 3503 Object::GetProperty(desc, writable_name).ToHandleChecked();
3505 DCHECK(writable->IsBoolean()); 3504 DCHECK(writable->IsBoolean());
3506 *done = writable->IsFalse(); 3505 *done = writable->IsFalse();
3507 if (!*done) return isolate->factory()->the_hole_value(); 3506 if (!*done) return isolate->factory()->the_hole_value();
3508 if (strict_mode == SLOPPY) return value; 3507 if (strict_mode == SLOPPY) return value;
3509 Handle<Object> args[] = { name, receiver }; 3508 Handle<Object> args[] = { name, receiver };
3510 Handle<Object> error = isolate->factory()->NewTypeError( 3509 THROW_NEW_ERROR(isolate, NewTypeError("strict_read_only_property",
3511 "strict_read_only_property", HandleVector(args, arraysize(args))); 3510 HandleVector(args, arraysize(args))),
3512 return isolate->Throw<Object>(error); 3511 Object);
3513 } 3512 }
3514 3513
3515 // We have an AccessorDescriptor. 3514 // We have an AccessorDescriptor.
3516 Handle<String> set_name = isolate->factory()->InternalizeOneByteString( 3515 Handle<String> set_name = isolate->factory()->InternalizeOneByteString(
3517 STATIC_ASCII_VECTOR("set_")); 3516 STATIC_ASCII_VECTOR("set_"));
3518 Handle<Object> setter = Object::GetProperty(desc, set_name).ToHandleChecked(); 3517 Handle<Object> setter = Object::GetProperty(desc, set_name).ToHandleChecked();
3519 if (!setter->IsUndefined()) { 3518 if (!setter->IsUndefined()) {
3520 // TODO(rossberg): nicer would be to cast to some JSCallable here... 3519 // TODO(rossberg): nicer would be to cast to some JSCallable here...
3521 return SetPropertyWithDefinedSetter( 3520 return SetPropertyWithDefinedSetter(
3522 receiver, Handle<JSReceiver>::cast(setter), value); 3521 receiver, Handle<JSReceiver>::cast(setter), value);
3523 } 3522 }
3524 3523
3525 if (strict_mode == SLOPPY) return value; 3524 if (strict_mode == SLOPPY) return value;
3526 Handle<Object> args2[] = { name, proxy }; 3525 Handle<Object> args2[] = { name, proxy };
3527 Handle<Object> error = isolate->factory()->NewTypeError( 3526 THROW_NEW_ERROR(isolate, NewTypeError("no_setter_in_callback",
3528 "no_setter_in_callback", HandleVector(args2, arraysize(args2))); 3527 HandleVector(args2, arraysize(args2))),
3529 return isolate->Throw<Object>(error); 3528 Object);
3530 } 3529 }
3531 3530
3532 3531
3533 MaybeHandle<Object> JSProxy::DeletePropertyWithHandler( 3532 MaybeHandle<Object> JSProxy::DeletePropertyWithHandler(
3534 Handle<JSProxy> proxy, Handle<Name> name, DeleteMode mode) { 3533 Handle<JSProxy> proxy, Handle<Name> name, DeleteMode mode) {
3535 Isolate* isolate = proxy->GetIsolate(); 3534 Isolate* isolate = proxy->GetIsolate();
3536 3535
3537 // TODO(rossberg): adjust once there is a story for symbols vs proxies. 3536 // TODO(rossberg): adjust once there is a story for symbols vs proxies.
3538 if (name->IsSymbol()) return isolate->factory()->false_value(); 3537 if (name->IsSymbol()) return isolate->factory()->false_value();
3539 3538
3540 Handle<Object> args[] = { name }; 3539 Handle<Object> args[] = { name };
3541 Handle<Object> result; 3540 Handle<Object> result;
3542 ASSIGN_RETURN_ON_EXCEPTION( 3541 ASSIGN_RETURN_ON_EXCEPTION(
3543 isolate, result, 3542 isolate, result,
3544 CallTrap(proxy, 3543 CallTrap(proxy,
3545 "delete", 3544 "delete",
3546 Handle<Object>(), 3545 Handle<Object>(),
3547 arraysize(args), 3546 arraysize(args),
3548 args), 3547 args),
3549 Object); 3548 Object);
3550 3549
3551 bool result_bool = result->BooleanValue(); 3550 bool result_bool = result->BooleanValue();
3552 if (mode == STRICT_DELETION && !result_bool) { 3551 if (mode == STRICT_DELETION && !result_bool) {
3553 Handle<Object> handler(proxy->handler(), isolate); 3552 Handle<Object> handler(proxy->handler(), isolate);
3554 Handle<String> trap_name = isolate->factory()->InternalizeOneByteString( 3553 Handle<String> trap_name = isolate->factory()->InternalizeOneByteString(
3555 STATIC_ASCII_VECTOR("delete")); 3554 STATIC_ASCII_VECTOR("delete"));
3556 Handle<Object> args[] = { handler, trap_name }; 3555 Handle<Object> args[] = { handler, trap_name };
3557 Handle<Object> error = isolate->factory()->NewTypeError( 3556 THROW_NEW_ERROR(isolate, NewTypeError("handler_failed",
3558 "handler_failed", HandleVector(args, arraysize(args))); 3557 HandleVector(args, arraysize(args))),
3559 return isolate->Throw<Object>(error); 3558 Object);
3560 } 3559 }
3561 return isolate->factory()->ToBoolean(result_bool); 3560 return isolate->factory()->ToBoolean(result_bool);
3562 } 3561 }
3563 3562
3564 3563
3565 MaybeHandle<Object> JSProxy::DeleteElementWithHandler( 3564 MaybeHandle<Object> JSProxy::DeleteElementWithHandler(
3566 Handle<JSProxy> proxy, uint32_t index, DeleteMode mode) { 3565 Handle<JSProxy> proxy, uint32_t index, DeleteMode mode) {
3567 Isolate* isolate = proxy->GetIsolate(); 3566 Isolate* isolate = proxy->GetIsolate();
3568 Handle<String> name = isolate->factory()->Uint32ToString(index); 3567 Handle<String> name = isolate->factory()->Uint32ToString(index);
3569 return JSProxy::DeletePropertyWithHandler(proxy, name, mode); 3568 return JSProxy::DeletePropertyWithHandler(proxy, name, mode);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
3623 Object::GetProperty(desc, set_n), 3622 Object::GetProperty(desc, set_n),
3624 Maybe<PropertyAttributes>()); 3623 Maybe<PropertyAttributes>());
3625 writable = isolate->factory()->ToBoolean(!setter->IsUndefined()); 3624 writable = isolate->factory()->ToBoolean(!setter->IsUndefined());
3626 } 3625 }
3627 3626
3628 if (configurable->IsFalse()) { 3627 if (configurable->IsFalse()) {
3629 Handle<Object> handler(proxy->handler(), isolate); 3628 Handle<Object> handler(proxy->handler(), isolate);
3630 Handle<String> trap = isolate->factory()->InternalizeOneByteString( 3629 Handle<String> trap = isolate->factory()->InternalizeOneByteString(
3631 STATIC_ASCII_VECTOR("getPropertyDescriptor")); 3630 STATIC_ASCII_VECTOR("getPropertyDescriptor"));
3632 Handle<Object> args[] = { handler, trap, name }; 3631 Handle<Object> args[] = { handler, trap, name };
3633 Handle<Object> error = isolate->factory()->NewTypeError( 3632 Handle<Object> error;
3633 MaybeHandle<Object> maybe_error = isolate->factory()->NewTypeError(
3634 "proxy_prop_not_configurable", HandleVector(args, arraysize(args))); 3634 "proxy_prop_not_configurable", HandleVector(args, arraysize(args)));
3635 isolate->Throw(*error); 3635 if (maybe_error.ToHandle(&error)) isolate->Throw(*error);
3636 return maybe(NONE); 3636 return maybe(NONE);
3637 } 3637 }
3638 3638
3639 int attributes = NONE; 3639 int attributes = NONE;
3640 if (!enumerable->BooleanValue()) attributes |= DONT_ENUM; 3640 if (!enumerable->BooleanValue()) attributes |= DONT_ENUM;
3641 if (!configurable->BooleanValue()) attributes |= DONT_DELETE; 3641 if (!configurable->BooleanValue()) attributes |= DONT_DELETE;
3642 if (!writable->BooleanValue()) attributes |= READ_ONLY; 3642 if (!writable->BooleanValue()) attributes |= READ_ONLY;
3643 return maybe(static_cast<PropertyAttributes>(attributes)); 3643 return maybe(static_cast<PropertyAttributes>(attributes));
3644 } 3644 }
3645 3645
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3685 Handle<String> trap_name = isolate->factory()->InternalizeUtf8String(name); 3685 Handle<String> trap_name = isolate->factory()->InternalizeUtf8String(name);
3686 Handle<Object> trap; 3686 Handle<Object> trap;
3687 ASSIGN_RETURN_ON_EXCEPTION( 3687 ASSIGN_RETURN_ON_EXCEPTION(
3688 isolate, trap, 3688 isolate, trap,
3689 Object::GetPropertyOrElement(handler, trap_name), 3689 Object::GetPropertyOrElement(handler, trap_name),
3690 Object); 3690 Object);
3691 3691
3692 if (trap->IsUndefined()) { 3692 if (trap->IsUndefined()) {
3693 if (derived.is_null()) { 3693 if (derived.is_null()) {
3694 Handle<Object> args[] = { handler, trap_name }; 3694 Handle<Object> args[] = { handler, trap_name };
3695 Handle<Object> error = isolate->factory()->NewTypeError( 3695 THROW_NEW_ERROR(isolate,
3696 "handler_trap_missing", HandleVector(args, arraysize(args))); 3696 NewTypeError("handler_trap_missing",
3697 return isolate->Throw<Object>(error); 3697 HandleVector(args, arraysize(args))),
3698 Object);
3698 } 3699 }
3699 trap = Handle<Object>(derived); 3700 trap = Handle<Object>(derived);
3700 } 3701 }
3701 3702
3702 return Execution::Call(isolate, trap, handler, argc, argv); 3703 return Execution::Call(isolate, trap, handler, argc, argv);
3703 } 3704 }
3704 3705
3705 3706
3706 void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) { 3707 void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) {
3707 DCHECK(object->map()->inobject_properties() == map->inobject_properties()); 3708 DCHECK(object->map()->inobject_properties() == map->inobject_properties());
(...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after
4839 isolate->ReportFailedAccessCheck(object, v8::ACCESS_DELETE); 4840 isolate->ReportFailedAccessCheck(object, v8::ACCESS_DELETE);
4840 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); 4841 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
4841 return factory->false_value(); 4842 return factory->false_value();
4842 } 4843 }
4843 4844
4844 if (object->IsStringObjectWithCharacterAt(index)) { 4845 if (object->IsStringObjectWithCharacterAt(index)) {
4845 if (mode == STRICT_DELETION) { 4846 if (mode == STRICT_DELETION) {
4846 // Deleting a non-configurable property in strict mode. 4847 // Deleting a non-configurable property in strict mode.
4847 Handle<Object> name = factory->NewNumberFromUint(index); 4848 Handle<Object> name = factory->NewNumberFromUint(index);
4848 Handle<Object> args[2] = { name, object }; 4849 Handle<Object> args[2] = { name, object };
4849 Handle<Object> error = 4850 THROW_NEW_ERROR(isolate, NewTypeError("strict_delete_property",
4850 factory->NewTypeError("strict_delete_property", 4851 HandleVector(args, 2)),
4851 HandleVector(args, 2)); 4852 Object);
4852 isolate->Throw(*error);
4853 return Handle<Object>();
4854 } 4853 }
4855 return factory->false_value(); 4854 return factory->false_value();
4856 } 4855 }
4857 4856
4858 if (object->IsJSGlobalProxy()) { 4857 if (object->IsJSGlobalProxy()) {
4859 PrototypeIterator iter(isolate, object); 4858 PrototypeIterator iter(isolate, object);
4860 if (iter.IsAtEnd()) return factory->false_value(); 4859 if (iter.IsAtEnd()) return factory->false_value();
4861 DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject()); 4860 DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject());
4862 return DeleteElement( 4861 return DeleteElement(
4863 Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)), index, 4862 Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)), index,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
4945 // An exception was thrown in the interceptor. Propagate. 4944 // An exception was thrown in the interceptor. Propagate.
4946 if (it.isolate()->has_pending_exception()) return maybe_result; 4945 if (it.isolate()->has_pending_exception()) return maybe_result;
4947 break; 4946 break;
4948 } 4947 }
4949 case LookupIterator::PROPERTY: { 4948 case LookupIterator::PROPERTY: {
4950 if (!it.HasProperty()) continue; 4949 if (!it.HasProperty()) continue;
4951 if (delete_mode != FORCE_DELETION && !it.IsConfigurable()) { 4950 if (delete_mode != FORCE_DELETION && !it.IsConfigurable()) {
4952 // Fail if the property is not configurable. 4951 // Fail if the property is not configurable.
4953 if (delete_mode == STRICT_DELETION) { 4952 if (delete_mode == STRICT_DELETION) {
4954 Handle<Object> args[2] = {name, object}; 4953 Handle<Object> args[2] = {name, object};
4955 Handle<Object> error = it.isolate()->factory()->NewTypeError( 4954 THROW_NEW_ERROR(it.isolate(),
4956 "strict_delete_property", HandleVector(args, arraysize(args))); 4955 NewTypeError("strict_delete_property",
4957 it.isolate()->Throw(*error); 4956 HandleVector(args, arraysize(args))),
4958 return Handle<Object>(); 4957 Object);
4959 } 4958 }
4960 return it.isolate()->factory()->false_value(); 4959 return it.isolate()->factory()->false_value();
4961 } 4960 }
4962 4961
4963 Handle<Object> old_value; 4962 Handle<Object> old_value;
4964 if (is_observed) { 4963 if (is_observed) {
4965 switch (it.property_kind()) { 4964 switch (it.property_kind()) {
4966 case LookupIterator::ACCESSOR: 4965 case LookupIterator::ACCESSOR:
4967 old_value = it.isolate()->factory()->the_hole_value(); 4966 old_value = it.isolate()->factory()->the_hole_value();
4968 break; 4967 break;
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
5173 PrototypeIterator iter(isolate, object); 5172 PrototypeIterator iter(isolate, object);
5174 if (iter.IsAtEnd()) return object; 5173 if (iter.IsAtEnd()) return object;
5175 DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject()); 5174 DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject());
5176 return PreventExtensions( 5175 return PreventExtensions(
5177 Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter))); 5176 Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)));
5178 } 5177 }
5179 5178
5180 // It's not possible to seal objects with external array elements 5179 // It's not possible to seal objects with external array elements
5181 if (object->HasExternalArrayElements() || 5180 if (object->HasExternalArrayElements() ||
5182 object->HasFixedTypedArrayElements()) { 5181 object->HasFixedTypedArrayElements()) {
5183 Handle<Object> error = 5182 THROW_NEW_ERROR(isolate,
5184 isolate->factory()->NewTypeError( 5183 NewTypeError("cant_prevent_ext_external_array_elements",
5185 "cant_prevent_ext_external_array_elements", 5184 HandleVector(&object, 1)),
5186 HandleVector(&object, 1)); 5185 Object);
5187 return isolate->Throw<Object>(error);
5188 } 5186 }
5189 5187
5190 // If there are fast elements we normalize. 5188 // If there are fast elements we normalize.
5191 Handle<SeededNumberDictionary> dictionary = NormalizeElements(object); 5189 Handle<SeededNumberDictionary> dictionary = NormalizeElements(object);
5192 DCHECK(object->HasDictionaryElements() || 5190 DCHECK(object->HasDictionaryElements() ||
5193 object->HasDictionaryArgumentsElements()); 5191 object->HasDictionaryArgumentsElements());
5194 5192
5195 // Make sure that we never go back to fast case. 5193 // Make sure that we never go back to fast case.
5196 dictionary->set_requires_slow_elements(); 5194 dictionary->set_requires_slow_elements();
5197 5195
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
5256 if (object->IsJSGlobalProxy()) { 5254 if (object->IsJSGlobalProxy()) {
5257 PrototypeIterator iter(isolate, object); 5255 PrototypeIterator iter(isolate, object);
5258 if (iter.IsAtEnd()) return object; 5256 if (iter.IsAtEnd()) return object;
5259 DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject()); 5257 DCHECK(PrototypeIterator::GetCurrent(iter)->IsJSGlobalObject());
5260 return Freeze(Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter))); 5258 return Freeze(Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)));
5261 } 5259 }
5262 5260
5263 // It's not possible to freeze objects with external array elements 5261 // It's not possible to freeze objects with external array elements
5264 if (object->HasExternalArrayElements() || 5262 if (object->HasExternalArrayElements() ||
5265 object->HasFixedTypedArrayElements()) { 5263 object->HasFixedTypedArrayElements()) {
5266 Handle<Object> error = 5264 THROW_NEW_ERROR(isolate,
5267 isolate->factory()->NewTypeError( 5265 NewTypeError("cant_prevent_ext_external_array_elements",
5268 "cant_prevent_ext_external_array_elements", 5266 HandleVector(&object, 1)),
5269 HandleVector(&object, 1)); 5267 Object);
5270 return isolate->Throw<Object>(error);
5271 } 5268 }
5272 5269
5273 Handle<SeededNumberDictionary> new_element_dictionary; 5270 Handle<SeededNumberDictionary> new_element_dictionary;
5274 if (!object->elements()->IsDictionary()) { 5271 if (!object->elements()->IsDictionary()) {
5275 int length = object->IsJSArray() 5272 int length = object->IsJSArray()
5276 ? Smi::cast(Handle<JSArray>::cast(object)->length())->value() 5273 ? Smi::cast(Handle<JSArray>::cast(object)->length())->value()
5277 : object->elements()->length(); 5274 : object->elements()->length();
5278 if (length > 0) { 5275 if (length > 0) {
5279 int capacity = 0; 5276 int capacity = 0;
5280 int used = 0; 5277 int used = 0;
(...skipping 6422 matching lines...) Expand 10 before | Expand all | Expand 10 after
11703 // From 8.6.2 Object Internal Methods 11700 // From 8.6.2 Object Internal Methods
11704 // ... 11701 // ...
11705 // In addition, if [[Extensible]] is false the value of the [[Class]] and 11702 // In addition, if [[Extensible]] is false the value of the [[Class]] and
11706 // [[Prototype]] internal properties of the object may not be modified. 11703 // [[Prototype]] internal properties of the object may not be modified.
11707 // ... 11704 // ...
11708 // Implementation specific extensions that modify [[Class]], [[Prototype]] 11705 // Implementation specific extensions that modify [[Class]], [[Prototype]]
11709 // or [[Extensible]] must not violate the invariants defined in the preceding 11706 // or [[Extensible]] must not violate the invariants defined in the preceding
11710 // paragraph. 11707 // paragraph.
11711 if (!object->map()->is_extensible()) { 11708 if (!object->map()->is_extensible()) {
11712 Handle<Object> args[] = { object }; 11709 Handle<Object> args[] = { object };
11713 Handle<Object> error = isolate->factory()->NewTypeError( 11710 THROW_NEW_ERROR(isolate, NewTypeError("non_extensible_proto",
11714 "non_extensible_proto", HandleVector(args, arraysize(args))); 11711 HandleVector(args, arraysize(args))),
11715 return isolate->Throw<Object>(error); 11712 Object);
11716 } 11713 }
11717 11714
11718 // Before we can set the prototype we need to be sure 11715 // Before we can set the prototype we need to be sure
11719 // prototype cycles are prevented. 11716 // prototype cycles are prevented.
11720 // It is sufficient to validate that the receiver is not in the new prototype 11717 // It is sufficient to validate that the receiver is not in the new prototype
11721 // chain. 11718 // chain.
11722 for (PrototypeIterator iter(isolate, *value, 11719 for (PrototypeIterator iter(isolate, *value,
11723 PrototypeIterator::START_AT_RECEIVER); 11720 PrototypeIterator::START_AT_RECEIVER);
11724 !iter.IsAtEnd(); iter.Advance()) { 11721 !iter.IsAtEnd(); iter.Advance()) {
11725 if (JSReceiver::cast(iter.GetCurrent()) == *object) { 11722 if (JSReceiver::cast(iter.GetCurrent()) == *object) {
11726 // Cycle detected. 11723 // Cycle detected.
11727 Handle<Object> error = isolate->factory()->NewError( 11724 THROW_NEW_ERROR(isolate,
11728 "cyclic_proto", HandleVector<Object>(NULL, 0)); 11725 NewError("cyclic_proto", HandleVector<Object>(NULL, 0)),
11729 return isolate->Throw<Object>(error); 11726 Object);
11730 } 11727 }
11731 } 11728 }
11732 11729
11733 bool dictionary_elements_in_chain = 11730 bool dictionary_elements_in_chain =
11734 object->map()->DictionaryElementsInPrototypeChainOnly(); 11731 object->map()->DictionaryElementsInPrototypeChainOnly();
11735 Handle<JSObject> real_receiver = object; 11732 Handle<JSObject> real_receiver = object;
11736 11733
11737 if (from_javascript) { 11734 if (from_javascript) {
11738 // Find the first object in the chain whose prototype object is not 11735 // Find the first object in the chain whose prototype object is not
11739 // hidden and set the new prototype on that object. 11736 // hidden and set the new prototype on that object.
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
11930 if (structure->IsAccessorPair()) { 11927 if (structure->IsAccessorPair()) {
11931 Handle<Object> setter(AccessorPair::cast(*structure)->setter(), isolate); 11928 Handle<Object> setter(AccessorPair::cast(*structure)->setter(), isolate);
11932 if (setter->IsSpecFunction()) { 11929 if (setter->IsSpecFunction()) {
11933 // TODO(rossberg): nicer would be to cast to some JSCallable here... 11930 // TODO(rossberg): nicer would be to cast to some JSCallable here...
11934 return SetPropertyWithDefinedSetter( 11931 return SetPropertyWithDefinedSetter(
11935 object, Handle<JSReceiver>::cast(setter), value); 11932 object, Handle<JSReceiver>::cast(setter), value);
11936 } else { 11933 } else {
11937 if (strict_mode == SLOPPY) return value; 11934 if (strict_mode == SLOPPY) return value;
11938 Handle<Object> key(isolate->factory()->NewNumberFromUint(index)); 11935 Handle<Object> key(isolate->factory()->NewNumberFromUint(index));
11939 Handle<Object> args[2] = { key, holder }; 11936 Handle<Object> args[2] = { key, holder };
11940 Handle<Object> error = isolate->factory()->NewTypeError( 11937 THROW_NEW_ERROR(
11941 "no_setter_in_callback", HandleVector(args, 2)); 11938 isolate, NewTypeError("no_setter_in_callback", HandleVector(args, 2)),
11942 return isolate->Throw<Object>(error); 11939 Object);
11943 } 11940 }
11944 } 11941 }
11945 11942
11946 // TODO(dcarney): Handle correctly. 11943 // TODO(dcarney): Handle correctly.
11947 if (structure->IsDeclaredAccessorInfo()) return value; 11944 if (structure->IsDeclaredAccessorInfo()) return value;
11948 11945
11949 UNREACHABLE(); 11946 UNREACHABLE();
11950 return MaybeHandle<Object>(); 11947 return MaybeHandle<Object>();
11951 } 11948 }
11952 11949
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
12141 if (set_mode == DEFINE_PROPERTY) { 12138 if (set_mode == DEFINE_PROPERTY) {
12142 details = PropertyDetails( 12139 details = PropertyDetails(
12143 attributes, NORMAL, details.dictionary_index()); 12140 attributes, NORMAL, details.dictionary_index());
12144 dictionary->DetailsAtPut(entry, details); 12141 dictionary->DetailsAtPut(entry, details);
12145 } else if (details.IsReadOnly() && !element->IsTheHole()) { 12142 } else if (details.IsReadOnly() && !element->IsTheHole()) {
12146 if (strict_mode == SLOPPY) { 12143 if (strict_mode == SLOPPY) {
12147 return isolate->factory()->undefined_value(); 12144 return isolate->factory()->undefined_value();
12148 } else { 12145 } else {
12149 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); 12146 Handle<Object> number = isolate->factory()->NewNumberFromUint(index);
12150 Handle<Object> args[2] = { number, object }; 12147 Handle<Object> args[2] = { number, object };
12151 Handle<Object> error = 12148 THROW_NEW_ERROR(isolate, NewTypeError("strict_read_only_property",
12152 isolate->factory()->NewTypeError("strict_read_only_property", 12149 HandleVector(args, 2)),
12153 HandleVector(args, 2)); 12150 Object);
12154 return isolate->Throw<Object>(error);
12155 } 12151 }
12156 } 12152 }
12157 // Elements of the arguments object in slow mode might be slow aliases. 12153 // Elements of the arguments object in slow mode might be slow aliases.
12158 if (is_arguments && element->IsAliasedArgumentsEntry()) { 12154 if (is_arguments && element->IsAliasedArgumentsEntry()) {
12159 Handle<AliasedArgumentsEntry> entry = 12155 Handle<AliasedArgumentsEntry> entry =
12160 Handle<AliasedArgumentsEntry>::cast(element); 12156 Handle<AliasedArgumentsEntry>::cast(element);
12161 Handle<Context> context(Context::cast(elements->get(0))); 12157 Handle<Context> context(Context::cast(elements->get(0)));
12162 int context_index = entry->aliased_context_slot(); 12158 int context_index = entry->aliased_context_slot();
12163 DCHECK(!context->get(context_index)->IsTheHole()); 12159 DCHECK(!context->get(context_index)->IsTheHole());
12164 context->set(context_index, *value); 12160 context->set(context_index, *value);
(...skipping 14 matching lines...) Expand all
12179 12175
12180 // When we set the is_extensible flag to false we always force the 12176 // When we set the is_extensible flag to false we always force the
12181 // element into dictionary mode (and force them to stay there). 12177 // element into dictionary mode (and force them to stay there).
12182 if (!object->map()->is_extensible()) { 12178 if (!object->map()->is_extensible()) {
12183 if (strict_mode == SLOPPY) { 12179 if (strict_mode == SLOPPY) {
12184 return isolate->factory()->undefined_value(); 12180 return isolate->factory()->undefined_value();
12185 } else { 12181 } else {
12186 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); 12182 Handle<Object> number = isolate->factory()->NewNumberFromUint(index);
12187 Handle<String> name = isolate->factory()->NumberToString(number); 12183 Handle<String> name = isolate->factory()->NumberToString(number);
12188 Handle<Object> args[1] = { name }; 12184 Handle<Object> args[1] = { name };
12189 Handle<Object> error = 12185 THROW_NEW_ERROR(isolate, NewTypeError("object_not_extensible",
12190 isolate->factory()->NewTypeError("object_not_extensible", 12186 HandleVector(args, 1)),
12191 HandleVector(args, 1)); 12187 Object);
12192 return isolate->Throw<Object>(error);
12193 } 12188 }
12194 } 12189 }
12195 12190
12196 PropertyDetails details = PropertyDetails(attributes, NORMAL, 0); 12191 PropertyDetails details = PropertyDetails(attributes, NORMAL, 0);
12197 Handle<SeededNumberDictionary> new_dictionary = 12192 Handle<SeededNumberDictionary> new_dictionary =
12198 SeededNumberDictionary::AddNumberEntry(dictionary, index, value, 12193 SeededNumberDictionary::AddNumberEntry(dictionary, index, value,
12199 details); 12194 details);
12200 if (*dictionary != *new_dictionary) { 12195 if (*dictionary != *new_dictionary) {
12201 if (is_arguments) { 12196 if (is_arguments) {
12202 elements->set(1, *new_dictionary); 12197 elements->set(1, *new_dictionary);
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
12402 Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)), index, 12397 Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)), index,
12403 value, attributes, strict_mode, check_prototype, set_mode); 12398 value, attributes, strict_mode, check_prototype, set_mode);
12404 } 12399 }
12405 12400
12406 // Don't allow element properties to be redefined for external arrays. 12401 // Don't allow element properties to be redefined for external arrays.
12407 if ((object->HasExternalArrayElements() || 12402 if ((object->HasExternalArrayElements() ||
12408 object->HasFixedTypedArrayElements()) && 12403 object->HasFixedTypedArrayElements()) &&
12409 set_mode == DEFINE_PROPERTY) { 12404 set_mode == DEFINE_PROPERTY) {
12410 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); 12405 Handle<Object> number = isolate->factory()->NewNumberFromUint(index);
12411 Handle<Object> args[] = { object, number }; 12406 Handle<Object> args[] = { object, number };
12412 Handle<Object> error = isolate->factory()->NewTypeError( 12407 THROW_NEW_ERROR(isolate, NewTypeError("redef_external_array_element",
12413 "redef_external_array_element", HandleVector(args, arraysize(args))); 12408 HandleVector(args, arraysize(args))),
12414 return isolate->Throw<Object>(error); 12409 Object);
12415 } 12410 }
12416 12411
12417 // Normalize the elements to enable attributes on the property. 12412 // Normalize the elements to enable attributes on the property.
12418 if ((attributes & (DONT_DELETE | DONT_ENUM | READ_ONLY)) != 0) { 12413 if ((attributes & (DONT_DELETE | DONT_ENUM | READ_ONLY)) != 0) {
12419 Handle<SeededNumberDictionary> dictionary = NormalizeElements(object); 12414 Handle<SeededNumberDictionary> dictionary = NormalizeElements(object);
12420 // Make sure that we never go back to fast case. 12415 // Make sure that we never go back to fast case.
12421 dictionary->set_requires_slow_elements(); 12416 dictionary->set_requires_slow_elements();
12422 } 12417 }
12423 12418
12424 if (!object->map()->is_observed()) { 12419 if (!object->map()->is_observed()) {
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
12856 return it.IsReadOnly(); 12851 return it.IsReadOnly();
12857 } 12852 }
12858 return false; 12853 return false;
12859 } 12854 }
12860 12855
12861 12856
12862 MaybeHandle<Object> JSArray::ReadOnlyLengthError(Handle<JSArray> array) { 12857 MaybeHandle<Object> JSArray::ReadOnlyLengthError(Handle<JSArray> array) {
12863 Isolate* isolate = array->GetIsolate(); 12858 Isolate* isolate = array->GetIsolate();
12864 Handle<Name> length = isolate->factory()->length_string(); 12859 Handle<Name> length = isolate->factory()->length_string();
12865 Handle<Object> args[2] = { length, array }; 12860 Handle<Object> args[2] = { length, array };
12866 Handle<Object> error = isolate->factory()->NewTypeError( 12861 THROW_NEW_ERROR(isolate, NewTypeError("strict_read_only_property",
12867 "strict_read_only_property", HandleVector(args, arraysize(args))); 12862 HandleVector(args, arraysize(args))),
12868 return isolate->Throw<Object>(error); 12863 Object);
12869 } 12864 }
12870 12865
12871 12866
12872 MaybeHandle<Object> JSObject::GetElementWithInterceptor( 12867 MaybeHandle<Object> JSObject::GetElementWithInterceptor(
12873 Handle<JSObject> object, 12868 Handle<JSObject> object,
12874 Handle<Object> receiver, 12869 Handle<Object> receiver,
12875 uint32_t index) { 12870 uint32_t index) {
12876 Isolate* isolate = object->GetIsolate(); 12871 Isolate* isolate = object->GetIsolate();
12877 12872
12878 // Make sure that the top context does not change when doing 12873 // Make sure that the top context does not change when doing
(...skipping 3546 matching lines...) Expand 10 before | Expand all | Expand 10 after
16425 #define ERROR_MESSAGES_TEXTS(C, T) T, 16420 #define ERROR_MESSAGES_TEXTS(C, T) T,
16426 static const char* error_messages_[] = { 16421 static const char* error_messages_[] = {
16427 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 16422 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
16428 }; 16423 };
16429 #undef ERROR_MESSAGES_TEXTS 16424 #undef ERROR_MESSAGES_TEXTS
16430 return error_messages_[reason]; 16425 return error_messages_[reason];
16431 } 16426 }
16432 16427
16433 16428
16434 } } // namespace v8::internal 16429 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/jsregexp.cc ('k') | src/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698