| Index: src/runtime/runtime-object.cc
|
| diff --git a/src/runtime/runtime-object.cc b/src/runtime/runtime-object.cc
|
| index e1e2ac3d084ac7ac6a2c407d0aab1a39cc0cf433..4441f47aaa2d0ad69184f4d1692bf19857ca1be4 100644
|
| --- a/src/runtime/runtime-object.cc
|
| +++ b/src/runtime/runtime-object.cc
|
| @@ -334,30 +334,46 @@ RUNTIME_FUNCTION(Runtime_OptimizeObjectForAddingMultipleProperties) {
|
| RUNTIME_FUNCTION(Runtime_ObjectFreeze) {
|
| HandleScope scope(isolate);
|
| DCHECK(args.length() == 1);
|
| - CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0);
|
|
|
| - // %ObjectFreeze is a fast path and these cases are handled elsewhere.
|
| - RUNTIME_ASSERT(!object->HasSloppyArgumentsElements() &&
|
| - !object->map()->is_observed() && !object->IsJSProxy());
|
| + MAYBE_RETURN(
|
| + JSReceiver::SetIntegrityLevel(object, FROZEN, Object::THROW_ON_ERROR),
|
| + isolate->heap()->exception());
|
| + return *object;
|
| +}
|
|
|
| - Handle<Object> result;
|
| - ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, JSObject::Freeze(object));
|
| - return *result;
|
| +
|
| +RUNTIME_FUNCTION(Runtime_ObjectIsFrozen) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 1);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0);
|
| +
|
| + Maybe<bool> result = JSReceiver::TestIntegrityLevel(object, FROZEN);
|
| + MAYBE_RETURN(result, isolate->heap()->exception());
|
| + return isolate->heap()->ToBoolean(result.FromJust());
|
| }
|
|
|
|
|
| RUNTIME_FUNCTION(Runtime_ObjectSeal) {
|
| HandleScope scope(isolate);
|
| DCHECK(args.length() == 1);
|
| - CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0);
|
|
|
| - // %ObjectSeal is a fast path and these cases are handled elsewhere.
|
| - RUNTIME_ASSERT(!object->HasSloppyArgumentsElements() &&
|
| - !object->map()->is_observed() && !object->IsJSProxy());
|
| + MAYBE_RETURN(
|
| + JSReceiver::SetIntegrityLevel(object, SEALED, Object::THROW_ON_ERROR),
|
| + isolate->heap()->exception());
|
| + return *object;
|
| +}
|
|
|
| - Handle<Object> result;
|
| - ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, JSObject::Seal(object));
|
| - return *result;
|
| +
|
| +RUNTIME_FUNCTION(Runtime_ObjectIsSealed) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 1);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0);
|
| +
|
| + Maybe<bool> result = JSReceiver::TestIntegrityLevel(object, SEALED);
|
| + MAYBE_RETURN(result, isolate->heap()->exception());
|
| + return isolate->heap()->ToBoolean(result.FromJust());
|
| }
|
|
|
|
|
|
|