Skip to content

Commit 54c5bb5

Browse files
committed
fix(jsc): allow property keys to be symbol or string
1 parent 7a5c9d1 commit 54c5bb5

1 file changed

Lines changed: 15 additions & 20 deletions

File tree

test-app/runtime/src/main/cpp/napi/jsc/jsc-api.cpp

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -863,14 +863,13 @@ napi_status napi_set_property(napi_env env,
863863
CHECK_ARG(env, key);
864864
CHECK_ARG(env, value);
865865

866+
// Use the *ForKey APIs so the key can be a string or a symbol; converting to
867+
// a JSString would coerce (and break) symbol keys.
866868
JSValueRef exception{};
867-
JSString key_str{ToJSString(env, key, &exception)};
868-
CHECK_JSC(env, exception);
869-
870-
JSObjectSetProperty(
869+
JSObjectSetPropertyForKey(
871870
env->context,
872871
ToJSObject(env, object),
873-
key_str,
872+
ToJSValue(key),
874873
ToJSValue(value),
875874
kJSPropertyAttributeNone,
876875
&exception);
@@ -888,13 +887,12 @@ napi_status napi_has_property(napi_env env,
888887
CHECK_ARG(env, key);
889888

890889
JSValueRef exception{};
891-
JSString key_str{ToJSString(env, key, &exception)};
892-
CHECK_JSC(env, exception);
893-
894-
*result = JSObjectHasProperty(
890+
*result = JSObjectHasPropertyForKey(
895891
env->context,
896892
ToJSObject(env, object),
897-
key_str);
893+
ToJSValue(key),
894+
&exception);
895+
CHECK_JSC(env, exception);
898896
return napi_ok;
899897
}
900898

@@ -907,13 +905,10 @@ napi_status napi_get_property(napi_env env,
907905
CHECK_ARG(env, result);
908906

909907
JSValueRef exception{};
910-
JSString key_str{ToJSString(env, key, &exception)};
911-
CHECK_JSC(env, exception);
912-
913-
*result = ToNapi(JSObjectGetProperty(
908+
*result = ToNapi(JSObjectGetPropertyForKey(
914909
env->context,
915910
ToJSObject(env, object),
916-
key_str,
911+
ToJSValue(key),
917912
&exception));
918913
CHECK_JSC(env, exception);
919914

@@ -925,16 +920,14 @@ napi_status napi_delete_property(napi_env env,
925920
napi_value key,
926921
bool* result) {
927922
CHECK_ENV(env);
923+
CHECK_ARG(env, key);
928924
CHECK_ARG(env, result);
929925

930926
JSValueRef exception{};
931-
JSString key_str{ToJSString(env, key, &exception)};
932-
CHECK_JSC(env, exception);
933-
934-
*result = JSObjectDeleteProperty(
927+
*result = JSObjectDeletePropertyForKey(
935928
env->context,
936929
ToJSObject(env, object),
937-
key_str,
930+
ToJSValue(key),
938931
&exception);
939932
CHECK_JSC(env, exception);
940933

@@ -2604,6 +2597,8 @@ napi_status napi_run_script_source(napi_env env,
26042597
JSString script_str{ToJSString(env, script, &exception)};
26052598
CHECK_JSC(env, exception);
26062599

2600+
2601+
26072602
JSValueRef return_value{JSEvaluateScript(
26082603
env->context, script_str, nullptr, JSString(source_url), 0, &exception)};
26092604
CHECK_JSC(env, exception);

0 commit comments

Comments
 (0)