@scriptc/cli-darwin-arm64 0.2.2 → 0.2.3

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 (153) hide show
  1. package/dist/THIRD_PARTY_NOTICES +1 -1
  2. package/dist/bin/scriptc +0 -0
  3. package/dist/bin/scriptc.json +1 -1
  4. package/dist/lib/declarations/scriptc-node-fallback.d.ts +99 -27
  5. package/dist/lib/llvm/bin/scriptc-llvm-codegen +0 -0
  6. package/dist/lib/llvm/package.json +1 -1
  7. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_array.o +0 -0
  8. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_assert.o +0 -0
  9. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_async.o +0 -0
  10. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_bytes_io.o +0 -0
  11. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_events.o +0 -0
  12. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_exception.o +0 -0
  13. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_file_handle.o +0 -0
  14. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_json.o +0 -0
  15. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_lib.o +0 -0
  16. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_map.o +0 -0
  17. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_node_builtin.o +0 -0
  18. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_regex.o +0 -0
  19. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_symbol.o +0 -0
  20. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_url.o +0 -0
  21. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_url_params.o +0 -0
  22. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_util_compare.o +0 -0
  23. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/default/scr_util_style.o +0 -0
  24. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_array.o +0 -0
  25. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_assert.o +0 -0
  26. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_async.o +0 -0
  27. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_bytes_io.o +0 -0
  28. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_events.o +0 -0
  29. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_exception.o +0 -0
  30. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_file_handle.o +0 -0
  31. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_island.o +0 -0
  32. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_json.o +0 -0
  33. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_lib.o +0 -0
  34. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_map.o +0 -0
  35. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_node_builtin.o +0 -0
  36. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_regex.o +0 -0
  37. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_symbol.o +0 -0
  38. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_url.o +0 -0
  39. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_url_params.o +0 -0
  40. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_util_compare.o +0 -0
  41. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_util_style.o +0 -0
  42. package/dist/lib/runtime-darwin-arm64/artifacts/dev/runtime/dynamic/scr_web.o +0 -0
  43. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_array.o +0 -0
  44. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_assert.o +0 -0
  45. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_bytes_io.o +0 -0
  46. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_exception.o +0 -0
  47. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_json.o +0 -0
  48. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_lib.o +0 -0
  49. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_map.o +0 -0
  50. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_node_builtin.o +0 -0
  51. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_regex.o +0 -0
  52. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_symbol.o +0 -0
  53. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_url.o +0 -0
  54. package/dist/lib/runtime-darwin-arm64/artifacts/library-dev/runtime/default/scr_url_params.o +0 -0
  55. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_array.o +0 -0
  56. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_assert.o +0 -0
  57. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_bytes_io.o +0 -0
  58. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_exception.o +0 -0
  59. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_json.o +0 -0
  60. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_lib.o +0 -0
  61. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_map.o +0 -0
  62. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_node_builtin.o +0 -0
  63. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_regex.o +0 -0
  64. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_symbol.o +0 -0
  65. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_url.o +0 -0
  66. package/dist/lib/runtime-darwin-arm64/artifacts/library-release/runtime/default/scr_url_params.o +0 -0
  67. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_array.o +0 -0
  68. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_assert.o +0 -0
  69. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_bytes_io.o +0 -0
  70. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_exception.o +0 -0
  71. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_json.o +0 -0
  72. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_lib.o +0 -0
  73. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_map.o +0 -0
  74. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_node_builtin.o +0 -0
  75. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_regex.o +0 -0
  76. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_symbol.o +0 -0
  77. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_url.o +0 -0
  78. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-dev/runtime/default/scr_url_params.o +0 -0
  79. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_array.o +0 -0
  80. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_assert.o +0 -0
  81. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_bytes_io.o +0 -0
  82. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_exception.o +0 -0
  83. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_json.o +0 -0
  84. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_lib.o +0 -0
  85. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_map.o +0 -0
  86. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_node_builtin.o +0 -0
  87. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_regex.o +0 -0
  88. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_symbol.o +0 -0
  89. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_url.o +0 -0
  90. package/dist/lib/runtime-darwin-arm64/artifacts/library-thread-release/runtime/default/scr_url_params.o +0 -0
  91. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_array.o +0 -0
  92. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_assert.o +0 -0
  93. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_async.o +0 -0
  94. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_bytes_io.o +0 -0
  95. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_events.o +0 -0
  96. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_exception.o +0 -0
  97. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_file_handle.o +0 -0
  98. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_json.o +0 -0
  99. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_lib.o +0 -0
  100. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_map.o +0 -0
  101. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_node_builtin.o +0 -0
  102. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_regex.o +0 -0
  103. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_symbol.o +0 -0
  104. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_url.o +0 -0
  105. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_url_params.o +0 -0
  106. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_util_compare.o +0 -0
  107. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/default/scr_util_style.o +0 -0
  108. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_array.o +0 -0
  109. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_assert.o +0 -0
  110. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_async.o +0 -0
  111. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_bytes_io.o +0 -0
  112. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_events.o +0 -0
  113. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_exception.o +0 -0
  114. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_file_handle.o +0 -0
  115. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_island.o +0 -0
  116. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_json.o +0 -0
  117. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_lib.o +0 -0
  118. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_map.o +0 -0
  119. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_node_builtin.o +0 -0
  120. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_regex.o +0 -0
  121. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_symbol.o +0 -0
  122. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_url.o +0 -0
  123. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_url_params.o +0 -0
  124. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_util_compare.o +0 -0
  125. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_util_style.o +0 -0
  126. package/dist/lib/runtime-darwin-arm64/artifacts/release/runtime/dynamic/scr_web.o +0 -0
  127. package/dist/lib/runtime-darwin-arm64/package.json +1 -1
  128. package/dist/lib/runtime-darwin-arm64/runtime-pack.json +351 -225
  129. package/dist/lib/runtime-sources/package.json +1 -1
  130. package/dist/lib/runtime-sources/src/scr_array.c +5 -0
  131. package/dist/lib/runtime-sources/src/scr_assert.c +26 -0
  132. package/dist/lib/runtime-sources/src/scr_async.c +44 -0
  133. package/dist/lib/runtime-sources/src/scr_bytes_io.c +305 -48
  134. package/dist/lib/runtime-sources/src/scr_events.c +9 -0
  135. package/dist/lib/runtime-sources/src/scr_exception.c +1 -0
  136. package/dist/lib/runtime-sources/src/scr_file_handle.c +11 -0
  137. package/dist/lib/runtime-sources/src/scr_island.c +1001 -417
  138. package/dist/lib/runtime-sources/src/scr_island_manifest.h +11 -7
  139. package/dist/lib/runtime-sources/src/scr_json.c +135 -2
  140. package/dist/lib/runtime-sources/src/scr_lib.c +379 -12
  141. package/dist/lib/runtime-sources/src/scr_map.c +8 -0
  142. package/dist/lib/runtime-sources/src/scr_node_builtin.c +78 -0
  143. package/dist/lib/runtime-sources/src/scr_regex.c +65 -0
  144. package/dist/lib/runtime-sources/src/scr_runtime.h +69 -1
  145. package/dist/lib/runtime-sources/src/scr_symbol.c +5 -0
  146. package/dist/lib/runtime-sources/src/scr_system_errors.h +573 -0
  147. package/dist/lib/runtime-sources/src/scr_url.c +515 -59
  148. package/dist/lib/runtime-sources/src/scr_url_internal.h +6 -0
  149. package/dist/lib/runtime-sources/src/scr_url_params.c +10 -0
  150. package/dist/lib/runtime-sources/src/scr_util_compare.c +222 -0
  151. package/dist/lib/runtime-sources/src/scr_util_style.c +337 -0
  152. package/dist/lib/runtime-sources/src/scr_web.c +720 -238
  153. package/package.json +1 -1
