@yabgu_gm/tensionscript 0.11.0 → 0.11.1

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.
@@ -2045,7 +2045,8 @@ declare module "types:tensionscript/src/diagnosticMessages.generated" {
2045
2045
  _abi_align_0_the_alignment_must_be_a_power_of_two = 6407,
2046
2046
  _abi_align_0_is_less_than_the_field_type_s_natural_alignment_1_asking_for_less_is_a_lie_so_it_is_refused_rather_than_silently_ignored = 6408,
2047
2047
  _abi_align_0_is_too_large_the_maximum_is_1 = 6409,
2048
- Alignment_is_a_property_of_the_field_not_its_type_Place_abi_align_N_on_the_field_declaration = 6410
2048
+ Alignment_is_a_property_of_the_field_not_its_type_Place_abi_align_N_on_the_field_declaration = 6410,
2049
+ A_view_parameter_unmanaged_0_over_an_inline_type_cannot_appear_in_a_host_visible_signature_an_external_or_exported_parameter_is_supplied_by_the_host_and_a_view_is_an_address_this_compiler_did_not_materialise = 6411
2049
2050
  }
2050
2051
  /** Translates a diagnostic code to its respective string. */
2051
2052
  export function diagnosticCodeToString(code: DiagnosticCode): string;
@@ -2957,6 +2958,60 @@ declare module "types:tensionscript/src/resolver" {
2957
2958
  currentElementExpression: Expression | null;
2958
2959
  /** Whether a new override has been discovered. */
2959
2960
  discoveredOverride: boolean;
2961
+ /**
2962
+ * Whether a use-site `@unmanaged` over an `@inline` declaration is being
2963
+ * resolved as the **type argument of `changetype`**.
2964
+ *
2965
+ * That position is the one where the operand can supply the address the value
2966
+ * itself does not have, so the refusal's premise does not hold there (see
2967
+ * `checkMemoryModelOverride`). Every other position — a parameter, a local, a
2968
+ * field, a return type — still refuses with `TS6395`, which is what keeps the
2969
+ * function-parameter form (`Phase 2`) out of this change.
2970
+ *
2971
+ * The compiler sets this around the one `resolveTypeArguments` call it makes
2972
+ * for a `changetype` builtin (`Compiler#compileCallExpressionBuiltin`), and
2973
+ * resets it immediately: the flag is a scope, not a mode.
2974
+ */
2975
+ allowInlineView: boolean;
2976
+ /**
2977
+ * Whether a use-site `@unmanaged` over an `@inline` declaration is being
2978
+ * resolved in a **parameter position** — the cell where the caller supplies
2979
+ * the address, so `f(a: @unmanaged T)` with an inline `T` is a view parameter.
2980
+ *
2981
+ * Distinct from {@link allowInlineView} (Phase 1, `changetype`'s type
2982
+ * argument, where the operand supplies the address at the point of use).
2983
+ *
2984
+ * **Saved and restored, never blindly cleared.** Resolving one parameter's
2985
+ * type can resolve another function (a default value's call, a nested
2986
+ * signature), and a nested window that reset the flag to `false` on the way
2987
+ * out closed the outer window — measured: the owner's pattern reported TS6395
2988
+ * with both flags reading `false` while inside `resolveFunction`'s own loop.
2989
+ */
2990
+ allowInlineViewParam: boolean;
2991
+ /**
2992
+ * Call expressions that are **views of caller bytes**: an inline-typed
2993
+ * `changetype<@unmanaged T>(ptr)`.
2994
+ *
2995
+ * Marked here, at resolution, because the compiler asks this question while
2996
+ * compiling the *field access* — which happens before the `changetype` it
2997
+ * wraps is ever compiled. Recording it at codegen time (the first attempt)
2998
+ * produced a field read that never saw the mark and compiled to
2999
+ * `unreachable`.
3000
+ *
3001
+ * Keyed on the AST node rather than on the type, because the type is the
3002
+ * declaration's (`T` is still an `@inline struct`) and the model is the
3003
+ * *use's*: there is one `Type` per class, shared by every use.
3004
+ */
3005
+ private viewCalls;
3006
+ /**
3007
+ * Records `node` as a view call. The resolver marks the ones it resolves;
3008
+ * `Compiler#compileCallExpressionBuiltin` marks the ones it resolves itself,
3009
+ * because a builtin's type arguments are resolved on the *codegen* path and
3010
+ * never pass through `maybeInferCall`.
3011
+ */
3012
+ markViewCall(node: Expression): void;
3013
+ /** Whether `node` is an inline-typed `changetype<@unmanaged T>(...)`. */
3014
+ isViewCall(node: Expression): boolean;
2960
3015
  /** Constructs the resolver for the specified program. */
2961
3016
  constructor(
2962
3017
  /** The program to construct a resolver for. */
@@ -2984,10 +3039,14 @@ declare module "types:tensionscript/src/resolver" {
2984
3039
  * - **`@managed` over an `@unmanaged` declaration** — the collector traces a
2985
3040
  * reference through a header the record does not have. No emitter can
2986
3041
  * invent the header, so a use cannot confer provenance. (`TS6394`.)
2987
- * - **`@unmanaged`/`@managed` over an `@inline` declaration** — a value is
2988
- * stored as one local per field and has **no address** at all, so there is
2989
- * nothing to lend as a pointer and nothing a header could sit in front of.
2990
- * (`TS6395`.)
3042
+ * - **`@managed` over an `@inline` declaration** — a value has neither a
3043
+ * header nor an address, at any position. (`TS6395`.)
3044
+ * - **`@unmanaged` over an `@inline` declaration**, *except* where the use
3045
+ * supplies an address: `changetype`'s type argument (the operand supplies
3046
+ * it) and a parameter (the caller supplies it). Those two windows are
3047
+ * `allowInlineView` and `allowInlineViewParam`, and they are the whole
3048
+ * difference between a view and a claim. Every other position — a return
3049
+ * type, a local, a field — still has nothing to lend. (`TS6395`.)
2991
3050
  *
2992
3051
  * Everything else is left to the emitters: `@unmanaged` over `@managed` is
2993
3052
  * the identity cell (10.0a), `@inline` over a pointer declaration is the
@@ -3625,6 +3684,14 @@ declare module "types:tensionscript/src/program" {
3625
3684
  function fromUnaryPostfixToken(token: Token): OperatorKind;
3626
3685
  }
3627
3686
  /** Represents an AssemblyScript program. */
3687
+ /** How many WASM slots a parameter binding consumed — see
3688
+ * `Program#bindSroaParameterLeaves`. A one-field wrapper because this compiler
3689
+ * reports the count and the caller advances past it; a bare `i32` return would
3690
+ * be the same information with no name at the call site. */
3691
+ export class BindResult {
3692
+ leafCount: number;
3693
+ constructor(leafCount: number);
3694
+ }
3628
3695
  export class Program extends DiagnosticEmitter {
3629
3696
  /** Compiler options. */
3630
3697
  options: Options;
@@ -4341,6 +4408,17 @@ declare module "types:tensionscript/src/program" {
4341
4408
  * therefore cannot alias.
4342
4409
  */
4343
4410
  fieldLocals: Map<string, Local> | null;
4411
+ /**
4412
+ * Whether this local is a **view parameter**: `a: @unmanaged T` where `T` is
4413
+ * an inline type.
4414
+ *
4415
+ * Its `type` is still the inline record, because that is what makes `a.field`
4416
+ * resolve — every use of `T` shares one `Type`. Its *storage* is the one `i32`
4417
+ * WASM parameter holding the caller's address, which is why a field read goes
4418
+ * through `load` at the field's offset rather than through `fieldLocals`
4419
+ * (there are none: a view has no per-field locals to copy into).
4420
+ */
4421
+ isViewParam: boolean;
4344
4422
  /** Constructs a new local variable. */
4345
4423
  constructor(
4346
4424
  /** Simple name. */
@@ -4452,6 +4530,20 @@ declare module "types:tensionscript/src/program" {
4452
4530
  nextInlineId: number;
4453
4531
  /** Counting id of anonymous inner functions. */
4454
4532
  nextAnonymousId: number;
4533
+ /**
4534
+ * Binds an `@inline struct` parameter's **leaves** to the WASM parameters that
4535
+ * carry them, building the `fieldLocals` tree a read path walks.
4536
+ *
4537
+ * `localIndex` is the index of the parameter's first WASM slot; the walk
4538
+ * consumes one slot per leaf in the same depth-first order
4539
+ * `Signature.leafTypesOf` declares and the caller pushes operands in. Returns
4540
+ * how many slots were consumed, so the caller advances past them.
4541
+ *
4542
+ * A nested field gets a placeholder `Local` (index `-1`) carrying its own map,
4543
+ * exactly as `fillSroaFieldLocals` builds one for a local — the tree shape is
4544
+ * one structure regardless of where the leaves' storage came from.
4545
+ */
4546
+ bindSroaParameterLeaves(type: Type, path: string, into: Map<string, Local>, localIndex: number, flow: Flow): BindResult;
4455
4547
  /** Constructs a new concrete function. */
4456
4548
  constructor(
4457
4549
  /** Name incl. type parameters, i.e. `foo<i32>`. */
@@ -5159,6 +5251,21 @@ declare module "types:tensionscript/src/types" {
5159
5251
  * all of them.
5160
5252
  */
5161
5253
  static wasmParamCountOf(type: Type): number;
5254
+ /**
5255
+ * Appends the **leaf** types of an `@inline struct`, in declaration order,
5256
+ * depth first.
5257
+ *
5258
+ * A leaf is a field that occupies one WASM local: a scalar or a reference. A
5259
+ * field whose type is itself an `@inline struct` is not a leaf — it is several
5260
+ * locals behind a map — so the walk recurses into it. This is the type-level
5261
+ * twin of the `fieldLocals` tree the compiler builds
5262
+ * (`Compiler#fillSroaFieldLocals`), and the two must agree in **order** as
5263
+ * well as count: the callee binds WASM parameter *k* to the *k*th leaf, and
5264
+ * the caller pushes operands in the same walk.
5265
+ */
5266
+ static leafTypesOf(type: Type, out: Type[]): void;
5267
+ /** The number of leaf locals an `@inline struct` occupies. */
5268
+ static leafCountOf(type: Type): number;
5162
5269
  /**
5163
5270
  * How many WASM operands **this signature** spends on source parameter
5164
5271
  * `sourceIndex`.
@@ -5175,6 +5282,18 @@ declare module "types:tensionscript/src/types" {
5175
5282
  * the same source parameter.
5176
5283
  */
5177
5284
  wasmParamSlotCountOf(sourceIndex: number): number;
5285
+ /**
5286
+ * Whether source parameter `sourceIndex` is a **view**: `@unmanaged` at the
5287
+ * declaration over a type that is an `@inline struct`.
5288
+ *
5289
+ * The type still says *value* — every use of `MyStruct` shares one `Type`, and
5290
+ * that is what makes a member lookup work on the parameter — while the model
5291
+ * says this use is an address. One `i32` slot, no field locals, a load at the
5292
+ * field's offset: the same crossing an `@unmanaged struct` parameter already
5293
+ * takes, with the model recorded at the declaration instead of on a pointer
5294
+ * type.
5295
+ */
5296
+ isViewParam(sourceIndex: number): boolean;
5178
5297
  /**
5179
5298
  * Whether source parameter `sourceIndex` **crosses by value** — one `i32`
5180
5299
  * address instead of one WASM operand per field.
@@ -5188,8 +5307,12 @@ declare module "types:tensionscript/src/types" {
5188
5307
  * address, and the override asks for a copy of what is there — the same
5189
5308
  * copy, read from memory instead of from SROA locals.
5190
5309
  *
5191
- * The reverse is not a thing: `@unmanaged`/`@managed` over an `@inline`
5192
- * declaration is refused (`TS6395`), because a value has no address to lend.
5310
+ * The reverse is partly a thing now. `@unmanaged` over an `@inline`
5311
+ * declaration is legal where the use supplies an address — a parameter (a
5312
+ * view parameter, `isViewParam`) or `changetype`'s type argument — and a view
5313
+ * parameter crosses as a pointer, so it is asked before this predicate. Every
5314
+ * other cell still refuses (`TS6395`), and `@managed` over `@inline` refuses
5315
+ * at every position: a value has no GC header and no address to lend.
5193
5316
  */
5194
5317
  crossesByValueParam(sourceIndex: number): boolean;
5195
5318
  /**
@@ -5212,9 +5335,17 @@ declare module "types:tensionscript/src/types" {
5212
5335
  get byValPointerParams(): boolean;
5213
5336
  /** Whether `type` is an `@inline struct`. */
5214
5337
  static isInlineStructRef(type: Type): boolean;
5215
- /** The number of fields an `@inline struct` has (0 for a record with none).
5216
- * Distinct from `wasmParamCountOf`, which cannot express "one field" and
5217
- * "one operand" differently. */
5338
+ /**
5339
+ * How many **WASM slots** an `@inline struct` spends — its leaf count.
5340
+ *
5341
+ * Leaf count, not direct-field count: a nested inline field is several locals,
5342
+ * so `Outer1 { a: u32; inner: Inner{x,y} }` is 3, not 2. A record with no
5343
+ * members is 0.
5344
+ *
5345
+ * Callers that made sense of "direct fields" are listed in the Phase C audit
5346
+ * (`docs`); the one place that genuinely needs the direct count is layout, and
5347
+ * layout reads `members` itself rather than asking this.
5348
+ */
5218
5349
  static fieldCountOf(type: Type): number;
5219
5350
  /**
5220
5351
  * Whether a call to this signature passes a hidden destination pointer.
@@ -5377,6 +5508,7 @@ declare module "types:tensionscript/src/builtins" {
5377
5508
  const select = "~lib/builtins/select";
5378
5509
  const unreachable = "~lib/builtins/unreachable";
5379
5510
  const changetype = "~lib/builtins/changetype";
5511
+ const copyInto = "~lib/builtins/copyInto";
5380
5512
  const assert = "~lib/builtins/assert";
5381
5513
  const call_indirect = "~lib/builtins/call_indirect";
5382
5514
  const unchecked = "~lib/builtins/unchecked";
@@ -9811,7 +9943,7 @@ declare module "types:tensionscript/src/compiler" {
9811
9943
  import { Range, DiagnosticEmitter } from "types:tensionscript/src/diagnostics";
9812
9944
  import { Module, MemorySegment, ExpressionRef, TypeRef, GlobalRef } from "types:tensionscript/src/module";
9813
9945
  import { Feature, Target, Runtime } from "types:tensionscript/src/common";
9814
- import { Program, Class, Element, DeclaredElement, Enum, Function, Global, Property, VariableLikeElement, File } from "types:tensionscript/src/program";
9946
+ import { Program, Class, Element, DeclaredElement, Enum, Function, Global, Local, Property, VariableLikeElement, File } from "types:tensionscript/src/program";
9815
9947
  import { Flow, ConditionKind } from "types:tensionscript/src/flow";
9816
9948
  import { Resolver } from "types:tensionscript/src/resolver";
9817
9949
  import { Node, FunctionTypeNode, Statement, Expression } from "types:tensionscript/src/ast";
@@ -10474,11 +10606,27 @@ declare module "types:tensionscript/src/compiler" {
10474
10606
  /**
10475
10607
  * The SROA local an expression names, or `null`.
10476
10608
  *
10477
- * Only a bare identifier can be one: `p.x.y` where `x` is itself an inline
10478
- * struct cannot happen this phase (a nested field is refused at declaration),
10479
- * so the receiver of a field access is either an SROA local or an ordinary
10480
- * expression that has an address.
10609
+ * The receiver is either an SROA local (base identifier) or a chain of field
10610
+ * accesses into one (`o.inner` in `o.inner.x`). The chain is walked from the
10611
+ * base outward, one hop per `fieldLocals` lookup: a nested inline field is
10612
+ * entered through the placeholder `Local` its creation installed
10613
+ * (`fillSroaFieldLocals`), so the walk and the tree are one structure rather
10614
+ * than two that could disagree.
10615
+ *
10616
+ * Returns the `Local` the final hop resolved to, or `null` when any step does
10617
+ * not hold — a non-local base, a field with no entry, or a leaf reached before
10618
+ * the chain ends. `null` is not an error here: the caller falls through to the
10619
+ * ordinary address paths, which refuse a value with no address.
10620
+ */
10621
+ /**
10622
+ * Pushes one operand per **leaf** of a `fieldLocals` tree, depth first.
10623
+ *
10624
+ * Shared by the call site (`expandSroaArgument`) so the operand order is the
10625
+ * one `Signature.leafTypesOf` declares and the binder indexes into — three
10626
+ * walks, one order. A nested field's entry is a placeholder (index `-1`)
10627
+ * carrying its own map, so the walk descends through it.
10481
10628
  */
10629
+ private pushSroaLeafOperands;
10482
10630
  private resolveSroaReceiver;
10483
10631
  /** Size of the static call-temp region, in bytes. 4 KB is 256 slots at the
10484
10632
  * 16-byte fixture record size. Overflow aborts (see `makeSretCallBlock`);
@@ -10568,6 +10716,15 @@ declare module "types:tensionscript/src/compiler" {
10568
10716
  /** `base + mark + extra`, freshly built. Callers must not share the node:
10569
10717
  * Binaryen's passes assume a single parent per expression. */
10570
10718
  private makeSretAddressPlus;
10719
+ /**
10720
+ * Stores a by-value argument's leaves into the static call-temp region.
10721
+ *
10722
+ * The same tree walk as `copyInto` (`emitSroaStores`) and `copySroaValue`:
10723
+ * leaves become stores at `tempAddress + field offset`, a nested field is
10724
+ * descended into. Keeping one recursion is what makes a nested value cross a
10725
+ * host boundary at the layout the C side expects.
10726
+ */
10727
+ emitTempArgumentLeaves(type: Type, fieldLocals: Map<string, Local>, base: number, markLocal: Local, baseOffset: number, stmts: ExpressionRef[]): void;
10571
10728
  /**
10572
10729
  * Materialises one `@inline struct` argument of an `@external` call on the
10573
10730
  * static call-temp stack and returns the address to pass.
@@ -10638,6 +10795,93 @@ declare module "types:tensionscript/src/compiler" {
10638
10795
  * Returns true when the declaration was handled here (the caller must not fall
10639
10796
  * through to the ordinary local path).
10640
10797
  */
10798
+ /**
10799
+ * Fills `into` with one entry per field of an `@inline struct` value.
10800
+ *
10801
+ * A **leaf** field (scalar, or a reference) gets one WASM local, named
10802
+ * `<path>$<field>` — a synthetic name keeps it out of user scope, so nothing
10803
+ * can look one up by accident.
10804
+ *
10805
+ * A field whose type is itself an `@inline struct` is **not a leaf**: it is
10806
+ * recursed into, and its entry is a placeholder `Local` (index `-1`) carrying
10807
+ * its own map. That makes `fieldLocals` a **tree** whose shape is the value's
10808
+ * nesting, which is what lets a read path walk `o.inner.x` a hop at a time
10809
+ * without a second representation. The placeholder is never `local.get`-ed:
10810
+ * the bare-read guard refuses a value read and the receiver walk descends to
10811
+ * a leaf before emitting anything.
10812
+ *
10813
+ * Returns `false` when a field was refused, having reported why. The refusal
10814
+ * is per **leaf**, so a nested value inherits exactly the rules the flat one
10815
+ * has — a `T[N]` field or a GC-reference field is refused at any depth.
10816
+ */
10817
+ private fillSroaFieldLocals;
10818
+ /**
10819
+ * Copies one SROA value's leaves into another's, following the tree.
10820
+ *
10821
+ * `from` and `to` are the two `fieldLocals` maps — the same shape
10822
+ * `fillSroaFieldLocals` builds, so a nested field is a placeholder on both
10823
+ * sides and the recursion descends through it rather than trying to move a
10824
+ * value that has no single representation.
10825
+ *
10826
+ * This is what makes `let q = p` and `q = p` **copies** rather than aliases:
10827
+ * one `local.set` per leaf, so a later write to `q` cannot be seen through
10828
+ * `p`. Both sides come from this compiler's own maps, so there is no aliasing
10829
+ * question to answer — the leaves are distinct locals by construction.
10830
+ */
10831
+ private copySroaValue;
10832
+ /**
10833
+ * Stores a `fieldLocals` tree's leaves into the hidden destination slot at
10834
+ * `destIndex`, one store per leaf.
10835
+ *
10836
+ * The third destination shape for the same recursion: `emitSroaStores` writes
10837
+ * to a compiled `usize`, `emitTempArgumentLeaves` to a call-temp address, and
10838
+ * this one to a **parameter** — the sret slot a `return p` fills. The address
10839
+ * is a fresh `local.get` per store, because Binaryen's passes assume one
10840
+ * parent per node.
10841
+ */
10842
+ emitSroaStoresToLocal(type: Type, fieldLocals: Map<string, Local>, destIndex: number, baseOffset: number, stmts: ExpressionRef[]): void;
10843
+ /**
10844
+ * Zeroes every **leaf** of an `@inline struct` in the destination slot.
10845
+ *
10846
+ * `return new P()` has no local to copy from — the value is all zeroes — but
10847
+ * the slot is stack space that a previous sret call may have filled, so the
10848
+ * bytes still have to be written. Walking the type rather than the direct
10849
+ * fields is what zeroes a nested field's leaves: measured before this,
10850
+ * `return new Outer1()` with `Inner{x,y}` stored only offset 0 and left
10851
+ * offsets 4 and 8 holding whatever was there.
10852
+ */
10853
+ emitSroaZerosToLocal(type: Type, destIndex: number, baseOffset: number, stmts: ExpressionRef[]): void;
10854
+ /**
10855
+ * Loads an `@inline struct`'s leaves out of the sret slot into a target's
10856
+ * field locals, one load per leaf.
10857
+ *
10858
+ * The mirror of {@link emitSroaStoresToLocal}: `let q = make()` reads the slot
10859
+ * back into the leaf locals a read path walks. A fresh slot address per load,
10860
+ * for the same one-parent-per-node reason.
10861
+ */
10862
+ emitSretLoadsInto(type: Type, fieldLocals: Map<string, Local>, base: number, markLocal: Local, baseOffset: number, stmts: ExpressionRef[]): void;
10863
+ /**
10864
+ * The `fieldLocals` tree behind an SROA-tracked expression, or `null`.
10865
+ *
10866
+ * The public face of {@link resolveSroaReceiver} for code outside this class —
10867
+ * today only the `copyInto` builtin, which needs the *tree* (to store its
10868
+ * leaves) rather than a single receiver.
10869
+ */
10870
+ sroaTreeOf(expression: Expression): Map<string, Local> | null;
10871
+ /**
10872
+ * Stores an inline value's leaves at `dest + offset`.
10873
+ *
10874
+ * The third leaf consumer, beside `copySroaValue` (local-to-local) and the
10875
+ * read path (local-to-stack): same tree, same recursion, an expression
10876
+ * reference instead of a destination map. The offsets come from the **type**
10877
+ * (`property.memoryOffset`, the layout the C side sees), so what lands in
10878
+ * memory is the wire layout, not a packing of the locals.
10879
+ *
10880
+ * Leaves whose local is missing are skipped rather than stored as `-1`: a
10881
+ * field refused at declaration was never part of the value (`isSroaFieldType`
10882
+ * has already reported why), and the caller has been told.
10883
+ */
10884
+ emitSroaStores(type: Type, fieldLocals: Map<string, Local>, dest: ExpressionRef, baseOffset: number, stmts: ExpressionRef[]): void;
10641
10885
  private compileSroaLocal;
10642
10886
  /**
10643
10887
  * The instance fields of an `@inline struct`, in declaration order, or `null`
package/dist/asc.js CHANGED
@@ -5,7 +5,7 @@
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
7
  var le=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var Ve=Object.prototype.hasOwnProperty;var cn=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var nn=(e,t)=>{for(var n in t)le(e,n,{get:t[n],enumerable:!0})},se=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Pe(t))!Ve.call(e,s)&&s!==n&&le(e,s,{get:()=>t[s],enumerable:!(r=Me(t,s))||r.enumerable});return e},Dn=(e,t,n)=>(se(e,t,"default"),n&&se(n,t,"default"));var ue={};nn(ue,{promises:()=>je});var je,fe=cn(()=>{"use strict";je={}});var ce={};nn(ce,{createRequire:()=>Ge});function Ge(){return function(t){throw new Error(`Cannot find module: '${t}'`)}}var de=cn(()=>{"use strict"});var kn={};nn(kn,{argv:()=>Ke,cwd:()=>In,exit:()=>qe,hrtime:()=>Ye,platform:()=>Xe,umask:()=>He});function In(){return"."}function He(){return 0}function qe(e=0){throw Error(`exit ${e}`)}function Ye(e){var t=We.call(xe),n=Math.floor(t*.001),r=Math.floor(t*1e6-n*1e9);return e&&(n-=e[0],r-=e[1],r<0&&(n--,r+=1e9)),[n,r]}var Xe,Ke,xe,We,On=cn(()=>{"use strict";Xe="linux";Ke=[];xe=globalThis.performance||{},We=xe.now||function(){return new Date().getTime()}});var Rn={};nn(Rn,{basename:()=>et,delimiter:()=>at,dirname:()=>nt,extname:()=>tt,format:()=>it,isAbsolute:()=>Ze,join:()=>Je,normalize:()=>he,parse:()=>rt,relative:()=>Qe,resolve:()=>dn,sep:()=>Ln,win32:()=>ot});function j(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function pe(e,t){for(var n="",r=0,s=-1,o=0,f,c=0;c<=e.length;++c){if(c<e.length)f=e.charCodeAt(c);else{if(f===47)break;f=47}if(f===47){if(!(s===c-1||o===1))if(s!==c-1&&o===2){if(n.length<2||r!==2||n.charCodeAt(n.length-1)!==46||n.charCodeAt(n.length-2)!==46){if(n.length>2){var p=n.lastIndexOf("/");if(p!==n.length-1){p===-1?(n="",r=0):(n=n.slice(0,p),r=n.length-1-n.lastIndexOf("/")),s=c,o=0;continue}}else if(n.length===2||n.length===1){n="",r=0,s=c,o=0;continue}}t&&(n.length>0?n+="/..":n="..",r=2)}else n.length>0?n+="/"+e.slice(s+1,c):n=e.slice(s+1,c),r=c-s-1;s=c,o=0}else f===46&&o!==-1?++o:o=-1}return n}function $e(e,t){var n=t.dir||t.root,r=t.base||(t.name||"")+(t.ext||"");return n?n===t.root?n+r:n+e+r:r}function dn(){for(var e="",t=!1,n,r=arguments.length-1;r>=-1&&!t;r--){var s;r>=0?s=arguments[r]:(n===void 0&&(n=In()),s=n),j(s),s.length!==0&&(e=s+"/"+e,t=s.charCodeAt(0)===47)}return e=pe(e,!t),t?e.length>0?"/"+e:"/":e.length>0?e:"."}function he(e){if(j(e),e.length===0)return".";var t=e.charCodeAt(0)===47,n=e.charCodeAt(e.length-1)===47;return e=pe(e,!t),e.length===0&&!t&&(e="."),e.length>0&&n&&(e+="/"),t?"/"+e:e}function Ze(e){return j(e),e.length>0&&e.charCodeAt(0)===47}function Je(){if(arguments.length===0)return".";for(var e,t=0;t<arguments.length;++t){var n=arguments[t];j(n),n.length>0&&(e===void 0?e=n:e+="/"+n)}return e===void 0?".":he(e)}function Qe(e,t){if(j(e),j(t),e===t||(e=dn(e),t=dn(t),e===t))return"";if(e===".")return t;for(var n=1;n<e.length&&e.charCodeAt(n)===47;++n);for(var r=e.length,s=r-n,o=1;o<t.length&&t.charCodeAt(o)===47;++o);for(var f=t.length,c=f-o,p=s<c?s:c,b=-1,d=0;d<=p;++d){if(d===p){if(c>p){if(t.charCodeAt(o+d)===47)return t.slice(o+d+1);if(d===0)return t.slice(o+d)}else s>p&&(e.charCodeAt(n+d)===47?b=d:d===0&&(b=0));break}var g=e.charCodeAt(n+d),y=t.charCodeAt(o+d);if(g!==y)break;g===47&&(b=d)}var m="";for(d=n+b+1;d<=r;++d)(d===r||e.charCodeAt(d)===47)&&(m.length===0?m+="..":m+="/..");return m.length>0?m+t.slice(o+b):(o+=b,t.charCodeAt(o)===47&&++o,t.slice(o))}function nt(e){if(j(e),e.length===0)return".";for(var t=e.charCodeAt(0),n=t===47,r=-1,s=!0,o=e.length-1;o>=1;--o)if(t=e.charCodeAt(o),t===47){if(!s){r=o;break}}else s=!1;return r===-1?n?"/":".":n&&r===1?"//":e.slice(0,r)}function et(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');j(e);var n=0,r=-1,s=!0,o;if(t!==void 0&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return"";var f=t.length-1,c=-1;for(o=e.length-1;o>=0;--o){var p=e.charCodeAt(o);if(p===47){if(!s){n=o+1;break}}else c===-1&&(s=!1,c=o+1),f>=0&&(p===t.charCodeAt(f)?--f===-1&&(r=o):(f=-1,r=c))}return n===r?r=c:r===-1&&(r=e.length),e.slice(n,r)}else{for(o=e.length-1;o>=0;--o)if(e.charCodeAt(o)===47){if(!s){n=o+1;break}}else r===-1&&(s=!1,r=o+1);return r===-1?"":e.slice(n,r)}}function tt(e){j(e);for(var t=-1,n=0,r=-1,s=!0,o=0,f=e.length-1;f>=0;--f){var c=e.charCodeAt(f);if(c===47){if(!s){n=f+1;break}continue}r===-1&&(s=!1,r=f+1),c===46?t===-1?t=f:o!==1&&(o=1):t!==-1&&(o=-1)}return t===-1||r===-1||o===0||o===1&&t===r-1&&t===n+1?"":e.slice(t,r)}function it(e){if(e===null||typeof e!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return $e("/",e)}function rt(e){j(e);var t={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return t;var n=e.charCodeAt(0),r=n===47,s;r?(t.root="/",s=1):s=0;for(var o=-1,f=0,c=-1,p=!0,b=e.length-1,d=0;b>=s;--b){if(n=e.charCodeAt(b),n===47){if(!p){f=b+1;break}continue}c===-1&&(p=!1,c=b+1),n===46?o===-1?o=b:d!==1&&(d=1):o!==-1&&(d=-1)}return o===-1||c===-1||d===0||d===1&&o===c-1&&o===f+1?c!==-1&&(f===0&&r?t.base=t.name=e.slice(1,c):t.base=t.name=e.slice(f,c)):(f===0&&r?(t.name=e.slice(1,o),t.base=e.slice(1,c)):(t.name=e.slice(f,o),t.base=e.slice(f,c)),t.ext=e.slice(o,c)),f>0?t.dir=e.slice(0,f-1):r&&(t.dir="/"),t}var Ln,at,ot,Nn=cn(()=>{"use strict";On();Ln="/",at=":",ot=null});var ge={};nn(ge,{pathToFileURL:()=>lt});function st(e){return e.replace(/%/g,"%25").replace(/\\/g,"%5C").replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/\t/g,"%09")}function lt(e){let t=dn(e);e.charCodeAt(e.length-1)===47&&t[t.length-1]!==Ln&&(t+="/");let n=new URL("file://");return n.pathname=st(t),n}var me=cn(()=>{"use strict";Nn()});var Wn={};nn(Wn,{Stats:()=>Cn,checkDiagnostics:()=>Tn,compileString:()=>Dt,configToArguments:()=>qn,createMemoryStream:()=>Hn,default:()=>Wn,defaultOptimizeLevel:()=>we,defaultShrinkLevel:()=>Se,definitionFiles:()=>St,libraryFiles:()=>G,libraryPrefix:()=>L,main:()=>De,options:()=>wt,tscOptions:()=>It,version:()=>Xn});var ut=Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]",X,sn,v,P,xn;ut?(X=await import("fs"),sn=await import("module"),v=await import("path"),P=globalThis.process,xn=await import("url")):(X=await Promise.resolve().then(()=>(fe(),ue)),sn=await Promise.resolve().then(()=>(de(),ce)),v=await Promise.resolve().then(()=>(Nn(),Rn)),P=await Promise.resolve().then(()=>(On(),kn)),xn=await Promise.resolve().then(()=>(me(),ge)));var En=typeof process<"u"&&process||{},ft=En.env&&"CI"in En.env,ct="\x1B[90m",dt="\x1B[91m",xt="\x1B[92m",pt="\x1B[93m",ht="\x1B[94m",gt="\x1B[95m",mt="\x1B[96m",bt="\x1B[97m",W="\x1B[0m",en=class{constructor(t){this.stream=t,this.enabled=!!(this.stream&&this.stream.isTTY||ft)}gray(t){return this.enabled?ct+t+W:t}red(t){return this.enabled?dt+t+W:t}green(t){return this.enabled?xt+t+W:t}yellow(t){return this.enabled?pt+t+W:t}blue(t){return this.enabled?ht+t+W:t}magenta(t){return this.enabled?gt+t+W:t}cyan(t){return this.enabled?mt+t+W:t}white(t){return this.enabled?bt+t+W:t}},An=new en(En.stdout),Lt=new en(En.stderr);function yt(e){for(var t=0,n=0,r=e.length;n<r;++n){let s=e.charCodeAt(n);s<128?t+=1:s<2048?t+=2:(s&64512)===55296&&n+1<r&&(e.charCodeAt(n+1)&64512)===56320?(++n,t+=4):t+=3}return t}function Ft(e,t,n){var r=n-t;if(r<1)return"";for(var s=null,o=[],f=0,c;t<n;)c=e[t++],c<128?o[f++]=c:c>191&&c<224?o[f++]=(c&31)<<6|e[t++]&63:c>239&&c<365?(c=((c&7)<<18|(e[t++]&63)<<12|(e[t++]&63)<<6|e[t++]&63)-65536,o[f++]=55296+(c>>10),o[f++]=56320+(c&1023)):o[f++]=(c&15)<<12|(e[t++]&63)<<6|e[t++]&63,f>=8192&&((s||(s=[])).push(String.fromCharCode(...o)),f=0);return s?(f&&s.push(String.fromCharCode(...o.slice(0,f))),s.join("")):String.fromCharCode(...o.slice(0,f))}function vt(e,t,n){for(var r=n,s=0,o=e.length;s<o;++s){let f=e.charCodeAt(s),c;f<128?t[n++]=f:f<2048?(t[n++]=f>>6|192,t[n++]=f&63|128):(f&64512)===55296&&s+1<o&&((c=e.charCodeAt(s+1))&64512)===56320?(f=65536+((f&1023)<<10)+(c&1023),++s,t[n++]=f>>18|240,t[n++]=f>>12&63|128,t[n++]=f>>6&63|128,t[n++]=f&63|128):(t[n++]=f>>12|224,t[n++]=f>>6&63|128,t[n++]=f&63|128)}return n-r}var _n={length:yt,read:Ft,write:vt};var be=sn.createRequire(import.meta.url);function Fe(e,t,n=!0){var r={},s=[],o=[],f=[],c={};Object.keys(t).forEach(d=>{if(!d.startsWith(" ")){var g=t[d];g.alias!=null&&(typeof g.alias=="string"?c[g.alias]=d:Array.isArray(g.alias)&&g.alias.forEach(y=>c[y]=d)),n&&g.default!=null&&(r[d]=g.default)}});for(var p=0,b=(e=e.slice()).length;p<b;++p){let d=e[p];if(d=="--"){++p;break}let g=/^(?:(-\w)(?:=(.*))?|(--\w{2,})(?:=(.*))?)$/.exec(d),y,m;if(g)t[d]?y=t[m=d]:g[1]!=null?(y=t[m=c[g[1].substring(1)]],y&&g[2]!=null&&(e[p--]=g[2])):g[3]!=null&&(y=t[m=g[3].substring(2)],y&&g[4]!=null&&(e[p--]=g[4]));else if(d.charCodeAt(0)==45)y=t[m=d];else{o.push(d);continue}if(y)if(y.value)Object.keys(y.value).forEach(a=>r[a]=y.value[a]);else if(y.type==null||y.type==="b")r[m]=!0;else if(p+1<e.length&&e[p+1].charCodeAt(0)!=45)switch(y.type){case"i":r[m]=parseInt(e[++p],10);break;case"I":r[m]=(r[m]||[]).concat(parseInt(e[++p],10));break;case"f":r[m]=parseFloat(e[++p]);break;case"F":r[m]=(r[m]||[]).concat(parseFloat(e[++p]));break;case"s":r[m]=String(e[++p]);break;case"S":r[m]=(r[m]||[]).concat(e[++p].split(","));break;default:s.push(d),--p}else switch(y.type){case"i":case"f":r[m]=y.default||0;break;case"s":r[m]=y.default||"";break;case"I":case"F":case"S":r[m]=y.default||[];break;default:s.push(d)}else s.push(d)}for(;p<b;)f.push(e[p++]);return n&&Mn(t,r),{options:r,unknown:s,arguments:o,trailing:f}}function ve(e,t){t||(t={});var n=t.indent||2,r=t.padding||24,s=t.eol||`
8
- `,o={},f=[];Object.keys(e).forEach(b=>{var d=e[b];if(d.description!=null){for(var g="";g.length<n;)g+=" ";for(g+="--"+b,d.alias&&(g+=", -"+d.alias);g.length<r;)g+=" ";var y;!t.noCategories&&d.category?(y=o[d.category])||(o[d.category]=y=[]):y=f,Array.isArray(d.description)?y.push(g+d.description[0]+d.description.slice(1).map(m=>{for(let a=0;a<r;++a)m=" "+m;return s+m}).join("")):y.push(g+d.description)}});var c=[],p=!1;return Object.keys(o).forEach(b=>{p=!0,c.push(s+" "+An.gray(b)+s),c.push(o[b].join(s))}),p&&f.length&&c.push(s+" "+An.gray("Other")+s),c.push(f.join(s)),c.join(s)}function ye(e,t){if(e!=null)switch(t){case void 0:case"b":return!!e;case"i":return Math.trunc(e)||0;case"f":return Number(e)||0;case"s":return e===!0?"":e===!1?null:String(e);case"I":return Array.isArray(e)||(e=[e]),e.map(n=>Math.trunc(n)||0);case"F":return Array.isArray(e)||(e=[e]),e.map(n=>Number(n)||0);case"S":return Array.isArray(e)||(e=[e]),e.map(String)}}function Un(e,t,n,r){let s={};for(let[o,{type:f,mutuallyExclusive:c,isPath:p,useNodeResolution:b,cliOnly:d}]of Object.entries(e)){let g=ye(t[o],f),y=ye(n[o],f);if(g==null){if(y!=null){if(d)continue;if(Array.isArray(y)){let m;p&&(y=y.map(a=>tn(a,r,b))),c!=null&&(m=t[c])?s[o]=y.filter(a=>!m.includes(a)):s[o]=y.slice()}else p&&(y=tn(y,r,b)),s[o]=y}}else if(y==null)Array.isArray(g)?s[o]=g.slice():s[o]=g;else if(Array.isArray(g)){if(d){s[o]=g.slice();continue}let m;p&&(y=y.map(a=>tn(a,r,b))),c!=null&&(m=t[c])?s[o]=[...g,...y.filter(a=>!g.includes(a)&&!m.includes(a))]:s[o]=[...g,...y.filter(a=>!g.includes(a))]}else s[o]=g}return s}function Et(e){let t=v.parse(e);return t.root||(t.root="./"),v.format(t)}function tn(e,t,n=!1){return v.isAbsolute(e)?e:n&&!e.startsWith(".")&&be.resolve?be.resolve(e,{paths:[t]}):Et(v.join(t,e))}function Mn(e,t){for(let[n,{default:r}]of Object.entries(e))t[n]==null&&r!=null&&(t[n]=r)}var Ee="0.11.0",Y={version:{category:"General",description:"Prints just the compiler's version and exits.",type:"b",alias:"v"},help:{category:"General",description:"Prints this message and exits.",type:"b",alias:"h"},config:{category:"General",description:"Configuration file to apply. CLI arguments take precedence.",type:"s",cliOnly:!0},target:{category:"General",description:"Configuration file target to use. Defaults to 'release'.",type:"s",cliOnly:!0},optimize:{category:"Optimization",description:["Optimizes the module. Typical shorthands are:",""," Default optimizations -O"," Make a release build -O --noAssert"," Make a debug build --debug"," Optimize for speed -Ospeed"," Optimize for size -Osize",""],type:"b",alias:"O"},optimizeLevel:{category:"Optimization",description:"How much to focus on optimizing code. [0-3]",type:"i"},shrinkLevel:{category:"Optimization",description:"How much to focus on shrinking code size. [0-2, s=1, z=2]",type:"i"},converge:{category:"Optimization",description:"Re-optimizes until no further improvements can be made.",type:"b",default:!1},noAssert:{category:"Optimization",description:"Replaces assertions with just their value without trapping.",type:"b",default:!1},outFile:{category:"Output",description:"Specifies the WebAssembly output file (.wasm).",type:"s",alias:"o",isPath:!0},textFile:{category:"Output",description:"Specifies the WebAssembly text output file (.wat).",type:"s",alias:"t",isPath:!0},bindings:{category:"Output",description:["Specifies the bindings to generate (.js + .d.ts).",""," esm JavaScript bindings & typings for ESM integration."," raw Like esm, but exports just the instantiate function."," Useful where modules are meant to be instantiated"," multiple times or non-ESM imports must be provided."],type:"S",alias:"b"},sourceMap:{category:"Debugging",description:["Enables source map generation. Optionally takes the URL","used to reference the source map from the binary file."],type:"s"},uncheckedBehavior:{category:"Debugging",description:["Changes the behavior of unchecked() expressions.","Using this option can potentially cause breakage.",""," default The default behavior: unchecked operations are"," only used inside of unchecked()."," never Unchecked operations are never used, even when"," inside of unchecked()."," always Unchecked operations are always used if possible,"," whether or not unchecked() is used."],type:"s",default:"default"},debug:{category:"Debugging",description:"Enables debug information in emitted binaries.",type:"b",default:!1},importMemory:{category:"Features",description:"Imports the memory from 'env.memory'.",type:"b",default:!1},noExportMemory:{category:"Features",description:"Does not export the memory as 'memory'.",type:"b",default:!1},initialMemory:{category:"Features",description:"Sets the initial memory size in pages.",type:"i",default:0},maximumMemory:{category:"Features",description:"Sets the maximum memory size in pages.",type:"i",default:0},sharedMemory:{category:"Features",description:"Declare memory as shared. Requires maximumMemory.",type:"b",default:!1},zeroFilledMemory:{category:"Features",description:"Assume imported memory is zeroed. Requires importMemory.",type:"b",default:!1},importTable:{category:"Features",description:"Imports the function table from 'env.table'.",type:"b",default:!1},exportTable:{category:"Features",description:"Exports the function table as 'table'.",type:"b",default:!1},exportStart:{category:"Features",description:["Exports the start function using the specified name instead","of calling it implicitly. Useful to obtain the exported memory","before executing any code accessing it."],type:"s"},runtime:{category:"Features",description:["Specifies the runtime variant to include in the program.",""," incremental TLSF + incremental GC (default)"," minimal TLSF + lightweight GC invoked externally"," stub Minimal runtime stub (never frees)"," ... Path to a custom runtime implementation",""],type:"s",default:"incremental"},exportRuntime:{category:"Features",description:["Always exports the runtime helpers (__new, __collect, __pin etc.).","Automatically determined when generation of --bindings is enabled."],type:"b",default:!1},stackSize:{category:"Features",description:["Overrides the stack size. Only relevant for incremental GC","or when using a custom runtime that requires stack space.","Defaults to 0 without and to 32768 with incremental GC."],default:0,type:"i"},enable:{category:"Features",description:["Enables WebAssembly features being disabled by default.",""," threads Threading and atomic operations."," simd SIMD types and operations."," reference-types Reference types and operations."," gc Garbage collection (WIP)."," stringref String reference types."," relaxed-simd Relaxed SIMD operations.",""],TODO_doesNothingYet:[" exception-handling Exception handling."," tail-calls Tail call operations."," multi-value Multi value types."," memory64 Memory64 operations."," extended-const Extended const expressions."],type:"S",mutuallyExclusive:"disable"},disable:{category:"Features",description:["Disables WebAssembly features being enabled by default.",""," mutable-globals Mutable global imports and exports."," sign-extension Sign-extension operations"," nontrapping-f2i Non-trapping float to integer ops."," bulk-memory Bulk memory operations.",""],type:"S",mutuallyExclusive:"enable"},use:{category:"Features",description:["Aliases a global object under another name, e.g., to switch","the default 'Math' implementation used: --use Math=JSMath","Can also be used to introduce an integer constant."],type:"S",alias:"u"},lowMemoryLimit:{category:"Features",description:"Enforces very low (<64k) memory constraints.",default:0,type:"i"},memoryBase:{category:"Linking",description:"Sets the start offset of emitted memory segments.",type:"i",default:0},tableBase:{category:"Linking",description:"Sets the start offset of emitted table elements.",type:"i",default:0},transform:{category:"API",description:"Specifies the path to a custom transform to load.",type:"S",isPath:!0,useNodeResolution:!0},trapMode:{category:"Binaryen",description:["Sets the trap mode to use.",""," allow Allow trapping operations. This is the default."," clamp Replace trapping operations with clamping semantics."," js Replace trapping operations with JS semantics.",""],type:"s",default:"allow"},runPasses:{category:"Binaryen",description:["Specifies additional Binaryen passes to run after other","optimizations, if any. See: Binaryen/src/passes/pass.cpp"],type:"s"},noValidate:{category:"Binaryen",description:"Skips validating the module using Binaryen.",type:"b",default:!1},baseDir:{description:"Specifies the base directory of input and output files.",type:"s",default:"."},noColors:{description:"Disables terminal colors.",type:"b",default:!1},noUnsafe:{description:["Disallows the use of unsafe features in user code.","Does not affect library files and external modules."],type:"b",default:!1},disableWarning:{description:["Disables warnings matching the given diagnostic code.","If no diagnostic code is given, all warnings are disabled."],type:"I"},noEmit:{description:"Performs compilation as usual but does not emit code.",type:"b",default:!1},showConfig:{description:"Print computed compiler options and exit.",type:"b",default:!1},stats:{description:"Prints statistics on I/O and compile times.",type:"b",default:!1},pedantic:{description:"Make yourself sad for no good reason.",type:"b",default:!1},lib:{description:["Adds one or multiple paths to custom library components and","uses exports of all top-level files at this path as globals."],type:"S",isPath:!0},path:{description:["Adds one or multiple paths to package resolution, similar","to node_modules. Prefers an 'ascMain' entry in a package's","package.json and falls back to an inner 'assembly/' folder."],type:"S",isPath:!0},wasm:{description:"Uses the specified Wasm binary of the compiler.",type:"s"}," ...":{description:"Specifies node.js options (CLI only). See: node --help"},"-Os":{value:{optimizeLevel:0,shrinkLevel:1}},"-Oz":{value:{optimizeLevel:0,shrinkLevel:2}},"-O0":{value:{optimizeLevel:0,shrinkLevel:0}},"-O1":{value:{optimizeLevel:1,shrinkLevel:0}},"-O2":{value:{optimizeLevel:2,shrinkLevel:0}},"-O3":{value:{optimizeLevel:3,shrinkLevel:0}},"-O0s":{value:{optimizeLevel:0,shrinkLevel:1}},"-O1s":{value:{optimizeLevel:1,shrinkLevel:1}},"-O2s":{value:{optimizeLevel:2,shrinkLevel:1}},"-O3s":{value:{optimizeLevel:3,shrinkLevel:1}},"-O0z":{value:{optimizeLevel:0,shrinkLevel:2}},"-O1z":{value:{optimizeLevel:1,shrinkLevel:2}},"-O2z":{value:{optimizeLevel:2,shrinkLevel:2}},"-O3z":{value:{optimizeLevel:3,shrinkLevel:2}},"-Ospeed":{value:{optimizeLevel:3,shrinkLevel:0}},"-Osize":{value:{optimizeLevel:0,shrinkLevel:2,converge:!0}},"--measure":{value:{stats:!0}}},Ae="~lib/",_e={array:`/// <reference path="./rt/index.d.ts" />
8
+ `,o={},f=[];Object.keys(e).forEach(b=>{var d=e[b];if(d.description!=null){for(var g="";g.length<n;)g+=" ";for(g+="--"+b,d.alias&&(g+=", -"+d.alias);g.length<r;)g+=" ";var y;!t.noCategories&&d.category?(y=o[d.category])||(o[d.category]=y=[]):y=f,Array.isArray(d.description)?y.push(g+d.description[0]+d.description.slice(1).map(m=>{for(let a=0;a<r;++a)m=" "+m;return s+m}).join("")):y.push(g+d.description)}});var c=[],p=!1;return Object.keys(o).forEach(b=>{p=!0,c.push(s+" "+An.gray(b)+s),c.push(o[b].join(s))}),p&&f.length&&c.push(s+" "+An.gray("Other")+s),c.push(f.join(s)),c.join(s)}function ye(e,t){if(e!=null)switch(t){case void 0:case"b":return!!e;case"i":return Math.trunc(e)||0;case"f":return Number(e)||0;case"s":return e===!0?"":e===!1?null:String(e);case"I":return Array.isArray(e)||(e=[e]),e.map(n=>Math.trunc(n)||0);case"F":return Array.isArray(e)||(e=[e]),e.map(n=>Number(n)||0);case"S":return Array.isArray(e)||(e=[e]),e.map(String)}}function Un(e,t,n,r){let s={};for(let[o,{type:f,mutuallyExclusive:c,isPath:p,useNodeResolution:b,cliOnly:d}]of Object.entries(e)){let g=ye(t[o],f),y=ye(n[o],f);if(g==null){if(y!=null){if(d)continue;if(Array.isArray(y)){let m;p&&(y=y.map(a=>tn(a,r,b))),c!=null&&(m=t[c])?s[o]=y.filter(a=>!m.includes(a)):s[o]=y.slice()}else p&&(y=tn(y,r,b)),s[o]=y}}else if(y==null)Array.isArray(g)?s[o]=g.slice():s[o]=g;else if(Array.isArray(g)){if(d){s[o]=g.slice();continue}let m;p&&(y=y.map(a=>tn(a,r,b))),c!=null&&(m=t[c])?s[o]=[...g,...y.filter(a=>!g.includes(a)&&!m.includes(a))]:s[o]=[...g,...y.filter(a=>!g.includes(a))]}else s[o]=g}return s}function Et(e){let t=v.parse(e);return t.root||(t.root="./"),v.format(t)}function tn(e,t,n=!1){return v.isAbsolute(e)?e:n&&!e.startsWith(".")&&be.resolve?be.resolve(e,{paths:[t]}):Et(v.join(t,e))}function Mn(e,t){for(let[n,{default:r}]of Object.entries(e))t[n]==null&&r!=null&&(t[n]=r)}var Ee="0.11.1",Y={version:{category:"General",description:"Prints just the compiler's version and exits.",type:"b",alias:"v"},help:{category:"General",description:"Prints this message and exits.",type:"b",alias:"h"},config:{category:"General",description:"Configuration file to apply. CLI arguments take precedence.",type:"s",cliOnly:!0},target:{category:"General",description:"Configuration file target to use. Defaults to 'release'.",type:"s",cliOnly:!0},optimize:{category:"Optimization",description:["Optimizes the module. Typical shorthands are:",""," Default optimizations -O"," Make a release build -O --noAssert"," Make a debug build --debug"," Optimize for speed -Ospeed"," Optimize for size -Osize",""],type:"b",alias:"O"},optimizeLevel:{category:"Optimization",description:"How much to focus on optimizing code. [0-3]",type:"i"},shrinkLevel:{category:"Optimization",description:"How much to focus on shrinking code size. [0-2, s=1, z=2]",type:"i"},converge:{category:"Optimization",description:"Re-optimizes until no further improvements can be made.",type:"b",default:!1},noAssert:{category:"Optimization",description:"Replaces assertions with just their value without trapping.",type:"b",default:!1},outFile:{category:"Output",description:"Specifies the WebAssembly output file (.wasm).",type:"s",alias:"o",isPath:!0},textFile:{category:"Output",description:"Specifies the WebAssembly text output file (.wat).",type:"s",alias:"t",isPath:!0},bindings:{category:"Output",description:["Specifies the bindings to generate (.js + .d.ts).",""," esm JavaScript bindings & typings for ESM integration."," raw Like esm, but exports just the instantiate function."," Useful where modules are meant to be instantiated"," multiple times or non-ESM imports must be provided."],type:"S",alias:"b"},sourceMap:{category:"Debugging",description:["Enables source map generation. Optionally takes the URL","used to reference the source map from the binary file."],type:"s"},uncheckedBehavior:{category:"Debugging",description:["Changes the behavior of unchecked() expressions.","Using this option can potentially cause breakage.",""," default The default behavior: unchecked operations are"," only used inside of unchecked()."," never Unchecked operations are never used, even when"," inside of unchecked()."," always Unchecked operations are always used if possible,"," whether or not unchecked() is used."],type:"s",default:"default"},debug:{category:"Debugging",description:"Enables debug information in emitted binaries.",type:"b",default:!1},importMemory:{category:"Features",description:"Imports the memory from 'env.memory'.",type:"b",default:!1},noExportMemory:{category:"Features",description:"Does not export the memory as 'memory'.",type:"b",default:!1},initialMemory:{category:"Features",description:"Sets the initial memory size in pages.",type:"i",default:0},maximumMemory:{category:"Features",description:"Sets the maximum memory size in pages.",type:"i",default:0},sharedMemory:{category:"Features",description:"Declare memory as shared. Requires maximumMemory.",type:"b",default:!1},zeroFilledMemory:{category:"Features",description:"Assume imported memory is zeroed. Requires importMemory.",type:"b",default:!1},importTable:{category:"Features",description:"Imports the function table from 'env.table'.",type:"b",default:!1},exportTable:{category:"Features",description:"Exports the function table as 'table'.",type:"b",default:!1},exportStart:{category:"Features",description:["Exports the start function using the specified name instead","of calling it implicitly. Useful to obtain the exported memory","before executing any code accessing it."],type:"s"},runtime:{category:"Features",description:["Specifies the runtime variant to include in the program.",""," incremental TLSF + incremental GC (default)"," minimal TLSF + lightweight GC invoked externally"," stub Minimal runtime stub (never frees)"," ... Path to a custom runtime implementation",""],type:"s",default:"incremental"},exportRuntime:{category:"Features",description:["Always exports the runtime helpers (__new, __collect, __pin etc.).","Automatically determined when generation of --bindings is enabled."],type:"b",default:!1},stackSize:{category:"Features",description:["Overrides the stack size. Only relevant for incremental GC","or when using a custom runtime that requires stack space.","Defaults to 0 without and to 32768 with incremental GC."],default:0,type:"i"},enable:{category:"Features",description:["Enables WebAssembly features being disabled by default.",""," threads Threading and atomic operations."," simd SIMD types and operations."," reference-types Reference types and operations."," gc Garbage collection (WIP)."," stringref String reference types."," relaxed-simd Relaxed SIMD operations.",""],TODO_doesNothingYet:[" exception-handling Exception handling."," tail-calls Tail call operations."," multi-value Multi value types."," memory64 Memory64 operations."," extended-const Extended const expressions."],type:"S",mutuallyExclusive:"disable"},disable:{category:"Features",description:["Disables WebAssembly features being enabled by default.",""," mutable-globals Mutable global imports and exports."," sign-extension Sign-extension operations"," nontrapping-f2i Non-trapping float to integer ops."," bulk-memory Bulk memory operations.",""],type:"S",mutuallyExclusive:"enable"},use:{category:"Features",description:["Aliases a global object under another name, e.g., to switch","the default 'Math' implementation used: --use Math=JSMath","Can also be used to introduce an integer constant."],type:"S",alias:"u"},lowMemoryLimit:{category:"Features",description:"Enforces very low (<64k) memory constraints.",default:0,type:"i"},memoryBase:{category:"Linking",description:"Sets the start offset of emitted memory segments.",type:"i",default:0},tableBase:{category:"Linking",description:"Sets the start offset of emitted table elements.",type:"i",default:0},transform:{category:"API",description:"Specifies the path to a custom transform to load.",type:"S",isPath:!0,useNodeResolution:!0},trapMode:{category:"Binaryen",description:["Sets the trap mode to use.",""," allow Allow trapping operations. This is the default."," clamp Replace trapping operations with clamping semantics."," js Replace trapping operations with JS semantics.",""],type:"s",default:"allow"},runPasses:{category:"Binaryen",description:["Specifies additional Binaryen passes to run after other","optimizations, if any. See: Binaryen/src/passes/pass.cpp"],type:"s"},noValidate:{category:"Binaryen",description:"Skips validating the module using Binaryen.",type:"b",default:!1},baseDir:{description:"Specifies the base directory of input and output files.",type:"s",default:"."},noColors:{description:"Disables terminal colors.",type:"b",default:!1},noUnsafe:{description:["Disallows the use of unsafe features in user code.","Does not affect library files and external modules."],type:"b",default:!1},disableWarning:{description:["Disables warnings matching the given diagnostic code.","If no diagnostic code is given, all warnings are disabled."],type:"I"},noEmit:{description:"Performs compilation as usual but does not emit code.",type:"b",default:!1},showConfig:{description:"Print computed compiler options and exit.",type:"b",default:!1},stats:{description:"Prints statistics on I/O and compile times.",type:"b",default:!1},pedantic:{description:"Make yourself sad for no good reason.",type:"b",default:!1},lib:{description:["Adds one or multiple paths to custom library components and","uses exports of all top-level files at this path as globals."],type:"S",isPath:!0},path:{description:["Adds one or multiple paths to package resolution, similar","to node_modules. Prefers an 'ascMain' entry in a package's","package.json and falls back to an inner 'assembly/' folder."],type:"S",isPath:!0},wasm:{description:"Uses the specified Wasm binary of the compiler.",type:"s"}," ...":{description:"Specifies node.js options (CLI only). See: node --help"},"-Os":{value:{optimizeLevel:0,shrinkLevel:1}},"-Oz":{value:{optimizeLevel:0,shrinkLevel:2}},"-O0":{value:{optimizeLevel:0,shrinkLevel:0}},"-O1":{value:{optimizeLevel:1,shrinkLevel:0}},"-O2":{value:{optimizeLevel:2,shrinkLevel:0}},"-O3":{value:{optimizeLevel:3,shrinkLevel:0}},"-O0s":{value:{optimizeLevel:0,shrinkLevel:1}},"-O1s":{value:{optimizeLevel:1,shrinkLevel:1}},"-O2s":{value:{optimizeLevel:2,shrinkLevel:1}},"-O3s":{value:{optimizeLevel:3,shrinkLevel:1}},"-O0z":{value:{optimizeLevel:0,shrinkLevel:2}},"-O1z":{value:{optimizeLevel:1,shrinkLevel:2}},"-O2z":{value:{optimizeLevel:2,shrinkLevel:2}},"-O3z":{value:{optimizeLevel:3,shrinkLevel:2}},"-Ospeed":{value:{optimizeLevel:3,shrinkLevel:0}},"-Osize":{value:{optimizeLevel:0,shrinkLevel:2,converge:!0}},"--measure":{value:{stats:!0}}},Ae="~lib/",_e={array:`/// <reference path="./rt/index.d.ts" />
9
9
 
10
10
  import { BLOCK_MAXSIZE } from "./rt/common";
11
11
  import { Runtime } from "shared/runtime";
@@ -1224,6 +1224,21 @@ export declare function alignof<T>(): usize; // | u32 / u64
1224
1224
  @builtin
1225
1225
  export declare function offsetof<T>(fieldName?: string): usize; // | u32 / u64
1226
1226
 
1227
+ /**
1228
+ * Copies an \`@inline struct\` value's leaves into memory at \`dest\`, one store
1229
+ * per leaf at \`dest + offsetof(leaf)\`.
1230
+ *
1231
+ * The value must be **SROA-tracked**: a local of the value, or a path into one
1232
+ * (\`copyInto(at, outer.inner)\`). There is no value expression to evaluate \u2014 an
1233
+ * inline value has no representation and no address \u2014 which is why
1234
+ * \`changetype<usize>(value)\` stays refused: the address it would return belongs
1235
+ * to a temp nobody tracks. \`copyInto\` names the destination instead, so the
1236
+ * copy is explicit and the bytes land where the caller chose.
1237
+ */
1238
+ // @ts-ignore: decorator
1239
+ @builtin
1240
+ export declare function copyInto(dest: usize, value: any): void;
1241
+
1227
1242
  /**
1228
1243
  * The ABI name of a field: its \`@abi.alias("\u2026")\` if the declaration has one,
1229
1244
  * else the field's TypeScript name. Compile-time, like \`offsetof\`.
@@ -20501,6 +20516,8 @@ declare function offsetof<T>(): usize;
20501
20516
  declare function offsetof<T>(fieldName: keyof T | string): usize;
20502
20517
  /** Determines the offset of the specified field within the given class type. Returns the class type's end offset if field name has been omitted. Compiles to a constant. */
20503
20518
  declare function offsetof<T>(fieldName?: string): usize;
20519
+ /** Copies an \`@inline struct\` value's leaves into memory at \`dest\`, one store per leaf at \`dest + offsetof(leaf)\`. The value must be held in a local (or a path into one); an inline value has no address to lend, which is why \`changetype<usize>(value)\` stays refused. */
20520
+ declare function copyInto(dest: usize, value: any): void;
20504
20521
  /** Determines the ABI name of the specified field: its \`@abi.alias\` if declared, else the field's TypeScript name. Compiles to a constant. */
20505
20522
  declare function abiNameOf<T>(fieldName: string): string;
20506
20523
  /** Determines the name of a given type. */