5 #include "src/runtime/runtime-utils.h" 7 #include "src/arguments-inl.h" 8 #include "src/counters.h" 9 #include "src/elements.h" 10 #include "src/heap/factory.h" 11 #include "src/isolate-inl.h" 12 #include "src/objects-inl.h" 18 RUNTIME_FUNCTION(Runtime_IsJSProxy) {
19 SealHandleScope shs(isolate);
20 DCHECK_EQ(1, args.length());
21 CONVERT_ARG_CHECKED(Object, obj, 0);
22 return isolate->heap()->ToBoolean(obj->IsJSProxy());
26 RUNTIME_FUNCTION(Runtime_JSProxyGetHandler) {
27 SealHandleScope shs(isolate);
28 DCHECK_EQ(1, args.length());
29 CONVERT_ARG_CHECKED(JSProxy, proxy, 0);
30 return proxy->handler();
34 RUNTIME_FUNCTION(Runtime_JSProxyGetTarget) {
35 SealHandleScope shs(isolate);
36 DCHECK_EQ(1, args.length());
37 CONVERT_ARG_CHECKED(JSProxy, proxy, 0);
38 return proxy->target();
42 RUNTIME_FUNCTION(Runtime_GetPropertyWithReceiver) {
43 HandleScope scope(isolate);
45 DCHECK_EQ(4, args.length());
46 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, holder, 0);
47 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
48 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 2);
49 CONVERT_ARG_HANDLE_CHECKED(Smi, on_non_existent, 3);
52 LookupIterator it = LookupIterator::PropertyOrElement(isolate, receiver, key,
55 DCHECK(isolate->has_pending_exception());
56 return ReadOnlyRoots(isolate).exception();
59 RETURN_RESULT_OR_FAILURE(
60 isolate, Object::GetProperty(
61 &it, static_cast<OnNonExistent>(on_non_existent->value())));
64 RUNTIME_FUNCTION(Runtime_SetPropertyWithReceiver) {
65 HandleScope scope(isolate);
67 DCHECK_EQ(5, args.length());
68 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, holder, 0);
69 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
70 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2);
71 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 3);
72 CONVERT_LANGUAGE_MODE_ARG_CHECKED(language_mode, 4);
75 LookupIterator it = LookupIterator::PropertyOrElement(isolate, receiver, key,
78 DCHECK(isolate->has_pending_exception());
79 return ReadOnlyRoots(isolate).exception();
81 Maybe<bool> result = Object::SetSuperProperty(&it, value, language_mode,
82 StoreOrigin::kMaybeKeyed);
83 MAYBE_RETURN(result, ReadOnlyRoots(isolate).exception());
84 return *isolate->factory()->ToBoolean(result.FromJust());
87 RUNTIME_FUNCTION(Runtime_CheckProxyGetSetTrapResult) {
88 HandleScope scope(isolate);
90 DCHECK_EQ(4, args.length());
91 CONVERT_ARG_HANDLE_CHECKED(Name, name, 0);
92 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, target, 1);
93 CONVERT_ARG_HANDLE_CHECKED(Object, trap_result, 2);
94 CONVERT_NUMBER_CHECKED(
int64_t, access_kind, Int64, args[3]);
96 RETURN_RESULT_OR_FAILURE(isolate, JSProxy::CheckGetSetTrapResult(
97 isolate, name, target, trap_result,
98 JSProxy::AccessKind(access_kind)));
101 RUNTIME_FUNCTION(Runtime_CheckProxyHasTrap) {
102 HandleScope scope(isolate);
104 DCHECK_EQ(2, args.length());
105 CONVERT_ARG_HANDLE_CHECKED(Name, name, 0);
106 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, target, 1);
108 Maybe<bool> result = JSProxy::CheckHasTrap(isolate, name, target);
109 if (!result.IsJust())
return ReadOnlyRoots(isolate).exception();
110 return isolate->heap()->ToBoolean(result.FromJust());