]> git.kaiwu.me - quickjs.git/commitdiff
added support of the import-bytes proposal
authorFabrice Bellard <fabrice@bellard.org>
Mon, 2 Nov 2026 16:40:05 +0000 (17:40 +0100)
committerFabrice Bellard <fabrice@bellard.org>
Mon, 2 Nov 2026 16:40:05 +0000 (17:40 +0100)
qjsc.c
quickjs-libc.c
quickjs-libc.h
run-test262.c
test262.conf

diff --git a/qjsc.c b/qjsc.c
index 9493a8cfc91c2bb9a47aaeb5f59ef8436e987b05..bd5a5cda6a74b43020b217efe546dce9563dfccb 100644 (file)
--- 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;
index 9eec1a0ea5980347d3b14ca8eab85755948d6d02..3ac128e2366ccdb6a81b528cab5207bc280fa48f 100644 (file)
@@ -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;
index 20836846fcc74555f83b0d5b4384e23751ba6b59..36f8596bcb0348a5ae27c8a1accbe058409fe4d3 100644 (file)
@@ -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);
 
index 9cc8de595e1cc5e354fe31b18ed0b80f0ad34bbb..e6b12b2edab431cc8d578a6506647f03ec02fc6b 100644 (file)
@@ -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;
index e140ed2e91675febb4c96c9d3f2875b28f000c26..08d5d1bcd656aa1a0ef206566bfe9fd62f55cf14 100644 (file)
@@ -121,7 +121,7 @@ hashbang
 host-gc-required
 immutable-arraybuffer
 import-attributes
-import-bytes=skip
+import-bytes
 import-defer=skip
 import-text
 import.meta