diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp index 8ebff08c1b..1032d5e72a 100644 --- a/src/bun.js/bindings/napi.cpp +++ b/src/bun.js/bindings/napi.cpp @@ -598,15 +598,16 @@ extern "C" napi_status napi_set_property(napi_env env, napi_value target, auto globalObject = toJS(env); auto& vm = globalObject->vm(); - auto* object = targetValue.getObject(); + auto scope = DECLARE_CATCH_SCOPE(vm); + auto* object = targetValue.toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); auto keyProp = toJS(key); - auto scope = DECLARE_CATCH_SCOPE(vm); PutPropertySlot slot(object, false); Identifier identifier = keyProp.toPropertyKey(globalObject); - RETURN_IF_EXCEPTION(scope, napi_generic_failure); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); JSValue jsValue = toJS(value); @@ -637,15 +638,13 @@ extern "C" napi_status napi_has_property(napi_env env, napi_value object, auto globalObject = toJS(env); auto& vm = globalObject->vm(); - auto* target = toJS(object).getObject(); - if (!target) { - return napi_object_expected; - } + auto scope = DECLARE_CATCH_SCOPE(vm); + auto* target = toJS(object).toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); auto keyProp = toJS(key); - auto scope = DECLARE_CATCH_SCOPE(vm); *result = target->hasProperty(globalObject, keyProp.toPropertyKey(globalObject)); - RETURN_IF_EXCEPTION(scope, napi_generic_failure); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); scope.clearException(); return napi_ok; @@ -693,16 +692,14 @@ extern "C" napi_status napi_get_property(napi_env env, napi_value object, auto globalObject = toJS(env); auto& vm = globalObject->vm(); + auto scope = DECLARE_CATCH_SCOPE(vm); - auto* target = toJS(object).getObject(); - if (!target) { - return napi_object_expected; - } + auto* target = toJS(object).toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); JSC::EnsureStillAliveScope ensureAlive(target); auto keyProp = toJS(key); JSC::EnsureStillAliveScope ensureAlive2(keyProp); - auto scope = DECLARE_CATCH_SCOPE(vm); *result = toNapi(target->get(globalObject, keyProp.toPropertyKey(globalObject)), globalObject); RETURN_IF_EXCEPTION(scope, napi_pending_exception); @@ -717,16 +714,14 @@ extern "C" napi_status napi_delete_property(napi_env env, napi_value object, auto globalObject = toJS(env); auto& vm = globalObject->vm(); + auto scope = DECLARE_CATCH_SCOPE(vm); - auto* target = toJS(object).getObject(); - if (!target) { - return napi_object_expected; - } + auto* target = toJS(object).toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); auto keyProp = toJS(key); - auto scope = DECLARE_CATCH_SCOPE(vm); auto deleteResult = target->deleteProperty(globalObject, keyProp.toPropertyKey(globalObject)); - RETURN_IF_EXCEPTION(scope, napi_generic_failure); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); if (LIKELY(result)) { *result = deleteResult; @@ -746,16 +741,14 @@ extern "C" napi_status napi_has_own_property(napi_env env, napi_value object, auto globalObject = toJS(env); auto& vm = globalObject->vm(); + auto scope = DECLARE_CATCH_SCOPE(vm); - auto* target = toJS(object).getObject(); - if (!target) { - return napi_object_expected; - } + auto* target = toJS(object).toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); auto keyProp = toJS(key); - auto scope = DECLARE_CATCH_SCOPE(vm); *result = target->hasOwnProperty(globalObject, JSC::PropertyName(keyProp.toPropertyKey(globalObject))); - RETURN_IF_EXCEPTION(scope, napi_generic_failure); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); scope.clearException(); return napi_ok; @@ -768,11 +761,10 @@ extern "C" napi_status napi_set_named_property(napi_env env, napi_value object, NAPI_PREMABLE auto globalObject = toJS(env); - auto target = toJS(object).getObject(); auto& vm = globalObject->vm(); - if (UNLIKELY(!target)) { - return napi_object_expected; - } + auto scope = DECLARE_CATCH_SCOPE(vm); + auto target = toJS(object).toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); if (UNLIKELY(utf8name == nullptr || !*utf8name || !value)) { return napi_invalid_arg; @@ -785,11 +777,10 @@ extern "C" napi_status napi_set_named_property(napi_env env, napi_value object, auto nameStr = WTF::String::fromUTF8({ utf8name, strlen(utf8name) }); auto identifier = JSC::Identifier::fromString(vm, WTFMove(nameStr)); - auto scope = DECLARE_CATCH_SCOPE(vm); PutPropertySlot slot(target, true); target->put(target, globalObject, identifier, jsValue, slot); - RETURN_IF_EXCEPTION(scope, napi_generic_failure); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); scope.clearException(); return napi_ok; } @@ -851,18 +842,16 @@ extern "C" napi_status napi_has_named_property(napi_env env, napi_value object, auto globalObject = toJS(env); auto& vm = globalObject->vm(); + auto scope = DECLARE_CATCH_SCOPE(vm); - JSObject* target = toJS(object).getObject(); - if (UNLIKELY(!target)) { - return napi_object_expected; - } + JSObject* target = toJS(object).toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); PROPERTY_NAME_FROM_UTF8(name); - auto scope = DECLARE_CATCH_SCOPE(vm); PropertySlot slot(target, PropertySlot::InternalMethodType::HasProperty); *result = target->getPropertySlot(globalObject, name, slot); - RETURN_IF_EXCEPTION(scope, napi_generic_failure); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); scope.clearException(); return napi_ok; @@ -880,14 +869,12 @@ extern "C" napi_status napi_get_named_property(napi_env env, napi_value object, auto globalObject = toJS(env); auto& vm = globalObject->vm(); - JSObject* target = toJS(object).getObject(); - if (UNLIKELY(!target)) { - return napi_object_expected; - } + auto scope = DECLARE_CATCH_SCOPE(vm); + JSObject* target = toJS(object).toObject(globalObject); + RETURN_IF_EXCEPTION(scope, napi_pending_exception); PROPERTY_NAME_FROM_UTF8(name); - auto scope = DECLARE_CATCH_SCOPE(vm); *result = toNapi(target->get(globalObject, name), globalObject); RETURN_IF_EXCEPTION(scope, napi_pending_exception); diff --git a/test/napi/napi-app/module.js b/test/napi/napi-app/module.js index 3113db58b1..6cb1280cf2 100644 --- a/test/napi/napi-app/module.js +++ b/test/napi/napi-app/module.js @@ -64,6 +64,9 @@ nativeTests.test_get_property = () => { }, }, ), + 5, + "hello", + // TODO(@190n) test null and undefined here on the napi fix branch ]; const keys = [ "foo", @@ -77,6 +80,8 @@ nativeTests.test_get_property = () => { throw new Error("Symbol.toPrimitive"); }, }, + "toString", + "slice", ]; for (const object of objects) {