static JSValue js_c_function_data_call(JSContext *ctx, JSValueConst func_obj,
JSValueConst this_val,
int argc, JSValueConst *argv, int flags);
-static JSAtom js_symbol_to_atom(JSContext *ctx, JSValue val);
+static JSAtom js_symbol_to_atom(JSContext *ctx, JSValueConst val);
static void add_gc_object(JSRuntime *rt, JSGCObjectHeader *h,
JSGCObjectTypeEnum type);
static void remove_gc_object(JSGCObjectHeader *h);
JS_ThrowTypeErrorNotASymbol(ctx);
goto fail;
}
- prop = js_symbol_to_atom(ctx, (JSValue)name);
+ prop = js_symbol_to_atom(ctx, name);
p = JS_VALUE_GET_OBJ(obj);
if (unlikely(!p->extensible)) {
JS_ThrowTypeError(ctx, "object is not extensible");
/* safety check */
if (unlikely(JS_VALUE_GET_TAG(name) != JS_TAG_SYMBOL))
return JS_ThrowTypeErrorNotASymbol(ctx);
- prop = js_symbol_to_atom(ctx, (JSValue)name);
+ prop = js_symbol_to_atom(ctx, name);
p = JS_VALUE_GET_OBJ(obj);
prs = find_own_property(&pr, p, prop);
if (!prs) {
JS_ThrowTypeErrorNotASymbol(ctx);
goto fail;
}
- prop = js_symbol_to_atom(ctx, (JSValue)name);
+ prop = js_symbol_to_atom(ctx, name);
p = JS_VALUE_GET_OBJ(obj);
prs = find_own_property(&pr, p, prop);
if (!prs) {
return -1;
}
p = JS_VALUE_GET_OBJ(obj);
- prs = find_own_property(&pr, p, js_symbol_to_atom(ctx, (JSValue)brand));
+ prs = find_own_property(&pr, p, js_symbol_to_atom(ctx, brand));
return (prs != NULL);
}
return FALSE;
}
-/* val must be a symbol */
-static JSAtom js_symbol_to_atom(JSContext *ctx, JSValue val)
+/* val must be a symbol. Warning: the atom is not allocated. */
+static JSAtom js_symbol_to_atom(JSContext *ctx, JSValueConst val)
{
JSAtomStruct *p = JS_VALUE_GET_PTR(val);
return js_get_atom_index(ctx->rt, p);
/* fast path for integer values */
atom = __JS_AtomFromUInt32(JS_VALUE_GET_INT(val));
} else if (tag == JS_TAG_SYMBOL) {
- JSAtomStruct *p = JS_VALUE_GET_PTR(val);
- atom = JS_DupAtom(ctx, js_get_atom_index(ctx->rt, p));
+ atom = JS_DupAtom(ctx, js_symbol_to_atom(ctx, val));
} else {
JSValue str;
str = JS_ToPropertyKey(ctx, val);
if (JS_IsException(str))
return JS_ATOM_NULL;
if (JS_VALUE_GET_TAG(str) == JS_TAG_SYMBOL) {
- atom = js_symbol_to_atom(ctx, str);
+ atom = JS_DupAtom(ctx, js_symbol_to_atom(ctx, str));
+ JS_FreeValue(ctx, str);
} else {
atom = JS_NewAtomStr(ctx, JS_VALUE_GET_STRING(str));
}