From 712e8c0ca26949477c38f91dbaf955cc48e2f261 Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Mon, 2 Nov 2026 17:40:05 +0100 Subject: [PATCH] added support of the import-bytes proposal --- qjsc.c | 3 +++ quickjs-libc.c | 5 +++++ quickjs-libc.h | 1 + run-test262.c | 3 +++ test262.conf | 2 +- 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/qjsc.c b/qjsc.c index 9493a8c..bd5a5cd 100644 --- a/qjsc.c +++ b/qjsc.c @@ -302,6 +302,9 @@ JSModuleDef *jsc_module_loader(JSContext *ctx, case JS_IMPORT_TYPE_TEXT: val = JS_NewStringLen(ctx, (char *)buf, buf_len); break; + case JS_IMPORT_TYPE_BYTES: + val = JS_NewUint8ArrayCopy2(ctx, (uint8_t *)buf, buf_len, TRUE); + break; default: val = JS_ThrowInternalError(ctx, "unhandled import type"); break; diff --git a/quickjs-libc.c b/quickjs-libc.c index 9eec1a0..3ac128e 100644 --- a/quickjs-libc.c +++ b/quickjs-libc.c @@ -681,6 +681,8 @@ int js_module_import_type(JSContext *ctx, JSValueConst attributes) res = JS_IMPORT_TYPE_JSON5; } else if (len == 4 && !memcmp(cstr, "text", len)) { res = JS_IMPORT_TYPE_TEXT; + } else if (len == 5 && !memcmp(cstr, "bytes", len)) { + res = JS_IMPORT_TYPE_BYTES; } else { /* unknown type - throw error */ JS_ThrowTypeError(ctx, "unsupported module type: '%s'", cstr); @@ -741,6 +743,9 @@ JSModuleDef *js_module_loader(JSContext *ctx, case JS_IMPORT_TYPE_TEXT: val = JS_NewStringLen(ctx, (char *)buf, buf_len); break; + case JS_IMPORT_TYPE_BYTES: + val = JS_NewUint8ArrayCopy2(ctx, (uint8_t *)buf, buf_len, TRUE); + break; default: val = JS_ThrowInternalError(ctx, "unhandled import type"); break; diff --git a/quickjs-libc.h b/quickjs-libc.h index 2083684..36f8596 100644 --- a/quickjs-libc.h +++ b/quickjs-libc.h @@ -49,6 +49,7 @@ enum { JS_IMPORT_TYPE_JSON, JS_IMPORT_TYPE_JSON5, JS_IMPORT_TYPE_TEXT, + JS_IMPORT_TYPE_BYTES, }; int js_module_import_type(JSContext *ctx, JSValueConst attributes); diff --git a/run-test262.c b/run-test262.c index 9cc8de5..e6b12b2 100644 --- a/run-test262.c +++ b/run-test262.c @@ -1051,6 +1051,9 @@ static JSModuleDef *js_module_loader_test(JSContext *ctx, case JS_IMPORT_TYPE_TEXT: val = JS_NewStringLen(ctx, (char *)buf, buf_len); break; + case JS_IMPORT_TYPE_BYTES: + val = JS_NewUint8ArrayCopy2(ctx, (uint8_t *)buf, buf_len, TRUE); + break; default: val = JS_ThrowInternalError(ctx, "unhandled import type"); break; diff --git a/test262.conf b/test262.conf index e140ed2..08d5d1b 100644 --- a/test262.conf +++ b/test262.conf @@ -121,7 +121,7 @@ hashbang host-gc-required immutable-arraybuffer import-attributes -import-bytes=skip +import-bytes import-defer=skip import-text import.meta -- 2.47.3