@@ -50,12 +50,12 @@ static const struct {
50
50
  {"node:tls",
51
51
  "connect,createServer,createSecureContext,TLSSocket,rootCertificates"},
52
52
  {"node:diagnostics_channel",
53
- "channel,subscribe,unsubscribe,hasSubscribers,tracingChannel"},
53
+ "channel,subscribe,unsubscribe,hasSubscribers,tracingChannel,Channel"},
54
54
  {"node:module",
55
55
  "createRequire,builtinModules,isBuiltin,syncBuiltinESMExports,register,findSourceMap"},
56
56
  {"node:url",
57
- "URL,URLSearchParams,fileURLToPath,pathToFileURL,parse,format,resolve,domainToASCII,domai"
58
- "nToUnicode,urlToHttpOptions"},
57
+ "URL,URLSearchParams,fileURLToPath,fileURLToPathBuffer,pathToFileURL,parse,format,resolve"
58
+ ",domainToASCII,domainToUnicode,urlToHttpOptions"},
59
59
  {"node:buffer",
60
60
  "Buffer,SlowBuffer,INSPECT_MAX_BYTES,kMaxLength,kStringMaxLength,constants,isAscii,isUtf8"
61
61
  ",atob,btoa,Blob,File,transcode,resolveObjectURL"},
@@ -130,7 +130,10 @@ static const struct {
130
130
  {"node:stream/consumers",
131
131
  "text,buffer,arrayBuffer,json,blob"},
132
132
  {"node:stream/web",
133
- "ReadableStream,TransformStream,TextDecoderStream"},
133
+ "ReadableStream,TransformStream,TextDecoderStream,WritableStream,WritableStreamDefaultWri"
134
+ "ter,WritableStreamDefaultController,CountQueuingStrategy,ByteLengthQueuingStrategy,Trans"
135
+ "formStreamDefaultController,TextEncoderStream,ReadableStreamDefaultReader,ReadableStream"
136
+ "DefaultController"},
134
137
  {"node:crypto",
135
138
  "createHash,createHmac,hash,Hash,Hmac,randomBytes,randomFillSync,randomFill,randomInt,ran"
136
139
  "domUUID,getRandomValues,timingSafeEqual,pbkdf2,pbkdf2Sync,getHashes,getCiphers,getCurves"
@@ -141,9 +144,10 @@ static const struct {
141
144
  "c,X509Certificate,Certificate,checkPrime,checkPrimeSync,generatePrime,generatePrimeSync,"
142
145
  "secureHeapUsed,setEngine,setFips,getFips"},
143
146
  {"node:util",
144
- "parseEnv,format,formatWithOptions,inspect,inherits,promisify,callbackify,deprecate,debug"
145
- "log,debug,types,isDeepStrictEqual,stripVTControlCharacters,styleText,parseArgs,toUSVStri"
146
- "ng,_extend,TextEncoder,TextDecoder,isArray"},
147
+ "getSystemErrorName,getSystemErrorMessage,getSystemErrorMap,parseEnv,format,formatWithOpt"
148
+ "ions,inspect,inherits,promisify,callbackify,deprecate,debuglog,debug,types,isDeepStrictE"
149
+ "qual,stripVTControlCharacters,styleText,parseArgs,toUSVString,_extend,TextEncoder,TextDe"
150
+ "coder,MIMEType,MIMEParams,isArray"},
147
151
  {"node:util/types",
148
152
  "isAnyArrayBuffer,isArrayBufferView,isArgumentsObject,isArrayBuffer,isAsyncFunction,isBig"
149
153
  "Int64Array,isBigUint64Array,isBooleanObject,isBoxedPrimitive,isBigIntObject,isCryptoKey,"
@@ -57,6 +57,7 @@ static void scr_json_oom(void) {
57
57
 
58
58
  static SCR_TL ScrDyn *scr_iterator_symbol;
59
59
  static SCR_TL ScrDyn *scr_async_iterator_symbol;
60
+ static SCR_TL ScrDyn *scr_to_primitive_symbol;
60
61
  static bool scr_dyn_generator(const ScrDyn *value) {
61
62
  return value && value->kind == SCR_DYN_TYPED_REF &&
62
63
  (!strncmp(value->v.typed_ref.type_key, "generator<", 10) || !strncmp(value->v.typed_ref.type_key, "async-generator<", 16));
@@ -104,6 +105,17 @@ static void scr_async_iterator_symbol_cleanup(void) {
104
105
  scr_async_iterator_symbol = NULL;
105
106
  }
106
107
 
108
+ static void scr_to_primitive_symbol_cleanup(void) {
109
+ scr_dyn_release(scr_to_primitive_symbol);
110
+ scr_to_primitive_symbol = NULL;
111
+ }
112
+
113
+ void scr_dyn_install_to_primitive_symbol(ScrDyn *key) {
114
+ if (scr_to_primitive_symbol) return;
115
+ scr_to_primitive_symbol = scr_dyn_retain(key);
116
+ scr_atexit(scr_to_primitive_symbol_cleanup);
117
+ }
118
+
107
119
  void scr_dyn_install_async_iterator_symbol(ScrDyn *key) {
108
120
  if (scr_async_iterator_symbol) return;
109
121
  scr_async_iterator_symbol = scr_dyn_retain(key);
@@ -1902,6 +1914,56 @@ bool scr_dyn_typed_array_is(const ScrDyn *d, int elem) {
1902
1914
  return d && d->kind == SCR_DYN_BYTES && !d->v.bytes->is_data_view && d->v.bytes->elem == (ScrBytesElem)elem;
1903
1915
  }
1904
1916
 
1917
+ /* Node util.types reads internal brands, never user properties or prototypes. */
1918
+ bool scr_dyn_util_type_is(const ScrDyn *value, const ScrStr *probe) {
1919
+ if (!value) return false;
1920
+ if (value->kind == SCR_DYN_JSVAL) return scr_dyn_jsval_ops()->type_probe(value->v.jsval.cell, probe);
1921
+ #define PROBE(name) (probe->len == sizeof(name) - 1 && memcmp(probe->data, name, sizeof(name) - 1) == 0)
1922
+ if (PROBE("isAnyArrayBuffer") || PROBE("isArrayBuffer")) return scr_array_buffer_is(value);
1923
+ if (PROBE("isArrayBufferView")) return value->kind == SCR_DYN_BYTES;
1924
+ if (PROBE("isDataView")) return value->kind == SCR_DYN_BYTES && value->v.bytes->is_data_view;
1925
+ if (PROBE("isTypedArray")) return value->kind == SCR_DYN_BYTES && !value->v.bytes->is_data_view;
1926
+ if (PROBE("isUint8Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_U8);
1927
+ if (PROBE("isUint8ClampedArray")) return scr_dyn_typed_array_is(value, SCR_BYTES_U8C);
1928
+ if (PROBE("isUint16Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_U16);
1929
+ if (PROBE("isUint32Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_U32);
1930
+ if (PROBE("isInt8Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_I8);
1931
+ if (PROBE("isInt16Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_I16);
1932
+ if (PROBE("isInt32Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_I32);
1933
+ if (PROBE("isFloat32Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_F32);
1934
+ if (PROBE("isFloat64Array")) return scr_dyn_typed_array_is(value, SCR_BYTES_F64);
1935
+ if (PROBE("isMap")) return value->kind == SCR_DYN_HANDLE && value->v.handle.tag == SCR_DYNH_MAP;
1936
+ if (PROBE("isSet")) return value->kind == SCR_DYN_HANDLE && value->v.handle.tag == SCR_DYNH_SET;
1937
+ if (PROBE("isWeakMap")) return value->kind == SCR_DYN_HANDLE && value->v.handle.tag == SCR_DYNH_WEAK_MAP;
1938
+ if (PROBE("isWeakSet")) return value->kind == SCR_DYN_HANDLE && value->v.handle.tag == SCR_DYNH_WEAK_SET;
1939
+ if (PROBE("isRegExp")) return value->kind == SCR_DYN_HANDLE && value->v.handle.tag == SCR_DYNH_REGEXP;
1940
+ if (PROBE("isPromise")) return value->kind == SCR_DYN_PROMISE;
1941
+ if (PROBE("isProxy")) return value->kind == SCR_DYN_PROXY;
1942
+ if (PROBE("isAsyncFunction")) return value->kind == SCR_DYN_FUNC && (value->v.fn.clo->function_kind & 2) != 0;
1943
+ if (PROBE("isGeneratorFunction")) return value->kind == SCR_DYN_FUNC && (value->v.fn.clo->function_kind & 1) != 0;
1944
+ if (PROBE("isGeneratorObject")) return scr_dyn_generator(value);
1945
+ if (PROBE("isNativeError")) {
1946
+ ScrError *error = scr_errdyn_err_of(value);
1947
+ if (!error) return false;
1948
+ scr_error_release(error);
1949
+ return true;
1950
+ }
1951
+ #undef PROBE
1952
+ return false;
1953
+ }
1954
+
1955
+ /* Node's JavaScript wrappers have names/arity; engine-native probes are
1956
+ * anonymous with length zero. Keep their native closure identity intact. */
1957
+ ScrDyn *scr_dyn_util_type_value(const ScrDyn *value, const ScrStr *probe) {
1958
+ static const char *const named[] = { "isTypedArray", "isUint8Array", "isUint8ClampedArray", "isUint16Array", "isUint32Array",
1959
+ "isInt8Array", "isInt16Array", "isInt32Array", "isFloat32Array", "isFloat64Array" };
1960
+ const char *name = "";
1961
+ if (probe->len == 17 && memcmp(probe->data, "isArrayBufferView", 17) == 0) name = "isView";
1962
+ for (size_t i = 0; i < sizeof named / sizeof named[0]; i++)
1963
+ if (probe->len == strlen(named[i]) && memcmp(probe->data, named[i], probe->len) == 0) name = named[i];
1964
+ return scr_dyn_new_func(scr_closure_retain(value->v.fn.clo), value->v.fn.thunk, *name ? 1 : 0, value->v.fn.sig, name);
1965
+ }
1966
+
1905
1967
  bool scr_dyn_bytes_is(const ScrDyn *d, int elem) {
1906
1968
  return d && d->kind == SCR_DYN_BYTES && d->v.bytes->elem == (ScrBytesElem)elem;
1907
1969
  }
@@ -2352,7 +2414,9 @@ const char *scr_dyn_specific_type(const ScrDyn *cb, char *detail, size_t cap) {
2352
2414
  }
2353
2415
  case SCR_DYN_NUM: {
2354
2416
  char num[32];
2355
- size_t n = scr_f64_to_str(cb->v.num, num);
2417
+ size_t n;
2418
+ if (cb->v.num == 0 && signbit(cb->v.num)) { memcpy(num, "-0", 3); n = 2; }
2419
+ else n = scr_f64_to_str(cb->v.num, num);
2356
2420
  snprintf(detail, cap, "type number (%.*s)", (int)n, num);
2357
2421
  break;
2358
2422
  }
@@ -4550,7 +4614,16 @@ ScrStr *scr_dyn_string_coerce_js(const ScrDyn *d) {
4550
4614
  for (int i = 0; i < 2; i++) {
4551
4615
  const ScrDyn *owner = scr_dyn_property_owner(d, hint[i], strlen(hint[i]));
4552
4616
  ScrDyn *m = owner ? scr_dyn_obj_read(d, hint[i], strlen(hint[i])) : NULL;
4617
+ if (scr_exc_pending()) { scr_dyn_release(m); return NULL; }
4553
4618
  if (!m && i == 0 && scr_dyn_has_object_prototype(d)) {
4619
+ // Checked Error values retain their Error.prototype formatter even
4620
+ // when their fields are exposed through the cached object view.
4621
+ ScrError *error = scr_errdyn_err_of(d);
4622
+ if (error) {
4623
+ ScrStr *text = scr_error_to_string(error);
4624
+ scr_error_release(error);
4625
+ return text;
4626
+ }
4554
4627
  return scr_str_new("[object Object]", 15);
4555
4628
  }
4556
4629
  if (!m || m->kind != SCR_DYN_FUNC) { scr_dyn_release(m); continue; }
@@ -4576,6 +4649,65 @@ ScrStr *scr_dyn_string_coerce_js(const ScrDyn *d) {
4576
4649
  return scr_dyn_string_coerce(d);
4577
4650
  }
4578
4651
 
4652
+ ScrStr *scr_util_to_usv_string(const ScrDyn *input) {
4653
+ const ScrDyn *value = input ? input : scr_dyn_undefined();
4654
+ /* Native string producers already replace unpaired surrogate code units.
4655
+ * Preserve ToString's object protocol before using that storage invariant. */
4656
+ if (scr_to_primitive_symbol && scr_iterator_object(value)) {
4657
+ ScrDyn *method = scr_dyn_reflect_get((ScrDyn *)value, scr_to_primitive_symbol, (ScrDyn *)value);
4658
+ if (!method) return NULL;
4659
+ if (method->kind != SCR_DYN_UNDEF && method->kind != SCR_DYN_NULL) {
4660
+ if (!scr_dyn_is_callable(method)) {
4661
+ ScrJsonBuf buffer;
4662
+ scr_jb_init(&buffer);
4663
+ if (scr_iterator_object(method)) scr_jb_puts(&buffer, "object");
4664
+ else {
4665
+ ScrStr *type = scr_dyn_typeof(method);
4666
+ scr_jb_put_str(&buffer, type);
4667
+ scr_str_release(type);
4668
+ if (method->kind != SCR_DYN_SYMBOL && method->kind != SCR_DYN_BIGINT) scr_jb_puts(&buffer, " ");
4669
+ if (method->kind == SCR_DYN_STR) {
4670
+ scr_jb_puts(&buffer, "\"");
4671
+ scr_jb_put_str(&buffer, method->v.str);
4672
+ scr_jb_puts(&buffer, "\"");
4673
+ }
4674
+ else if (method->kind != SCR_DYN_SYMBOL && method->kind != SCR_DYN_BIGINT) {
4675
+ ScrStr *text = scr_dyn_string_coerce(method);
4676
+ scr_jb_put_str(&buffer, text);
4677
+ scr_str_release(text);
4678
+ }
4679
+ }
4680
+ scr_jb_puts(&buffer, " is not a function");
4681
+ ScrStr *message = scr_jb_finish(&buffer);
4682
+ scr_throw_error_msg(SCR_ERR_TYPE, message->data, message->len);
4683
+ scr_str_release(message);
4684
+ scr_dyn_release(method);
4685
+ return NULL;
4686
+ }
4687
+ ScrStr *hint = scr_str_new("string", 6);
4688
+ ScrDyn *argument = scr_dyn_new_str(hint);
4689
+ scr_str_release(hint);
4690
+ scr_dyn_this_push_dyn(value);
4691
+ ScrDyn *primitive = scr_dyn_call(method, &argument, 1, "Symbol.toPrimitive");
4692
+ scr_dyn_this_pop();
4693
+ scr_dyn_release(argument);
4694
+ scr_dyn_release(method);
4695
+ if (!primitive) return NULL;
4696
+ if (scr_dyn_to_primitive_result_is_object(primitive)) {
4697
+ static const char message[] = "Cannot convert object to primitive value";
4698
+ scr_throw_error_msg(SCR_ERR_TYPE, message, sizeof message - 1);
4699
+ scr_dyn_release(primitive);
4700
+ return NULL;
4701
+ }
4702
+ ScrStr *text = scr_dyn_string_coerce(primitive);
4703
+ scr_dyn_release(primitive);
4704
+ return text;
4705
+ }
4706
+ scr_dyn_release(method);
4707
+ }
4708
+ return scr_dyn_string_coerce_js(value);
4709
+ }
4710
+
4579
4711
  /* JS ToNumber over a checked-dynamic value, including OrdinaryToPrimitive's
4580
4712
  * NUMBER hint for object snapshots. This is the numeric twin of
4581
4713
  * scr_dyn_string_coerce_js above: valueOf precedes toString, inherited
@@ -9207,7 +9339,8 @@ ScrMap *scr_dyn_native_map_check(const ScrDyn *value, const ScrDynPath *path) {
9207
9339
  bool scr_dyn_native_collection_is(const ScrDyn *value, int map, const char *type) {
9208
9340
  if (!(map ? scr_dyn_native_map_is(value) : scr_dyn_native_set_is(value))) return false;
9209
9341
  const ScrMap *storage = value->v.handle.ptr;
9210
- return type ? storage->dyn_ops && strcmp(storage->dyn_ops->type, type) == 0 : !storage->dyn_ops;
9342
+ // A generic checked view uses dyn_ops to box/unbox the same live storage.
9343
+ return !type || (storage->dyn_ops && strcmp(storage->dyn_ops->type, type) == 0);
9211
9344
  }
9212
9345
 
9213
9346
  ScrMap *scr_dyn_native_collection_check(const ScrDyn *value, int map, const char *type, const ScrDynPath *path) {