Skip to content

Commit a0b3fe9

Browse files
committed
Replace magic value with symbol
1 parent 173c5bc commit a0b3fe9

File tree

1 file changed

+56
-18
lines changed

1 file changed

+56
-18
lines changed

napi-inl.h

Lines changed: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2603,20 +2603,45 @@ inline Error::Error(napi_env env, napi_value value) : ObjectReference(env, nullp
26032603

26042604
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_create_object");
26052605

2606-
status = napi_set_property(env,
2607-
wrappedErrorObj,
2608-
String::From(env, "errorVal"),
2609-
Value::From(env, value));
2610-
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_set_property");
2611-
2612-
status = napi_set_property(
2613-
env,
2614-
wrappedErrorObj,
2615-
String::From(env,
2616-
"4b3d96fd-fb87-4951-a979-eb4f9d2f2ce9-isWrapObject"),
2617-
Value::From(env, value));
2618-
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_set_property");
2606+
napi_property_descriptor errValDesc = {
2607+
"errorVal", // const char* utf8Name
2608+
String::From(env, "errorVal"), // napi_value name
2609+
nullptr, // Method
2610+
nullptr, // getter
2611+
nullptr, // setter
2612+
Value::From(env, value), // napi_value value
2613+
napi_enumerable,
2614+
nullptr};
2615+
2616+
status = napi_define_properties(env, wrappedErrorObj, 1, &errValDesc);
2617+
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_define_properties");
2618+
2619+
MaybeOrValue<Symbol> result = Symbol::For(env, "isWrapObject");
2620+
napi_property_descriptor wrapObjFlag = {nullptr,
2621+
nullptr,
2622+
nullptr,
2623+
nullptr,
2624+
nullptr,
2625+
Value::From(env, value),
2626+
napi_enumerable,
2627+
nullptr};
26192628

2629+
#ifdef NODE_ADDON_API_ENABLE_MAYBE
2630+
Symbol uniqueSymb;
2631+
if (result.IsJust()) {
2632+
uniqueSymb = result.Unwrap();
2633+
}
2634+
2635+
wrapObjFlag.name = uniqueSymb;
2636+
status = napi_define_properties(env, wrappedErrorObj, 1, &wrapObjFlag);
2637+
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_define_properties");
2638+
#else
2639+
2640+
wrapObjFlag.name = result;
2641+
status = napi_define_properties(env, wrappedErrorObj, 1, &wrapObjFlag);
2642+
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_define_properties");
2643+
2644+
#endif
26202645
status = napi_create_reference(env, wrappedErrorObj, 1, &_ref);
26212646
}
26222647

@@ -2642,18 +2667,31 @@ inline Object Error::Value() const {
26422667
if (type != napi_symbol) {
26432668
// We are checking if the object is wrapped
26442669
bool isWrappedObject = false;
2645-
napi_has_property(
2646-
_env,
2647-
refValue,
2648-
String::From(_env, "4b3d96fd-fb87-4951-a979-eb4f9d2f2ce9-isWrapObject"),
2649-
&isWrappedObject);
2670+
2671+
MaybeOrValue<Symbol> result = Symbol::For(_env, "isWrapObject");
2672+
2673+
#ifdef NODE_ADDON_API_ENABLE_MAYBE
2674+
Symbol uniqueSymb;
2675+
if (result.IsJust()) {
2676+
uniqueSymb = result.Unwrap();
2677+
}
2678+
status = napi_has_property(_env, refValue, uniqueSymb, &isWrappedObject);
2679+
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_set_property");
2680+
2681+
#else
2682+
2683+
status = napi_has_property(_env, refValue, result, &isWrappedObject);
2684+
NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_set_property");
2685+
#endif
2686+
26502687
// Don't care about status
26512688

26522689
if (isWrappedObject == true) {
26532690
napi_value unwrappedValue;
26542691
status = napi_get_property(
26552692
_env, refValue, String::From(_env, "errorVal"), &unwrappedValue);
26562693
NAPI_THROW_IF_FAILED(_env, status, Object());
2694+
26572695
return Object(_env, unwrappedValue);
26582696
}
26592697
}

0 commit comments

Comments
 (0)