@@ -1069,7 +1069,8 @@ napi_status NAPI_CDECL napi_set_property(napi_env env,
1069
1069
1070
1070
v8::Maybe<bool > set_maybe = obj->Set (context, k, val);
1071
1071
1072
- RETURN_STATUS_IF_FALSE (env, set_maybe.FromMaybe (false ), napi_generic_failure);
1072
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1073
+ env, set_maybe.FromMaybe (false ), napi_generic_failure);
1073
1074
return GET_RETURN_STATUS (env);
1074
1075
}
1075
1076
@@ -1089,7 +1090,7 @@ napi_status NAPI_CDECL napi_has_property(napi_env env,
1089
1090
v8::Local<v8::Value> k = v8impl::V8LocalValueFromJsValue (key);
1090
1091
v8::Maybe<bool > has_maybe = obj->Has (context, k);
1091
1092
1092
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1093
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1093
1094
1094
1095
*result = has_maybe.FromMaybe (false );
1095
1096
return GET_RETURN_STATUS (env);
@@ -1111,7 +1112,7 @@ napi_status NAPI_CDECL napi_get_property(napi_env env,
1111
1112
1112
1113
auto get_maybe = obj->Get (context, k);
1113
1114
1114
- CHECK_MAYBE_EMPTY (env, get_maybe, napi_generic_failure);
1115
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, get_maybe, napi_generic_failure);
1115
1116
1116
1117
v8::Local<v8::Value> val = get_maybe.ToLocalChecked ();
1117
1118
*result = v8impl::JsValueFromV8LocalValue (val);
@@ -1131,7 +1132,7 @@ napi_status NAPI_CDECL napi_delete_property(napi_env env,
1131
1132
1132
1133
CHECK_TO_OBJECT (env, context, obj, object);
1133
1134
v8::Maybe<bool > delete_maybe = obj->Delete (context, k);
1134
- CHECK_MAYBE_NOTHING (env, delete_maybe, napi_generic_failure);
1135
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, delete_maybe, napi_generic_failure);
1135
1136
1136
1137
if (result != nullptr ) *result = delete_maybe.FromMaybe (false );
1137
1138
@@ -1153,7 +1154,7 @@ napi_status NAPI_CDECL napi_has_own_property(napi_env env,
1153
1154
v8::Local<v8::Value> k = v8impl::V8LocalValueFromJsValue (key);
1154
1155
RETURN_STATUS_IF_FALSE (env, k->IsName (), napi_name_expected);
1155
1156
v8::Maybe<bool > has_maybe = obj->HasOwnProperty (context, k.As <v8::Name>());
1156
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1157
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1157
1158
*result = has_maybe.FromMaybe (false );
1158
1159
1159
1160
return GET_RETURN_STATUS (env);
@@ -1178,7 +1179,8 @@ napi_status NAPI_CDECL napi_set_named_property(napi_env env,
1178
1179
1179
1180
v8::Maybe<bool > set_maybe = obj->Set (context, key, val);
1180
1181
1181
- RETURN_STATUS_IF_FALSE (env, set_maybe.FromMaybe (false ), napi_generic_failure);
1182
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1183
+ env, set_maybe.FromMaybe (false ), napi_generic_failure);
1182
1184
return GET_RETURN_STATUS (env);
1183
1185
}
1184
1186
@@ -1199,7 +1201,7 @@ napi_status NAPI_CDECL napi_has_named_property(napi_env env,
1199
1201
1200
1202
v8::Maybe<bool > has_maybe = obj->Has (context, key);
1201
1203
1202
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1204
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1203
1205
1204
1206
*result = has_maybe.FromMaybe (false );
1205
1207
return GET_RETURN_STATUS (env);
@@ -1223,7 +1225,7 @@ napi_status NAPI_CDECL napi_get_named_property(napi_env env,
1223
1225
1224
1226
auto get_maybe = obj->Get (context, key);
1225
1227
1226
- CHECK_MAYBE_EMPTY (env, get_maybe, napi_generic_failure);
1228
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, get_maybe, napi_generic_failure);
1227
1229
1228
1230
v8::Local<v8::Value> val = get_maybe.ToLocalChecked ();
1229
1231
*result = v8impl::JsValueFromV8LocalValue (val);
@@ -1245,7 +1247,8 @@ napi_status NAPI_CDECL napi_set_element(napi_env env,
1245
1247
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1246
1248
auto set_maybe = obj->Set (context, index , val);
1247
1249
1248
- RETURN_STATUS_IF_FALSE (env, set_maybe.FromMaybe (false ), napi_generic_failure);
1250
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1251
+ env, set_maybe.FromMaybe (false ), napi_generic_failure);
1249
1252
1250
1253
return GET_RETURN_STATUS (env);
1251
1254
}
@@ -1264,7 +1267,7 @@ napi_status NAPI_CDECL napi_has_element(napi_env env,
1264
1267
1265
1268
v8::Maybe<bool > has_maybe = obj->Has (context, index );
1266
1269
1267
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1270
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1268
1271
1269
1272
*result = has_maybe.FromMaybe (false );
1270
1273
return GET_RETURN_STATUS (env);
@@ -1284,7 +1287,7 @@ napi_status NAPI_CDECL napi_get_element(napi_env env,
1284
1287
1285
1288
auto get_maybe = obj->Get (context, index );
1286
1289
1287
- CHECK_MAYBE_EMPTY (env, get_maybe, napi_generic_failure);
1290
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, get_maybe, napi_generic_failure);
1288
1291
1289
1292
*result = v8impl::JsValueFromV8LocalValue (get_maybe.ToLocalChecked ());
1290
1293
return GET_RETURN_STATUS (env);
@@ -1301,7 +1304,7 @@ napi_status NAPI_CDECL napi_delete_element(napi_env env,
1301
1304
1302
1305
CHECK_TO_OBJECT (env, context, obj, object);
1303
1306
v8::Maybe<bool > delete_maybe = obj->Delete (context, index );
1304
- CHECK_MAYBE_NOTHING (env, delete_maybe, napi_generic_failure);
1307
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, delete_maybe, napi_generic_failure);
1305
1308
1306
1309
if (result != nullptr ) *result = delete_maybe.FromMaybe (false );
1307
1310
@@ -1349,9 +1352,8 @@ napi_define_properties(napi_env env,
1349
1352
auto define_maybe =
1350
1353
obj->DefineProperty (context, property_name, descriptor);
1351
1354
1352
- if (!define_maybe.FromMaybe (false )) {
1353
- return napi_set_last_error (env, napi_invalid_arg);
1354
- }
1355
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1356
+ env, define_maybe.FromMaybe (false ), napi_invalid_arg);
1355
1357
} else if (p->method != nullptr ) {
1356
1358
v8::Local<v8::Function> method;
1357
1359
STATUS_CALL (v8impl::FunctionCallbackWrapper::NewFunction (
@@ -1364,34 +1366,28 @@ napi_define_properties(napi_env env,
1364
1366
auto define_maybe =
1365
1367
obj->DefineProperty (context, property_name, descriptor);
1366
1368
1367
- if (!define_maybe.FromMaybe (false )) {
1368
- return napi_set_last_error (env, napi_generic_failure);
1369
- }
1369
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1370
+ env, define_maybe.FromMaybe (false ), napi_generic_failure);
1370
1371
} else {
1371
1372
v8::Local<v8::Value> value = v8impl::V8LocalValueFromJsValue (p->value );
1372
- bool defined_successfully = false ;
1373
+ v8::Maybe< bool > define_maybe = v8::Just ( false ) ;
1373
1374
1374
1375
if ((p->attributes & napi_enumerable) &&
1375
1376
(p->attributes & napi_writable) &&
1376
1377
(p->attributes & napi_configurable)) {
1377
1378
// Use a fast path for this type of data property.
1378
- auto define_maybe =
1379
- obj->CreateDataProperty (context, property_name, value);
1380
- defined_successfully = define_maybe.FromMaybe (false );
1379
+ define_maybe = obj->CreateDataProperty (context, property_name, value);
1381
1380
} else {
1382
1381
v8::PropertyDescriptor descriptor (value,
1383
1382
(p->attributes & napi_writable) != 0 );
1384
1383
descriptor.set_enumerable ((p->attributes & napi_enumerable) != 0 );
1385
1384
descriptor.set_configurable ((p->attributes & napi_configurable) != 0 );
1386
1385
1387
- auto define_maybe =
1388
- obj->DefineProperty (context, property_name, descriptor);
1389
- defined_successfully = define_maybe.FromMaybe (false );
1386
+ define_maybe = obj->DefineProperty (context, property_name, descriptor);
1390
1387
}
1391
1388
1392
- if (!defined_successfully) {
1393
- return napi_set_last_error (env, napi_invalid_arg);
1394
- }
1389
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1390
+ env, define_maybe.FromMaybe (false ), napi_invalid_arg);
1395
1391
}
1396
1392
}
1397
1393
@@ -1488,6 +1484,7 @@ napi_status NAPI_CDECL napi_get_prototype(napi_env env,
1488
1484
v8::Local<v8::Object> obj;
1489
1485
CHECK_TO_OBJECT (env, context, obj, object);
1490
1486
1487
+ // This doesn't invokes Proxy's [[GetPrototypeOf]] handler.
1491
1488
v8::Local<v8::Value> val = obj->GetPrototype ();
1492
1489
*result = v8impl::JsValueFromV8LocalValue (val);
1493
1490
return GET_RETURN_STATUS (env);
@@ -2000,15 +1997,11 @@ napi_status NAPI_CDECL napi_call_function(napi_env env,
2000
1997
argc,
2001
1998
reinterpret_cast <v8::Local<v8::Value>*>(const_cast <napi_value*>(argv)));
2002
1999
2003
- if (try_catch.HasCaught ()) {
2004
- return napi_set_last_error (env, napi_pending_exception);
2005
- } else {
2006
- if (result != nullptr ) {
2007
- CHECK_MAYBE_EMPTY (env, maybe, napi_generic_failure);
2008
- *result = v8impl::JsValueFromV8LocalValue (maybe.ToLocalChecked ());
2009
- }
2010
- return napi_clear_last_error (env);
2000
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, maybe, napi_generic_failure);
2001
+ if (result != nullptr ) {
2002
+ *result = v8impl::JsValueFromV8LocalValue (maybe.ToLocalChecked ());
2011
2003
}
2004
+ return napi_clear_last_error (env);
2012
2005
}
2013
2006
2014
2007
napi_status NAPI_CDECL napi_get_global (napi_env env, napi_value* result) {
0 commit comments