@@ -1161,7 +1161,8 @@ napi_status NAPI_CDECL napi_set_property(napi_env env,
1161
1161
1162
1162
v8::Maybe<bool > set_maybe = obj->Set (context, k, val);
1163
1163
1164
- RETURN_STATUS_IF_FALSE (env, set_maybe.FromMaybe (false ), napi_generic_failure);
1164
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1165
+ env, set_maybe.FromMaybe (false ), napi_generic_failure);
1165
1166
return GET_RETURN_STATUS (env);
1166
1167
}
1167
1168
@@ -1181,7 +1182,7 @@ napi_status NAPI_CDECL napi_has_property(napi_env env,
1181
1182
v8::Local<v8::Value> k = v8impl::V8LocalValueFromJsValue (key);
1182
1183
v8::Maybe<bool > has_maybe = obj->Has (context, k);
1183
1184
1184
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1185
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1185
1186
1186
1187
*result = has_maybe.FromMaybe (false );
1187
1188
return GET_RETURN_STATUS (env);
@@ -1203,7 +1204,7 @@ napi_status NAPI_CDECL napi_get_property(napi_env env,
1203
1204
1204
1205
auto get_maybe = obj->Get (context, k);
1205
1206
1206
- CHECK_MAYBE_EMPTY (env, get_maybe, napi_generic_failure);
1207
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, get_maybe, napi_generic_failure);
1207
1208
1208
1209
v8::Local<v8::Value> val = get_maybe.ToLocalChecked ();
1209
1210
*result = v8impl::JsValueFromV8LocalValue (val);
@@ -1223,7 +1224,7 @@ napi_status NAPI_CDECL napi_delete_property(napi_env env,
1223
1224
1224
1225
CHECK_TO_OBJECT (env, context, obj, object);
1225
1226
v8::Maybe<bool > delete_maybe = obj->Delete (context, k);
1226
- CHECK_MAYBE_NOTHING (env, delete_maybe, napi_generic_failure);
1227
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, delete_maybe, napi_generic_failure);
1227
1228
1228
1229
if (result != nullptr ) *result = delete_maybe.FromMaybe (false );
1229
1230
@@ -1245,7 +1246,7 @@ napi_status NAPI_CDECL napi_has_own_property(napi_env env,
1245
1246
v8::Local<v8::Value> k = v8impl::V8LocalValueFromJsValue (key);
1246
1247
RETURN_STATUS_IF_FALSE (env, k->IsName (), napi_name_expected);
1247
1248
v8::Maybe<bool > has_maybe = obj->HasOwnProperty (context, k.As <v8::Name>());
1248
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1249
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1249
1250
*result = has_maybe.FromMaybe (false );
1250
1251
1251
1252
return GET_RETURN_STATUS (env);
@@ -1270,7 +1271,8 @@ napi_status NAPI_CDECL napi_set_named_property(napi_env env,
1270
1271
1271
1272
v8::Maybe<bool > set_maybe = obj->Set (context, key, val);
1272
1273
1273
- RETURN_STATUS_IF_FALSE (env, set_maybe.FromMaybe (false ), napi_generic_failure);
1274
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1275
+ env, set_maybe.FromMaybe (false ), napi_generic_failure);
1274
1276
return GET_RETURN_STATUS (env);
1275
1277
}
1276
1278
@@ -1291,7 +1293,7 @@ napi_status NAPI_CDECL napi_has_named_property(napi_env env,
1291
1293
1292
1294
v8::Maybe<bool > has_maybe = obj->Has (context, key);
1293
1295
1294
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1296
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1295
1297
1296
1298
*result = has_maybe.FromMaybe (false );
1297
1299
return GET_RETURN_STATUS (env);
@@ -1315,7 +1317,7 @@ napi_status NAPI_CDECL napi_get_named_property(napi_env env,
1315
1317
1316
1318
auto get_maybe = obj->Get (context, key);
1317
1319
1318
- CHECK_MAYBE_EMPTY (env, get_maybe, napi_generic_failure);
1320
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, get_maybe, napi_generic_failure);
1319
1321
1320
1322
v8::Local<v8::Value> val = get_maybe.ToLocalChecked ();
1321
1323
*result = v8impl::JsValueFromV8LocalValue (val);
@@ -1337,7 +1339,8 @@ napi_status NAPI_CDECL napi_set_element(napi_env env,
1337
1339
v8::Local<v8::Value> val = v8impl::V8LocalValueFromJsValue (value);
1338
1340
auto set_maybe = obj->Set (context, index, val);
1339
1341
1340
- RETURN_STATUS_IF_FALSE (env, set_maybe.FromMaybe (false ), napi_generic_failure);
1342
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1343
+ env, set_maybe.FromMaybe (false ), napi_generic_failure);
1341
1344
1342
1345
return GET_RETURN_STATUS (env);
1343
1346
}
@@ -1356,7 +1359,7 @@ napi_status NAPI_CDECL napi_has_element(napi_env env,
1356
1359
1357
1360
v8::Maybe<bool > has_maybe = obj->Has (context, index);
1358
1361
1359
- CHECK_MAYBE_NOTHING (env, has_maybe, napi_generic_failure);
1362
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, has_maybe, napi_generic_failure);
1360
1363
1361
1364
*result = has_maybe.FromMaybe (false );
1362
1365
return GET_RETURN_STATUS (env);
@@ -1376,7 +1379,7 @@ napi_status NAPI_CDECL napi_get_element(napi_env env,
1376
1379
1377
1380
auto get_maybe = obj->Get (context, index);
1378
1381
1379
- CHECK_MAYBE_EMPTY (env, get_maybe, napi_generic_failure);
1382
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, get_maybe, napi_generic_failure);
1380
1383
1381
1384
*result = v8impl::JsValueFromV8LocalValue (get_maybe.ToLocalChecked ());
1382
1385
return GET_RETURN_STATUS (env);
@@ -1393,7 +1396,7 @@ napi_status NAPI_CDECL napi_delete_element(napi_env env,
1393
1396
1394
1397
CHECK_TO_OBJECT (env, context, obj, object);
1395
1398
v8::Maybe<bool > delete_maybe = obj->Delete (context, index);
1396
- CHECK_MAYBE_NOTHING (env, delete_maybe, napi_generic_failure);
1399
+ CHECK_MAYBE_NOTHING_WITH_PREAMBLE (env, delete_maybe, napi_generic_failure);
1397
1400
1398
1401
if (result != nullptr ) *result = delete_maybe.FromMaybe (false );
1399
1402
@@ -1441,9 +1444,8 @@ napi_define_properties(napi_env env,
1441
1444
auto define_maybe =
1442
1445
obj->DefineProperty (context, property_name, descriptor);
1443
1446
1444
- if (!define_maybe.FromMaybe (false )) {
1445
- return napi_set_last_error (env, napi_invalid_arg);
1446
- }
1447
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1448
+ env, define_maybe.FromMaybe (false ), napi_invalid_arg);
1447
1449
} else if (p->method != nullptr ) {
1448
1450
v8::Local<v8::Function> method;
1449
1451
STATUS_CALL (v8impl::FunctionCallbackWrapper::NewFunction (
@@ -1456,34 +1458,28 @@ napi_define_properties(napi_env env,
1456
1458
auto define_maybe =
1457
1459
obj->DefineProperty (context, property_name, descriptor);
1458
1460
1459
- if (!define_maybe.FromMaybe (false )) {
1460
- return napi_set_last_error (env, napi_generic_failure);
1461
- }
1461
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1462
+ env, define_maybe.FromMaybe (false ), napi_generic_failure);
1462
1463
} else {
1463
1464
v8::Local<v8::Value> value = v8impl::V8LocalValueFromJsValue (p->value );
1464
- bool defined_successfully = false ;
1465
+ v8::Maybe< bool > define_maybe = v8::Just ( false ) ;
1465
1466
1466
1467
if ((p->attributes & napi_enumerable) &&
1467
1468
(p->attributes & napi_writable) &&
1468
1469
(p->attributes & napi_configurable)) {
1469
1470
// Use a fast path for this type of data property.
1470
- auto define_maybe =
1471
- obj->CreateDataProperty (context, property_name, value);
1472
- defined_successfully = define_maybe.FromMaybe (false );
1471
+ define_maybe = obj->CreateDataProperty (context, property_name, value);
1473
1472
} else {
1474
1473
v8::PropertyDescriptor descriptor (value,
1475
1474
(p->attributes & napi_writable) != 0 );
1476
1475
descriptor.set_enumerable ((p->attributes & napi_enumerable) != 0 );
1477
1476
descriptor.set_configurable ((p->attributes & napi_configurable) != 0 );
1478
1477
1479
- auto define_maybe =
1480
- obj->DefineProperty (context, property_name, descriptor);
1481
- defined_successfully = define_maybe.FromMaybe (false );
1478
+ define_maybe = obj->DefineProperty (context, property_name, descriptor);
1482
1479
}
1483
1480
1484
- if (!defined_successfully) {
1485
- return napi_set_last_error (env, napi_invalid_arg);
1486
- }
1481
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE (
1482
+ env, define_maybe.FromMaybe (false ), napi_invalid_arg);
1487
1483
}
1488
1484
}
1489
1485
@@ -1580,6 +1576,7 @@ napi_status NAPI_CDECL napi_get_prototype(napi_env env,
1580
1576
v8::Local<v8::Object> obj;
1581
1577
CHECK_TO_OBJECT (env, context, obj, object);
1582
1578
1579
+ // This doesn't invokes Proxy's [[GetPrototypeOf]] handler.
1583
1580
v8::Local<v8::Value> val = obj->GetPrototype ();
1584
1581
*result = v8impl::JsValueFromV8LocalValue (val);
1585
1582
return GET_RETURN_STATUS (env);
@@ -2132,15 +2129,11 @@ napi_status NAPI_CDECL napi_call_function(napi_env env,
2132
2129
argc,
2133
2130
reinterpret_cast <v8::Local<v8::Value>*>(const_cast <napi_value*>(argv)));
2134
2131
2135
- if (try_catch.HasCaught ()) {
2136
- return napi_set_last_error (env, napi_pending_exception);
2137
- } else {
2138
- if (result != nullptr ) {
2139
- CHECK_MAYBE_EMPTY (env, maybe, napi_generic_failure);
2140
- *result = v8impl::JsValueFromV8LocalValue (maybe.ToLocalChecked ());
2141
- }
2142
- return napi_clear_last_error (env);
2132
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE (env, maybe, napi_generic_failure);
2133
+ if (result != nullptr ) {
2134
+ *result = v8impl::JsValueFromV8LocalValue (maybe.ToLocalChecked ());
2143
2135
}
2136
+ return napi_clear_last_error (env);
2144
2137
}
2145
2138
2146
2139
napi_status NAPI_CDECL napi_get_global (napi_env env, napi_value* result) {
0 commit comments