@@ -317,6 +317,10 @@ static void defineNapiProperty(Zig::GlobalObject* globalObject, JSC::JSObject* t
317
317
extern " C" napi_status napi_set_property (napi_env env, napi_value target,
318
318
napi_value key, napi_value value)
319
319
{
320
+ if (UNLIKELY (!env || !target || !key)) {
321
+ return napi_invalid_arg;
322
+ }
323
+
320
324
auto globalObject = toJS (env);
321
325
auto & vm = globalObject->vm ();
322
326
auto * object = toJS (target).getObject ();
@@ -327,7 +331,8 @@ extern "C" napi_status napi_set_property(napi_env env, napi_value target,
327
331
auto keyProp = toJS (key);
328
332
329
333
auto scope = DECLARE_CATCH_SCOPE (vm);
330
- object->putDirect (globalObject->vm (), keyProp.toPropertyKey (globalObject), toJS (value));
334
+ PutPropertySlot slot (object, true );
335
+ object->put (object, globalObject, keyProp.toPropertyKey (globalObject), toJS (value), slot);
331
336
RETURN_IF_EXCEPTION (scope, napi_generic_failure);
332
337
333
338
scope.clearException ();
@@ -336,6 +341,10 @@ extern "C" napi_status napi_set_property(napi_env env, napi_value target,
336
341
extern " C" napi_status napi_has_property (napi_env env, napi_value object,
337
342
napi_value key, bool * result)
338
343
{
344
+ if (UNLIKELY (!object || !env)) {
345
+ return napi_invalid_arg;
346
+ }
347
+
339
348
auto globalObject = toJS (env);
340
349
auto & vm = globalObject->vm ();
341
350
auto * target = toJS (object).getObject ();
@@ -345,8 +354,7 @@ extern "C" napi_status napi_has_property(napi_env env, napi_value object,
345
354
346
355
auto keyProp = toJS (key);
347
356
auto scope = DECLARE_CATCH_SCOPE (vm);
348
- // TODO: use the slot directly?
349
- *result = !!target->getIfPropertyExists (globalObject, keyProp.toPropertyKey (globalObject));
357
+ *result = target->hasProperty (globalObject, keyProp.toPropertyKey (globalObject));
350
358
RETURN_IF_EXCEPTION (scope, napi_generic_failure);
351
359
352
360
scope.clearException ();
@@ -1028,7 +1036,7 @@ extern "C" napi_status napi_fatal_exception(napi_env env,
1028
1036
napi_value err)
1029
1037
{
1030
1038
auto globalObject = toJS (env);
1031
- JSC::JSValue value = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( err) );
1039
+ JSC::JSValue value = toJS ( err);
1032
1040
JSC::JSObject* obj = value.getObject ();
1033
1041
if (UNLIKELY (obj == nullptr || !obj->isErrorInstance ())) {
1034
1042
return napi_invalid_arg;
@@ -1045,7 +1053,7 @@ extern "C" napi_status napi_throw(napi_env env, napi_value error)
1045
1053
JSC::VM& vm = globalObject->vm ();
1046
1054
auto throwScope = DECLARE_THROW_SCOPE (vm);
1047
1055
1048
- JSC::JSValue value = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( error) );
1056
+ JSC::JSValue value = toJS ( error);
1049
1057
if (value) {
1050
1058
JSC::throwException (globalObject, throwScope, value);
1051
1059
} else {
@@ -1131,8 +1139,8 @@ extern "C" napi_status napi_create_type_error(napi_env env, napi_value code,
1131
1139
Zig::GlobalObject* globalObject = toJS (env);
1132
1140
JSC::VM& vm = globalObject->vm ();
1133
1141
1134
- JSC::JSValue codeValue = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( code) );
1135
- JSC::JSValue messageValue = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( msg) );
1142
+ JSC::JSValue codeValue = toJS ( code);
1143
+ JSC::JSValue messageValue = toJS ( msg);
1136
1144
1137
1145
auto error = JSC::createTypeError (globalObject, messageValue.toWTFString (globalObject));
1138
1146
if (codeValue) {
@@ -1150,10 +1158,11 @@ extern "C" napi_status napi_create_error(napi_env env, napi_value code,
1150
1158
Zig::GlobalObject* globalObject = toJS (env);
1151
1159
JSC::VM& vm = globalObject->vm ();
1152
1160
1153
- JSC::JSValue codeValue = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( code) );
1154
- JSC::JSValue messageValue = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( msg) );
1161
+ JSC::JSValue codeValue = toJS ( code);
1162
+ JSC::JSValue messageValue = toJS ( msg);
1155
1163
1156
- auto error = JSC::createError (globalObject, messageValue.toWTFString (globalObject));
1164
+ WTF::String message = messageValue.toWTFString (globalObject);
1165
+ auto * error = JSC::createError (globalObject, message);
1157
1166
if (codeValue) {
1158
1167
error->putDirect (vm, WebCore::builtinNames (vm).codePublicName (), codeValue, 0 );
1159
1168
}
@@ -1557,15 +1566,15 @@ extern "C" napi_status napi_define_class(napi_env env,
1557
1566
extern " C" napi_status napi_coerce_to_string (napi_env env, napi_value value,
1558
1567
napi_value* result)
1559
1568
{
1560
- if (UNLIKELY (result == nullptr )) {
1569
+ if (UNLIKELY (result == nullptr || value == nullptr || env == nullptr )) {
1561
1570
return napi_invalid_arg;
1562
1571
}
1563
1572
1564
1573
Zig::GlobalObject* globalObject = toJS (env);
1565
1574
JSC::VM& vm = globalObject->vm ();
1566
1575
1567
- auto scope = DECLARE_CATCH_SCOPE (vm);
1568
- JSC::JSValue jsValue = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( value) );
1576
+ auto scope = DECLARE_THROW_SCOPE (vm);
1577
+ JSC::JSValue jsValue = toJS ( value);
1569
1578
JSC::EnsureStillAliveScope ensureStillAlive (jsValue);
1570
1579
1571
1580
// .toString() can throw
@@ -1588,7 +1597,7 @@ extern "C" napi_status napi_get_property_names(napi_env env, napi_value object,
1588
1597
Zig::GlobalObject* globalObject = toJS (env);
1589
1598
JSC::VM& vm = globalObject->vm ();
1590
1599
1591
- JSC::JSValue jsValue = JSC::JSValue::decode ( reinterpret_cast <JSC::EncodedJSValue>( object) );
1600
+ JSC::JSValue jsValue = toJS ( object);
1592
1601
if (!jsValue || !jsValue.isObject ()) {
1593
1602
return napi_invalid_arg;
1594
1603
}
@@ -1717,7 +1726,7 @@ extern "C" napi_status napi_get_element(napi_env env, napi_value objectValue,
1717
1726
uint32_t index, napi_value* result)
1718
1727
{
1719
1728
JSValue jsValue = toJS (objectValue);
1720
- if (! jsValue || !jsValue.isObject ()) {
1729
+ if (UNLIKELY (!env || ! jsValue || !jsValue.isObject () )) {
1721
1730
return napi_invalid_arg;
1722
1731
}
1723
1732
@@ -1737,7 +1746,7 @@ extern "C" napi_status napi_get_element(napi_env env, napi_value objectValue,
1737
1746
extern " C" napi_status napi_create_object (napi_env env, napi_value* result)
1738
1747
{
1739
1748
1740
- if (UNLIKELY (result == nullptr )) {
1749
+ if (UNLIKELY (result == nullptr || env == nullptr )) {
1741
1750
return napi_invalid_arg;
1742
1751
}
1743
1752
0 commit comments