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()); |
} |