jseption 0.0.0-stage → 0.0.2

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.
Files changed (114) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +191 -2
  3. package/dist/atoms.d.ts +255 -0
  4. package/dist/atoms.js +445 -0
  5. package/dist/atoms.js.map +1 -0
  6. package/dist/builtins/array.d.ts +3 -0
  7. package/dist/builtins/array.js +116 -0
  8. package/dist/builtins/array.js.map +1 -0
  9. package/dist/builtins/bigint.d.ts +3 -0
  10. package/dist/builtins/bigint.js +122 -0
  11. package/dist/builtins/bigint.js.map +1 -0
  12. package/dist/builtins/boolean.d.ts +2 -0
  13. package/dist/builtins/boolean.js +26 -0
  14. package/dist/builtins/boolean.js.map +1 -0
  15. package/dist/builtins/date.d.ts +3 -0
  16. package/dist/builtins/date.js +1046 -0
  17. package/dist/builtins/date.js.map +1 -0
  18. package/dist/builtins/error.d.ts +2 -0
  19. package/dist/builtins/error.js +154 -0
  20. package/dist/builtins/error.js.map +1 -0
  21. package/dist/builtins/function.d.ts +5 -0
  22. package/dist/builtins/function.js +164 -0
  23. package/dist/builtins/function.js.map +1 -0
  24. package/dist/builtins/global.d.ts +2 -0
  25. package/dist/builtins/global.js +29 -0
  26. package/dist/builtins/global.js.map +1 -0
  27. package/dist/builtins/index.d.ts +3 -0
  28. package/dist/builtins/index.js +139 -0
  29. package/dist/builtins/index.js.map +1 -0
  30. package/dist/builtins/json.d.ts +6 -0
  31. package/dist/builtins/json.js +984 -0
  32. package/dist/builtins/json.js.map +1 -0
  33. package/dist/builtins/mapset.d.ts +4 -0
  34. package/dist/builtins/mapset.js +234 -0
  35. package/dist/builtins/mapset.js.map +1 -0
  36. package/dist/builtins/math.d.ts +2 -0
  37. package/dist/builtins/math.js +62 -0
  38. package/dist/builtins/math.js.map +1 -0
  39. package/dist/builtins/native.d.ts +22 -0
  40. package/dist/builtins/native.js +250 -0
  41. package/dist/builtins/native.js.map +1 -0
  42. package/dist/builtins/number.d.ts +4 -0
  43. package/dist/builtins/number.js +76 -0
  44. package/dist/builtins/number.js.map +1 -0
  45. package/dist/builtins/object.d.ts +12 -0
  46. package/dist/builtins/object.js +575 -0
  47. package/dist/builtins/object.js.map +1 -0
  48. package/dist/builtins/promise.d.ts +13 -0
  49. package/dist/builtins/promise.js +582 -0
  50. package/dist/builtins/promise.js.map +1 -0
  51. package/dist/builtins/proxy.d.ts +3 -0
  52. package/dist/builtins/proxy.js +226 -0
  53. package/dist/builtins/proxy.js.map +1 -0
  54. package/dist/builtins/reflect.d.ts +2 -0
  55. package/dist/builtins/reflect.js +109 -0
  56. package/dist/builtins/reflect.js.map +1 -0
  57. package/dist/builtins/regexp.d.ts +2 -0
  58. package/dist/builtins/regexp.js +203 -0
  59. package/dist/builtins/regexp.js.map +1 -0
  60. package/dist/builtins/string.d.ts +4 -0
  61. package/dist/builtins/string.js +135 -0
  62. package/dist/builtins/string.js.map +1 -0
  63. package/dist/builtins/symbol.d.ts +3 -0
  64. package/dist/builtins/symbol.js +98 -0
  65. package/dist/builtins/symbol.js.map +1 -0
  66. package/dist/builtins/typedarray.d.ts +15 -0
  67. package/dist/builtins/typedarray.js +1838 -0
  68. package/dist/builtins/typedarray.js.map +1 -0
  69. package/dist/builtins/weakref.d.ts +18 -0
  70. package/dist/builtins/weakref.js +130 -0
  71. package/dist/builtins/weakref.js.map +1 -0
  72. package/dist/dump.d.ts +2 -0
  73. package/dist/dump.js +124 -0
  74. package/dist/dump.js.map +1 -0
  75. package/dist/embed.d.ts +18 -0
  76. package/dist/embed.js +286 -0
  77. package/dist/embed.js.map +1 -0
  78. package/dist/interpreter.d.ts +81 -0
  79. package/dist/interpreter.js +3768 -0
  80. package/dist/interpreter.js.map +1 -0
  81. package/dist/jit.d.ts +59 -0
  82. package/dist/jit.js +3440 -0
  83. package/dist/jit.js.map +1 -0
  84. package/dist/jit_hook.d.ts +21 -0
  85. package/dist/jit_hook.js +4 -0
  86. package/dist/jit_hook.js.map +1 -0
  87. package/dist/jit_runtime.d.ts +104 -0
  88. package/dist/jit_runtime.js +721 -0
  89. package/dist/jit_runtime.js.map +1 -0
  90. package/dist/jit_stack.d.ts +24 -0
  91. package/dist/jit_stack.js +227 -0
  92. package/dist/jit_stack.js.map +1 -0
  93. package/dist/jseption.d.ts +15 -0
  94. package/dist/jseption.js +61 -0
  95. package/dist/jseption.js.map +1 -0
  96. package/dist/opcodes.d.ts +347 -0
  97. package/dist/opcodes.js +322 -0
  98. package/dist/opcodes.js.map +1 -0
  99. package/dist/parser.d.ts +283 -0
  100. package/dist/parser.js +9752 -0
  101. package/dist/parser.js.map +1 -0
  102. package/dist/qjs.d.ts +2 -0
  103. package/dist/qjs.js +122 -0
  104. package/dist/qjs.js.map +1 -0
  105. package/dist/quickjs.d.ts +460 -0
  106. package/dist/quickjs.js +3408 -0
  107. package/dist/quickjs.js.map +1 -0
  108. package/dist/std.d.ts +4 -0
  109. package/dist/std.js +273 -0
  110. package/dist/std.js.map +1 -0
  111. package/dist/values.d.ts +447 -0
  112. package/dist/values.js +461 -0
  113. package/dist/values.js.map +1 -0
  114. package/package.json +59 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/builtins/promise.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * jseption: TypeScript port of QuickJS\n *\n * Promise implementation (port of the Promise section of quickjs.c).\n */\nimport * as Q from '../quickjs.ts';\nimport {\n JSContext, JSRuntime, JSValue, JSObject, JSClassID, JS_EXCEPTION, JS_IsException, JS_IsUndefined,\n JS_IsObject, JSPromiseData, JSPromiseState, JSPromiseReactionData, JSPromiseFunctionData,\n JSCFunctionDataRecord, JSCFunctionEnum, JSErrorEnum,\n JS_PROP_C_W_E, JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE,\n JS_ATOM_then, JS_ATOM_constructor, JS_ATOM_resolve, JS_ATOM_reject, JS_ATOM_promise, JS_ATOM_next,\n JS_ATOM_status, JS_ATOM_reason, JS_ATOM_value, JS_ATOM_errors, JS_ATOM_Symbol_species,\n JS_ATOM_empty_string, JS_ATOM_Symbol_toStringTag,\n hooks, JS_Throw, JS_GetException, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject,\n JS_NewObject, JS_NewObjectProtoClass, JS_NewArray, JS_NewCFunctionData, JS_NewCFunction2,\n JS_GetProperty, JS_GetPropertyUint32, JS_SetPropertyUint32, JS_DefinePropertyValue,\n JS_DefinePropertyValueUint32, JS_Call, JS_CallConstructor, JS_Invoke, JS_IsFunction, JS_IsConstructor,\n JS_GetOpaque, JS_GetOpaque2, JS_SetOpaque, js_create_from_ctor, js_same_value, JS_ToBoolFree,\n JS_ToInt32Free, JS_GetIterator, JS_IteratorNext, JS_IteratorClose, JS_EnqueueJob,\n JS_SetPropertyFunctionList, JS_NewGlobalCConstructor2, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF,\n JS_CGETSET_DEF, JS_PROP_STRING_DEF, JSCFunctionListEntry, JS_AtomToString,\n} from '../quickjs.ts';\n\n/* ---------------------------------------------------------------------\n Promise state\n --------------------------------------------------------------------- */\n\nexport function JS_PromiseState(ctx: JSContext, promise: JSValue): JSPromiseState | -1 {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return -1;\n return s.promise_state;\n}\n\nexport function JS_PromiseResult(ctx: JSContext, promise: JSValue): JSValue {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return undefined;\n return s.promise_result;\n}\n\nexport function check_function(ctx: JSContext, obj: JSValue): number {\n if (JS_IsFunction(ctx, obj)) return 0;\n JS_ThrowTypeError(ctx, 'not a function');\n return -1;\n}\n\n/* argv: [resolve, reject, handler, is_reject, arg] */\nfunction promise_reaction_job(ctx: JSContext, argv: JSValue[]): JSValue {\n const handler = argv[2];\n let is_reject = JS_ToBoolFree(ctx, argv[3]);\n const arg = argv[4];\n let res: JSValue;\n if (JS_IsUndefined(handler)) {\n if (is_reject) res = JS_Throw(ctx, arg);\n else res = arg;\n } else {\n res = JS_Call(ctx, handler, undefined, [arg]);\n }\n is_reject = JS_IsException(res);\n if (is_reject) res = JS_GetException(ctx);\n const func = argv[is_reject ? 1 : 0];\n /* as an extension, we support undefined as value to avoid creating a\n dummy promise in the 'await' implementation of async functions */\n if (!JS_IsUndefined(func)) return JS_Call(ctx, func, undefined, [res]);\n return undefined;\n}\n\nfunction fulfill_or_reject_promise(ctx: JSContext, promise: JSValue, value: JSValue, is_reject: boolean): void {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s || s.promise_state !== JSPromiseState.PENDING) return; /* should never happen */\n s.promise_result = value;\n s.promise_state = is_reject ? JSPromiseState.REJECTED : JSPromiseState.FULFILLED;\n if (s.promise_state === JSPromiseState.REJECTED && !s.is_handled) {\n const rt = ctx.rt;\n if (rt.host_promise_rejection_tracker) {\n rt.host_promise_rejection_tracker(ctx, promise, value, false, rt.host_promise_rejection_tracker_opaque);\n }\n }\n const idx = is_reject ? 1 : 0;\n for (const rd of s.promise_reactions[idx]) {\n JS_EnqueueJob(ctx, promise_reaction_job, [rd.resolving_funcs[0], rd.resolving_funcs[1], rd.handler, is_reject, value]);\n }\n s.promise_reactions[0] = [];\n s.promise_reactions[1] = [];\n}\n\nfunction reject_promise(ctx: JSContext, promise: JSValue, value: JSValue): void {\n fulfill_or_reject_promise(ctx, promise, value, true);\n}\n\n/* argv: [promise, thenable, then] */\nfunction js_promise_resolve_thenable_job(ctx: JSContext, argv: JSValue[]): JSValue {\n const promise = argv[0], thenable = argv[1], then = argv[2];\n const args: [JSValue, JSValue] = [undefined, undefined];\n if (js_create_resolving_functions(ctx, args, promise) < 0) return JS_EXCEPTION;\n let res = JS_Call(ctx, then, thenable, [args[0], args[1]]);\n if (JS_IsException(res)) {\n const error = JS_GetException(ctx);\n res = JS_Call(ctx, args[1], undefined, [error]);\n }\n return res;\n}\n\nexport function js_create_resolving_functions(ctx: JSContext, resolving_funcs: [JSValue, JSValue], promise: JSValue): number {\n const sr = { already_resolved: false }; /* must be shared between the two functions */\n for (let i = 0; i < 2; i++) {\n let fobj: object;\n const impl: Q.JSHostImpl = (_this_val, _new_target, args) => {\n js_promise_resolve_function_call(ctx, fobj, args.length > 0 ? args[0] : undefined);\n return undefined;\n };\n fobj = Q.js_new_host_function(ctx, impl, false, '', 1, ctx.function_proto,\n (JSClassID.PROMISE_RESOLVE_FUNCTION + i) as JSClassID);\n Q.js_meta.get(fobj)!.u = new JSPromiseFunctionData(promise, sr);\n resolving_funcs[i] = fobj;\n }\n return 0;\n}\n\nexport function js_promise_resolve_function_call(ctx: JSContext, func_obj: JSValue, resolution: JSValue): JSValue {\n const m = Q.js_get_meta(func_obj)!;\n const s = m.u as JSPromiseFunctionData | null;\n if (!s || s.presolved.already_resolved) return undefined;\n s.presolved.already_resolved = true;\n const is_reject = m.class_id === JSClassID.PROMISE_REJECT_FUNCTION;\n if (is_reject || !JS_IsObject(resolution)) {\n fulfill_or_reject_promise(ctx, s.promise, resolution, is_reject);\n return undefined;\n }\n if (js_same_value(ctx, resolution, s.promise)) {\n JS_ThrowTypeError(ctx, 'promise self resolution');\n const error = JS_GetException(ctx);\n reject_promise(ctx, s.promise, error);\n return undefined;\n }\n const then = JS_GetProperty(ctx, resolution, JS_ATOM_then);\n if (JS_IsException(then)) {\n const error = JS_GetException(ctx);\n reject_promise(ctx, s.promise, error);\n } else if (!JS_IsFunction(ctx, then)) {\n fulfill_or_reject_promise(ctx, s.promise, resolution, is_reject);\n } else {\n JS_EnqueueJob(ctx, js_promise_resolve_thenable_job, [s.promise, resolution, then]);\n }\n return undefined;\n}\n\n/* ---------------------------------------------------------------------\n Promise constructor and capabilities\n --------------------------------------------------------------------- */\n\nfunction js_promise_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[]): JSValue {\n const executor = argv[0];\n if (check_function(ctx, executor)) return JS_EXCEPTION;\n const obj = js_create_from_ctor(ctx, new_target, JSClassID.PROMISE);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n const s = new JSPromiseData();\n JS_SetOpaque(obj, s);\n const args: [JSValue, JSValue] = [undefined, undefined];\n if (js_create_resolving_functions(ctx, args, obj)) return JS_EXCEPTION;\n const ret = JS_Call(ctx, executor, undefined, [args[0], args[1]]);\n if (JS_IsException(ret)) {\n const error = JS_GetException(ctx);\n const ret2 = JS_Call(ctx, args[1], undefined, [error]);\n if (JS_IsException(ret2)) return JS_EXCEPTION;\n }\n return obj;\n}\n\nfunction js_promise_executor(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n for (let i = 0; i < 2; i++) {\n if (!JS_IsUndefined(func_data[i])) return JS_ThrowTypeError(ctx, 'resolving function already set');\n func_data[i] = argv[i];\n }\n return undefined;\n}\n\nfunction js_promise_executor_new(ctx: JSContext): JSValue {\n return JS_NewCFunctionData(ctx, js_promise_executor, 2, 0, [undefined, undefined]);\n}\n\nfunction js_new_promise_capability(ctx: JSContext, resolving_funcs: [JSValue, JSValue], ctor: JSValue): JSValue {\n const executor = js_promise_executor_new(ctx);\n if (JS_IsException(executor)) return executor;\n let result_promise: JSValue;\n if (JS_IsUndefined(ctor)) {\n result_promise = js_promise_constructor(ctx, ctor, [executor]);\n } else {\n result_promise = JS_CallConstructor(ctx, ctor, [executor]);\n }\n if (JS_IsException(result_promise)) return JS_EXCEPTION;\n const s = JS_GetOpaque(executor, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord;\n for (let i = 0; i < 2; i++) {\n if (check_function(ctx, s.data[i])) return JS_EXCEPTION;\n }\n resolving_funcs[0] = s.data[0];\n resolving_funcs[1] = s.data[1];\n return result_promise;\n}\n\n/* resolving_funcs receives [resolve, reject]; returns the promise */\nexport function JS_NewPromiseCapability(ctx: JSContext, resolving_funcs: [JSValue, JSValue]): JSValue {\n return js_new_promise_capability(ctx, resolving_funcs, undefined);\n}\n\n/* Promise.resolve / Promise.reject (magic = is_reject) with 'this_val' as constructor */\nexport function js_promise_resolve(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_reject = magic !== 0;\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n if (!is_reject && JS_GetOpaque(argv[0], JSClassID.PROMISE)) {\n const ctor = JS_GetProperty(ctx, argv[0], JS_ATOM_constructor);\n if (JS_IsException(ctor)) return ctor;\n if (js_same_value(ctx, ctor, this_val)) return argv[0];\n }\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const ret = JS_Call(ctx, resolving_funcs[is_reject ? 1 : 0], undefined, [argv[0]]);\n if (JS_IsException(ret)) return ret;\n return result_promise;\n}\n\n/* PromiseResolve(C, x) */\nexport function JS_PromiseResolve(ctx: JSContext, ctor: JSValue, value: JSValue): JSValue {\n return js_promise_resolve(ctx, ctor, [value], 0);\n}\n\nfunction js_promise_withResolvers(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_promise, result_promise, JS_PROP_C_W_E);\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_resolve, resolving_funcs[0], JS_PROP_C_W_E);\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_reject, resolving_funcs[1], JS_PROP_C_W_E);\n return obj;\n}\n\n/* return -1 on exception, else 1 if the counter reached zero, 0 otherwise */\nfunction remainingElementsCount_add(ctx: JSContext, resolve_element_env: JSValue, addend: number): number {\n const val = JS_GetPropertyUint32(ctx, resolve_element_env, 0);\n if (JS_IsException(val)) return -1;\n const n = JS_ToInt32Free(ctx, val);\n if (JS_IsException(n)) return -1;\n const remainingElementsCount = (n as number) + addend;\n if (JS_SetPropertyUint32(ctx, resolve_element_env, 0, remainingElementsCount) < 0) return -1;\n return remainingElementsCount === 0 ? 1 : 0;\n}\n\nconst PROMISE_MAGIC_all = 0;\nconst PROMISE_MAGIC_allSettled = 1;\nconst PROMISE_MAGIC_any = 2;\n\nfunction js_aggregate_error_constructor(ctx: JSContext, errors: JSValue): JSValue {\n const obj = JS_NewObjectProtoClass(ctx, ctx.native_error_proto[JSErrorEnum.AGGREGATE_ERROR], JSClassID.ERROR);\n if (JS_IsException(obj)) return obj;\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_errors, errors, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);\n return obj;\n}\n\n/* func_data: [alreadyCalled, index, values, resolve, resolve_element_env] */\nfunction js_promise_all_resolve_element(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number,\n func_data: JSValue[]): JSValue {\n const resolve_type = magic & 3;\n const is_reject = (magic & 4) !== 0;\n const alreadyCalled = JS_ToBoolFree(ctx, func_data[0]);\n const values = func_data[2];\n const resolve = func_data[3];\n const resolve_element_env = func_data[4];\n const idx = JS_ToInt32Free(ctx, func_data[1]);\n if (JS_IsException(idx)) return JS_EXCEPTION;\n if (alreadyCalled) return undefined;\n func_data[0] = true;\n let obj: JSValue;\n if (resolve_type === PROMISE_MAGIC_allSettled) {\n obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n if (JS_DefinePropertyValue(ctx, obj, JS_ATOM_status, is_reject ? 'rejected' : 'fulfilled', JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n if (JS_DefinePropertyValue(ctx, obj, is_reject ? JS_ATOM_reason : JS_ATOM_value, argv[0], JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n } else {\n obj = argv[0];\n }\n if (JS_DefinePropertyValueUint32(ctx, values, idx as number, obj, JS_PROP_C_W_E) < 0) return JS_EXCEPTION;\n const is_zero = remainingElementsCount_add(ctx, resolve_element_env, -1);\n if (is_zero < 0) return JS_EXCEPTION;\n if (is_zero) {\n let ret: JSValue;\n if (resolve_type === PROMISE_MAGIC_any) {\n const error = js_aggregate_error_constructor(ctx, values);\n if (JS_IsException(error)) return JS_EXCEPTION;\n ret = JS_Call(ctx, resolve, undefined, [error]);\n } else {\n ret = JS_Call(ctx, resolve, undefined, [values]);\n }\n if (JS_IsException(ret)) return ret;\n }\n return undefined;\n}\n\n/* magic = 0: Promise.all 1: Promise.allSettled 2: Promise.any */\nfunction js_promise_all(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number): JSValue {\n const is_promise_any = (magic === PROMISE_MAGIC_any);\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n\n const fail_reject = (): JSValue => {\n const error = JS_GetException(ctx);\n const ret = JS_Call(ctx, resolving_funcs[1], undefined, [error]);\n if (JS_IsException(ret)) return JS_EXCEPTION;\n return result_promise;\n };\n\n const promise_resolve = JS_GetProperty(ctx, this_val, JS_ATOM_resolve);\n if (JS_IsException(promise_resolve) || check_function(ctx, promise_resolve)) return fail_reject();\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return fail_reject();\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return fail_reject();\n const values = JS_NewArray(ctx);\n if (JS_IsException(values)) return fail_reject();\n const resolve_element_env = JS_NewArray(ctx);\n if (JS_IsException(resolve_element_env)) return fail_reject();\n /* remainingElementsCount field */\n if (JS_DefinePropertyValueUint32(ctx, resolve_element_env, 0, 1, JS_PROP_CONFIGURABLE | JS_PROP_ENUMERABLE | JS_PROP_WRITABLE) < 0)\n return fail_reject();\n\n const fail_reject1 = (): JSValue => {\n JS_IteratorClose(ctx, iter, true);\n return fail_reject();\n };\n\n let index = 0;\n const pdone = { done: 0 };\n for (;;) {\n /* XXX: conformance: should close the iterator if error on 'done'\n access, but not on 'value' access */\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return fail_reject();\n if (pdone.done) break;\n const next_promise = JS_Call(ctx, promise_resolve, this_val, [item]);\n if (JS_IsException(next_promise)) return fail_reject1();\n const resolve_element_data: JSValue[] = [false, index, values, resolving_funcs[is_promise_any ? 1 : 0], resolve_element_env];\n let resolve_element = JS_NewCFunctionData(ctx, js_promise_all_resolve_element, 1, magic, resolve_element_data);\n if (JS_IsException(resolve_element)) return fail_reject1();\n /* the data array must be shared between the resolve and reject functions */\n const shared_data = (JS_GetOpaque(resolve_element, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord).data;\n let reject_element: JSValue;\n if (magic === PROMISE_MAGIC_allSettled) {\n reject_element = JS_NewCFunctionData(ctx, js_promise_all_resolve_element, 1, magic | 4, shared_data);\n if (JS_IsException(reject_element)) return fail_reject1();\n (JS_GetOpaque(reject_element, JSClassID.C_FUNCTION_DATA) as JSCFunctionDataRecord).data = shared_data;\n } else if (magic === PROMISE_MAGIC_any) {\n if (JS_DefinePropertyValueUint32(ctx, values, index, undefined, JS_PROP_C_W_E) < 0) return fail_reject1();\n reject_element = resolve_element;\n resolve_element = resolving_funcs[0];\n } else {\n reject_element = resolving_funcs[1];\n }\n if (remainingElementsCount_add(ctx, resolve_element_env, 1) < 0) return fail_reject1();\n const ret = JS_Invoke(ctx, next_promise, JS_ATOM_then, [resolve_element, reject_element]);\n if (JS_IsException(ret)) return fail_reject1();\n index++;\n }\n\n const is_zero = remainingElementsCount_add(ctx, resolve_element_env, -1);\n if (is_zero < 0) return fail_reject();\n if (is_zero) {\n let vals = values;\n if (magic === PROMISE_MAGIC_any) {\n const error = js_aggregate_error_constructor(ctx, values);\n if (JS_IsException(error)) return fail_reject();\n vals = error;\n }\n const ret = JS_Call(ctx, resolving_funcs[is_promise_any ? 1 : 0], undefined, [vals]);\n if (JS_IsException(ret)) return fail_reject();\n }\n return result_promise;\n}\n\nfunction js_promise_race(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(this_val)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, this_val);\n if (JS_IsException(result_promise)) return result_promise;\n const fail_reject = (): JSValue => {\n const error = JS_GetException(ctx);\n const ret = JS_Call(ctx, resolving_funcs[1], undefined, [error]);\n if (JS_IsException(ret)) return JS_EXCEPTION;\n return result_promise;\n };\n const promise_resolve = JS_GetProperty(ctx, this_val, JS_ATOM_resolve);\n if (JS_IsException(promise_resolve) || check_function(ctx, promise_resolve)) return fail_reject();\n const iter = JS_GetIterator(ctx, argv[0], false);\n if (JS_IsException(iter)) return fail_reject();\n const next_method = JS_GetProperty(ctx, iter, JS_ATOM_next);\n if (JS_IsException(next_method)) return fail_reject();\n const pdone = { done: 0 };\n for (;;) {\n const item = JS_IteratorNext(ctx, iter, next_method, [], pdone);\n if (JS_IsException(item)) return fail_reject();\n if (pdone.done) break;\n const next_promise = JS_Call(ctx, promise_resolve, this_val, [item]);\n if (JS_IsException(next_promise)) { JS_IteratorClose(ctx, iter, true); return fail_reject(); }\n const ret = JS_Invoke(ctx, next_promise, JS_ATOM_then, [resolving_funcs[0], resolving_funcs[1]]);\n if (JS_IsException(ret)) { JS_IteratorClose(ctx, iter, true); return fail_reject(); }\n }\n return result_promise;\n}\n\n/* PerformPromiseThen: resolve_reject = [onFulfilled, onRejected],\n cap_resolving_funcs = [resolve, reject] of the derived promise (may be undefined) */\nexport function perform_promise_then(ctx: JSContext, promise: JSValue, resolve_reject: [JSValue, JSValue],\n cap_resolving_funcs: [JSValue, JSValue]): number {\n const s = JS_GetOpaque(promise, JSClassID.PROMISE) as JSPromiseData;\n const rd_array: JSPromiseReactionData[] = [];\n for (let i = 0; i < 2; i++) {\n let handler = resolve_reject[i];\n if (!JS_IsFunction(ctx, handler)) handler = undefined;\n rd_array.push(new JSPromiseReactionData([cap_resolving_funcs[0], cap_resolving_funcs[1]], handler));\n }\n if (s.promise_state === JSPromiseState.PENDING) {\n s.promise_reactions[0].push(rd_array[0]);\n s.promise_reactions[1].push(rd_array[1]);\n } else {\n if (s.promise_state === JSPromiseState.REJECTED && !s.is_handled) {\n const rt = ctx.rt;\n if (rt.host_promise_rejection_tracker) {\n rt.host_promise_rejection_tracker(ctx, promise, s.promise_result, true, rt.host_promise_rejection_tracker_opaque);\n }\n }\n const i = s.promise_state === JSPromiseState.REJECTED ? 1 : 0;\n const rd = rd_array[i];\n JS_EnqueueJob(ctx, promise_reaction_job, [rd.resolving_funcs[0], rd.resolving_funcs[1], rd.handler, i !== 0, s.promise_result]);\n }\n s.is_handled = true;\n return 0;\n}\n\nexport function JS_SpeciesConstructor(ctx: JSContext, obj: JSValue, defaultConstructor: JSValue): JSValue {\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const ctor = JS_GetProperty(ctx, obj, JS_ATOM_constructor);\n if (JS_IsException(ctor)) return ctor;\n if (JS_IsUndefined(ctor)) return defaultConstructor;\n if (!JS_IsObject(ctor)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const species = JS_GetProperty(ctx, ctor, JS_ATOM_Symbol_species);\n if (JS_IsException(species)) return species;\n if (species === undefined || species === null) return defaultConstructor;\n if (!JS_IsConstructor(ctx, species)) return JS_ThrowTypeError(ctx, 'not a constructor');\n return species;\n}\n\nexport function js_promise_then(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const s = JS_GetOpaque2(ctx, this_val, JSClassID.PROMISE) as JSPromiseData | null;\n if (!s) return JS_EXCEPTION;\n const ctor = JS_SpeciesConstructor(ctx, this_val, ctx.promise_ctor ?? undefined);\n if (JS_IsException(ctor)) return ctor;\n const resolving_funcs: [JSValue, JSValue] = [undefined, undefined];\n const result_promise = js_new_promise_capability(ctx, resolving_funcs, ctor);\n if (JS_IsException(result_promise)) return result_promise;\n if (perform_promise_then(ctx, this_val, [argv[0], argv[1]], resolving_funcs)) return JS_EXCEPTION;\n return result_promise;\n}\n\nfunction js_promise_catch(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return JS_Invoke(ctx, this_val, JS_ATOM_then, [undefined, argv[0]]);\n}\n\nfunction js_promise_finally_value_thunk(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n return func_data[0];\n}\n\nfunction js_promise_finally_thrower(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n return JS_Throw(ctx, func_data[0]);\n}\n\nfunction js_promise_then_finally_func(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n const ctor = func_data[0];\n const onFinally = func_data[1];\n const res = JS_Call(ctx, onFinally, undefined, []);\n if (JS_IsException(res)) return res;\n const promise = js_promise_resolve(ctx, ctor, [res], 0);\n if (JS_IsException(promise)) return promise;\n let then_func: JSValue;\n if (magic === 0) then_func = JS_NewCFunctionData(ctx, js_promise_finally_value_thunk, 0, 0, [argv[0]]);\n else then_func = JS_NewCFunctionData(ctx, js_promise_finally_thrower, 0, 0, [argv[0]]);\n if (JS_IsException(then_func)) return then_func;\n return JS_Invoke(ctx, promise, JS_ATOM_then, [then_func]);\n}\n\nfunction js_promise_finally(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const onFinally = argv[0];\n const ctor = JS_SpeciesConstructor(ctx, this_val, ctx.promise_ctor ?? undefined);\n if (JS_IsException(ctor)) return ctor;\n const then_funcs: JSValue[] = [];\n if (!JS_IsFunction(ctx, onFinally)) {\n then_funcs.push(onFinally, onFinally);\n } else {\n for (let i = 0; i < 2; i++) {\n const f = JS_NewCFunctionData(ctx, js_promise_then_finally_func, 1, i, [ctor, onFinally]);\n if (JS_IsException(f)) return JS_EXCEPTION;\n then_funcs.push(f);\n }\n }\n return JS_Invoke(ctx, this_val, JS_ATOM_then, then_funcs);\n}\n\nfunction js_get_this(ctx: JSContext, this_val: JSValue): JSValue { return this_val; }\n\nconst js_promise_funcs: JSCFunctionListEntry[] = [\n JS_CFUNC_MAGIC_DEF('resolve', 1, js_promise_resolve, 0),\n JS_CFUNC_MAGIC_DEF('reject', 1, js_promise_resolve, 1),\n JS_CFUNC_MAGIC_DEF('all', 1, js_promise_all, PROMISE_MAGIC_all),\n JS_CFUNC_MAGIC_DEF('allSettled', 1, js_promise_all, PROMISE_MAGIC_allSettled),\n JS_CFUNC_MAGIC_DEF('any', 1, js_promise_all, PROMISE_MAGIC_any),\n JS_CFUNC_DEF('race', 1, js_promise_race),\n JS_CFUNC_DEF('withResolvers', 0, js_promise_withResolvers),\n JS_CGETSET_DEF(JS_ATOM_Symbol_species, js_get_this, null),\n];\n\nconst js_promise_proto_funcs: JSCFunctionListEntry[] = [\n JS_CFUNC_DEF('then', 2, js_promise_then),\n JS_CFUNC_DEF('catch', 1, js_promise_catch),\n JS_CFUNC_DEF('finally', 1, js_promise_finally),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Promise', JS_PROP_CONFIGURABLE),\n];\n\n\n/* Promise constructor and prototype (the AsyncFunction / AsyncGenerator\n prototypes are installed by the interpreter module) */\nexport function JS_AddIntrinsicPromise(ctx: JSContext): void {\n const proto = JS_NewObject(ctx) as JSObject;\n ctx.class_proto[JSClassID.PROMISE] = proto;\n JS_SetPropertyFunctionList(ctx, proto, js_promise_proto_funcs);\n const obj1 = JS_NewCFunction2(ctx, js_promise_constructor, 'Promise', 1, JSCFunctionEnum.constructor, 0);\n ctx.promise_ctor = obj1 as JSObject;\n JS_SetPropertyFunctionList(ctx, obj1, js_promise_funcs);\n JS_NewGlobalCConstructor2(ctx, obj1, 'Promise', proto);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { JSContext, JSValue } from '../quickjs.ts';
2
+ export declare function JS_NewProxy(ctx: JSContext, target: JSValue, handler: JSValue): JSValue;
3
+ export declare function JS_AddIntrinsicProxy(ctx: JSContext): void;
@@ -0,0 +1,226 @@
1
+ /*
2
+ * Proxy objects (port of the Proxy part of quickjs.c).
3
+ *
4
+ * Host-values model: a guest Proxy is a host Proxy whose handler is an
5
+ * adapter object. The adapter looks up the trap on the guest handler and
6
+ * calls it through the engine; the host implements the trap invariants.
7
+ */
8
+ import { JSProxyData, JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsNull, JS_IsObject, JS_IsFunction, JS_IsConstructor, JS_NewObject, JS_NewCFunction2, JS_NewCFunctionData, js_create_array, JS_GetProperty, JS_GetPropertyUint32, JS_DefinePropertyValue, JS_DefinePropertyValueStr, JS_Call, JS_ToBoolFree, js_get_length64, js_obj_to_desc, new_desc, js_take_exception, js_meta, JSObjectMeta, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_ThrowStackOverflow, JS_GetAnyOpaque, JS_GetClassID, JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE, JS_PROP_C_W_E, 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_ATOM_getPrototypeOf, JS_ATOM_setPrototypeOf, JS_ATOM_isExtensible, JS_ATOM_preventExtensions, JS_ATOM_has, JS_ATOM_get, JS_ATOM_set, JS_ATOM_getOwnPropertyDescriptor, JS_ATOM_defineProperty, JS_ATOM_deleteProperty, JS_ATOM_ownKeys, JS_ATOM_apply, JS_ATOM_construct, JS_ATOM_value, JS_ATOM_writable, JS_ATOM_enumerable, JS_ATOM_configurable, JS_ATOM_proxy, JS_ATOM_revoke, } from "../quickjs.js";
9
+ /* Recursion depth of the proxy traps: the C version relies on the native
10
+ stack check (js_check_stack_overflow). Proxy handlers can recurse without
11
+ creating any JS stack frame (e.g. a proxy whose handler is itself), so
12
+ the depth of nested trap invocations is tracked here. */
13
+ let proxy_depth = 0;
14
+ const PROXY_MAX_DEPTH = 300;
15
+ /* throw the pending engine exception as a host exception */
16
+ function throw_pending(ctx) {
17
+ throw js_take_exception(ctx);
18
+ }
19
+ /* return the trap method (undefined if absent); throws on exception */
20
+ function get_proxy_method(ctx, s, name) {
21
+ /* safer to test recursion in all proxy methods */
22
+ proxy_depth++;
23
+ try {
24
+ return get_proxy_method1(ctx, s, name);
25
+ }
26
+ finally {
27
+ proxy_depth--;
28
+ }
29
+ }
30
+ function get_proxy_method1(ctx, s, name) {
31
+ if (proxy_depth >= PROXY_MAX_DEPTH || ctx.rt.stack_depth >= ctx.rt.max_stack_depth) {
32
+ JS_ThrowStackOverflow(ctx);
33
+ throw_pending(ctx);
34
+ }
35
+ if (s.is_revoked) {
36
+ JS_ThrowTypeError(ctx, 'revoked proxy');
37
+ throw_pending(ctx);
38
+ }
39
+ const method = JS_GetProperty(ctx, s.handler, name);
40
+ if (JS_IsException(method))
41
+ throw_pending(ctx);
42
+ if (JS_IsNull(method))
43
+ return undefined;
44
+ return method;
45
+ }
46
+ /* call a trap; throws on exception */
47
+ function call_trap(ctx, s, method, args) {
48
+ proxy_depth++;
49
+ try {
50
+ const ret = JS_Call(ctx, method, s.handler, args);
51
+ if (JS_IsException(ret))
52
+ throw_pending(ctx);
53
+ return ret;
54
+ }
55
+ finally {
56
+ proxy_depth--;
57
+ }
58
+ }
59
+ /* guest property descriptor object -> host descriptor */
60
+ function guest_desc_to_host(ctx, desc) {
61
+ const d = new_desc();
62
+ if (js_obj_to_desc(ctx, d, desc) < 0)
63
+ throw_pending(ctx);
64
+ const flags = d.flags;
65
+ const h = {};
66
+ if (flags & JS_PROP_HAS_VALUE)
67
+ h.value = d.value;
68
+ if (flags & JS_PROP_HAS_GET)
69
+ h.get = d.getter;
70
+ if (flags & JS_PROP_HAS_SET)
71
+ h.set = d.setter;
72
+ if (flags & JS_PROP_HAS_WRITABLE)
73
+ h.writable = (flags & JS_PROP_WRITABLE) !== 0;
74
+ if (flags & JS_PROP_HAS_ENUMERABLE)
75
+ h.enumerable = (flags & JS_PROP_ENUMERABLE) !== 0;
76
+ if (flags & JS_PROP_HAS_CONFIGURABLE)
77
+ h.configurable = (flags & JS_PROP_CONFIGURABLE) !== 0;
78
+ return h;
79
+ }
80
+ /* host descriptor -> guest property descriptor object (only the present fields) */
81
+ function host_desc_to_guest(ctx, h) {
82
+ const ret = JS_NewObject(ctx);
83
+ if ('get' in h)
84
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_get, h.get, JS_PROP_C_W_E);
85
+ if ('set' in h)
86
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_set, h.set, JS_PROP_C_W_E);
87
+ if ('value' in h)
88
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_value, h.value, JS_PROP_C_W_E);
89
+ if ('writable' in h)
90
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_writable, !!h.writable, JS_PROP_C_W_E);
91
+ if ('enumerable' in h)
92
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_enumerable, !!h.enumerable, JS_PROP_C_W_E);
93
+ if ('configurable' in h)
94
+ JS_DefinePropertyValue(ctx, ret, JS_ATOM_configurable, !!h.configurable, JS_PROP_C_W_E);
95
+ return ret;
96
+ }
97
+ /* CreateListFromArrayLike for property keys */
98
+ function guest_keys_to_host(ctx, arr) {
99
+ /* as in QuickJS, a non object result is an array-like of length 0 */
100
+ const len = js_get_length64(ctx, arr);
101
+ if (len < 0)
102
+ throw_pending(ctx);
103
+ const tab = [];
104
+ for (let i = 0; i < len; i++) {
105
+ const v = JS_GetPropertyUint32(ctx, arr, i);
106
+ if (JS_IsException(v))
107
+ throw_pending(ctx);
108
+ if (typeof v !== 'string' && typeof v !== 'symbol') {
109
+ JS_ThrowTypeError(ctx, 'proxy: properties must be strings or symbols');
110
+ throw_pending(ctx);
111
+ }
112
+ tab.push(v);
113
+ }
114
+ return tab;
115
+ }
116
+ const trap_impls = {
117
+ getPrototypeOf: [JS_ATOM_getPrototypeOf, (ctx, s) => (method, target) => {
118
+ const ret = call_trap(ctx, s, method, [target]);
119
+ if (!JS_IsNull(ret) && !JS_IsObject(ret)) {
120
+ JS_ThrowTypeError(ctx, 'proxy: inconsistent prototype');
121
+ throw_pending(ctx);
122
+ }
123
+ return ret;
124
+ }],
125
+ setPrototypeOf: [JS_ATOM_setPrototypeOf, (ctx, s) => (method, target, proto) => JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, proto]))],
126
+ isExtensible: [JS_ATOM_isExtensible, (ctx, s) => (method, target) => JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target]))],
127
+ preventExtensions: [JS_ATOM_preventExtensions, (ctx, s) => (method, target) => JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target]))],
128
+ has: [JS_ATOM_has, (ctx, s) => (method, target, key) => JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key]))],
129
+ get: [JS_ATOM_get, (ctx, s) => (method, target, key, receiver) => call_trap(ctx, s, method, [target, key, receiver])],
130
+ set: [JS_ATOM_set, (ctx, s) => (method, target, key, value, receiver) => JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key, value, receiver]))],
131
+ deleteProperty: [JS_ATOM_deleteProperty, (ctx, s) => (method, target, key) => JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key]))],
132
+ getOwnPropertyDescriptor: [JS_ATOM_getOwnPropertyDescriptor, (ctx, s) => (method, target, key) => {
133
+ const ret = call_trap(ctx, s, method, [target, key]);
134
+ if (JS_IsUndefined(ret))
135
+ return undefined;
136
+ if (!JS_IsObject(ret)) {
137
+ JS_ThrowTypeError(ctx, 'proxy: bad getOwnPropertyDescriptor result');
138
+ throw_pending(ctx);
139
+ }
140
+ return guest_desc_to_host(ctx, ret);
141
+ }],
142
+ defineProperty: [JS_ATOM_defineProperty, (ctx, s) => (method, target, key, desc) => JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key, host_desc_to_guest(ctx, desc)]))],
143
+ ownKeys: [JS_ATOM_ownKeys, (ctx, s) => (method, target) => guest_keys_to_host(ctx, call_trap(ctx, s, method, [target]))],
144
+ apply: [JS_ATOM_apply, (ctx, s) => (method, target, this_arg, args) => call_trap(ctx, s, method, [target, this_arg, js_create_array(ctx, args)])],
145
+ construct: [JS_ATOM_construct, (ctx, s) => (method, target, args, new_target) => {
146
+ const ret = call_trap(ctx, s, method, [target, js_create_array(ctx, args), new_target]);
147
+ if (!JS_IsObject(ret)) {
148
+ JS_ThrowTypeErrorNotAnObject(ctx);
149
+ throw_pending(ctx);
150
+ }
151
+ return ret;
152
+ }],
153
+ };
154
+ function make_adapter(ctx, s) {
155
+ const adapter = {};
156
+ for (const name in trap_impls) {
157
+ const [atom, make] = trap_impls[name];
158
+ const impl = make(ctx, s);
159
+ Reflect.defineProperty(adapter, name, {
160
+ get() {
161
+ const method = get_proxy_method(ctx, s, atom);
162
+ if (JS_IsUndefined(method))
163
+ return undefined;
164
+ return (...args) => impl(method, ...args);
165
+ },
166
+ enumerable: true, configurable: false,
167
+ });
168
+ }
169
+ return adapter;
170
+ }
171
+ /* create a proxy object (JS_NewProxy) */
172
+ export function JS_NewProxy(ctx, target, handler) {
173
+ if (!JS_IsObject(target) || !JS_IsObject(handler))
174
+ return JS_ThrowTypeErrorNotAnObject(ctx);
175
+ const s = new JSProxyData(target, handler, JS_IsFunction(ctx, target));
176
+ const { proxy, revoke } = Proxy.revocable(target, make_adapter(ctx, s));
177
+ s.host_revoke = revoke;
178
+ const m = new JSObjectMeta(44 /* JSClassID.PROXY */);
179
+ m.u = s;
180
+ m.is_constructor = JS_IsConstructor(ctx, target);
181
+ m.realm = ctx;
182
+ js_meta.set(proxy, m);
183
+ return proxy;
184
+ }
185
+ function js_proxy_constructor(ctx, new_target, argv) {
186
+ return JS_NewProxy(ctx, argv[0], argv[1]);
187
+ }
188
+ function js_proxy_revoke(ctx, this_val, argv, magic, func_data) {
189
+ const p = func_data[0];
190
+ if (JS_IsObject(p) && JS_GetClassID(p) === 44 /* JSClassID.PROXY */) {
191
+ const s = JS_GetAnyOpaque(p);
192
+ /* We do not free the handler and target in case they are
193
+ referenced as constants in the C call stack */
194
+ /* the host proxy is not revoked so that the engine reports the
195
+ QuickJS error message from the adapter */
196
+ s.is_revoked = true;
197
+ func_data[0] = null;
198
+ }
199
+ return undefined;
200
+ }
201
+ function js_proxy_revoke_constructor(ctx, proxy_obj) {
202
+ return JS_NewCFunctionData(ctx, js_proxy_revoke, 0, 0, [proxy_obj]);
203
+ }
204
+ function js_proxy_revocable(ctx, this_val, argv) {
205
+ const proxy_obj = js_proxy_constructor(ctx, undefined, argv);
206
+ if (JS_IsException(proxy_obj))
207
+ return JS_EXCEPTION;
208
+ const revoke_obj = js_proxy_revoke_constructor(ctx, proxy_obj);
209
+ if (JS_IsException(revoke_obj))
210
+ return JS_EXCEPTION;
211
+ const obj = JS_NewObject(ctx);
212
+ if (JS_IsException(obj))
213
+ return JS_EXCEPTION;
214
+ JS_DefinePropertyValue(ctx, obj, JS_ATOM_proxy, proxy_obj, JS_PROP_C_W_E);
215
+ JS_DefinePropertyValue(ctx, obj, JS_ATOM_revoke, revoke_obj, JS_PROP_C_W_E);
216
+ return obj;
217
+ }
218
+ const js_proxy_funcs = [
219
+ JS_CFUNC_DEF('revocable', 2, js_proxy_revocable),
220
+ ];
221
+ export function JS_AddIntrinsicProxy(ctx) {
222
+ const obj1 = JS_NewCFunction2(ctx, js_proxy_constructor, 'Proxy', 2, 2 /* JSCFunctionEnum.constructor */, 0);
223
+ JS_SetPropertyFunctionList(ctx, obj1, js_proxy_funcs);
224
+ JS_DefinePropertyValueStr(ctx, ctx.global_obj, 'Proxy', obj1, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
225
+ }
226
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/builtins/proxy.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Proxy objects (port of the Proxy part of quickjs.c).\n *\n * Host-values model: a guest Proxy is a host Proxy whose handler is an\n * adapter object. The adapter looks up the trap on the guest handler and\n * calls it through the engine; the host implements the trap invariants.\n */\nimport {\n JSContext, JSValue, JSClassID, JSProxyData, JSCFunctionEnum,\n JS_EXCEPTION, JS_IsException, JS_IsUndefined, JS_IsNull, JS_IsObject, JS_IsFunction, JS_IsConstructor,\n JS_NewObject, JS_NewCFunction2, JS_NewCFunctionData, js_create_array,\n JS_GetProperty, JS_GetPropertyUint32, JS_DefinePropertyValue, JS_DefinePropertyValueStr,\n JS_Call, JS_ToBoolFree, js_get_length64, js_obj_to_desc, new_desc, js_take_exception, js_meta, JSObjectMeta,\n JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_ThrowStackOverflow, JS_GetAnyOpaque, JS_GetClassID,\n JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_AtomToKey, JSAtom,\n JS_PROP_CONFIGURABLE, JS_PROP_WRITABLE, JS_PROP_ENUMERABLE, JS_PROP_C_W_E,\n JS_PROP_HAS_CONFIGURABLE, JS_PROP_HAS_WRITABLE, JS_PROP_HAS_ENUMERABLE, JS_PROP_HAS_GET, JS_PROP_HAS_SET,\n JS_PROP_HAS_VALUE,\n JS_ATOM_getPrototypeOf, JS_ATOM_setPrototypeOf, JS_ATOM_isExtensible, JS_ATOM_preventExtensions, JS_ATOM_has,\n JS_ATOM_get, JS_ATOM_set, JS_ATOM_getOwnPropertyDescriptor, JS_ATOM_defineProperty, JS_ATOM_deleteProperty,\n JS_ATOM_ownKeys, JS_ATOM_apply, JS_ATOM_construct, JS_ATOM_value, JS_ATOM_writable, JS_ATOM_enumerable,\n JS_ATOM_configurable, JS_ATOM_proxy, JS_ATOM_revoke,\n} from '../quickjs.ts';\n\n/* Recursion depth of the proxy traps: the C version relies on the native\n stack check (js_check_stack_overflow). Proxy handlers can recurse without\n creating any JS stack frame (e.g. a proxy whose handler is itself), so\n the depth of nested trap invocations is tracked here. */\nlet proxy_depth = 0;\nconst PROXY_MAX_DEPTH = 300;\n\n/* throw the pending engine exception as a host exception */\nfunction throw_pending(ctx: JSContext): never {\n throw js_take_exception(ctx);\n}\n\n/* return the trap method (undefined if absent); throws on exception */\nfunction get_proxy_method(ctx: JSContext, s: JSProxyData, name: JSAtom): JSValue {\n /* safer to test recursion in all proxy methods */\n proxy_depth++;\n try {\n return get_proxy_method1(ctx, s, name);\n } finally {\n proxy_depth--;\n }\n}\n\nfunction get_proxy_method1(ctx: JSContext, s: JSProxyData, name: JSAtom): JSValue {\n if (proxy_depth >= PROXY_MAX_DEPTH || ctx.rt.stack_depth >= ctx.rt.max_stack_depth) {\n JS_ThrowStackOverflow(ctx);\n throw_pending(ctx);\n }\n if (s.is_revoked) {\n JS_ThrowTypeError(ctx, 'revoked proxy');\n throw_pending(ctx);\n }\n const method = JS_GetProperty(ctx, s.handler, name);\n if (JS_IsException(method)) throw_pending(ctx);\n if (JS_IsNull(method)) return undefined;\n return method;\n}\n\n/* call a trap; throws on exception */\nfunction call_trap(ctx: JSContext, s: JSProxyData, method: JSValue, args: JSValue[]): JSValue {\n proxy_depth++;\n try {\n const ret = JS_Call(ctx, method, s.handler, args);\n if (JS_IsException(ret)) throw_pending(ctx);\n return ret;\n } finally {\n proxy_depth--;\n }\n}\n\n/* guest property descriptor object -> host descriptor */\nfunction guest_desc_to_host(ctx: JSContext, desc: JSValue): PropertyDescriptor {\n const d = new_desc();\n if (js_obj_to_desc(ctx, d, desc) < 0) throw_pending(ctx);\n const flags = d.flags;\n const h: PropertyDescriptor = {};\n if (flags & JS_PROP_HAS_VALUE) h.value = d.value;\n if (flags & JS_PROP_HAS_GET) h.get = d.getter as any;\n if (flags & JS_PROP_HAS_SET) h.set = d.setter as any;\n if (flags & JS_PROP_HAS_WRITABLE) h.writable = (flags & JS_PROP_WRITABLE) !== 0;\n if (flags & JS_PROP_HAS_ENUMERABLE) h.enumerable = (flags & JS_PROP_ENUMERABLE) !== 0;\n if (flags & JS_PROP_HAS_CONFIGURABLE) h.configurable = (flags & JS_PROP_CONFIGURABLE) !== 0;\n return h;\n}\n\n/* host descriptor -> guest property descriptor object (only the present fields) */\nfunction host_desc_to_guest(ctx: JSContext, h: PropertyDescriptor): JSValue {\n const ret = JS_NewObject(ctx);\n if ('get' in h) JS_DefinePropertyValue(ctx, ret, JS_ATOM_get, h.get as JSValue, JS_PROP_C_W_E);\n if ('set' in h) JS_DefinePropertyValue(ctx, ret, JS_ATOM_set, h.set as JSValue, JS_PROP_C_W_E);\n if ('value' in h) JS_DefinePropertyValue(ctx, ret, JS_ATOM_value, h.value as JSValue, JS_PROP_C_W_E);\n if ('writable' in h) JS_DefinePropertyValue(ctx, ret, JS_ATOM_writable, !!h.writable, JS_PROP_C_W_E);\n if ('enumerable' in h) JS_DefinePropertyValue(ctx, ret, JS_ATOM_enumerable, !!h.enumerable, JS_PROP_C_W_E);\n if ('configurable' in h) JS_DefinePropertyValue(ctx, ret, JS_ATOM_configurable, !!h.configurable, JS_PROP_C_W_E);\n return ret;\n}\n\n/* CreateListFromArrayLike for property keys */\nfunction guest_keys_to_host(ctx: JSContext, arr: JSValue): (string | symbol)[] {\n /* as in QuickJS, a non object result is an array-like of length 0 */\n const len = js_get_length64(ctx, arr);\n if (len < 0) throw_pending(ctx);\n const tab: (string | symbol)[] = [];\n for (let i = 0; i < len; i++) {\n const v = JS_GetPropertyUint32(ctx, arr, i);\n if (JS_IsException(v)) throw_pending(ctx);\n if (typeof v !== 'string' && typeof v !== 'symbol') {\n JS_ThrowTypeError(ctx, 'proxy: properties must be strings or symbols');\n throw_pending(ctx);\n }\n tab.push(v);\n }\n return tab;\n}\n\n/* The adapter exposes a trap only when the guest handler defines it: the\n host looks the trap up with an accessor, which returns undefined for an\n absent trap so that the host performs the default operation (without\n the invariant checks a present trap would require). Revocation is\n checked in the accessor, i.e. for every operation. */\ntype TrapImpl = (method: JSValue, ...args: any[]) => any;\n\nconst trap_impls: { [name: string]: [JSAtom, (ctx: JSContext, s: JSProxyData) => TrapImpl] } = {\n getPrototypeOf: [JS_ATOM_getPrototypeOf, (ctx, s) => (method, target) => {\n const ret = call_trap(ctx, s, method, [target]);\n if (!JS_IsNull(ret) && !JS_IsObject(ret)) {\n JS_ThrowTypeError(ctx, 'proxy: inconsistent prototype');\n throw_pending(ctx);\n }\n return ret;\n }],\n setPrototypeOf: [JS_ATOM_setPrototypeOf, (ctx, s) => (method, target, proto) =>\n JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, proto]))],\n isExtensible: [JS_ATOM_isExtensible, (ctx, s) => (method, target) =>\n JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target]))],\n preventExtensions: [JS_ATOM_preventExtensions, (ctx, s) => (method, target) =>\n JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target]))],\n has: [JS_ATOM_has, (ctx, s) => (method, target, key) =>\n JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key]))],\n get: [JS_ATOM_get, (ctx, s) => (method, target, key, receiver) =>\n call_trap(ctx, s, method, [target, key, receiver])],\n set: [JS_ATOM_set, (ctx, s) => (method, target, key, value, receiver) =>\n JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key, value, receiver]))],\n deleteProperty: [JS_ATOM_deleteProperty, (ctx, s) => (method, target, key) =>\n JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key]))],\n getOwnPropertyDescriptor: [JS_ATOM_getOwnPropertyDescriptor, (ctx, s) => (method, target, key) => {\n const ret = call_trap(ctx, s, method, [target, key]);\n if (JS_IsUndefined(ret)) return undefined;\n if (!JS_IsObject(ret)) {\n JS_ThrowTypeError(ctx, 'proxy: bad getOwnPropertyDescriptor result');\n throw_pending(ctx);\n }\n return guest_desc_to_host(ctx, ret);\n }],\n defineProperty: [JS_ATOM_defineProperty, (ctx, s) => (method, target, key, desc) =>\n JS_ToBoolFree(ctx, call_trap(ctx, s, method, [target, key, host_desc_to_guest(ctx, desc)]))],\n ownKeys: [JS_ATOM_ownKeys, (ctx, s) => (method, target) =>\n guest_keys_to_host(ctx, call_trap(ctx, s, method, [target]))],\n apply: [JS_ATOM_apply, (ctx, s) => (method, target, this_arg, args) =>\n call_trap(ctx, s, method, [target, this_arg, js_create_array(ctx, args as JSValue[])])],\n construct: [JS_ATOM_construct, (ctx, s) => (method, target, args, new_target) => {\n const ret = call_trap(ctx, s, method, [target, js_create_array(ctx, args as JSValue[]), new_target]);\n if (!JS_IsObject(ret)) {\n JS_ThrowTypeErrorNotAnObject(ctx);\n throw_pending(ctx);\n }\n return ret;\n }],\n};\n\nfunction make_adapter(ctx: JSContext, s: JSProxyData): ProxyHandler<object> {\n const adapter: Record<string, unknown> = {};\n for (const name in trap_impls) {\n const [atom, make] = trap_impls[name];\n const impl = make(ctx, s);\n Reflect.defineProperty(adapter, name, {\n get() {\n const method = get_proxy_method(ctx, s, atom);\n if (JS_IsUndefined(method)) return undefined;\n return (...args: any[]) => impl(method, ...args);\n },\n enumerable: true, configurable: false,\n });\n }\n return adapter as ProxyHandler<object>;\n}\n\n/* create a proxy object (JS_NewProxy) */\nexport function JS_NewProxy(ctx: JSContext, target: JSValue, handler: JSValue): JSValue {\n if (!JS_IsObject(target) || !JS_IsObject(handler)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const s = new JSProxyData(target, handler, JS_IsFunction(ctx, target));\n const { proxy, revoke } = Proxy.revocable(target, make_adapter(ctx, s));\n s.host_revoke = revoke;\n const m = new JSObjectMeta(JSClassID.PROXY);\n m.u = s;\n m.is_constructor = JS_IsConstructor(ctx, target);\n m.realm = ctx;\n js_meta.set(proxy, m);\n return proxy;\n}\n\nfunction js_proxy_constructor(ctx: JSContext, new_target: JSValue, argv: JSValue[]): JSValue {\n return JS_NewProxy(ctx, argv[0], argv[1]);\n}\n\nfunction js_proxy_revoke(ctx: JSContext, this_val: JSValue, argv: JSValue[], magic: number, func_data: JSValue[]): JSValue {\n const p = func_data[0];\n if (JS_IsObject(p) && JS_GetClassID(p) === JSClassID.PROXY) {\n const s = JS_GetAnyOpaque(p) as JSProxyData;\n /* We do not free the handler and target in case they are\n referenced as constants in the C call stack */\n /* the host proxy is not revoked so that the engine reports the\n QuickJS error message from the adapter */\n s.is_revoked = true;\n func_data[0] = null;\n }\n return undefined;\n}\n\nfunction js_proxy_revoke_constructor(ctx: JSContext, proxy_obj: JSValue): JSValue {\n return JS_NewCFunctionData(ctx, js_proxy_revoke, 0, 0, [proxy_obj]);\n}\n\nfunction js_proxy_revocable(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const proxy_obj = js_proxy_constructor(ctx, undefined, argv);\n if (JS_IsException(proxy_obj)) return JS_EXCEPTION;\n const revoke_obj = js_proxy_revoke_constructor(ctx, proxy_obj);\n if (JS_IsException(revoke_obj)) return JS_EXCEPTION;\n const obj = JS_NewObject(ctx);\n if (JS_IsException(obj)) return JS_EXCEPTION;\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_proxy, proxy_obj, JS_PROP_C_W_E);\n JS_DefinePropertyValue(ctx, obj, JS_ATOM_revoke, revoke_obj, JS_PROP_C_W_E);\n return obj;\n}\n\nconst js_proxy_funcs = [\n JS_CFUNC_DEF('revocable', 2, js_proxy_revocable),\n];\n\nexport function JS_AddIntrinsicProxy(ctx: JSContext): void {\n const obj1 = JS_NewCFunction2(ctx, js_proxy_constructor, 'Proxy', 2, JSCFunctionEnum.constructor, 0);\n JS_SetPropertyFunctionList(ctx, obj1, js_proxy_funcs);\n JS_DefinePropertyValueStr(ctx, ctx.global_obj, 'Proxy', obj1, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { JSContext } from '../quickjs.ts';
2
+ export declare function JS_AddIntrinsicReflect(ctx: JSContext): void;
@@ -0,0 +1,109 @@
1
+ import { JS_EXCEPTION, JS_IsObject, JS_IsConstructor, JS_ValueToAtom, JS_ATOM_NULL, JS_GetPropertyInternal, JS_SetPropertyInternal, JS_HasProperty, JS_DeleteProperty, JS_CallConstructor2, build_arg_list, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject, JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF, JS_PROP_STRING_DEF, JS_OBJECT_DEF, JS_PROP_WRITABLE, JS_PROP_CONFIGURABLE, JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_ATOM_Symbol_toStringTag, } from "../quickjs.js";
2
+ import { js_function_apply } from "../interpreter.js";
3
+ import { js_object_defineProperty, js_object_getOwnPropertyDescriptor, js_object_getPrototypeOf, js_object_isExtensible, js_object_preventExtensions, JS_GetOwnPropertyNames2, js_set_prototype_internal, } from "./object.js";
4
+ const JS_ITERATOR_KIND_KEY = 0;
5
+ function js_reflect_apply(ctx, this_val, argv) {
6
+ return js_function_apply(ctx, argv[0], argv.slice(1), 2);
7
+ }
8
+ function js_reflect_construct(ctx, this_val, argv) {
9
+ const func = argv[0];
10
+ const array_arg = argv[1];
11
+ let new_target;
12
+ if (argv.length > 2) {
13
+ new_target = argv[2];
14
+ if (!JS_IsConstructor(ctx, new_target))
15
+ return JS_ThrowTypeError(ctx, 'not a constructor');
16
+ }
17
+ else {
18
+ new_target = func;
19
+ }
20
+ const tab = build_arg_list(ctx, array_arg);
21
+ if (!tab)
22
+ return JS_EXCEPTION;
23
+ return JS_CallConstructor2(ctx, func, new_target, tab);
24
+ }
25
+ function js_reflect_deleteProperty(ctx, this_val, argv) {
26
+ const obj = argv[0];
27
+ if (!JS_IsObject(obj))
28
+ return JS_ThrowTypeErrorNotAnObject(ctx);
29
+ const atom = JS_ValueToAtom(ctx, argv[1]);
30
+ if (atom === JS_ATOM_NULL)
31
+ return JS_EXCEPTION;
32
+ const ret = JS_DeleteProperty(ctx, obj, atom, 0);
33
+ if (ret < 0)
34
+ return JS_EXCEPTION;
35
+ return ret !== 0;
36
+ }
37
+ function js_reflect_get(ctx, this_val, argv) {
38
+ const obj = argv[0];
39
+ const prop = argv[1];
40
+ if (!JS_IsObject(obj))
41
+ return JS_ThrowTypeErrorNotAnObject(ctx);
42
+ const receiver = argv.length > 2 ? argv[2] : obj;
43
+ const atom = JS_ValueToAtom(ctx, prop);
44
+ if (atom === JS_ATOM_NULL)
45
+ return JS_EXCEPTION;
46
+ return JS_GetPropertyInternal(ctx, obj, atom, receiver, false);
47
+ }
48
+ function js_reflect_has(ctx, this_val, argv) {
49
+ const obj = argv[0];
50
+ const prop = argv[1];
51
+ if (!JS_IsObject(obj))
52
+ return JS_ThrowTypeErrorNotAnObject(ctx);
53
+ const atom = JS_ValueToAtom(ctx, prop);
54
+ if (atom === JS_ATOM_NULL)
55
+ return JS_EXCEPTION;
56
+ const ret = JS_HasProperty(ctx, obj, atom);
57
+ if (ret < 0)
58
+ return JS_EXCEPTION;
59
+ return ret !== 0;
60
+ }
61
+ function js_reflect_set(ctx, this_val, argv) {
62
+ const obj = argv[0];
63
+ const prop = argv[1];
64
+ const val = argv[2];
65
+ const receiver = argv.length > 3 ? argv[3] : obj;
66
+ if (!JS_IsObject(obj))
67
+ return JS_ThrowTypeErrorNotAnObject(ctx);
68
+ const atom = JS_ValueToAtom(ctx, prop);
69
+ if (atom === JS_ATOM_NULL)
70
+ return JS_EXCEPTION;
71
+ const ret = JS_SetPropertyInternal(ctx, obj, atom, val, receiver, 0);
72
+ if (ret < 0)
73
+ return JS_EXCEPTION;
74
+ return ret !== 0;
75
+ }
76
+ function js_reflect_setPrototypeOf(ctx, this_val, argv) {
77
+ const ret = js_set_prototype_internal(ctx, argv[0], argv[1], false);
78
+ if (ret < 0)
79
+ return JS_EXCEPTION;
80
+ return ret !== 0;
81
+ }
82
+ function js_reflect_ownKeys(ctx, this_val, argv) {
83
+ if (!JS_IsObject(argv[0]))
84
+ return JS_ThrowTypeErrorNotAnObject(ctx);
85
+ return JS_GetOwnPropertyNames2(ctx, argv[0], JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK, JS_ITERATOR_KIND_KEY);
86
+ }
87
+ const js_reflect_funcs = [
88
+ JS_CFUNC_DEF('apply', 3, js_reflect_apply),
89
+ JS_CFUNC_DEF('construct', 2, js_reflect_construct),
90
+ JS_CFUNC_MAGIC_DEF('defineProperty', 3, js_object_defineProperty, 1),
91
+ JS_CFUNC_DEF('deleteProperty', 2, js_reflect_deleteProperty),
92
+ JS_CFUNC_DEF('get', 2, js_reflect_get),
93
+ JS_CFUNC_MAGIC_DEF('getOwnPropertyDescriptor', 2, js_object_getOwnPropertyDescriptor, 1),
94
+ JS_CFUNC_MAGIC_DEF('getPrototypeOf', 1, js_object_getPrototypeOf, 1),
95
+ JS_CFUNC_DEF('has', 2, js_reflect_has),
96
+ JS_CFUNC_MAGIC_DEF('isExtensible', 1, js_object_isExtensible, 1),
97
+ JS_CFUNC_DEF('ownKeys', 1, js_reflect_ownKeys),
98
+ JS_CFUNC_MAGIC_DEF('preventExtensions', 1, js_object_preventExtensions, 1),
99
+ JS_CFUNC_DEF('set', 3, js_reflect_set),
100
+ JS_CFUNC_DEF('setPrototypeOf', 2, js_reflect_setPrototypeOf),
101
+ JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Reflect', JS_PROP_CONFIGURABLE),
102
+ ];
103
+ const js_reflect_obj = [
104
+ JS_OBJECT_DEF('Reflect', js_reflect_funcs, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE),
105
+ ];
106
+ export function JS_AddIntrinsicReflect(ctx) {
107
+ JS_SetPropertyFunctionList(ctx, ctx.global_obj, js_reflect_obj);
108
+ }
109
+ //# sourceMappingURL=reflect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/builtins/reflect.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Reflect object (port of the Reflect part of quickjs.c)\n */\nimport * as Q from '../quickjs.ts';\nimport {\n JSContext, JSValue, JS_EXCEPTION, JS_IsException, JS_IsObject, JS_IsConstructor, JS_ValueToAtom, JS_ATOM_NULL,\n JS_GetPropertyInternal, JS_SetPropertyInternal, JS_HasProperty, JS_DeleteProperty,\n JS_CallConstructor2, build_arg_list, JS_ThrowTypeError, JS_ThrowTypeErrorNotAnObject,\n JS_SetPropertyFunctionList, JS_CFUNC_DEF, JS_CFUNC_MAGIC_DEF, JS_PROP_STRING_DEF, JS_OBJECT_DEF,\n JS_PROP_WRITABLE, JS_PROP_CONFIGURABLE, JS_GPN_STRING_MASK, JS_GPN_SYMBOL_MASK, JS_ATOM_Symbol_toStringTag,\n} from '../quickjs.ts';\nimport { js_function_apply } from '../interpreter.ts';\nimport {\n js_object_defineProperty, js_object_getOwnPropertyDescriptor, js_object_getPrototypeOf, js_object_isExtensible,\n js_object_preventExtensions, JS_GetOwnPropertyNames2, js_set_prototype_internal,\n} from './object.ts';\n\nconst JS_ITERATOR_KIND_KEY = 0;\n\nfunction js_reflect_apply(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n return js_function_apply(ctx, argv[0], argv.slice(1), 2);\n}\n\nfunction js_reflect_construct(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const func = argv[0];\n const array_arg = argv[1];\n let new_target: JSValue;\n if (argv.length > 2) {\n new_target = argv[2];\n if (!JS_IsConstructor(ctx, new_target)) return JS_ThrowTypeError(ctx, 'not a constructor');\n } else {\n new_target = func;\n }\n const tab = build_arg_list(ctx, array_arg);\n if (!tab) return JS_EXCEPTION;\n return JS_CallConstructor2(ctx, func, new_target, tab);\n}\n\nfunction js_reflect_deleteProperty(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, argv[1]);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_DeleteProperty(ctx, obj, atom, 0);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_get(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const receiver = argv.length > 2 ? argv[2] : obj;\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n return JS_GetPropertyInternal(ctx, obj, atom, receiver, false);\n}\n\nfunction js_reflect_has(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_HasProperty(ctx, obj, atom);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_set(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const obj = argv[0];\n const prop = argv[1];\n const val = argv[2];\n const receiver = argv.length > 3 ? argv[3] : obj;\n if (!JS_IsObject(obj)) return JS_ThrowTypeErrorNotAnObject(ctx);\n const atom = JS_ValueToAtom(ctx, prop);\n if (atom === JS_ATOM_NULL) return JS_EXCEPTION;\n const ret = JS_SetPropertyInternal(ctx, obj, atom, val, receiver, 0);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_setPrototypeOf(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n const ret = js_set_prototype_internal(ctx, argv[0], argv[1], false);\n if (ret < 0) return JS_EXCEPTION;\n return ret !== 0;\n}\n\nfunction js_reflect_ownKeys(ctx: JSContext, this_val: JSValue, argv: JSValue[]): JSValue {\n if (!JS_IsObject(argv[0])) return JS_ThrowTypeErrorNotAnObject(ctx);\n return JS_GetOwnPropertyNames2(ctx, argv[0], JS_GPN_STRING_MASK | JS_GPN_SYMBOL_MASK, JS_ITERATOR_KIND_KEY);\n}\n\nconst js_reflect_funcs = [\n JS_CFUNC_DEF('apply', 3, js_reflect_apply),\n JS_CFUNC_DEF('construct', 2, js_reflect_construct),\n JS_CFUNC_MAGIC_DEF('defineProperty', 3, js_object_defineProperty, 1),\n JS_CFUNC_DEF('deleteProperty', 2, js_reflect_deleteProperty),\n JS_CFUNC_DEF('get', 2, js_reflect_get),\n JS_CFUNC_MAGIC_DEF('getOwnPropertyDescriptor', 2, js_object_getOwnPropertyDescriptor, 1),\n JS_CFUNC_MAGIC_DEF('getPrototypeOf', 1, js_object_getPrototypeOf, 1),\n JS_CFUNC_DEF('has', 2, js_reflect_has),\n JS_CFUNC_MAGIC_DEF('isExtensible', 1, js_object_isExtensible, 1),\n JS_CFUNC_DEF('ownKeys', 1, js_reflect_ownKeys),\n JS_CFUNC_MAGIC_DEF('preventExtensions', 1, js_object_preventExtensions, 1),\n JS_CFUNC_DEF('set', 3, js_reflect_set),\n JS_CFUNC_DEF('setPrototypeOf', 2, js_reflect_setPrototypeOf),\n JS_PROP_STRING_DEF(JS_ATOM_Symbol_toStringTag, 'Reflect', JS_PROP_CONFIGURABLE),\n];\n\nconst js_reflect_obj = [\n JS_OBJECT_DEF('Reflect', js_reflect_funcs, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE),\n];\n\nexport function JS_AddIntrinsicReflect(ctx: JSContext): void {\n JS_SetPropertyFunctionList(ctx, ctx.global_obj, js_reflect_obj);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { JSContext } from '../quickjs.ts';
2
+ export declare function JS_AddIntrinsicRegExp(ctx: JSContext): void;