jseption 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -4
- package/dist/atoms.d.ts +1 -0
- package/dist/atoms.js +2 -1
- package/dist/atoms.js.map +1 -1
- package/dist/builtins/base64.d.ts +14 -0
- package/dist/builtins/base64.js +219 -0
- package/dist/builtins/base64.js.map +1 -0
- package/dist/builtins/bigint.js +3 -3
- package/dist/builtins/bigint.js.map +1 -1
- package/dist/builtins/date.d.ts +1 -0
- package/dist/builtins/date.js +26 -12
- package/dist/builtins/date.js.map +1 -1
- package/dist/builtins/error.js +9 -0
- package/dist/builtins/error.js.map +1 -1
- package/dist/builtins/float16.d.ts +3 -0
- package/dist/builtins/float16.js +69 -0
- package/dist/builtins/float16.js.map +1 -0
- package/dist/builtins/function.js +2 -2
- package/dist/builtins/index.js +9 -6
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/iterator.d.ts +2 -0
- package/dist/builtins/iterator.js +624 -0
- package/dist/builtins/iterator.js.map +1 -0
- package/dist/builtins/json.d.ts +13 -1
- package/dist/builtins/json.js +283 -211
- package/dist/builtins/json.js.map +1 -1
- package/dist/builtins/mapset.js +365 -6
- package/dist/builtins/mapset.js.map +1 -1
- package/dist/builtins/math.js +203 -3
- package/dist/builtins/math.js.map +1 -1
- package/dist/builtins/native.js +6 -6
- package/dist/builtins/object.js +9 -2
- package/dist/builtins/object.js.map +1 -1
- package/dist/builtins/promise.js +31 -11
- package/dist/builtins/promise.js.map +1 -1
- package/dist/builtins/proxy.js +2 -2
- package/dist/builtins/reflect.js +6 -2
- package/dist/builtins/reflect.js.map +1 -1
- package/dist/builtins/regexp.js +74 -3
- package/dist/builtins/regexp.js.map +1 -1
- package/dist/builtins/string.js +1 -1
- package/dist/builtins/symbol.js +1 -1
- package/dist/builtins/symbol.js.map +1 -1
- package/dist/builtins/typedarray.d.ts +1 -0
- package/dist/builtins/typedarray.js +302 -32
- package/dist/builtins/typedarray.js.map +1 -1
- package/dist/builtins/weakref.js +7 -7
- package/dist/embed.d.ts +5 -0
- package/dist/embed.js +47 -15
- package/dist/embed.js.map +1 -1
- package/dist/interpreter.js +15 -14
- package/dist/interpreter.js.map +1 -1
- package/dist/jit.d.ts +1 -0
- package/dist/jit.js +51 -13
- package/dist/jit.js.map +1 -1
- package/dist/jit_hook.d.ts +1 -0
- package/dist/jit_hook.js.map +1 -1
- package/dist/jit_runtime.d.ts +1 -1
- package/dist/jit_runtime.js +6 -6
- package/dist/jit_runtime.js.map +1 -1
- package/dist/jit_stack.d.ts +1 -0
- package/dist/jit_stack.js +2 -1
- package/dist/jit_stack.js.map +1 -1
- package/dist/jseption.d.ts +4 -0
- package/dist/jseption.js +2 -0
- package/dist/jseption.js.map +1 -1
- package/dist/membrane.d.ts +16 -0
- package/dist/membrane.js +576 -0
- package/dist/membrane.js.map +1 -0
- package/dist/module.js +5 -3
- package/dist/module.js.map +1 -1
- package/dist/parser.js +26 -9
- package/dist/parser.js.map +1 -1
- package/dist/print.d.ts +12 -0
- package/dist/print.js +494 -0
- package/dist/print.js.map +1 -0
- package/dist/qjs.js +13 -10
- package/dist/qjs.js.map +1 -1
- package/dist/quickjs.d.ts +8 -0
- package/dist/quickjs.js +132 -53
- package/dist/quickjs.js.map +1 -1
- package/dist/std.d.ts +4 -2
- package/dist/std.js +42 -8
- package/dist/std.js.map +1 -1
- package/dist/values.d.ts +31 -27
- package/dist/values.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/dist/qjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qjs.js","sourceRoot":"","sources":["../src/qjs.ts"],"names":[],"mappings":";AACA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAC3H,yBAAyB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EACtH,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EACrH,eAAe,EAAE,gBAAgB,EAAkB,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAEpD,SAAS,IAAI;IACX,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;6DAc+C,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAc,EAAE,GAAW,EAAE,QAAgB,EAAE,UAAkB;IACjF,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,GAAG,yBAAyB,CAAC,CAAC;IAC/E,IAAI,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,YAAY,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,aAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAE,CAAC,iBAAiB,CAAC;IACpG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,GAAc,EAAE,GAAW,EAAE,QAAgB,EAAE,UAAkB,EAAE,IAAa;IAChG,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpD,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6EAA6E;AAC7E,MAAM,eAAe,GAAc,EAAE,CAAC;AAEtC,qEAAqE;AACrE,SAAS,YAAY,CAAC,GAAc,EAAE,CAAU;IAC9C,IAAI,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,oCAA4B;QAAE,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5E,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,iDAAiD;AACjD,SAAS,cAAc,CAAC,QAAgB,EAAE,GAAW,EAAE,KAAiC;IACtF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,KAAK,QAAQ,CAAC;IAC9C,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,GAAc,EAAE,UAAkB;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxG,EAAE,CAAC,MAAM,EAAE,CAAC;IACZ,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,GAAG,UAAU,CAAC,CAAC;QAC3E,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,cAAc,CAAC,CAAC,CAAC;gBAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC;;gBACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACvB,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,WAAW,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC;IACtG,IAAI,KAAK,GAA+B,IAAI,CAAC;IAC7C,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,IAAI,EAAE,CAAC;aACxC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAAC,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;aACvG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,eAAe;YAAE,WAAW,GAAG,IAAI,CAAC;aAChE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,IAAI,GAAG,IAAI,CAAC;aAClD,IAAI,GAAG,KAAK,UAAU;YAAE,MAAM,GAAG,IAAI,CAAC;aACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU;YAAE,KAAK,GAAG,QAAQ,CAAC;aACzD,IAAI,GAAG,KAAK,UAAU;YAAE,KAAK,GAAG,QAAQ,CAAC;aACzC,IAAI,GAAG,KAAK,eAAe;YAAE,WAAW,GAAG,IAAI,CAAC;aAChD,IAAI,GAAG,KAAK,OAAO;YAAE,GAAG,GAAG,IAAI,CAAC;aAChC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,IAAI,GAAG,IAAI,CAAC;aAClD,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;aACxB,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,GAAG,CAAC,CAAC;YAAC,IAAI,EAAE,CAAC;QAAC,CAAC;IACjE,CAAC;IACD,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9B,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,kBAAkB,CAAC,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC/C,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,MAAM,UAAU,GAAG,mBAAmB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACzF,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACxH,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,qBAAqB,QAAQ,MAAO,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC;QACX,CAAC;QACD;gFACwE;QACxE,MAAM,UAAU,GAAG,UAAU,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,IAAI,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YACzC;+BACmB;YACnB,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;gBAAE,MAAM,GAAG,CAAC,CAAC;;gBACrG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,eAAe;QAAE,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,MAAM,GAAG,CAAC,CAAC;IACtE,IAAI,WAAW;QAAE,MAAM,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/*\n * qjs: command line interpreter (port of qjs.c)\n */\nimport { JS_NewRuntime, JS_NewContext, JS_Eval, JS_IsException, JS_EVAL_TYPE_GLOBAL, JS_EVAL_TYPE_MODULE, JS_EVAL_FLAG_STRICT,\n JS_EVAL_FLAG_COMPILE_ONLY, JS_EVAL_FLAG_STRIP_TYPES, JS_EVAL_FLAG_JSX, JS_IsUndefined, JS_ToString, JS_GetFunctionData, JS_SetMaxStackSize, formatException,\n JS_GetException, JSContext, JSValue, JSModuleDef, JS_SetModuleLoader, JS_ImportModule, JS_EvalModule, JS_DetectModule,\n JS_PromiseState, JS_PromiseResult, JSPromiseState } from './jseption.ts';\nimport { js_std_add_helpers, js_std_loop, js_std_dump_error, js_std_module_loader } from './std.ts';\nimport { dump_byte_code } from './dump.ts';\nimport { js_module_type_of, js_module_type_flags } from './module.ts';\nimport { readFileSync } from 'node:fs';\nimport { resolve as path_resolve } from 'node:path';\n\nfunction help(): never {\n console.log(`usage: qjs [options] [file [args]]\n-h --help list options\n-e --eval EXPR evaluate EXPR\n-i --interactive go to interactive mode\n-d --dump dump the bytecode of the evaluated code\n-m --module evaluate the file and -e as ES modules (.mjs, .mts, .jsx\n and .tsx files always are; .js and .ts files are when they\n start with import or export)\n --script evaluate the file as a script\n --strict evaluate in strict mode\n --strip-types run -e and the REPL as TypeScript (type syntax is stripped;\n .ts, .mts, .cts and .tsx files always are)\n --jsx compile JSX in -e and the REPL (.jsx and .tsx files always\n are)\n-q --quit just instantiate the interpreter and quit`);\n process.exit(1);\n}\n\nfunction dump_buf(ctx: JSContext, buf: string, filename: string, eval_flags: number): number {\n const fn = JS_Eval(ctx, buf, filename, eval_flags | JS_EVAL_FLAG_COMPILE_ONLY);\n if (JS_IsException(fn)) { js_std_dump_error(ctx); return -1; }\n const b = fn instanceof JSModuleDef ? fn.func_bytecode! : JS_GetFunctionData(fn)!.function_bytecode;\n process.stdout.write(dump_byte_code(ctx, b));\n return 0;\n}\n\nfunction eval_buf(ctx: JSContext, buf: string, filename: string, eval_flags: number, dump: boolean): number {\n if (dump && dump_buf(ctx, buf, filename, eval_flags)) return -1;\n const val = JS_Eval(ctx, buf, filename, eval_flags);\n if (JS_IsException(val)) {\n js_std_dump_error(ctx);\n return -1;\n }\n return 0;\n}\n\n/* module evaluations whose promise is checked once the event loop is idle */\nconst module_promises: JSValue[] = [];\n\n/* report a module that failed to load, link or evaluate: 0, or -1 */\nfunction check_module(ctx: JSContext, p: JSValue): number {\n if (JS_PromiseState(ctx, p) !== JSPromiseState.REJECTED) return 0;\n process.stderr.write(formatException(ctx, JS_PromiseResult(ctx, p)) + '\\n');\n return -1;\n}\n\n/* is `filename` (with source `buf`) a module? */\nfunction is_module_file(filename: string, buf: string, force: 'module' | 'script' | null): boolean {\n if (force !== null) return force === 'module';\n if (/\\.m[jt]s$/.test(filename) || /\\.[jt]sx$/.test(filename)) return true;\n if (/\\.c[jt]s$/.test(filename)) return false;\n return JS_DetectModule(buf);\n}\n\nasync function repl(ctx: JSContext, eval_flags: number): Promise<void> {\n const readline = await import('readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: 'qjs > ' });\n rl.prompt();\n for await (const line of rl) {\n if (line.trim() === '') { rl.prompt(); continue; }\n const val = JS_Eval(ctx, line, '<repl>', JS_EVAL_TYPE_GLOBAL | eval_flags);\n if (JS_IsException(val)) {\n js_std_dump_error(ctx);\n } else if (!JS_IsUndefined(val)) {\n const s = JS_ToString(ctx, val);\n if (JS_IsException(s)) js_std_dump_error(ctx);\n else console.log(s);\n }\n await js_std_loop(ctx);\n rl.prompt();\n }\n}\n\nasync function main(): Promise<number> {\n const argv = process.argv.slice(2);\n let optind = 0;\n const expr: string[] = [];\n let interactive = false, dump = false, strict = false, quit = false, strip_types = false, jsx = false;\n let force: 'module' | 'script' | null = null;\n while (optind < argv.length && argv[optind].startsWith('-')) {\n const arg = argv[optind++];\n if (arg === '-h' || arg === '--help') help();\n else if (arg === '-e' || arg === '--eval') { if (optind >= argv.length) help(); expr.push(argv[optind++]); }\n else if (arg === '-i' || arg === '--interactive') interactive = true;\n else if (arg === '-d' || arg === '--dump') dump = true;\n else if (arg === '--strict') strict = true;\n else if (arg === '-m' || arg === '--module') force = 'module';\n else if (arg === '--script') force = 'script';\n else if (arg === '--strip-types') strip_types = true;\n else if (arg === '--jsx') jsx = true;\n else if (arg === '-q' || arg === '--quit') quit = true;\n else if (arg === '--') break;\n else { console.error(`qjs: unknown option '${arg}'`); help(); }\n }\n const rt = JS_NewRuntime();\n JS_SetMaxStackSize(rt, 1000);\n const ctx = JS_NewContext(rt);\n js_std_add_helpers(ctx, argv.slice(optind));\n JS_SetModuleLoader(rt, js_std_module_loader());\n if (quit) return 0;\n const lang_flags = (strip_types ? JS_EVAL_FLAG_STRIP_TYPES : 0) | (jsx ? JS_EVAL_FLAG_JSX : 0);\n const eval_flags = JS_EVAL_TYPE_GLOBAL | (strict ? JS_EVAL_FLAG_STRICT : 0) | lang_flags;\n let status = 0;\n for (const e of expr) {\n if (force === 'module') {\n const name = path_resolve('<cmdline>');\n if (dump && dump_buf(ctx, e, name, (eval_flags & ~JS_EVAL_TYPE_GLOBAL) | JS_EVAL_TYPE_MODULE)) { status = 1; continue; }\n module_promises.push(JS_EvalModule(ctx, e, name, eval_flags));\n } else if (eval_buf(ctx, e, '<cmdline>', eval_flags, dump)) {\n status = 1;\n }\n }\n if (optind < argv.length) {\n const filename = argv[optind];\n let buf: string;\n try {\n buf = readFileSync(filename, 'utf8');\n } catch (e) {\n console.error(`qjs: cannot load '${filename}': ${(e as Error).message}`);\n return 1;\n }\n /* TypeScript files: erasable type syntax is stripped (Node's strip-only mode); JSX and TSX\n files: JSX is compiled. Modules get the same flags from the loader */\n const file_flags = eval_flags | js_module_type_flags(js_module_type_of(filename));\n if (is_module_file(filename, buf, force)) {\n /* through the loader, so that the module's id is its absolute path and import.meta.url\n its file: URL */\n const id = path_resolve(filename);\n if (dump && dump_buf(ctx, buf, id, (file_flags & ~JS_EVAL_TYPE_GLOBAL) | JS_EVAL_TYPE_MODULE)) status = 1;\n else module_promises.push(JS_ImportModule(ctx, id));\n } else if (eval_buf(ctx, buf, filename, file_flags, dump)) {\n status = 1;\n }\n } else if (expr.length === 0) {\n interactive = true;\n }\n await js_std_loop(ctx);\n for (const p of module_promises) if (check_module(ctx, p)) status = 1;\n if (interactive) await repl(ctx, lang_flags);\n return status;\n}\n\nmain().then(code => process.exit(code), e => { console.error(e); process.exit(2); });\n"]}
|
|
1
|
+
{"version":3,"file":"qjs.js","sourceRoot":"","sources":["../src/qjs.ts"],"names":[],"mappings":";AACA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAC3H,yBAAyB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,cAAc,EAAe,kBAAkB,EAAE,kBAAkB,EACrG,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EACrH,eAAe,EAAE,gBAAgB,EAAkB,iCAAiC,EAAE,MAAM,eAAe,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EACnG,gCAAgC,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAEpD,SAAS,IAAI;IACX,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;kEAeoD,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAc,EAAE,GAAW,EAAE,QAAgB,EAAE,UAAkB;IACjF,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,GAAG,yBAAyB,CAAC,CAAC;IAC/E,IAAI,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,YAAY,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,aAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAE,CAAC,iBAAiB,CAAC;IACpG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,GAAc,EAAE,GAAW,EAAE,QAAgB,EAAE,UAAkB,EAAE,IAAa;IAChG,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpD,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6EAA6E;AAC7E,MAAM,eAAe,GAAc,EAAE,CAAC;AAEtC,qEAAqE;AACrE,SAAS,YAAY,CAAC,GAAc,EAAE,CAAU;IAC9C,IAAI,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,oCAA4B;QAAE,OAAO,CAAC,CAAC;IAClE,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,iDAAiD;AACjD,SAAS,cAAc,CAAC,QAAgB,EAAE,GAAW,EAAE,KAAiC;IACtF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,KAAK,QAAQ,CAAC;IAC9C,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,GAAc,EAAE,UAAkB;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxG,EAAE,CAAC,MAAM,EAAE,CAAC;IACZ,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,GAAG,UAAU,CAAC,CAAC;QAC3E,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACvB,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,WAAW,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC;IACtG,IAAI,gCAAgC,GAAG,IAAI,CAAC;IAC5C,IAAI,KAAK,GAA+B,IAAI,CAAC;IAC7C,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,IAAI,EAAE,CAAC;aACxC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAAC,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;aACvG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,eAAe;YAAE,WAAW,GAAG,IAAI,CAAC;aAChE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,IAAI,GAAG,IAAI,CAAC;aAClD,IAAI,GAAG,KAAK,UAAU;YAAE,MAAM,GAAG,IAAI,CAAC;aACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU;YAAE,KAAK,GAAG,QAAQ,CAAC;aACzD,IAAI,GAAG,KAAK,UAAU;YAAE,KAAK,GAAG,QAAQ,CAAC;aACzC,IAAI,GAAG,KAAK,eAAe;YAAE,WAAW,GAAG,IAAI,CAAC;aAChD,IAAI,GAAG,KAAK,OAAO;YAAE,GAAG,GAAG,IAAI,CAAC;aAChC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,IAAI,GAAG,IAAI,CAAC;aAClD,IAAI,GAAG,KAAK,0BAA0B;YAAE,gCAAgC,GAAG,KAAK,CAAC;aACjF,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;aACxB,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,GAAG,CAAC,CAAC;YAAC,IAAI,EAAE,CAAC;QAAC,CAAC;IACjE,CAAC;IACD,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9B,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,IAAI,gCAAgC;QAAE,iCAAiC,CAAC,EAAE,EAAE,gCAAgC,EAAE,IAAI,CAAC,CAAC;IACpH,kBAAkB,CAAC,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC/C,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,MAAM,UAAU,GAAG,mBAAmB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACzF,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC,EAAE,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACxH,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,qBAAqB,QAAQ,MAAO,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC;QACX,CAAC;QACD;gFACwE;QACxE,MAAM,UAAU,GAAG,UAAU,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,IAAI,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YACzC;+BACmB;YACnB,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;gBAAE,MAAM,GAAG,CAAC,CAAC;;gBACrG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,MAAM,WAAW,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,eAAe;QAAE,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,MAAM,GAAG,CAAC,CAAC;IACtE,IAAI,WAAW;QAAE,MAAM,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/*\n * qjs: command line interpreter (port of qjs.c)\n */\nimport { JS_NewRuntime, JS_NewContext, JS_Eval, JS_IsException, JS_EVAL_TYPE_GLOBAL, JS_EVAL_TYPE_MODULE, JS_EVAL_FLAG_STRICT,\n JS_EVAL_FLAG_COMPILE_ONLY, JS_EVAL_FLAG_STRIP_TYPES, JS_EVAL_FLAG_JSX, JS_IsUndefined, JS_ToString, JS_GetFunctionData, JS_SetMaxStackSize, formatException,\n JS_GetException, JSContext, JSValue, JSModuleDef, JS_SetModuleLoader, JS_ImportModule, JS_EvalModule, JS_DetectModule,\n JS_PromiseState, JS_PromiseResult, JSPromiseState, JS_SetHostPromiseRejectionTracker } from './jseption.ts';\nimport { js_std_add_helpers, js_std_loop, js_std_dump_error, js_std_dump_error1, js_std_module_loader,\n js_std_promise_rejection_tracker } from './std.ts';\nimport { JS_PrintValueToString } from './print.ts';\nimport { dump_byte_code } from './dump.ts';\nimport { js_module_type_of, js_module_type_flags } from './module.ts';\nimport { readFileSync } from 'node:fs';\nimport { resolve as path_resolve } from 'node:path';\n\nfunction help(): never {\n console.log(`usage: qjs [options] [file [args]]\n-h --help list options\n-e --eval EXPR evaluate EXPR\n-i --interactive go to interactive mode\n-d --dump dump the bytecode of the evaluated code\n-m --module evaluate the file and -e as ES modules (.mjs, .mts, .jsx\n and .tsx files always are; .js and .ts files are when they\n start with import or export)\n --script evaluate the file as a script\n --strict evaluate in strict mode\n --strip-types run -e and the REPL as TypeScript (type syntax is stripped;\n .ts, .mts, .cts and .tsx files always are)\n --jsx compile JSX in -e and the REPL (.jsx and .tsx files always\n are)\n-q --quit just instantiate the interpreter and quit\n --no-unhandled-rejection ignore unhandled promise rejections`);\n process.exit(1);\n}\n\nfunction dump_buf(ctx: JSContext, buf: string, filename: string, eval_flags: number): number {\n const fn = JS_Eval(ctx, buf, filename, eval_flags | JS_EVAL_FLAG_COMPILE_ONLY);\n if (JS_IsException(fn)) { js_std_dump_error(ctx); return -1; }\n const b = fn instanceof JSModuleDef ? fn.func_bytecode! : JS_GetFunctionData(fn)!.function_bytecode;\n process.stdout.write(dump_byte_code(ctx, b));\n return 0;\n}\n\nfunction eval_buf(ctx: JSContext, buf: string, filename: string, eval_flags: number, dump: boolean): number {\n if (dump && dump_buf(ctx, buf, filename, eval_flags)) return -1;\n const val = JS_Eval(ctx, buf, filename, eval_flags);\n if (JS_IsException(val)) {\n js_std_dump_error(ctx);\n return -1;\n }\n return 0;\n}\n\n/* module evaluations whose promise is checked once the event loop is idle */\nconst module_promises: JSValue[] = [];\n\n/* report a module that failed to load, link or evaluate: 0, or -1 */\nfunction check_module(ctx: JSContext, p: JSValue): number {\n if (JS_PromiseState(ctx, p) !== JSPromiseState.REJECTED) return 0;\n js_std_dump_error1(ctx, JS_PromiseResult(ctx, p));\n return -1;\n}\n\n/* is `filename` (with source `buf`) a module? */\nfunction is_module_file(filename: string, buf: string, force: 'module' | 'script' | null): boolean {\n if (force !== null) return force === 'module';\n if (/\\.m[jt]s$/.test(filename) || /\\.[jt]sx$/.test(filename)) return true;\n if (/\\.c[jt]s$/.test(filename)) return false;\n return JS_DetectModule(buf);\n}\n\nasync function repl(ctx: JSContext, eval_flags: number): Promise<void> {\n const readline = await import('readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: 'qjs > ' });\n rl.prompt();\n for await (const line of rl) {\n if (line.trim() === '') { rl.prompt(); continue; }\n const val = JS_Eval(ctx, line, '<repl>', JS_EVAL_TYPE_GLOBAL | eval_flags);\n if (JS_IsException(val)) {\n js_std_dump_error(ctx);\n } else if (!JS_IsUndefined(val)) {\n console.log(JS_PrintValueToString(ctx, val));\n }\n await js_std_loop(ctx);\n rl.prompt();\n }\n}\n\nasync function main(): Promise<number> {\n const argv = process.argv.slice(2);\n let optind = 0;\n const expr: string[] = [];\n let interactive = false, dump = false, strict = false, quit = false, strip_types = false, jsx = false;\n let dump_unhandled_promise_rejection = true;\n let force: 'module' | 'script' | null = null;\n while (optind < argv.length && argv[optind].startsWith('-')) {\n const arg = argv[optind++];\n if (arg === '-h' || arg === '--help') help();\n else if (arg === '-e' || arg === '--eval') { if (optind >= argv.length) help(); expr.push(argv[optind++]); }\n else if (arg === '-i' || arg === '--interactive') interactive = true;\n else if (arg === '-d' || arg === '--dump') dump = true;\n else if (arg === '--strict') strict = true;\n else if (arg === '-m' || arg === '--module') force = 'module';\n else if (arg === '--script') force = 'script';\n else if (arg === '--strip-types') strip_types = true;\n else if (arg === '--jsx') jsx = true;\n else if (arg === '-q' || arg === '--quit') quit = true;\n else if (arg === '--no-unhandled-rejection') dump_unhandled_promise_rejection = false;\n else if (arg === '--') break;\n else { console.error(`qjs: unknown option '${arg}'`); help(); }\n }\n const rt = JS_NewRuntime();\n JS_SetMaxStackSize(rt, 1000);\n const ctx = JS_NewContext(rt);\n js_std_add_helpers(ctx, argv.slice(optind));\n if (dump_unhandled_promise_rejection) JS_SetHostPromiseRejectionTracker(rt, js_std_promise_rejection_tracker, null);\n JS_SetModuleLoader(rt, js_std_module_loader());\n if (quit) return 0;\n const lang_flags = (strip_types ? JS_EVAL_FLAG_STRIP_TYPES : 0) | (jsx ? JS_EVAL_FLAG_JSX : 0);\n const eval_flags = JS_EVAL_TYPE_GLOBAL | (strict ? JS_EVAL_FLAG_STRICT : 0) | lang_flags;\n let status = 0;\n for (const e of expr) {\n if (force === 'module') {\n const name = path_resolve('<cmdline>');\n if (dump && dump_buf(ctx, e, name, (eval_flags & ~JS_EVAL_TYPE_GLOBAL) | JS_EVAL_TYPE_MODULE)) { status = 1; continue; }\n module_promises.push(JS_EvalModule(ctx, e, name, eval_flags));\n } else if (eval_buf(ctx, e, '<cmdline>', eval_flags, dump)) {\n status = 1;\n }\n }\n if (optind < argv.length) {\n const filename = argv[optind];\n let buf: string;\n try {\n buf = readFileSync(filename, 'utf8');\n } catch (e) {\n console.error(`qjs: cannot load '${filename}': ${(e as Error).message}`);\n return 1;\n }\n /* TypeScript files: erasable type syntax is stripped (Node's strip-only mode); JSX and TSX\n files: JSX is compiled. Modules get the same flags from the loader */\n const file_flags = eval_flags | js_module_type_flags(js_module_type_of(filename));\n if (is_module_file(filename, buf, force)) {\n /* through the loader, so that the module's id is its absolute path and import.meta.url\n its file: URL */\n const id = path_resolve(filename);\n if (dump && dump_buf(ctx, buf, id, (file_flags & ~JS_EVAL_TYPE_GLOBAL) | JS_EVAL_TYPE_MODULE)) status = 1;\n else module_promises.push(JS_ImportModule(ctx, id));\n } else if (eval_buf(ctx, buf, filename, file_flags, dump)) {\n status = 1;\n }\n } else if (expr.length === 0) {\n interactive = true;\n }\n await js_std_loop(ctx, module_promises);\n for (const p of module_promises) if (check_module(ctx, p)) status = 1;\n if (interactive) await repl(ctx, lang_flags);\n return status;\n}\n\nmain().then(code => process.exit(code), e => { console.error(e); process.exit(2); });\n"]}
|
package/dist/quickjs.d.ts
CHANGED
|
@@ -82,6 +82,7 @@ export declare class JSContext {
|
|
|
82
82
|
user_opaque: any;
|
|
83
83
|
loaded_modules: Map<string, any>;
|
|
84
84
|
interrupt_counter: number;
|
|
85
|
+
last_new: unknown;
|
|
85
86
|
array_iterator_proto: JSObject | null;
|
|
86
87
|
generator_proto: JSObject | null;
|
|
87
88
|
async_generator_proto: JSObject | null;
|
|
@@ -180,6 +181,8 @@ export declare function JS_ThrowReferenceErrorUninitialized2(ctx: JSContext, b:
|
|
|
180
181
|
export declare function JS_ThrowTypeErrorReadOnly(ctx: JSContext, flags: number, atom: JSAtom): number;
|
|
181
182
|
export declare function JS_ThrowTypeErrorNotAnObject(ctx: JSContext): JSValue;
|
|
182
183
|
export declare function JS_ThrowTypeErrorNotASymbol(ctx: JSContext): JSValue;
|
|
184
|
+
export declare function JS_ThrowTypeErrorNotAConstructor(ctx: JSContext, f: JSValue): JSValue;
|
|
185
|
+
export declare function js_not_a_constructor_message(f: unknown): string;
|
|
183
186
|
export declare function JS_ThrowTypeErrorInvalidClass(ctx: JSContext, class_id: JSClassID): JSValue;
|
|
184
187
|
export declare function JS_ThrowTypeErrorNotAFunction(ctx: JSContext): JSValue;
|
|
185
188
|
export declare function is_strict_mode(ctx: JSContext): boolean;
|
|
@@ -288,6 +291,7 @@ export declare function JS_GetPropertyValue(ctx: JSContext, this_obj: JSValue, p
|
|
|
288
291
|
export declare function JS_HasProperty(ctx: JSContext, obj: JSValue, prop: JSAtom): number;
|
|
289
292
|
export declare function JS_IsExtensible(ctx: JSContext, obj: JSValue): number;
|
|
290
293
|
export declare function JS_PreventExtensions(ctx: JSContext, obj: JSValue): number;
|
|
294
|
+
export declare function JS_SetImmutablePrototype(ctx: JSContext, obj: JSValue): void;
|
|
291
295
|
export declare function JS_SetPrototypeInternal(ctx: JSContext, obj: JSValue, proto_val: JSValue, throw_flag: boolean): number;
|
|
292
296
|
export declare function JS_SetPrototype(ctx: JSContext, obj: JSValue, proto_val: JSValue): number;
|
|
293
297
|
export declare function js_is_host_error(e: unknown): boolean;
|
|
@@ -313,6 +317,10 @@ export interface JSPropertyEnum {
|
|
|
313
317
|
is_enumerable: boolean;
|
|
314
318
|
}
|
|
315
319
|
export declare function JS_GetOwnPropertyNamesInternal(ctx: JSContext, p: JSObject, flags: number): JSPropertyEnum[] | null;
|
|
320
|
+
export declare function JS_FreePropertyEnum(ctx: JSContext, tab: JSPropertyEnum[] | null, len?: number): void;
|
|
321
|
+
export declare function JS_AtomToCStringLen(ctx: JSContext, plen: {
|
|
322
|
+
v: number;
|
|
323
|
+
} | null, atom: JSAtom): string;
|
|
316
324
|
export declare function JS_GetOwnPropertyNames(ctx: JSContext, obj: JSValue, flags: number): JSPropertyEnum[] | null;
|
|
317
325
|
export declare function JS_FromPropertyDescriptor(ctx: JSContext, d: JSPropertyDescriptor): JSValue;
|
|
318
326
|
export declare function js_obj_to_desc(ctx: JSContext, d: JSPropertyDescriptor, desc: JSValue): number;
|
package/dist/quickjs.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* WeakMap. Guest functions are strict host wrapper functions.
|
|
16
16
|
*/
|
|
17
17
|
import { jit_hooks } from "./jit_hook.js";
|
|
18
|
-
import { AtomTable, JS_ATOM_NULL, JS_ATOM_TYPE_STRING, JS_ATOM_TYPE_SYMBOL, __JS_AtomIsTaggedInt, __JS_AtomFromUInt32, __JS_AtomToUInt32, JS_ATOM_MAX_INT, JS_ATOM_length, JS_ATOM_prototype, JS_ATOM_constructor, JS_ATOM_message, JS_ATOM_stack, JS_ATOM_toString, JS_ATOM_valueOf, JS_ATOM_Symbol_toPrimitive, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_hasInstance, JS_ATOM_done, JS_ATOM_value, JS_ATOM_return, JS_ATOM_get, JS_ATOM_set, JS_ATOM_configurable, JS_ATOM_writable, JS_ATOM_enumerable, JS_ATOM_undefined, JS_ATOM_object, JS_ATOM_boolean, JS_ATOM_number, JS_ATOM_string, JS_ATOM_symbol, JS_ATOM_bigint, JS_ATOM_function, JS_ATOM_lineNumber, JS_ATOM_fileName, JS_ATOM_columnNumber, JS_ATOM_Error, JS_ATOM___proto__, JS_ATOM_Symbol_asyncIterator, JS_ATOM_null, JS_ATOM_false, JS_ATOM_true, JS_ATOM_Object, JS_ATOM_Function, JS_ATOM_Array, JS_ATOM_Number, JS_ATOM_String, JS_ATOM_Boolean, JS_ATOM_Symbol, JS_ATOM_Arguments, JS_ATOM_BigInt, JS_ATOM_Date, JS_ATOM_RegExp, JS_ATOM_Map, JS_ATOM_Set, JS_ATOM_WeakMap, JS_ATOM_WeakSet, JS_ATOM_Generator, JS_ATOM_Proxy, JS_ATOM_Promise, JS_ATOM_AsyncFunction, JS_ATOM_AsyncGenerator, JS_ATOM_GeneratorFunction, JS_ATOM_AsyncGeneratorFunction, JS_ATOM_ForInIterator, JS_ATOM_Map_Iterator, JS_ATOM_Set_Iterator, JS_ATOM_Array_Iterator, JS_ATOM_String_Iterator, JS_ATOM_RegExp_String_Iterator, JS_ATOM_PromiseResolveFunction, JS_ATOM_PromiseRejectFunction, JS_ATOM_AsyncFunctionResolve, JS_ATOM_AsyncFunctionReject, JS_ATOM_ArrayBuffer, JS_ATOM_SharedArrayBuffer, JS_ATOM_Uint8ClampedArray, JS_ATOM_Int8Array, JS_ATOM_Uint8Array, JS_ATOM_Int16Array, JS_ATOM_Uint16Array, JS_ATOM_Int32Array, JS_ATOM_Uint32Array, JS_ATOM_BigInt64Array, JS_ATOM_BigUint64Array, JS_ATOM_Float32Array, JS_ATOM_Float64Array, JS_ATOM_DataView, JS_ATOM_WeakRef, JS_ATOM_FinalizationRegistry, JS_ATOM_Module, } from "./atoms.js";
|
|
18
|
+
import { AtomTable, JS_ATOM_NULL, JS_ATOM_TYPE_STRING, JS_ATOM_TYPE_SYMBOL, __JS_AtomIsTaggedInt, __JS_AtomFromUInt32, __JS_AtomToUInt32, JS_ATOM_MAX_INT, JS_ATOM_length, JS_ATOM_prototype, JS_ATOM_constructor, JS_ATOM_message, JS_ATOM_stack, JS_ATOM_toString, JS_ATOM_valueOf, JS_ATOM_Symbol_toPrimitive, JS_ATOM_Symbol_iterator, JS_ATOM_Symbol_hasInstance, JS_ATOM_done, JS_ATOM_value, JS_ATOM_return, JS_ATOM_get, JS_ATOM_set, JS_ATOM_configurable, JS_ATOM_writable, JS_ATOM_enumerable, JS_ATOM_undefined, JS_ATOM_object, JS_ATOM_boolean, JS_ATOM_number, JS_ATOM_string, JS_ATOM_symbol, JS_ATOM_bigint, JS_ATOM_function, JS_ATOM_lineNumber, JS_ATOM_fileName, JS_ATOM_columnNumber, JS_ATOM_Error, JS_ATOM___proto__, JS_ATOM_Symbol_asyncIterator, JS_ATOM_null, JS_ATOM_false, JS_ATOM_true, JS_ATOM_Object, JS_ATOM_Function, JS_ATOM_Array, JS_ATOM_Number, JS_ATOM_String, JS_ATOM_Boolean, JS_ATOM_Symbol, JS_ATOM_Arguments, JS_ATOM_BigInt, JS_ATOM_Date, JS_ATOM_RegExp, JS_ATOM_Map, JS_ATOM_Set, JS_ATOM_WeakMap, JS_ATOM_WeakSet, JS_ATOM_Generator, JS_ATOM_Proxy, JS_ATOM_Promise, JS_ATOM_AsyncFunction, JS_ATOM_AsyncGenerator, JS_ATOM_GeneratorFunction, JS_ATOM_AsyncGeneratorFunction, JS_ATOM_ForInIterator, JS_ATOM_Map_Iterator, JS_ATOM_Set_Iterator, JS_ATOM_Array_Iterator, JS_ATOM_String_Iterator, JS_ATOM_RegExp_String_Iterator, JS_ATOM_PromiseResolveFunction, JS_ATOM_PromiseRejectFunction, JS_ATOM_AsyncFunctionResolve, JS_ATOM_AsyncFunctionReject, JS_ATOM_ArrayBuffer, JS_ATOM_SharedArrayBuffer, JS_ATOM_Uint8ClampedArray, JS_ATOM_Int8Array, JS_ATOM_Uint8Array, JS_ATOM_Int16Array, JS_ATOM_Uint16Array, JS_ATOM_Int32Array, JS_ATOM_Uint32Array, JS_ATOM_BigInt64Array, JS_ATOM_BigUint64Array, JS_ATOM_Float16Array, JS_ATOM_Float32Array, JS_ATOM_Float64Array, JS_ATOM_DataView, JS_ATOM_WeakRef, JS_ATOM_FinalizationRegistry, JS_ATOM_Module, } from "./atoms.js";
|
|
19
19
|
import { JSSpecial, JS_EXCEPTION, JS_UNINITIALIZED, JS_MODE_BACKTRACE_BARRIER, JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE, JS_PROP_C_W_E, JS_PROP_TMASK, JS_PROP_GETSET, JS_PROP_HAS_CONFIGURABLE, JS_PROP_HAS_WRITABLE, JS_PROP_HAS_ENUMERABLE, JS_PROP_HAS_GET, JS_PROP_HAS_SET, JS_PROP_HAS_VALUE, JS_PROP_THROW, JS_PROP_THROW_STRICT, JS_PROP_NO_ADD, JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_GPN_ENUM_ONLY, JS_GPN_SET_ENUM, JS_IsException, JS_IsObject, JS_IsUndefined, JSCFunctionRecord, JSCFunctionDataRecord, JSStackFrame, JS_CALL_FLAG_CONSTRUCTOR, JS_CALL_FLAG_COPY_ARGV, JSForInState, JSObjectMeta, JS_MODE_STRICT, JSModuleDef, } from "./values.js";
|
|
20
20
|
export * from "./values.js";
|
|
21
21
|
export * from "./atoms.js";
|
|
@@ -116,6 +116,10 @@ export class JSContext {
|
|
|
116
116
|
user_opaque = null;
|
|
117
117
|
loaded_modules = new Map();
|
|
118
118
|
interrupt_counter = 0;
|
|
119
|
+
/* the callee of the native `new` compiled code ran last (stored after its arguments are
|
|
120
|
+
evaluated), so a failing construct is named after the callee's own `name`, as the
|
|
121
|
+
interpreter names it (JS_ThrowTypeErrorNotAConstructor) */
|
|
122
|
+
last_new = undefined;
|
|
119
123
|
array_iterator_proto = null;
|
|
120
124
|
generator_proto = null;
|
|
121
125
|
async_generator_proto = null;
|
|
@@ -155,7 +159,7 @@ export function JS_NewClass(rt, class_id, def) {
|
|
|
155
159
|
JS_NewClass1(rt, class_id, def);
|
|
156
160
|
return 0;
|
|
157
161
|
}
|
|
158
|
-
let next_class_id =
|
|
162
|
+
let next_class_id = 60 /* JSClassID.INIT_COUNT */;
|
|
159
163
|
export function JS_NewClassID() {
|
|
160
164
|
return next_class_id++;
|
|
161
165
|
}
|
|
@@ -193,32 +197,33 @@ const js_std_class_def = [
|
|
|
193
197
|
[27 /* JSClassID.UINT32_ARRAY */, JS_ATOM_Uint32Array],
|
|
194
198
|
[28 /* JSClassID.BIG_INT64_ARRAY */, JS_ATOM_BigInt64Array],
|
|
195
199
|
[29 /* JSClassID.BIG_UINT64_ARRAY */, JS_ATOM_BigUint64Array],
|
|
196
|
-
[30 /* JSClassID.
|
|
197
|
-
[31 /* JSClassID.
|
|
198
|
-
[32 /* JSClassID.
|
|
199
|
-
[33 /* JSClassID.
|
|
200
|
-
[34 /* JSClassID.
|
|
201
|
-
[35 /* JSClassID.
|
|
202
|
-
[36 /* JSClassID.
|
|
203
|
-
[37 /* JSClassID.
|
|
204
|
-
[38 /* JSClassID.
|
|
205
|
-
[39 /* JSClassID.
|
|
206
|
-
[40 /* JSClassID.
|
|
207
|
-
[41 /* JSClassID.
|
|
208
|
-
[42 /* JSClassID.
|
|
209
|
-
[43 /* JSClassID.
|
|
210
|
-
[44 /* JSClassID.
|
|
211
|
-
[45 /* JSClassID.
|
|
212
|
-
[46 /* JSClassID.
|
|
213
|
-
[47 /* JSClassID.
|
|
214
|
-
[48 /* JSClassID.
|
|
215
|
-
[49 /* JSClassID.
|
|
216
|
-
[50 /* JSClassID.
|
|
217
|
-
[51 /* JSClassID.
|
|
218
|
-
[52 /* JSClassID.
|
|
219
|
-
[53 /* JSClassID.
|
|
220
|
-
[54 /* JSClassID.
|
|
221
|
-
[55 /* JSClassID.
|
|
200
|
+
[30 /* JSClassID.FLOAT16_ARRAY */, JS_ATOM_Float16Array],
|
|
201
|
+
[31 /* JSClassID.FLOAT32_ARRAY */, JS_ATOM_Float32Array],
|
|
202
|
+
[32 /* JSClassID.FLOAT64_ARRAY */, JS_ATOM_Float64Array],
|
|
203
|
+
[33 /* JSClassID.DATAVIEW */, JS_ATOM_DataView],
|
|
204
|
+
[34 /* JSClassID.BIG_INT */, JS_ATOM_BigInt],
|
|
205
|
+
[35 /* JSClassID.MAP */, JS_ATOM_Map],
|
|
206
|
+
[36 /* JSClassID.SET */, JS_ATOM_Set],
|
|
207
|
+
[37 /* JSClassID.WEAKMAP */, JS_ATOM_WeakMap],
|
|
208
|
+
[38 /* JSClassID.WEAKSET */, JS_ATOM_WeakSet],
|
|
209
|
+
[39 /* JSClassID.MAP_ITERATOR */, JS_ATOM_Map_Iterator],
|
|
210
|
+
[40 /* JSClassID.SET_ITERATOR */, JS_ATOM_Set_Iterator],
|
|
211
|
+
[41 /* JSClassID.ARRAY_ITERATOR */, JS_ATOM_Array_Iterator],
|
|
212
|
+
[42 /* JSClassID.STRING_ITERATOR */, JS_ATOM_String_Iterator],
|
|
213
|
+
[43 /* JSClassID.REGEXP_STRING_ITERATOR */, JS_ATOM_RegExp_String_Iterator],
|
|
214
|
+
[44 /* JSClassID.GENERATOR */, JS_ATOM_Generator],
|
|
215
|
+
[45 /* JSClassID.PROXY */, JS_ATOM_Proxy],
|
|
216
|
+
[46 /* JSClassID.PROMISE */, JS_ATOM_Promise],
|
|
217
|
+
[47 /* JSClassID.PROMISE_RESOLVE_FUNCTION */, JS_ATOM_PromiseResolveFunction],
|
|
218
|
+
[48 /* JSClassID.PROMISE_REJECT_FUNCTION */, JS_ATOM_PromiseRejectFunction],
|
|
219
|
+
[49 /* JSClassID.ASYNC_FUNCTION */, JS_ATOM_AsyncFunction],
|
|
220
|
+
[50 /* JSClassID.ASYNC_FUNCTION_RESOLVE */, JS_ATOM_AsyncFunctionResolve],
|
|
221
|
+
[51 /* JSClassID.ASYNC_FUNCTION_REJECT */, JS_ATOM_AsyncFunctionReject],
|
|
222
|
+
[52 /* JSClassID.ASYNC_FROM_SYNC_ITERATOR */, JS_ATOM_Object],
|
|
223
|
+
[53 /* JSClassID.ASYNC_GENERATOR_FUNCTION */, JS_ATOM_AsyncGeneratorFunction],
|
|
224
|
+
[54 /* JSClassID.ASYNC_GENERATOR */, JS_ATOM_AsyncGenerator],
|
|
225
|
+
[55 /* JSClassID.WEAK_REF */, JS_ATOM_WeakRef],
|
|
226
|
+
[56 /* JSClassID.FINALIZATION_REGISTRY */, JS_ATOM_FinalizationRegistry],
|
|
222
227
|
];
|
|
223
228
|
export function JS_NewRuntime() {
|
|
224
229
|
const rt = new JSRuntime();
|
|
@@ -251,6 +256,7 @@ export function JS_NewContextRaw(rt) {
|
|
|
251
256
|
const ctx = new JSContext(rt);
|
|
252
257
|
rt.context_list.push(ctx);
|
|
253
258
|
ctx.class_proto[1 /* JSClassID.OBJECT */] = JS_NewObjectProto(ctx, null);
|
|
259
|
+
JS_SetImmutablePrototype(ctx, ctx.class_proto[1 /* JSClassID.OBJECT */]);
|
|
254
260
|
/* placeholder replaced by the builtins (Function.prototype is a function) */
|
|
255
261
|
ctx.function_proto = JS_NewObjectProtoClass(ctx, ctx.class_proto[1 /* JSClassID.OBJECT */], 1 /* JSClassID.OBJECT */);
|
|
256
262
|
ctx.global_obj = JS_NewObject(ctx);
|
|
@@ -445,11 +451,31 @@ export function js_normalize_host_message(e) {
|
|
|
445
451
|
msg = msg.replace(/\s*\((?:evaluating|In) '.*$/, '');
|
|
446
452
|
return msg;
|
|
447
453
|
}
|
|
454
|
+
/* A native `new` in compiled code failed: the host's message names generated code. When the
|
|
455
|
+
innermost guest frame is compiled code at a construct site, the callee is the one that site
|
|
456
|
+
stored in ctx.last_new just before constructing (after its arguments ran, so a nested `new`
|
|
457
|
+
in them cannot have overwritten it), and it is named by its own `name` as QuickJS does
|
|
458
|
+
("G is not a constructor"). null when the failure is not at a compiled construct site. */
|
|
459
|
+
function js_compiled_not_a_constructor(ctx, e) {
|
|
460
|
+
const hooks = jit_hooks.stack;
|
|
461
|
+
if (hooks === null || typeof e.stack !== 'string')
|
|
462
|
+
return null;
|
|
463
|
+
const f = hooks.frames(e.stack)[0];
|
|
464
|
+
if (f === undefined || f.kind !== 'compiled' || f.ctor === undefined)
|
|
465
|
+
return null;
|
|
466
|
+
const fn = ctx.last_new;
|
|
467
|
+
/* JS_CallConstructorInternal: a non-object callee is "not a function" */
|
|
468
|
+
if (typeof fn !== 'function' && (typeof fn !== 'object' || fn === null))
|
|
469
|
+
return 'not a function';
|
|
470
|
+
return js_not_a_constructor_message(fn);
|
|
471
|
+
}
|
|
448
472
|
export function js_host_exception_to_guest(ctx, e) {
|
|
449
473
|
if (e === JS_EXCEPTION)
|
|
450
474
|
return JS_EXCEPTION; /* already pending */
|
|
451
475
|
if (e instanceof Error) {
|
|
452
476
|
let msg = js_normalize_host_message(e);
|
|
477
|
+
if (msg === 'not a constructor')
|
|
478
|
+
msg = js_compiled_not_a_constructor(ctx, e) ?? msg;
|
|
453
479
|
let num;
|
|
454
480
|
if (e instanceof RangeError) {
|
|
455
481
|
if (/call stack|stack size|recursion|stack overflow/i.test(msg))
|
|
@@ -761,6 +787,31 @@ export function JS_ThrowTypeErrorReadOnly(ctx, flags, atom) {
|
|
|
761
787
|
}
|
|
762
788
|
export function JS_ThrowTypeErrorNotAnObject(ctx) { return JS_ThrowTypeError(ctx, 'not an object'); }
|
|
763
789
|
export function JS_ThrowTypeErrorNotASymbol(ctx) { return JS_ThrowTypeError(ctx, 'not a symbol'); }
|
|
790
|
+
/* "<name> is not a constructor" when `f` is a function whose `name` is a string data property
|
|
791
|
+
(own, or one level up the prototype chain, as get_prop_string() reads it: no getter runs),
|
|
792
|
+
else "not a constructor" */
|
|
793
|
+
export function JS_ThrowTypeErrorNotAConstructor(ctx, f) {
|
|
794
|
+
return JS_ThrowTypeError(ctx, js_not_a_constructor_message(f));
|
|
795
|
+
}
|
|
796
|
+
export function js_not_a_constructor_message(f) {
|
|
797
|
+
if (typeof f === 'function') {
|
|
798
|
+
let d;
|
|
799
|
+
try {
|
|
800
|
+
d = Reflect.getOwnPropertyDescriptor(f, 'name');
|
|
801
|
+
if (d === undefined) {
|
|
802
|
+
const p = Reflect.getPrototypeOf(f);
|
|
803
|
+
if (p !== null)
|
|
804
|
+
d = Reflect.getOwnPropertyDescriptor(p, 'name');
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
catch {
|
|
808
|
+
d = undefined; /* a revoked or throwing proxy: no name */
|
|
809
|
+
}
|
|
810
|
+
if (d !== undefined && 'value' in d && typeof d.value === 'string')
|
|
811
|
+
return `${d.value} is not a constructor`;
|
|
812
|
+
}
|
|
813
|
+
return 'not a constructor';
|
|
814
|
+
}
|
|
764
815
|
export function JS_ThrowTypeErrorInvalidClass(ctx, class_id) {
|
|
765
816
|
const name = ctx.rt.class_array[class_id]?.class_name ?? JS_ATOM_Object;
|
|
766
817
|
return JS_ThrowTypeErrorAtom(ctx, '%s object expected', name);
|
|
@@ -783,12 +834,12 @@ function js_is_function_class(class_id) {
|
|
|
783
834
|
case 13 /* JSClassID.BYTECODE_FUNCTION */:
|
|
784
835
|
case 14 /* JSClassID.BOUND_FUNCTION */:
|
|
785
836
|
case 16 /* JSClassID.GENERATOR_FUNCTION */:
|
|
786
|
-
case
|
|
787
|
-
case
|
|
788
|
-
case
|
|
789
|
-
case
|
|
790
|
-
case
|
|
791
|
-
case
|
|
837
|
+
case 49 /* JSClassID.ASYNC_FUNCTION */:
|
|
838
|
+
case 53 /* JSClassID.ASYNC_GENERATOR_FUNCTION */:
|
|
839
|
+
case 47 /* JSClassID.PROMISE_RESOLVE_FUNCTION */:
|
|
840
|
+
case 48 /* JSClassID.PROMISE_REJECT_FUNCTION */:
|
|
841
|
+
case 50 /* JSClassID.ASYNC_FUNCTION_RESOLVE */:
|
|
842
|
+
case 51 /* JSClassID.ASYNC_FUNCTION_REJECT */:
|
|
792
843
|
return true;
|
|
793
844
|
default:
|
|
794
845
|
return false;
|
|
@@ -950,7 +1001,7 @@ export function JS_SetConstructorBit(ctx, func_obj, val) {
|
|
|
950
1001
|
/* IsArray: -1 on exception (revoked proxy) */
|
|
951
1002
|
export function JS_IsArray(ctx, val) {
|
|
952
1003
|
const m = js_get_meta(val);
|
|
953
|
-
if (m && m.class_id ===
|
|
1004
|
+
if (m && m.class_id === 45 /* JSClassID.PROXY */) {
|
|
954
1005
|
const s = m.u;
|
|
955
1006
|
if (s.is_revoked) {
|
|
956
1007
|
JS_ThrowTypeError(ctx, 'revoked proxy');
|
|
@@ -1161,10 +1212,12 @@ export function JS_CallFree(ctx, func_obj, this_obj, argv) {
|
|
|
1161
1212
|
}
|
|
1162
1213
|
export function JS_CallConstructorInternal(ctx, func_obj, new_target, argv, flags) {
|
|
1163
1214
|
flags |= JS_CALL_FLAG_CONSTRUCTOR;
|
|
1164
|
-
|
|
1215
|
+
/* as JS_CallConstructorInternal(): a primitive is "not a function", an object that is not a
|
|
1216
|
+
constructor (including one that cannot be called) "not a constructor" */
|
|
1217
|
+
if (!JS_IsObject(func_obj))
|
|
1165
1218
|
return JS_ThrowTypeError(ctx, 'not a function');
|
|
1166
1219
|
if (!JS_IsConstructor(ctx, func_obj))
|
|
1167
|
-
return
|
|
1220
|
+
return JS_ThrowTypeErrorNotAConstructor(ctx, func_obj);
|
|
1168
1221
|
/* bytecode functions, C functions and proxies: the 'this' value is
|
|
1169
1222
|
created by the callee from new_target */
|
|
1170
1223
|
return hooks.JS_CallInternal(ctx, func_obj, new_target, new_target, argv, flags);
|
|
@@ -1192,12 +1245,12 @@ export function JS_GetFunctionRealm(ctx, func_obj) {
|
|
|
1192
1245
|
return m.realm ?? ctx;
|
|
1193
1246
|
case 13 /* JSClassID.BYTECODE_FUNCTION */:
|
|
1194
1247
|
case 16 /* JSClassID.GENERATOR_FUNCTION */:
|
|
1195
|
-
case
|
|
1196
|
-
case
|
|
1248
|
+
case 49 /* JSClassID.ASYNC_FUNCTION */:
|
|
1249
|
+
case 53 /* JSClassID.ASYNC_GENERATOR_FUNCTION */:
|
|
1197
1250
|
return m.func?.function_bytecode.realm ?? m.realm ?? ctx;
|
|
1198
1251
|
case 14 /* JSClassID.BOUND_FUNCTION */:
|
|
1199
1252
|
return JS_GetFunctionRealm(ctx, m.u.func_obj);
|
|
1200
|
-
case
|
|
1253
|
+
case 45 /* JSClassID.PROXY */: {
|
|
1201
1254
|
const s = m.u;
|
|
1202
1255
|
if (s.is_revoked) {
|
|
1203
1256
|
JS_ThrowTypeError(ctx, 'revoked proxy');
|
|
@@ -1413,7 +1466,7 @@ export function JS_SetPropertyFunctionList(ctx, obj, tab) {
|
|
|
1413
1466
|
Properties
|
|
1414
1467
|
--------------------------------------------------------------------- */
|
|
1415
1468
|
export function is_typed_array(class_id) {
|
|
1416
|
-
return class_id >= 21 /* JSClassID.UINT8C_ARRAY */ && class_id <=
|
|
1469
|
+
return class_id >= 21 /* JSClassID.UINT8C_ARRAY */ && class_id <= 32 /* JSClassID.FLOAT64_ARRAY */;
|
|
1417
1470
|
}
|
|
1418
1471
|
export function JS_ThrowTypeErrorOrFalse(ctx, flags, msg) {
|
|
1419
1472
|
if ((flags & JS_PROP_THROW) || ((flags & JS_PROP_THROW_STRICT) && is_strict_mode(ctx))) {
|
|
@@ -1510,7 +1563,7 @@ export function new_desc() {
|
|
|
1510
1563
|
/* prototype of a primitive value (null for undefined/null) */
|
|
1511
1564
|
export function JS_GetPrototypePrimitive(ctx, val) {
|
|
1512
1565
|
switch (typeof val) {
|
|
1513
|
-
case 'bigint': return ctx.class_proto[
|
|
1566
|
+
case 'bigint': return ctx.class_proto[34 /* JSClassID.BIG_INT */];
|
|
1514
1567
|
case 'number': return ctx.class_proto[4 /* JSClassID.NUMBER */];
|
|
1515
1568
|
case 'boolean': return ctx.class_proto[6 /* JSClassID.BOOLEAN */];
|
|
1516
1569
|
case 'string': return ctx.class_proto[5 /* JSClassID.STRING */];
|
|
@@ -1641,6 +1694,13 @@ export function JS_PreventExtensions(ctx, obj) {
|
|
|
1641
1694
|
}
|
|
1642
1695
|
}
|
|
1643
1696
|
/* SetPrototypeOf: -1 exception, 0 failed (throw_flag false), 1 ok */
|
|
1697
|
+
/* objects whose prototype cannot change (has_immutable_prototype): each context's
|
|
1698
|
+
Object.prototype, an immutable prototype exotic object (ECMAScript 10.4.7) */
|
|
1699
|
+
const js_immutable_prototype = new WeakSet();
|
|
1700
|
+
export function JS_SetImmutablePrototype(ctx, obj) {
|
|
1701
|
+
if (JS_IsObject(obj))
|
|
1702
|
+
js_immutable_prototype.add(obj);
|
|
1703
|
+
}
|
|
1644
1704
|
export function JS_SetPrototypeInternal(ctx, obj, proto_val, throw_flag) {
|
|
1645
1705
|
if (!(proto_val === null || JS_IsObject(proto_val))) {
|
|
1646
1706
|
JS_ThrowTypeErrorNotAnObject(ctx);
|
|
@@ -1653,6 +1713,12 @@ export function JS_SetPrototypeInternal(ctx, obj, proto_val, throw_flag) {
|
|
|
1653
1713
|
}
|
|
1654
1714
|
return 1;
|
|
1655
1715
|
}
|
|
1716
|
+
if (js_immutable_prototype.has(obj) && Reflect.getPrototypeOf(obj) !== proto_val) {
|
|
1717
|
+
if (!throw_flag)
|
|
1718
|
+
return 0;
|
|
1719
|
+
JS_ThrowTypeError(ctx, 'prototype is immutable');
|
|
1720
|
+
return -1;
|
|
1721
|
+
}
|
|
1656
1722
|
let ok;
|
|
1657
1723
|
try {
|
|
1658
1724
|
ok = Reflect.setPrototypeOf(obj, proto_val);
|
|
@@ -1668,7 +1734,7 @@ export function JS_SetPrototypeInternal(ctx, obj, proto_val, throw_flag) {
|
|
|
1668
1734
|
ext = Reflect.isExtensible(obj);
|
|
1669
1735
|
}
|
|
1670
1736
|
catch { /* ignore */ }
|
|
1671
|
-
if (JS_GetClassID(obj) ===
|
|
1737
|
+
if (JS_GetClassID(obj) === 45 /* JSClassID.PROXY */)
|
|
1672
1738
|
JS_ThrowTypeError(ctx, 'proxy: bad prototype');
|
|
1673
1739
|
else if (!ext)
|
|
1674
1740
|
JS_ThrowTypeError(ctx, 'object is not extensible');
|
|
@@ -1710,7 +1776,7 @@ export function js_is_host_error(e) {
|
|
|
1710
1776
|
}
|
|
1711
1777
|
function js_set_failed(ctx, obj, key, prop, flags) {
|
|
1712
1778
|
if ((flags & JS_PROP_THROW) || ((flags & JS_PROP_THROW_STRICT) && is_strict_mode(ctx))) {
|
|
1713
|
-
if (JS_GetClassID(obj) ===
|
|
1779
|
+
if (JS_GetClassID(obj) === 45 /* JSClassID.PROXY */) {
|
|
1714
1780
|
JS_ThrowTypeError(ctx, 'proxy: cannot set property');
|
|
1715
1781
|
}
|
|
1716
1782
|
else {
|
|
@@ -1732,7 +1798,7 @@ function js_set_failed(ctx, obj, key, prop, flags) {
|
|
|
1732
1798
|
/* host Proxies: guest proxies and module namespace objects. A refused store must be told
|
|
1733
1799
|
apart from a throwing trap, which only Reflect.set can do */
|
|
1734
1800
|
function js_is_proxy_class(class_id) {
|
|
1735
|
-
return class_id ===
|
|
1801
|
+
return class_id === 45 /* JSClassID.PROXY */ || class_id === 11 /* JSClassID.MODULE_NS */;
|
|
1736
1802
|
}
|
|
1737
1803
|
export function JS_SetPropertyInternal(ctx, obj, prop, val, this_obj, flags) {
|
|
1738
1804
|
const key = JS_AtomToKey(ctx, prop);
|
|
@@ -1860,7 +1926,7 @@ export function JS_DefineProperty(ctx, this_obj, prop, val, getter, setter, flag
|
|
|
1860
1926
|
}
|
|
1861
1927
|
if (ok)
|
|
1862
1928
|
return 1;
|
|
1863
|
-
if (JS_GetClassID(this_obj) ===
|
|
1929
|
+
if (JS_GetClassID(this_obj) === 45 /* JSClassID.PROXY */)
|
|
1864
1930
|
return JS_ThrowTypeErrorOrFalse(ctx, flags, 'proxy: inconsistent defineProperty');
|
|
1865
1931
|
return JS_ThrowTypeErrorOrFalse(ctx, flags, 'property is not configurable');
|
|
1866
1932
|
}
|
|
@@ -1952,6 +2018,18 @@ export function JS_GetOwnPropertyNamesInternal(ctx, p, flags) {
|
|
|
1952
2018
|
}
|
|
1953
2019
|
return tab;
|
|
1954
2020
|
}
|
|
2021
|
+
/* JS_FreePropertyEnum (exported since QuickJS 2025-09-13): the property
|
|
2022
|
+
enumeration is garbage collected, so this does nothing */
|
|
2023
|
+
export function JS_FreePropertyEnum(ctx, tab, len) { }
|
|
2024
|
+
/* JS_AtomToCStringLen: the string of an atom (the description of a symbol);
|
|
2025
|
+
plen, when given, receives its length. jseption's C strings are host
|
|
2026
|
+
strings, so the length counts UTF-16 code units. */
|
|
2027
|
+
export function JS_AtomToCStringLen(ctx, plen, atom) {
|
|
2028
|
+
const str = JS_AtomToString(ctx, atom);
|
|
2029
|
+
if (plen)
|
|
2030
|
+
plen.v = str.length;
|
|
2031
|
+
return str;
|
|
2032
|
+
}
|
|
1955
2033
|
export function JS_GetOwnPropertyNames(ctx, obj, flags) {
|
|
1956
2034
|
if (!JS_IsObject(obj)) {
|
|
1957
2035
|
JS_ThrowTypeErrorNotAnObject(ctx);
|
|
@@ -1992,21 +2070,22 @@ export function js_obj_to_desc(ctx, d, desc) {
|
|
|
1992
2070
|
return [1, v];
|
|
1993
2071
|
};
|
|
1994
2072
|
let r;
|
|
1995
|
-
|
|
2073
|
+
/* ToPropertyDescriptor reads enumerable, configurable, value, writable, get, set in this order */
|
|
2074
|
+
r = get_field(JS_ATOM_enumerable);
|
|
1996
2075
|
if (r[0] < 0)
|
|
1997
2076
|
return -1;
|
|
1998
2077
|
if (r[0]) {
|
|
1999
|
-
flags |=
|
|
2078
|
+
flags |= JS_PROP_HAS_ENUMERABLE;
|
|
2000
2079
|
if (JS_ToBoolFree(ctx, r[1]))
|
|
2001
|
-
flags |=
|
|
2080
|
+
flags |= JS_PROP_ENUMERABLE;
|
|
2002
2081
|
}
|
|
2003
|
-
r = get_field(
|
|
2082
|
+
r = get_field(JS_ATOM_configurable);
|
|
2004
2083
|
if (r[0] < 0)
|
|
2005
2084
|
return -1;
|
|
2006
2085
|
if (r[0]) {
|
|
2007
|
-
flags |=
|
|
2086
|
+
flags |= JS_PROP_HAS_CONFIGURABLE;
|
|
2008
2087
|
if (JS_ToBoolFree(ctx, r[1]))
|
|
2009
|
-
flags |=
|
|
2088
|
+
flags |= JS_PROP_CONFIGURABLE;
|
|
2010
2089
|
}
|
|
2011
2090
|
r = get_field(JS_ATOM_value);
|
|
2012
2091
|
if (r[0] < 0)
|
|
@@ -2721,7 +2800,7 @@ export function JS_ToObject(ctx, val) {
|
|
|
2721
2800
|
case 'symbol': return js_new_primitive_wrapper(ctx, ctx.class_proto[7 /* JSClassID.SYMBOL */], 7 /* JSClassID.SYMBOL */, val);
|
|
2722
2801
|
case 'number': return js_new_primitive_wrapper(ctx, ctx.class_proto[4 /* JSClassID.NUMBER */], 4 /* JSClassID.NUMBER */, val);
|
|
2723
2802
|
case 'boolean': return js_new_primitive_wrapper(ctx, ctx.class_proto[6 /* JSClassID.BOOLEAN */], 6 /* JSClassID.BOOLEAN */, val);
|
|
2724
|
-
case 'bigint': return js_new_primitive_wrapper(ctx, ctx.class_proto[
|
|
2803
|
+
case 'bigint': return js_new_primitive_wrapper(ctx, ctx.class_proto[34 /* JSClassID.BIG_INT */], 34 /* JSClassID.BIG_INT */, val);
|
|
2725
2804
|
case 'string': return js_new_primitive_wrapper(ctx, ctx.class_proto[5 /* JSClassID.STRING */], 5 /* JSClassID.STRING */, val);
|
|
2726
2805
|
}
|
|
2727
2806
|
return JS_ThrowTypeError(ctx, 'cannot convert to object');
|