Skip to content

Conversation

@chqrlie
Copy link
Collaborator

@chqrlie chqrlie commented May 21, 2024

  • use single JS_NewAtomRT API to create atoms with or without ctx takes a UTF-8 string and flags, optionally detects numeric atoms
  • simplify `__JS_NewAtom
  • add js_realloc_rt2 with slack handling
  • simplify JS_NewAtomLen and JS_NewAtom̀
  • simplify JS_NewAtomUInt32, JS_NewAtomInt64, JS_NewClass

- use single `JS_NewAtomRT` API to create atoms with or without `ctx`
  takes a UTF-8 string and flags, optionally detects numeric atoms
- simplify `__JS_NewAtom
- add `js_realloc_rt2` with slack handling
- simplify `JS_NewAtomLen` and `JS_NewAtom̀`
- simplify `JS_NewAtomUInt32`, `JS_NewAtomInt64`, `JS_NewClass`
Copy link
Contributor

@saghul saghul left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but I left some questions.

Return `JS_ATOM_NULL` if error.
Exception is thrown if `ctx` is not a null pointer.
*/
static JSAtom __JS_NewAtom(JSRuntime *rt, JSContext *ctx, JSString *str, int atom_type)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reads a bit weird. When would one pass rt but not ctx ?

memcpy(p->u.str8, str, len);
p->u.str8[len] = '\0';
return __JS_NewAtom(rt, p, atom_type);
if (is_digit(*str) && len < 11) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why 11?

p->u.str8[len] = '\0';
return __JS_NewAtom(rt, p, atom_type);
if (is_digit(*str) && len < 11) {
if (*str == '0') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the special case just for 0 and not for every single digit string?

@saghul
Copy link
Contributor

saghul commented Jun 24, 2024

Sorry for the delay!

@bnoordhuis
Copy link
Contributor

Needs a rebase and conflict resolution before it can land but I'm not really sure what value these changes bring. What gets better/faster/stronger?

@aabbdev
Copy link

aabbdev commented Aug 29, 2025

I don’t really understand why they made those changes, but:

  • Instead of passing rt directly, pass ctx.
  • Inside functions, you can still access ctx->rt if needed.

Passing the ctx (or initiator) as a parameter ensures a consistent API, improves tracking, and makes the design more future-proof.

@saghul
Copy link
Contributor

saghul commented Sep 1, 2025

I think we better close this.

@saghul saghul closed this Sep 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants