@mirascript/mirascript 0.1.78 → 0.1.79

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 (152) hide show
  1. package/dist/{chunk-VNQQF2W7.js → chunk-BPFOJ4Q6.js} +381 -432
  2. package/dist/chunk-BPFOJ4Q6.js.map +6 -0
  3. package/dist/{chunk-BITOQYYQ.js → chunk-LSPCAN32.js} +204 -149
  4. package/dist/chunk-LSPCAN32.js.map +6 -0
  5. package/dist/compiler/emit/constants.d.ts +1 -1
  6. package/dist/compiler/emit/constants.d.ts.map +1 -1
  7. package/dist/compiler/emit/consts.d.ts.map +1 -1
  8. package/dist/compiler/worker.js +1 -1
  9. package/dist/helpers/convert/{to-boolean.d.ts → boolean.d.ts} +1 -1
  10. package/dist/helpers/convert/boolean.d.ts.map +1 -0
  11. package/dist/helpers/convert/{to-format.d.ts → format.d.ts} +1 -1
  12. package/dist/helpers/convert/format.d.ts.map +1 -0
  13. package/dist/helpers/convert/index.d.ts +4 -4
  14. package/dist/helpers/convert/index.d.ts.map +1 -1
  15. package/dist/helpers/convert/{to-number.d.ts → number.d.ts} +1 -1
  16. package/dist/helpers/convert/number.d.ts.map +1 -0
  17. package/dist/helpers/convert/{to-string.d.ts → string.d.ts} +1 -1
  18. package/dist/helpers/convert/string.d.ts.map +1 -0
  19. package/dist/helpers/serialize.d.ts.map +1 -1
  20. package/dist/helpers/types/array-like.d.ts +8 -0
  21. package/dist/helpers/types/array-like.d.ts.map +1 -0
  22. package/dist/helpers/types/basic.d.ts +26 -0
  23. package/dist/helpers/types/basic.d.ts.map +1 -0
  24. package/dist/helpers/types/composed.d.ts +12 -0
  25. package/dist/helpers/types/composed.d.ts.map +1 -0
  26. package/dist/helpers/types/const.d.ts +6 -0
  27. package/dist/helpers/types/const.d.ts.map +1 -0
  28. package/dist/helpers/types/get-type.d.ts +6 -0
  29. package/dist/helpers/types/get-type.d.ts.map +1 -0
  30. package/dist/helpers/types/index.d.ts +6 -0
  31. package/dist/helpers/types/index.d.ts.map +1 -0
  32. package/dist/helpers/types/proto.d.ts +5 -0
  33. package/dist/helpers/types/proto.d.ts.map +1 -0
  34. package/dist/helpers/utils.d.ts.map +1 -1
  35. package/dist/index.js +2 -2
  36. package/dist/subtle.js +3 -3
  37. package/dist/vm/lib/global/json.d.ts +1 -1
  38. package/dist/vm/lib/global/json.d.ts.map +1 -1
  39. package/dist/vm/lib/helpers.d.ts.map +1 -1
  40. package/dist/vm/lib/mod/index.d.ts +1 -1
  41. package/dist/vm/lib/mod/index.d.ts.map +1 -1
  42. package/dist/vm/lib/mod/matrix/bin-ops.d.ts +8 -0
  43. package/dist/vm/lib/mod/matrix/bin-ops.d.ts.map +1 -0
  44. package/dist/vm/lib/mod/matrix/fill.d.ts +6 -0
  45. package/dist/vm/lib/mod/matrix/fill.d.ts.map +1 -0
  46. package/dist/vm/lib/mod/matrix/helpers.d.ts +6 -0
  47. package/dist/vm/lib/mod/matrix/helpers.d.ts.map +1 -0
  48. package/dist/vm/lib/mod/matrix/index.d.ts +6 -0
  49. package/dist/vm/lib/mod/matrix/index.d.ts.map +1 -0
  50. package/dist/vm/lib/mod/matrix/invert.d.ts +3 -0
  51. package/dist/vm/lib/mod/matrix/invert.d.ts.map +1 -0
  52. package/dist/vm/lib/mod/matrix/size.d.ts +2 -0
  53. package/dist/vm/lib/mod/matrix/size.d.ts.map +1 -0
  54. package/dist/vm/lib/mod/matrix/transpose.d.ts +2 -0
  55. package/dist/vm/lib/mod/matrix/transpose.d.ts.map +1 -0
  56. package/dist/vm/operations/array-range.d.ts +3 -3
  57. package/dist/vm/operations/array-range.d.ts.map +1 -1
  58. package/dist/vm/operations/call.d.ts +1 -1
  59. package/dist/vm/operations/call.d.ts.map +1 -1
  60. package/dist/vm/operations/compound.d.ts +1 -13
  61. package/dist/vm/operations/compound.d.ts.map +1 -1
  62. package/dist/vm/operations/index.d.ts +3 -0
  63. package/dist/vm/operations/index.d.ts.map +1 -1
  64. package/dist/vm/operations/iterable.d.ts +6 -0
  65. package/dist/vm/operations/iterable.d.ts.map +1 -0
  66. package/dist/vm/operations/record.d.ts +6 -0
  67. package/dist/vm/operations/record.d.ts.map +1 -0
  68. package/dist/vm/operations/slice.d.ts.map +1 -1
  69. package/dist/vm/operations/spread.d.ts +6 -0
  70. package/dist/vm/operations/spread.d.ts.map +1 -0
  71. package/dist/vm/operations/utils.d.ts.map +1 -1
  72. package/dist/vm/types/extern/access.d.ts +5 -0
  73. package/dist/vm/types/extern/access.d.ts.map +1 -0
  74. package/dist/vm/types/{extern.d.ts → extern/index.d.ts} +3 -3
  75. package/dist/vm/types/extern/index.d.ts.map +1 -0
  76. package/dist/vm/types/extern/tag.d.ts +3 -0
  77. package/dist/vm/types/extern/tag.d.ts.map +1 -0
  78. package/dist/vm/types/extern/utils.d.ts +13 -0
  79. package/dist/vm/types/extern/utils.d.ts.map +1 -0
  80. package/dist/vm/types/index.d.ts +3 -3
  81. package/dist/vm/types/index.d.ts.map +1 -1
  82. package/package.json +4 -4
  83. package/src/compiler/diagnostic.ts +2 -2
  84. package/src/compiler/emit/constants.ts +1 -1
  85. package/src/compiler/emit/consts.ts +0 -1
  86. package/src/compiler/emit/index.ts +1 -1
  87. package/src/compiler/emit/sourcemap.ts +1 -1
  88. package/src/compiler/load-module.ts +5 -1
  89. package/src/helpers/convert/{to-boolean.ts → boolean.ts} +1 -1
  90. package/src/helpers/convert/{to-format.ts → format.ts} +1 -1
  91. package/src/helpers/convert/index.ts +4 -4
  92. package/src/helpers/convert/{to-number.ts → number.ts} +15 -26
  93. package/src/helpers/convert/{to-string.ts → string.ts} +2 -2
  94. package/src/helpers/serialize.ts +42 -36
  95. package/src/helpers/types/array-like.ts +32 -0
  96. package/src/helpers/types/basic.ts +82 -0
  97. package/src/helpers/types/composed.ts +27 -0
  98. package/src/helpers/types/const.ts +44 -0
  99. package/src/helpers/types/get-type.ts +16 -0
  100. package/src/helpers/types/index.ts +5 -0
  101. package/src/helpers/types/proto.ts +21 -0
  102. package/src/helpers/utils.ts +7 -1
  103. package/src/vm/lib/global/sequence/all-any.ts +1 -1
  104. package/src/vm/lib/global/sequence/find.ts +1 -1
  105. package/src/vm/lib/global/sequence/group.ts +1 -1
  106. package/src/vm/lib/global/sequence/map-filter.ts +1 -1
  107. package/src/vm/lib/global/sequence/new.ts +1 -1
  108. package/src/vm/lib/global/sequence/sort.ts +1 -1
  109. package/src/vm/lib/global/sequence/unique.ts +1 -1
  110. package/src/vm/lib/global/sequence/with.ts +1 -1
  111. package/src/vm/lib/global/time.ts +1 -1
  112. package/src/vm/lib/helpers.ts +8 -1
  113. package/src/vm/lib/mod/index.ts +1 -1
  114. package/src/vm/lib/mod/matrix/bin-ops.ts +291 -0
  115. package/src/vm/lib/mod/matrix/fill.ts +109 -0
  116. package/src/vm/lib/mod/matrix/helpers.ts +26 -0
  117. package/src/vm/lib/mod/matrix/index.ts +5 -0
  118. package/src/vm/lib/mod/matrix/invert.ts +122 -0
  119. package/src/vm/lib/mod/matrix/size.ts +15 -0
  120. package/src/vm/lib/mod/matrix/transpose.ts +32 -0
  121. package/src/vm/operations/array-range.ts +15 -27
  122. package/src/vm/operations/call.ts +2 -2
  123. package/src/vm/operations/compound.ts +4 -131
  124. package/src/vm/operations/helpers.ts +1 -1
  125. package/src/vm/operations/index.ts +3 -0
  126. package/src/vm/operations/iterable.ts +40 -0
  127. package/src/vm/operations/record.ts +33 -0
  128. package/src/vm/operations/slice.ts +23 -22
  129. package/src/vm/operations/spread.ts +57 -0
  130. package/src/vm/operations/type-check.ts +1 -1
  131. package/src/vm/operations/utils.ts +45 -37
  132. package/src/vm/types/boundary.ts +2 -2
  133. package/src/vm/types/extern/access.ts +24 -0
  134. package/src/vm/types/extern/index.ts +124 -0
  135. package/src/vm/types/extern/tag.ts +58 -0
  136. package/src/vm/types/extern/utils.ts +55 -0
  137. package/src/vm/types/function.ts +1 -1
  138. package/src/vm/types/index.ts +3 -3
  139. package/dist/chunk-BITOQYYQ.js.map +0 -6
  140. package/dist/chunk-VNQQF2W7.js.map +0 -6
  141. package/dist/helpers/convert/to-boolean.d.ts.map +0 -1
  142. package/dist/helpers/convert/to-format.d.ts.map +0 -1
  143. package/dist/helpers/convert/to-number.d.ts.map +0 -1
  144. package/dist/helpers/convert/to-string.d.ts.map +0 -1
  145. package/dist/helpers/types.d.ts +0 -58
  146. package/dist/helpers/types.d.ts.map +0 -1
  147. package/dist/vm/lib/mod/matrix.d.ts +0 -15
  148. package/dist/vm/lib/mod/matrix.d.ts.map +0 -1
  149. package/dist/vm/types/extern.d.ts.map +0 -1
  150. package/src/helpers/types.ts +0 -283
  151. package/src/vm/lib/mod/matrix.ts +0 -590
  152. package/src/vm/types/extern.ts +0 -197
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  DiagnosticCode,
3
- NegativeInfinity,
4
3
  NotNumber,
5
4
  PositiveInfinity,
6
5
  VM_ARRAY_MAX_LENGTH,
@@ -50,117 +49,18 @@ import {
50
49
  keysLength,
51
50
  parseDiagnostics,
52
51
  setRecord,
52
+ toBoolean,
53
+ toFormat,
54
+ toNumber,
53
55
  toString,
54
56
  values
55
- } from "./chunk-BITOQYYQ.js";
57
+ } from "./chunk-LSPCAN32.js";
56
58
 
57
59
  // src/compiler/load-module.ts
58
60
  import { loadModule } from "@mirascript/bindings";
59
- await loadModule();
60
-
61
- // src/helpers/convert/index.ts
62
- var convert_exports = {};
63
- __export(convert_exports, {
64
- toBoolean: () => toBoolean,
65
- toFormat: () => toFormat,
66
- toNumber: () => toNumber,
67
- toString: () => toString
68
- });
69
-
70
- // src/helpers/convert/to-number.ts
71
- function parseNumericLiteral(value) {
72
- const ch0 = value.charAt(0);
73
- if (ch0 < "0" || ch0 > "9") {
74
- return null;
75
- }
76
- if (/^0[bB][01]+$/.test(value)) {
77
- return Number.parseInt(value.slice(2), 2);
78
- }
79
- if (/^0[oO][0-7]+$/.test(value)) {
80
- return Number.parseInt(value.slice(2), 8);
81
- }
82
- if (/^0[xX][0-9a-fA-F]+$/.test(value)) {
83
- return Number.parseInt(value.slice(2), 16);
84
- }
85
- if (/^[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?$/.test(value)) {
86
- return Number.parseFloat(value);
87
- }
88
- return null;
89
- }
90
- function stringToNumber(value) {
91
- value = value.trim();
92
- if (value === "") return null;
93
- if (value === "inf" || value === "+inf" || value === "Infinity" || value === "+Infinity") {
94
- return PositiveInfinity;
95
- }
96
- if (value === "-inf" || value === "-Infinity") {
97
- return NegativeInfinity;
98
- }
99
- if (value === "nan" || value === "NaN") {
100
- return NotNumber;
101
- }
102
- if (value.startsWith("-")) {
103
- const num2 = parseNumericLiteral(value.slice(1));
104
- if (num2 !== null) return -num2;
105
- return null;
106
- } else if (value.startsWith("+")) {
107
- return parseNumericLiteral(value.slice(1));
108
- } else {
109
- return parseNumericLiteral(value);
110
- }
111
- }
112
- function toNumber(value, fallback) {
113
- if (typeof value === "number") return value;
114
- if (typeof value == "boolean") return value ? 1 : 0;
115
- if (typeof value == "string") {
116
- const num2 = stringToNumber(value);
117
- if (num2 !== null) return num2;
118
- }
119
- if (fallback === void 0) {
120
- throw new VmError(`Failed to convert value to number: ${display(value)}`, NotNumber);
121
- }
122
- return fallback;
123
- }
124
-
125
- // src/helpers/convert/to-format.ts
126
- function formatNumber(finite) {
127
- if (finite === 0) return "0";
128
- const s2 = finite.toString();
129
- let ps;
130
- const abs3 = Math.abs(finite);
131
- if (abs3 >= 1e3 || abs3 < 1e-3) {
132
- const ps1 = finite.toExponential();
133
- const ps2 = finite.toExponential(5);
134
- ps = ps1.length < ps2.length ? ps1 : ps2;
135
- } else {
136
- ps = finite.toPrecision(6);
137
- }
138
- return ps.length < s2.length ? ps : s2;
139
- }
140
- function toFormat(value, format2) {
141
- const f = format2 == null ? "" : format2.trim();
142
- if (typeof value == "number") {
143
- if (!isFinite(value)) {
144
- return toString(value, void 0);
145
- }
146
- if (/^\.\d+$/.test(f)) {
147
- let digits = Math.trunc(Number(f.slice(1)));
148
- if (!(digits <= 100)) digits = 100;
149
- return value.toFixed(digits);
150
- } else {
151
- return formatNumber(value);
152
- }
153
- }
154
- return toString(value, void 0);
155
- }
156
-
157
- // src/helpers/convert/to-boolean.ts
158
- function toBoolean(value, fallback) {
159
- if (typeof value === "boolean") return value;
160
- if (fallback === void 0) {
161
- throw new VmError(`Failed to convert value to boolean: ${display(value)}`, false);
162
- }
163
- return fallback;
61
+ try {
62
+ await loadModule();
63
+ } catch (error) {
164
64
  }
165
65
 
166
66
  // src/vm/types/wrapper.ts
@@ -295,13 +195,11 @@ function unwrapFromVmValue(value, bindThisArg = true) {
295
195
  return bindThisArg ? bindThis(f.value, f.thisArg) : f.value;
296
196
  }
297
197
 
298
- // src/vm/types/extern.ts
198
+ // src/vm/types/extern/tag.ts
299
199
  var ObjectPrototype = Object.prototype;
300
- var ObjectToString = ObjectPrototype.toString;
301
- var FunctionToString = Function.prototype.toString;
302
- var ArrayToString = Array.prototype.toString;
303
- var ArrayMap = Array.prototype.map;
304
- var TypedArrayToString = Uint8Array.prototype.toString;
200
+ function getJsObjectTag(value) {
201
+ return ObjectPrototype.toString.call(value).slice(8, -1);
202
+ }
305
203
  function classNameOf(kls) {
306
204
  const { displayName } = kls;
307
205
  if (typeof displayName === "string" && displayName.trim()) {
@@ -313,6 +211,94 @@ function classNameOf(kls) {
313
211
  }
314
212
  return null;
315
213
  }
214
+ function getTag(value) {
215
+ const tag = getJsObjectTag(value);
216
+ if (tag === "Function") {
217
+ if ("prototype" in value && typeof value.prototype == "object") {
218
+ const className = classNameOf(value);
219
+ if (!className) return `class`;
220
+ return `class ${className}`;
221
+ }
222
+ return `function`;
223
+ }
224
+ if (tag === "AsyncFunction") {
225
+ return `async function`;
226
+ }
227
+ if (tag === "GeneratorFunction") {
228
+ return `function*`;
229
+ }
230
+ if (tag === "AsyncGeneratorFunction") {
231
+ return `async function*`;
232
+ }
233
+ if (tag === "Object") {
234
+ const proto = getPrototypeOf(value);
235
+ if (proto === ObjectPrototype) {
236
+ return "Object";
237
+ }
238
+ if (proto == null) {
239
+ return "Object: null prototype";
240
+ }
241
+ if (typeof proto.constructor === "function") {
242
+ return classNameOf(proto.constructor) ?? "Object";
243
+ }
244
+ }
245
+ return tag;
246
+ }
247
+
248
+ // src/vm/types/extern/utils.ts
249
+ function isArrayLike(value) {
250
+ return isArray(value) || ArrayBuffer.isView(value) && "length" in value;
251
+ }
252
+ function getKeys(value, includeNonEnumerable) {
253
+ if (!includeNonEnumerable) {
254
+ const keys5 = [];
255
+ for (const key in value) {
256
+ keys5.push(key);
257
+ }
258
+ return keys5;
259
+ }
260
+ const keys4 = /* @__PURE__ */ new Set();
261
+ let e2 = value;
262
+ while (e2 != null && (typeof e2 == "object" || typeof e2 == "function")) {
263
+ for (const key of getOwnPropertyNames(e2)) {
264
+ keys4.add(key);
265
+ }
266
+ e2 = getPrototypeOf(e2);
267
+ }
268
+ return Array.from(keys4);
269
+ }
270
+ var ObjectToString = Object.prototype.toString;
271
+ var FunctionToString = Function.prototype.toString;
272
+ var ArrayToString = Array.prototype.toString;
273
+ var TypedArrayToString = Uint8Array.prototype.toString;
274
+ function hasCustomToString(value) {
275
+ const { toString: toString2 } = value;
276
+ if (typeof toString2 != "function") return false;
277
+ if (toString2 === ObjectToString || toString2 === FunctionToString || toString2 === ArrayToString || toString2 === TypedArrayToString)
278
+ return false;
279
+ return true;
280
+ }
281
+
282
+ // src/vm/types/extern/access.ts
283
+ var pFunction = Function.prototype;
284
+ var pArray = Array.prototype;
285
+ var pObject = Object.prototype;
286
+ function canAccessProperty(value, key, read) {
287
+ if (key.startsWith("_")) return false;
288
+ if (typeof value == "function" && (key === "prototype" || key === "arguments" || key === "caller")) return false;
289
+ if (hasOwn(value, key)) return true;
290
+ if (!read) return true;
291
+ if (!(key in value)) return false;
292
+ if (key === "constructor") return false;
293
+ const prop = value[key];
294
+ if (key in pFunction && prop === pFunction[key]) return false;
295
+ if (key in pArray && prop === pArray[key]) return false;
296
+ if (key in pObject && prop === pObject[key]) return false;
297
+ return true;
298
+ }
299
+
300
+ // src/vm/types/extern/index.ts
301
+ var ArrayMap = Array.prototype.map;
316
302
  var VmExtern = class extends VmWrapper {
317
303
  constructor(value, thisArg = null) {
318
304
  super(value);
@@ -323,18 +309,7 @@ var VmExtern = class extends VmWrapper {
323
309
  * This method will be used in {@link get}, {@link set}, {@link has}, and {@link keys} methods
324
310
  */
325
311
  access(key, read) {
326
- if (key.startsWith("_")) return false;
327
- if (typeof this.value == "function" && (key === "prototype" || key === "arguments" || key === "caller"))
328
- return false;
329
- if (hasOwn(this.value, key)) return true;
330
- if (!read) return true;
331
- if (!(key in this.value)) return false;
332
- if (key === "constructor") return false;
333
- const prop = this.value[key];
334
- if (key in Function.prototype && prop === Function.prototype[key]) return false;
335
- if (key in Array.prototype && prop === Array.prototype[key]) return false;
336
- if (key in Object.prototype && prop === Object.prototype[key]) return false;
337
- return true;
312
+ return canAccessProperty(this.value, key, read);
338
313
  }
339
314
  /** 决定是否对属性进行包装 */
340
315
  assumeVmValue(value, key) {
@@ -376,23 +351,8 @@ var VmExtern = class extends VmWrapper {
376
351
  }
377
352
  /** @inheritdoc */
378
353
  keys(includeNonEnumerable = false) {
379
- if (!includeNonEnumerable) {
380
- const keys4 = [];
381
- for (const key in this.value) {
382
- if (this.access(key, true)) keys4.push(key);
383
- }
384
- return keys4;
385
- } else {
386
- const keys4 = /* @__PURE__ */ new Set();
387
- let e2 = this.value;
388
- while (e2 != null && (typeof e2 == "object" || typeof e2 == "function")) {
389
- for (const key of getOwnPropertyNames(e2)) {
390
- keys4.add(key);
391
- }
392
- e2 = getPrototypeOf(e2);
393
- }
394
- return Array.from(keys4).filter((key) => this.access(key, true));
395
- }
354
+ const keys4 = getKeys(this.value, includeNonEnumerable);
355
+ return keys4.filter((key) => this.access(key, true));
396
356
  }
397
357
  /** @inheritdoc */
398
358
  same(other) {
@@ -405,15 +365,14 @@ var VmExtern = class extends VmWrapper {
405
365
  * By default, this method returns true if the wrapped value is an Array or a TypedArray.
406
366
  */
407
367
  isArrayLike() {
408
- return isArray(this.value) || ArrayBuffer.isView(this.value) && "length" in this.value;
368
+ return isArrayLike(this.value);
409
369
  }
410
370
  /** @inheritdoc */
411
371
  toString(useBraces) {
412
- const { toString: toString2 } = this.value;
413
- if (typeof toString2 !== "function" || toString2 === ObjectToString || toString2 === FunctionToString) {
414
- return super.toString(useBraces);
372
+ if (hasCustomToString(this.value)) {
373
+ return String(this.value);
415
374
  }
416
- if ((toString2 === ArrayToString || toString2 === TypedArrayToString) && this.isArrayLike()) {
375
+ if (this.isArrayLike()) {
417
376
  const mapped = ArrayMap.call(this.value, (item) => {
418
377
  if (item === void 0) return "";
419
378
  return innerToString(wrapToVmValue(item ?? null, null, null), true);
@@ -422,7 +381,7 @@ var VmExtern = class extends VmWrapper {
422
381
  if (useBraces) return `[${str}]`;
423
382
  return str;
424
383
  }
425
- return String(this.value);
384
+ return super.toString(useBraces);
426
385
  }
427
386
  /** @inheritdoc */
428
387
  get type() {
@@ -430,32 +389,9 @@ var VmExtern = class extends VmWrapper {
430
389
  }
431
390
  /** @inheritdoc */
432
391
  get tag() {
433
- const tag = ObjectToString.call(this.value).slice(8, -1);
392
+ const tag = getTag(this.value);
434
393
  if (this.isArrayLike()) {
435
394
  return `${tag}(${this.value.length})`;
436
- } else if (tag === "Object") {
437
- const proto = getPrototypeOf(this.value);
438
- if (proto === ObjectPrototype) {
439
- return "Object";
440
- }
441
- if (proto == null) {
442
- return "Object: null prototype";
443
- }
444
- if (typeof proto.constructor === "function") {
445
- return classNameOf(proto.constructor) ?? "Object";
446
- }
447
- } else if (tag === "Function" && "prototype" in this.value && typeof this.value.prototype == "object") {
448
- const className = classNameOf(this.value);
449
- if (!className) return `class`;
450
- return `class ${className}`;
451
- } else if (tag === "Function") {
452
- return `function`;
453
- } else if (tag === "AsyncFunction") {
454
- return `async function`;
455
- } else if (tag === "GeneratorFunction") {
456
- return `function*`;
457
- } else if (tag === "AsyncGeneratorFunction") {
458
- return `async function*`;
459
395
  }
460
396
  return tag;
461
397
  }
@@ -885,42 +821,48 @@ var overloadNumberString = (a, b) => {
885
821
  if (typeof a == "string" || typeof b == "string") return false;
886
822
  return true;
887
823
  };
824
+ var isArraySame = (a, b) => {
825
+ const len2 = a.length;
826
+ if (len2 !== b.length) return false;
827
+ for (let i = 0; i < len2; i++) {
828
+ if (!isSame(a[i] ?? null, b[i] ?? null)) {
829
+ return false;
830
+ }
831
+ }
832
+ return true;
833
+ };
834
+ var isRecordSame = (a, b) => {
835
+ const aKeys = keys(a);
836
+ const bKeys = keys(b);
837
+ const len2 = aKeys.length;
838
+ if (len2 !== bKeys.length) return false;
839
+ if (len2 === 0) return true;
840
+ for (let i = 0; i < len2; i++) {
841
+ const key = aKeys[i];
842
+ const av = a[key] ?? null;
843
+ const bv = getRecord(b, key);
844
+ if (bv === void 0) return false;
845
+ if (!isSame(av, bv)) return false;
846
+ }
847
+ return true;
848
+ };
888
849
  var isSame = (a, b) => {
889
850
  if (typeof a == "number" && typeof b == "number") {
890
851
  return a === b || isNaN(a) && isNaN(b);
891
852
  }
892
853
  if (a === b) return true;
893
854
  if (a == null || typeof a != "object" || b == null || typeof b != "object") return false;
894
- if (isVmWrapper(a)) return a.same(b);
895
- if (isVmWrapper(b)) return b.same(a);
896
- if (isVmArray(a) && isVmArray(b)) {
897
- const len2 = a.length;
898
- if (len2 !== b.length) {
899
- return false;
900
- }
901
- for (let i = 0; i < len2; i++) {
902
- if (!isSame(a[i] ?? null, b[i] ?? null)) {
903
- return false;
904
- }
905
- }
906
- return true;
855
+ const aType = getVmType(a);
856
+ const bType = getVmType(b);
857
+ if (aType !== bType) return false;
858
+ if (aType === "array") {
859
+ return isArraySame(a, b);
907
860
  }
908
- if (!isVmArray(a) && !isVmArray(b)) {
909
- const aKeys = keys(a);
910
- const bKeys = keys(b);
911
- const len2 = aKeys.length;
912
- if (len2 !== bKeys.length) return false;
913
- if (len2 === 0) return true;
914
- let i = len2;
915
- while (i--) {
916
- const key = aKeys[i];
917
- if (!hasOwnEnumerable(b, key)) return false;
918
- const av = a[key] ?? null;
919
- const bv = b[key] ?? null;
920
- if (!isSame(av, bv)) return false;
921
- }
922
- return true;
861
+ if (aType === "record") {
862
+ return isRecordSame(a, b);
923
863
  }
864
+ if (isVmWrapper(a)) return a.same(b);
865
+ if (isVmWrapper(b)) return b.same(a);
924
866
  return false;
925
867
  };
926
868
 
@@ -1048,32 +990,32 @@ var $Nsame = (a, b) => {
1048
990
  var { ceil } = Math;
1049
991
  var { slice } = Array.prototype;
1050
992
  var sliceCore = (value, start, end, exclusive) => {
993
+ $AssertInit(value);
994
+ $AssertInit(start);
995
+ $AssertInit(end);
996
+ if (!isVmArray(value)) {
997
+ throw new VmError(`Expected array, got ${display(value)}`, []);
998
+ }
1051
999
  const { length } = value;
1052
- if (isNaN(start)) start = 0;
1053
- else if (start < 0) start = length + start;
1054
- if (isNaN(end)) end = exclusive ? length : length - 1;
1055
- else if (end < 0) end = length + end;
1056
- start = ceil(start);
1057
- if (exclusive || !isSafeInteger(end)) {
1058
- end = ceil(end);
1000
+ let s2 = start != null ? toNumber(start) : 0;
1001
+ let e2 = end != null ? toNumber(end) : length - (exclusive ? 0 : 1);
1002
+ if (isNaN(s2)) s2 = 0;
1003
+ else if (s2 < 0) s2 = length + s2;
1004
+ if (isNaN(e2)) e2 = exclusive ? length : length - 1;
1005
+ else if (e2 < 0) e2 = length + e2;
1006
+ s2 = ceil(s2);
1007
+ if (exclusive || !isSafeInteger(e2)) {
1008
+ e2 = ceil(e2);
1059
1009
  } else {
1060
- end = end + 1;
1010
+ e2 = e2 + 1;
1061
1011
  }
1062
- return slice.call(value, start, end);
1012
+ return slice.call(value, s2, e2);
1063
1013
  };
1064
1014
  var $Slice = (value, start, end) => {
1065
- $AssertInit(value);
1066
- if (!isVmArray(value)) throw new VmError(`Expected array, got ${display(value)}`, []);
1067
- const s2 = start != null ? $ToNumber(start) : 0;
1068
- const e2 = end != null ? $ToNumber(end) : value.length - 1;
1069
- return sliceCore(value, s2, e2, false);
1015
+ return sliceCore(value, start, end, false);
1070
1016
  };
1071
1017
  var $SliceExclusive = (value, start, end) => {
1072
- $AssertInit(value);
1073
- if (!isVmArray(value)) throw new VmError(`Expected array, got ${display(value)}`, []);
1074
- const s2 = start != null ? $ToNumber(start) : 0;
1075
- const e2 = end != null ? $ToNumber(end) : value.length;
1076
- return sliceCore(value, s2, e2, true);
1018
+ return sliceCore(value, start, end, true);
1077
1019
  };
1078
1020
 
1079
1021
  // src/vm/operations/helpers.ts
@@ -1109,23 +1051,6 @@ var $GlobalFallback = () => {
1109
1051
  // src/vm/operations/compound.ts
1110
1052
  var { trunc } = Math;
1111
1053
  var { at } = Array.prototype;
1112
- var $In = (value, iterable) => {
1113
- $AssertInit(value);
1114
- $AssertInit(iterable);
1115
- if (iterable == null) return false;
1116
- if (typeof iterable != "object") return false;
1117
- if (isVmArray(iterable)) {
1118
- if (value == null) {
1119
- for (const item of iterable) if (item == null) return true;
1120
- return false;
1121
- }
1122
- if (isVmPrimitive(value)) return iterable.includes(value);
1123
- return iterable.some((item = null) => isSame(item, value));
1124
- }
1125
- const key = toString(value, void 0);
1126
- if (isVmWrapper(iterable)) return iterable.has(key);
1127
- return hasOwnEnumerable(iterable, key);
1128
- };
1129
1054
  var $Length = (value) => {
1130
1055
  $AssertInit(value);
1131
1056
  if (isVmArray(value)) return value.length;
@@ -1133,31 +1058,6 @@ var $Length = (value) => {
1133
1058
  if (isVmWrapper(value)) return value.keys().length;
1134
1059
  throw new VmError(`Value has no length: ${display(value)}`, 0);
1135
1060
  };
1136
- var $Omit = (value, omitted) => {
1137
- $AssertInit(value);
1138
- if (!isVmRecord(value)) return {};
1139
- const result = {};
1140
- const valueKeys = keys(value);
1141
- const omittedSet = new Set(omitted.map($ToString));
1142
- for (const key of valueKeys) {
1143
- if (!omittedSet.has(key)) {
1144
- setRecord(result, key, value[key]);
1145
- }
1146
- }
1147
- return result;
1148
- };
1149
- var $Pick = (value, picked) => {
1150
- $AssertInit(value);
1151
- if (!isVmRecord(value)) return {};
1152
- const result = {};
1153
- for (const key of picked) {
1154
- const k = $ToString(key);
1155
- if (hasOwnEnumerable(value, k)) {
1156
- setRecord(result, k, value[k]);
1157
- }
1158
- }
1159
- return result;
1160
- };
1161
1061
  var $Has = (obj, key) => {
1162
1062
  $AssertInit(obj);
1163
1063
  const pk = $ToString(key);
@@ -1195,13 +1095,8 @@ var $Set = (obj, key, value) => {
1195
1095
  if (!isVmExtern(obj)) throw new VmError(`Expected extern, got ${display(obj)}`, void 0);
1196
1096
  obj.set(pk, value);
1197
1097
  };
1198
- var $Iterable = (value) => {
1199
- $AssertInit(value);
1200
- if (isVmWrapper(value)) return value.keys();
1201
- if (isVmArray(value)) return value;
1202
- if (value != null && typeof value == "object") return keys(value);
1203
- throw new VmError(`Value is not iterable: ${display(value)}`, isVmFunction(value) ? [] : [value]);
1204
- };
1098
+
1099
+ // src/vm/operations/spread.ts
1205
1100
  var $RecordSpread = (record) => {
1206
1101
  $AssertInit(record);
1207
1102
  if (record == null || isVmRecord(record)) return record;
@@ -1249,40 +1144,81 @@ var $ArraySpread = (array) => {
1249
1144
  throw new VmError(`Expected array, iterable extern or nil, got ${display(array)}`, []);
1250
1145
  };
1251
1146
 
1252
- // src/vm/operations/array-range.ts
1253
- var assertArrayLength = (len2) => {
1254
- if (len2 > VM_ARRAY_MAX_LENGTH) {
1255
- throw new RangeError(`Array length exceeds maximum limit of ${VM_ARRAY_MAX_LENGTH}`);
1147
+ // src/vm/operations/record.ts
1148
+ var $Omit = (value, omitted) => {
1149
+ $AssertInit(value);
1150
+ if (!isVmRecord(value)) return {};
1151
+ const result = {};
1152
+ const valueKeys = keys(value);
1153
+ const omittedSet = new Set(omitted.map(String));
1154
+ for (const key of valueKeys) {
1155
+ if (!omittedSet.has(key)) {
1156
+ setRecord(result, key, value[key]);
1157
+ }
1158
+ }
1159
+ return result;
1160
+ };
1161
+ var $Pick = (value, picked) => {
1162
+ $AssertInit(value);
1163
+ if (!isVmRecord(value)) return {};
1164
+ const result = {};
1165
+ for (const key of picked) {
1166
+ const k = String(key);
1167
+ if (hasOwnEnumerable(value, k)) {
1168
+ setRecord(result, k, value[k]);
1169
+ }
1256
1170
  }
1171
+ return result;
1257
1172
  };
1258
- var isEmptyRange = (start, end) => {
1259
- return !isFinite(start) || !isFinite(end) || start > end;
1173
+
1174
+ // src/vm/operations/iterable.ts
1175
+ var $In = (value, iterable) => {
1176
+ $AssertInit(value);
1177
+ $AssertInit(iterable);
1178
+ if (iterable == null) return false;
1179
+ if (typeof iterable != "object") return false;
1180
+ if (isVmArray(iterable)) {
1181
+ if (value == null) {
1182
+ for (const item of iterable) if (item == null) return true;
1183
+ return false;
1184
+ }
1185
+ if (isVmPrimitive(value)) return iterable.includes(value);
1186
+ return iterable.some((item = null) => isSame(item, value));
1187
+ }
1188
+ const key = toString(value, void 0);
1189
+ if (isVmWrapper(iterable)) return iterable.has(key);
1190
+ return hasOwnEnumerable(iterable, key);
1260
1191
  };
1261
- var $ArrayRange = (start, end) => {
1192
+ var $Iterable = (value) => {
1193
+ $AssertInit(value);
1194
+ if (isVmWrapper(value)) return value.keys();
1195
+ if (isVmArray(value)) return value;
1196
+ if (value != null && typeof value == "object") return keys(value);
1197
+ throw new VmError(`Value is not iterable: ${display(value)}`, isVmFunction(value) ? [] : [value]);
1198
+ };
1199
+
1200
+ // src/vm/operations/array-range.ts
1201
+ var makeArray = (start, end, exclusive) => {
1262
1202
  const s2 = $ToNumber(start);
1263
1203
  const e2 = $ToNumber(end);
1264
- if (isEmptyRange(s2, e2)) return [];
1265
- const n = Math.floor(e2 - s2 + 1);
1266
- assertArrayLength(n);
1204
+ if (!isFinite(s2) || !isFinite(e2) || s2 > e2) {
1205
+ return [];
1206
+ }
1207
+ const n = exclusive ? Math.ceil(e2 - s2) : Math.floor(e2 - s2 + 1);
1208
+ if (n > VM_ARRAY_MAX_LENGTH) {
1209
+ throw new RangeError(`Array length exceeds maximum limit of ${VM_ARRAY_MAX_LENGTH}`);
1210
+ }
1267
1211
  const arr = [];
1268
- arr.length = n;
1269
1212
  for (let i = 0; i < n; i++) {
1270
1213
  arr[i] = s2 + i;
1271
1214
  }
1272
1215
  return arr;
1273
1216
  };
1217
+ var $ArrayRange = (start, end) => {
1218
+ return makeArray(start, end, false);
1219
+ };
1274
1220
  var $ArrayRangeExclusive = (start, end) => {
1275
- const s2 = $ToNumber(start);
1276
- const e2 = $ToNumber(end);
1277
- if (isEmptyRange(s2, e2)) return [];
1278
- const n = Math.ceil(e2 - s2);
1279
- assertArrayLength(n);
1280
- const arr = [];
1281
- arr.length = n;
1282
- for (let i = 0; i < n; i++) {
1283
- arr[i] = s2 + i;
1284
- }
1285
- return arr;
1221
+ return makeArray(start, end, true);
1286
1222
  };
1287
1223
 
1288
1224
  // src/compiler/create-script.ts
@@ -1480,7 +1416,7 @@ function expectNumber(name, value) {
1480
1416
  }
1481
1417
  return v;
1482
1418
  }
1483
- function expectNumberRange(name, value, min3, max2) {
1419
+ function expectNumberRange(name, value, min3, max3) {
1484
1420
  const v = expectNumber(name, value);
1485
1421
  if (!isFinite(v)) {
1486
1422
  throwError(`${describeParam(name)} is not a finite number: ${display(value)}`, NotNumber);
@@ -1488,18 +1424,18 @@ function expectNumberRange(name, value, min3, max2) {
1488
1424
  if (v < min3) {
1489
1425
  throwError(`${describeParam(name)} is less than minimum value ${min3}: ${display(value)}`, min3);
1490
1426
  }
1491
- if (v > max2) {
1492
- throwError(`${describeParam(name)} is greater than maximum value ${max2}: ${display(value)}`, max2);
1427
+ if (v > max3) {
1428
+ throwError(`${describeParam(name)} is greater than maximum value ${max3}: ${display(value)}`, max3);
1493
1429
  }
1494
1430
  return v;
1495
1431
  }
1496
- function expectIntegerRange(name, value, min3, max2) {
1432
+ function expectIntegerRange(name, value, min3, max3) {
1497
1433
  const i = expectInteger(name, value);
1498
1434
  if (i < min3) {
1499
1435
  throwError(`${describeParam(name)} is less than minimum value ${min3}: ${display(value)}`, min3);
1500
1436
  }
1501
- if (i > max2) {
1502
- throwError(`${describeParam(name)} is greater than maximum value ${max2}: ${display(value)}`, max2);
1437
+ if (i > max3) {
1438
+ throwError(`${describeParam(name)} is greater than maximum value ${max3}: ${display(value)}`, max3);
1503
1439
  }
1504
1440
  return i;
1505
1441
  }
@@ -2816,8 +2752,8 @@ var repeat = VmLib(
2816
2752
 
2817
2753
  // src/vm/lib/global/sequence/new.ts
2818
2754
  var new_record = VmLib(
2819
- (size2, generator) => {
2820
- const n = expectIntegerRange("size", size2, 0, PositiveInfinity);
2755
+ (size3, generator) => {
2756
+ const n = expectIntegerRange("size", size3, 0, PositiveInfinity);
2821
2757
  expectCallable("generator", generator, null);
2822
2758
  const result = {};
2823
2759
  for (let i = 0; i < n; i++) {
@@ -3469,7 +3405,7 @@ __export(mod_exports, {
3469
3405
  matrix: () => matrix_exports
3470
3406
  });
3471
3407
 
3472
- // src/vm/lib/mod/matrix.ts
3408
+ // src/vm/lib/mod/matrix/index.ts
3473
3409
  var matrix_exports = {};
3474
3410
  __export(matrix_exports, {
3475
3411
  add: () => add2,
@@ -3481,12 +3417,14 @@ __export(matrix_exports, {
3481
3417
  invert: () => invert,
3482
3418
  multiply: () => multiply,
3483
3419
  ones: () => ones,
3484
- size: () => size,
3420
+ size: () => size2,
3485
3421
  subtract: () => subtract,
3486
3422
  transpose: () => transpose,
3487
3423
  zeros: () => zeros
3488
3424
  });
3489
- function sizeImpl(matrix) {
3425
+
3426
+ // src/vm/lib/mod/matrix/helpers.ts
3427
+ function size(matrix) {
3490
3428
  if (!isVmArray(matrix)) return [];
3491
3429
  if (matrix.length === 0) return [0];
3492
3430
  const numRows = matrix.length;
@@ -3503,46 +3441,12 @@ function sizeImpl(matrix) {
3503
3441
  function num(v) {
3504
3442
  return toNumber(v, void 0);
3505
3443
  }
3506
- var size = VmLib(
3507
- (matrix) => {
3508
- required("matrix", matrix, []);
3509
- return sizeImpl(matrix);
3510
- },
3511
- {
3512
- summary: "获取矩阵尺寸",
3513
- params: { matrix: { type: "any[][]", description: "要获取尺寸的矩阵" } },
3514
- returns: { type: "[number, number]" },
3515
- examples: ["matrix.size([[1, 2], [3, 4]]) // [2, 2]"]
3516
- }
3517
- );
3518
- var transpose = VmLib(
3519
- (matrix) => {
3520
- required("matrix", matrix, []);
3521
- const [numRows, numCols] = sizeImpl(matrix);
3522
- if (numRows == null || numCols == null) return matrix;
3523
- const transposed = [];
3524
- for (let j = 0; j < numCols; j++) {
3525
- Cp();
3526
- const tj = [];
3527
- for (let i = 0; i < numRows; i++) {
3528
- const row = matrix[i] ?? null;
3529
- const item = row?.[j] ?? null;
3530
- tj[i] = item;
3531
- }
3532
- transposed[j] = tj;
3533
- }
3534
- return transposed;
3535
- },
3536
- {
3537
- summary: "转置矩阵",
3538
- params: { matrix: { type: "any[][]", description: "要转置的矩阵" } },
3539
- returns: { type: "any[][]" },
3540
- examples: ["matrix.transpose([[1, 2], [3, 4]]) // [[1, 3], [2, 4]]"]
3541
- }
3542
- );
3444
+
3445
+ // src/vm/lib/mod/matrix/bin-ops.ts
3446
+ var { max: max2 } = Math;
3543
3447
  function entrywiseImpl(a, b, f, vvf, mmf, vmf, mvf) {
3544
- let [ar, ac] = sizeImpl(a);
3545
- let [br, bc] = sizeImpl(b);
3448
+ let [ar, ac] = size(a);
3449
+ let [br, bc] = size(b);
3546
3450
  if (ar == null) {
3547
3451
  if (br == null) {
3548
3452
  return f(a, b);
@@ -3593,7 +3497,7 @@ function entrywiseImpl(a, b, f, vvf, mmf, vmf, mvf) {
3593
3497
  if (vvf != null) {
3594
3498
  return vvf(a, b, ar, br);
3595
3499
  }
3596
- const rr2 = Math.max(ar, br);
3500
+ const rr2 = max2(ar, br);
3597
3501
  const result2 = [];
3598
3502
  for (let r = 0; r < rr2; r++) {
3599
3503
  const aItem = a[r] ?? null;
@@ -3621,8 +3525,8 @@ function entrywiseImpl(a, b, f, vvf, mmf, vmf, mvf) {
3621
3525
  if (mmf != null) {
3622
3526
  return mmf(a, b, ar, ac, br, bc);
3623
3527
  }
3624
- const rr = Math.max(ar, br);
3625
- const rc = Math.max(ac, bc);
3528
+ const rr = max2(ar, br);
3529
+ const rc = max2(ac, bc);
3626
3530
  const result = [];
3627
3531
  for (let r = 0; r < rr; r++) {
3628
3532
  const rRow = [];
@@ -3731,7 +3635,7 @@ var multiply = VmLib(
3731
3635
  b,
3732
3636
  $Mul,
3733
3637
  (a2, b2, al, bl) => {
3734
- const l = Math.max(al, bl);
3638
+ const l = max2(al, bl);
3735
3639
  let s2 = 0;
3736
3640
  for (let i = 0; i < l; i++) {
3737
3641
  s2 += num(a2[i]) * num(b2[i]);
@@ -3790,10 +3694,109 @@ var multiply = VmLib(
3790
3694
  examples: ["matrix.multiply([[1, 2], [3, 4]], [5, 6]) // [17, 39]"]
3791
3695
  }
3792
3696
  );
3697
+
3698
+ // src/vm/lib/mod/matrix/fill.ts
3699
+ function filled(size3, value) {
3700
+ const s2 = getNumbers(size3);
3701
+ if (s2.length === 0) return [];
3702
+ while (s2.length > 0) {
3703
+ const repeat2 = arrayLen(s2.pop());
3704
+ Cp();
3705
+ const data = [];
3706
+ data.length = repeat2;
3707
+ data.fill(value);
3708
+ value = data;
3709
+ }
3710
+ return value;
3711
+ }
3712
+ var zeros = VmLib((...size3) => filled(size3, 0), {
3713
+ summary: "创建一个全零的矩阵",
3714
+ params: { "..size": { type: "number[]", description: "矩阵的维度" } },
3715
+ returns: { type: "number[][]" },
3716
+ examples: ["matrix.zeros(2, 3) // [[0, 0, 0], [0, 0, 0]]"]
3717
+ });
3718
+ var ones = VmLib((...size3) => filled(size3, 1), {
3719
+ summary: "创建一个全一的矩阵",
3720
+ params: { "..size": { type: "number[]", description: "矩阵的维度" } },
3721
+ returns: { type: "number[][]" },
3722
+ examples: ["matrix.ones(2, 2) // [[1, 1], [1, 1]]"]
3723
+ });
3724
+ var identity = VmLib(
3725
+ (...size3) => {
3726
+ let s2 = getNumbers(size3);
3727
+ if (s2.length === 0) return [];
3728
+ if (s2.length > 2) throwError("Invalid matrix size", []);
3729
+ if (s2.length === 1) s2 = [s2[0], s2[0]];
3730
+ const m = arrayLen(s2[0]);
3731
+ const n = arrayLen(s2[1]);
3732
+ const ret = [];
3733
+ for (let i = 0; i < m; i++) {
3734
+ const row = [];
3735
+ ret[i] = row;
3736
+ row.length = n;
3737
+ row.fill(0);
3738
+ if (i < n) row[i] = 1;
3739
+ }
3740
+ return ret;
3741
+ },
3742
+ {
3743
+ summary: "创建一个单位矩阵",
3744
+ params: { "..size": { type: "[number] | [number, number]", description: "矩阵的维度" } },
3745
+ returns: { type: "number[][]" },
3746
+ examples: ["matrix.identity(3) // [[1, 0, 0], [0, 1, 0], [0, 0, 1]]"]
3747
+ }
3748
+ );
3749
+ var diagonal = VmLib(
3750
+ (x, k = 0) => {
3751
+ expectArray("x", x, []);
3752
+ const fk = expectInteger("k", k);
3753
+ if (x.every((e2) => isArray(e2))) {
3754
+ const diag = [];
3755
+ for (let i = 0; i < x.length; i++) {
3756
+ const row = x[i];
3757
+ const r = i + fk;
3758
+ if (r < 0) continue;
3759
+ if (!row || r >= row.length) break;
3760
+ diag.push(row[r] ?? null);
3761
+ }
3762
+ return diag;
3763
+ }
3764
+ const l = x.length;
3765
+ const m = arrayLen(fk < 0 ? l - fk : l);
3766
+ const n = arrayLen(fk > 0 ? l + fk : l);
3767
+ const result = [];
3768
+ for (let i = 0; i < m; i++) {
3769
+ const row = [];
3770
+ result[i] = row;
3771
+ row.length = n;
3772
+ row.fill(0);
3773
+ for (let j = 0; j < n; j++) {
3774
+ if (i + fk === j) {
3775
+ row[j] = x[fk >= 0 ? i : j] ?? null;
3776
+ }
3777
+ }
3778
+ }
3779
+ return result;
3780
+ },
3781
+ {
3782
+ summary: "创建一个对角矩阵或获取矩阵的对角线",
3783
+ params: {
3784
+ x: { type: "number[] | number[][]", description: "对角线元素或要获取对角线的矩阵" },
3785
+ k: { type: "number", description: "对角线偏移量,默认为 0" }
3786
+ },
3787
+ returns: { type: "number[][] | number[]" },
3788
+ examples: [
3789
+ "matrix.diagonal([1, 2, 3]) // [[1, 0, 0], [0, 2, 0], [0, 0, 3]]",
3790
+ "matrix.diagonal([[1, 2], [3, 4]]) // [1, 4]"
3791
+ ]
3792
+ }
3793
+ );
3794
+
3795
+ // src/vm/lib/mod/matrix/invert.ts
3793
3796
  var invert = VmLib(
3794
3797
  (a) => {
3795
3798
  expectConst("a", a, null);
3796
- const [rows, cols] = sizeImpl(a);
3799
+ const [rows, cols] = size(a);
3797
3800
  if (rows == null) return 1 / num(a);
3798
3801
  if (cols == null) return iterate(a, (v) => 1 / num(v));
3799
3802
  if (rows !== cols) throwError(`Matrix must be square`, a);
@@ -3880,99 +3883,46 @@ var invert = VmLib(
3880
3883
  examples: ["matrix.invert([[1, 2], [3, 4]]) // [[-2, 1], [1.5, -0.5]]"]
3881
3884
  }
3882
3885
  );
3883
- function filled(size2, value) {
3884
- const s2 = getNumbers(size2);
3885
- if (s2.length === 0) return [];
3886
- while (s2.length > 0) {
3887
- const repeat2 = arrayLen(s2.pop());
3888
- Cp();
3889
- const data = [];
3890
- data.length = repeat2;
3891
- data.fill(value);
3892
- value = data;
3893
- }
3894
- return value;
3895
- }
3896
- var zeros = VmLib((...size2) => filled(size2, 0), {
3897
- summary: "创建一个全零的矩阵",
3898
- params: { "..size": { type: "number[]", description: "矩阵的维度" } },
3899
- returns: { type: "number[][]" },
3900
- examples: ["matrix.zeros(2, 3) // [[0, 0, 0], [0, 0, 0]]"]
3901
- });
3902
- var ones = VmLib((...size2) => filled(size2, 1), {
3903
- summary: "创建一个全一的矩阵",
3904
- params: { "..size": { type: "number[]", description: "矩阵的维度" } },
3905
- returns: { type: "number[][]" },
3906
- examples: ["matrix.ones(2, 2) // [[1, 1], [1, 1]]"]
3907
- });
3908
- var identity = VmLib(
3909
- (...size2) => {
3910
- let s2 = getNumbers(size2);
3911
- if (s2.length === 0) return [];
3912
- if (s2.length > 2) throwError("Invalid matrix size", []);
3913
- if (s2.length === 1) s2 = [s2[0], s2[0]];
3914
- const m = arrayLen(s2[0]);
3915
- const n = arrayLen(s2[1]);
3916
- const ret = [];
3917
- for (let i = 0; i < m; i++) {
3918
- const row = [];
3919
- ret[i] = row;
3920
- row.length = n;
3921
- row.fill(0);
3922
- if (i < n) row[i] = 1;
3923
- }
3924
- return ret;
3886
+
3887
+ // src/vm/lib/mod/matrix/size.ts
3888
+ var size2 = VmLib(
3889
+ (matrix) => {
3890
+ required("matrix", matrix, []);
3891
+ return size(matrix);
3925
3892
  },
3926
3893
  {
3927
- summary: "创建一个单位矩阵",
3928
- params: { "..size": { type: "[number] | [number, number]", description: "矩阵的维度" } },
3929
- returns: { type: "number[][]" },
3930
- examples: ["matrix.identity(3) // [[1, 0, 0], [0, 1, 0], [0, 0, 1]]"]
3894
+ summary: "获取矩阵尺寸",
3895
+ params: { matrix: { type: "any[][]", description: "要获取尺寸的矩阵" } },
3896
+ returns: { type: "[number, number]" },
3897
+ examples: ["matrix.size([[1, 2], [3, 4]]) // [2, 2]"]
3931
3898
  }
3932
3899
  );
3933
- var diagonal = VmLib(
3934
- (x, k = 0) => {
3935
- expectArray("x", x, []);
3936
- const fk = expectInteger("k", k);
3937
- if (x.every((e2) => isArray(e2))) {
3938
- const diag = [];
3939
- for (let i = 0; i < x.length; i++) {
3940
- const row = x[i];
3941
- const r = i + fk;
3942
- if (r < 0) continue;
3943
- if (!row || r >= row.length) break;
3944
- diag.push(row[r] ?? null);
3945
- }
3946
- return diag;
3947
- }
3948
- const l = x.length;
3949
- const m = arrayLen(fk < 0 ? l - fk : l);
3950
- const n = arrayLen(fk > 0 ? l + fk : l);
3951
- const result = [];
3952
- for (let i = 0; i < m; i++) {
3953
- const row = [];
3954
- result[i] = row;
3955
- row.length = n;
3956
- row.fill(0);
3957
- for (let j = 0; j < n; j++) {
3958
- if (i + fk === j) {
3959
- row[j] = x[fk >= 0 ? i : j] ?? null;
3960
- }
3900
+
3901
+ // src/vm/lib/mod/matrix/transpose.ts
3902
+ var transpose = VmLib(
3903
+ (matrix) => {
3904
+ required("matrix", matrix, []);
3905
+ const [numRows, numCols] = size(matrix);
3906
+ if (numRows == null || numCols == null) return matrix;
3907
+ const m = matrix;
3908
+ const transposed = [];
3909
+ for (let j = 0; j < numCols; j++) {
3910
+ Cp();
3911
+ const tj = [];
3912
+ for (let i = 0; i < numRows; i++) {
3913
+ const row = m[i] ?? null;
3914
+ const item = row?.[j] ?? null;
3915
+ tj[i] = item;
3961
3916
  }
3917
+ transposed[j] = tj;
3962
3918
  }
3963
- return result;
3919
+ return transposed;
3964
3920
  },
3965
3921
  {
3966
- summary: "创建一个对角矩阵或获取矩阵的对角线",
3967
- params: {
3968
- x: { type: "number[] | number[][]", description: "对角线元素或要获取对角线的矩阵" },
3969
- k: { type: "number", description: "对角线偏移量,默认为 0" }
3970
- },
3971
- returns: { type: "number[][] | number[]" },
3972
- examples: [
3973
- "matrix.diagonal([1, 2, 3]) // [[1, 0, 0], [0, 2, 0], [0, 0, 3]]",
3974
- "matrix.diagonal([[1, 2], [3, 4]]) // [1, 4]"
3975
- ]
3922
+ summary: "转置矩阵",
3923
+ params: { matrix: { type: "any[][]", description: "要转置的矩阵" } },
3924
+ returns: { type: "any[][]" },
3925
+ examples: ["matrix.transpose([[1, 2], [3, 4]]) // [[1, 3], [2, 4]]"]
3976
3926
  }
3977
3927
  );
3978
3928
 
@@ -4029,7 +3979,6 @@ for (const [name, value] of entries(mod_exports)) {
4029
3979
  var lib = Object.freeze(Object.assign(create(null), global_exports, mod_exports));
4030
3980
 
4031
3981
  export {
4032
- convert_exports,
4033
3982
  VmExtern,
4034
3983
  wrapToVmValue,
4035
3984
  unwrapFromVmValue,
@@ -4047,4 +3996,4 @@ export {
4047
3996
  emitScript,
4048
3997
  lib
4049
3998
  };
4050
- //# sourceMappingURL=chunk-VNQQF2W7.js.map
3999
+ //# sourceMappingURL=chunk-BPFOJ4Q6.js.map