From 7ded62c536fca860b8106c39fb75f2df8fe27180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Mon, 12 Feb 2024 10:30:18 +0100 Subject: [PATCH] Align module export API with upstream Partially reverts https://github.com/quickjs-ng/quickjs/commit/6868fb9e2516fde4a7a3fcef113a6bb1e5ecc957 but the same behavior can be implemented in userland by getting the module ns and querying its properties. Ref: https://github.com/bellard/quickjs/commit/c6cc6a9a5e420fa2707e828da23d131d2bf170f7 Fixes: https://github.com/quickjs-ng/quickjs/issues/259 --- quickjs.c | 43 +++++-------------------------------------- quickjs.h | 6 +----- 2 files changed, 6 insertions(+), 43 deletions(-) diff --git a/quickjs.c b/quickjs.c index 4ce0650..c46f480 100644 --- a/quickjs.c +++ b/quickjs.c @@ -25839,13 +25839,11 @@ static int exported_names_cmp(const void *p1, const void *p2, void *opaque) return ret; } -static JSValue js_get_module_ns(JSContext *ctx, JSModuleDef *m); - static JSValue js_module_ns_autoinit(JSContext *ctx, JSObject *p, JSAtom atom, void *opaque) { JSModuleDef *m = opaque; - return js_get_module_ns(ctx, m); + return JS_GetModuleNamespace(ctx, m); } static JSValue js_build_module_ns(JSContext *ctx, JSModuleDef *m) @@ -25951,7 +25949,7 @@ static JSValue js_build_module_ns(JSContext *ctx, JSModuleDef *m) return JS_EXCEPTION; } -static JSValue js_get_module_ns(JSContext *ctx, JSModuleDef *m) +JSValue JS_GetModuleNamespace(JSContext *ctx, JSModuleDef *m) { if (JS_IsUndefined(m->module_ns)) { JSValue val; @@ -26185,7 +26183,7 @@ static int js_link_module(JSContext *ctx, JSModuleDef *m) if (mi->import_name == JS_ATOM__star_) { JSValue val; /* name space import */ - val = js_get_module_ns(ctx, m1); + val = JS_GetModuleNamespace(ctx, m1); if (JS_IsException(val)) goto fail; set_value(ctx, &var_refs[mi->var_idx]->value, val); @@ -26209,7 +26207,7 @@ static int js_link_module(JSContext *ctx, JSModuleDef *m) JSModuleDef *m2; /* name space import from */ m2 = res_m->req_module_entries[res_me->u.req_module_idx].module; - val = js_get_module_ns(ctx, m2); + val = JS_GetModuleNamespace(ctx, m2); if (JS_IsException(val)) goto fail; var_ref = js_create_module_var(ctx, TRUE); @@ -26396,7 +26394,7 @@ static JSValue js_dynamic_import_job(JSContext *ctx, goto exception; /* return the module namespace */ - ns = js_get_module_ns(ctx, m); + ns = JS_GetModuleNamespace(ctx, m); if (JS_IsException(ns)) goto exception; @@ -34396,37 +34394,6 @@ int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m, return 0; } -JSValue JS_GetModuleExport(JSContext *ctx, const JSModuleDef *m, const char *export_name) { - JSExportEntry *me; - JSAtom name; - name = JS_NewAtom(ctx, export_name); - if (name == JS_ATOM_NULL) - goto fail; - me = find_export_entry(ctx, m, name); - JS_FreeAtom(ctx, name); - if (!me) - goto fail; - return JS_DupValue(ctx, me->u.local.var_ref->value); - fail: - return JS_UNDEFINED; -} - -int JS_CountModuleExport(JSContext *ctx, const JSModuleDef *m) { - return m->export_entries_count; -} - -JSAtom JS_GetModuleExportName(JSContext *ctx, const JSModuleDef *m, int idx) { - if (idx >= m->export_entries_count || idx < 0) - return JS_ATOM_NULL; - return JS_DupAtom(ctx, m->export_entries[idx].export_name); -} - -JSValue JS_GetModuleExportValue(JSContext *ctx, const JSModuleDef *m, int idx) { - if (idx >= m->export_entries_count || idx < 0) - return JS_UNDEFINED; - return JS_DupValue(ctx, m->export_entries[idx].u.local.var_ref->value); -} - /* Note: 'func_obj' is not necessarily a constructor */ static void JS_SetConstructor2(JSContext *ctx, JSValue func_obj, diff --git a/quickjs.h b/quickjs.h index 2b07fcc..438fc7e 100644 --- a/quickjs.h +++ b/quickjs.h @@ -792,6 +792,7 @@ JS_EXTERN void JS_SetModuleLoaderFunc(JSRuntime *rt, /* return the import.meta object of a module */ JS_EXTERN JSValue JS_GetImportMeta(JSContext *ctx, JSModuleDef *m); JS_EXTERN JSAtom JS_GetModuleName(JSContext *ctx, JSModuleDef *m); +JSValue JS_GetModuleNamespace(JSContext *ctx, JSModuleDef *m); /* JS Job support */ @@ -966,11 +967,6 @@ JS_EXTERN int JS_SetModuleExport(JSContext *ctx, JSModuleDef *m, const char *exp JSValue val); JS_EXTERN int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m, const JSCFunctionListEntry *tab, int len); -/* can only be called after the module is initialized */ -JS_EXTERN JSValue JS_GetModuleExport(JSContext *ctx, const JSModuleDef *m, const char *export_name); -JS_EXTERN int JS_CountModuleExport(JSContext *ctx, const JSModuleDef *m); -JS_EXTERN JSAtom JS_GetModuleExportName(JSContext *ctx, const JSModuleDef *m, int idx); -JS_EXTERN JSValue JS_GetModuleExportValue(JSContext *ctx, const JSModuleDef *m, int idx); /* Promise */