@scriptc/compiler 0.0.9 → 0.0.11

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 (97) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +54 -9
  2. package/dist/backend/emission/emit-exprs.js +170 -14
  3. package/dist/backend/emission/emit-exprs.js.map +1 -1
  4. package/dist/backend/emission/emit-walkers.js +29 -2
  5. package/dist/backend/emission/emit-walkers.js.map +1 -1
  6. package/dist/backend/emission/emitter.js +25 -1
  7. package/dist/backend/emission/emitter.js.map +1 -1
  8. package/dist/backend/llvm/dyn.d.ts +1 -0
  9. package/dist/backend/llvm/dyn.js +83 -1
  10. package/dist/backend/llvm/dyn.js.map +1 -1
  11. package/dist/backend/llvm/emitter.js +210 -13
  12. package/dist/backend/llvm/emitter.js.map +1 -1
  13. package/dist/coverage/surface-manifest.js +16 -2
  14. package/dist/coverage/surface-manifest.js.map +1 -1
  15. package/dist/diagnostics/diagnostic.d.ts +41 -14
  16. package/dist/diagnostics/diagnostic.js +79 -27
  17. package/dist/diagnostics/diagnostic.js.map +1 -1
  18. package/dist/diagnostics/render.js +8 -0
  19. package/dist/diagnostics/render.js.map +1 -1
  20. package/dist/frontend/lowering/lib-boundary.js +11 -1
  21. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  22. package/dist/frontend/lowering/lower-builtins.d.ts +69 -0
  23. package/dist/frontend/lowering/lower-builtins.js +380 -4
  24. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  25. package/dist/frontend/lowering/lower-calls.d.ts +41 -0
  26. package/dist/frontend/lowering/lower-calls.js +559 -11
  27. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  28. package/dist/frontend/lowering/lower-classes.d.ts +7 -0
  29. package/dist/frontend/lowering/lower-classes.js +51 -1
  30. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  31. package/dist/frontend/lowering/lower-containers.d.ts +21 -0
  32. package/dist/frontend/lowering/lower-containers.js +262 -17
  33. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  34. package/dist/frontend/lowering/lower-dgram.js +92 -17
  35. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  36. package/dist/frontend/lowering/lower-emitter.d.ts +70 -3
  37. package/dist/frontend/lowering/lower-emitter.js +436 -29
  38. package/dist/frontend/lowering/lower-emitter.js.map +1 -1
  39. package/dist/frontend/lowering/lower-exprs.d.ts +80 -5
  40. package/dist/frontend/lowering/lower-exprs.js +651 -23
  41. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  42. package/dist/frontend/lowering/lower-modules.d.ts +8 -5
  43. package/dist/frontend/lowering/lower-modules.js +144 -19
  44. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  45. package/dist/frontend/lowering/lower-namespaces.d.ts +39 -11
  46. package/dist/frontend/lowering/lower-namespaces.js +166 -24
  47. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  48. package/dist/frontend/lowering/lower-server.js +211 -4
  49. package/dist/frontend/lowering/lower-server.js.map +1 -1
  50. package/dist/frontend/lowering/lower-stmts.d.ts +1 -5
  51. package/dist/frontend/lowering/lower-stmts.js +293 -10
  52. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  53. package/dist/frontend/lowering/lower-stream.js +178 -10
  54. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  55. package/dist/frontend/lowering/lowerer.d.ts +53 -1
  56. package/dist/frontend/lowering/lowerer.js +210 -19
  57. package/dist/frontend/lowering/lowerer.js.map +1 -1
  58. package/dist/frontend/lowering/surfaces.d.ts +44 -0
  59. package/dist/frontend/lowering/surfaces.js +234 -3
  60. package/dist/frontend/lowering/surfaces.js.map +1 -1
  61. package/dist/frontend/npm.d.ts +12 -0
  62. package/dist/frontend/npm.js +30 -0
  63. package/dist/frontend/npm.js.map +1 -1
  64. package/dist/frontend/program.d.ts +25 -0
  65. package/dist/frontend/program.js +144 -135
  66. package/dist/frontend/program.js.map +1 -1
  67. package/dist/frontend/shared.d.ts +1 -1
  68. package/dist/frontend/shared.js +1 -1
  69. package/dist/frontend/shared.js.map +1 -1
  70. package/dist/frontend/types.d.ts +13 -0
  71. package/dist/frontend/types.js +84 -7
  72. package/dist/frontend/types.js.map +1 -1
  73. package/dist/index.d.ts +2 -1
  74. package/dist/index.js +157 -12
  75. package/dist/index.js.map +1 -1
  76. package/dist/ir/nodes.d.ts +163 -13
  77. package/dist/ir/nodes.js +65 -6
  78. package/dist/ir/nodes.js.map +1 -1
  79. package/dist/ir/validate.js +64 -5
  80. package/dist/ir/validate.js.map +1 -1
  81. package/dist/library/fence-eval.d.ts +77 -0
  82. package/dist/library/fence-eval.js +395 -0
  83. package/dist/library/fence-eval.js.map +1 -0
  84. package/dist/library/int-infer.d.ts +119 -0
  85. package/dist/library/int-infer.js +1301 -0
  86. package/dist/library/int-infer.js.map +1 -0
  87. package/dist/library/int-infer.test.d.ts +1 -0
  88. package/dist/library/int-infer.test.js +279 -0
  89. package/dist/library/int-infer.test.js.map +1 -0
  90. package/dist/library/profile.d.ts +43 -6
  91. package/dist/library/profile.js +179 -31
  92. package/dist/library/profile.js.map +1 -1
  93. package/dist/library/sidecar.d.ts +23 -0
  94. package/dist/library/sidecar.js +150 -16
  95. package/dist/library/sidecar.js.map +1 -1
  96. package/package.json +2 -2
  97. package/surface-manifest.json +208 -10
@@ -2,6 +2,7 @@ import * as ts from "../ts7/adapter.js";
2
2
  import type { Lowerer } from "./lowerer.js";
3
3
  import { IrClassDef, IrExpr, IrFunction, IrLocal, IrStmt, IrType, SrcLoc } from "../../ir/nodes.js";
4
4
  import { type GenericFnInfo, type ParamShape } from "./lower-calls.js";
5
+ import { type EmitOverrideRec } from "./lower-emitter.js";
5
6
  import { type MixinInstanceInfo } from "./lower-mixins.js";
6
7
  export interface ClassInfo {
7
8
  def: IrClassDef;
@@ -81,6 +82,12 @@ export interface ClassInfo {
81
82
  * the base chain. The value names which SIDES the class carries. User
82
83
  * `extends` of these classes is fenced at the declaration (phase 1). */
83
84
  builtinStream?: "r" | "w" | "rw";
85
+ /** This class's own `emit` override in the FORWARDING SHAPE (the one
86
+ * EventEmitter member a subclass may re-declare): never in `methods` —
87
+ * emit calls keep routing through the emitter spoke, which lowers the
88
+ * body once per event name as the specialization method `emit:<event>`
89
+ * (lower-emitter.ts's emit-overrides block has the whole story). */
90
+ emitOverride?: EmitOverrideRec;
84
91
  ctor: ts.ConstructorDeclaration | null;
85
92
  /** PARAMETER PROPERTIES (`constructor(public x: number)`), in parameter
86
93
  * order: each declares a field (placed BEFORE the class's declared
@@ -14,6 +14,7 @@ import { pureReemittable } from "./lower-exprs.js";
14
14
  import { lowerSearchParamsNew } from "./lower-builtins.js";
15
15
  import { requiresDynamicPackageDiag, unsupportedDiag } from "../../diagnostics/diagnostic.js";
16
16
  import { STREAM_API_MEMBERS, STREAM_PROP_MEMBERS, UNDERSCORE_METHODS, lowerStreamNew, lowerStreamSuperCall, streamCtorShape } from "./lower-stream.js";
17
+ import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall } from "./lower-emitter.js";
17
18
  import { declSymbolOf } from "./lower-modules.js";
18
19
  import { uniqueSymbolKeyOf } from "./lower-exprs.js";
19
20
  import { lowerHttpServerNew } from "./lower-server.js";
@@ -814,6 +815,10 @@ mixin) {
814
815
  * symbol-slot refinement retries them after the constructor scan
815
816
  * declares this class's OWN symbol-keyed slots. */
816
817
  const dynRetMethods = new Map();
818
+ /** The class's own `emit` override in the forwarding shape (emitter-
819
+ * rooted classes only) — recorded here, NEVER in `methods`, so emit
820
+ * calls keep routing through the emitter spoke's dispatch. */
821
+ let emitOverride;
817
822
  let ctor = null;
818
823
  /** Initializer-less fields whose type cannot hold undefined and whose
819
824
  * definite assignment tsc did NOT verify (a `!` assertion, or
@@ -1011,7 +1016,13 @@ mixin) {
1011
1016
  // The EventEmitter API surface is runtime-provided: a subclass
1012
1017
  // member with one of its names would shadow behavior the runtime
1013
1018
  // dispatches internally (meta events, once removal), so the
1014
- // override is fenced rather than silently split-brained.
1019
+ // override is fenced rather than silently split-brained — with ONE
1020
+ // exception: `emit` in the forwarding shape on a plain (non-
1021
+ // stream) emitter-rooted class monomorphizes per event name
1022
+ // (lower-emitter.ts's emit-overrides block). Stream-rooted classes
1023
+ // keep the fence for emit too: the runtime stream machinery emits
1024
+ // 'data'/'end'/... internally, which could never route through
1025
+ // the override.
1015
1026
  if (memberName && ts.isIdentifier(memberName) &&
1016
1027
  EMITTER_API_MEMBERS.has(memberName.text) &&
1017
1028
  (() => {
@@ -1020,6 +1031,26 @@ mixin) {
1020
1031
  return true;
1021
1032
  return false;
1022
1033
  })()) {
1034
+ const streamRooted = (() => {
1035
+ for (let c = base; c; c = c.base)
1036
+ if (c.builtinStream !== undefined)
1037
+ return true;
1038
+ return false;
1039
+ })();
1040
+ if (memberName.text === "emit" && !streamRooted && !inst && !mixin &&
1041
+ ts.isMethodDeclaration(member) &&
1042
+ !member.modifiers?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword)) {
1043
+ const reason = emitOverrideShapeReason(L, member);
1044
+ if (reason === null) {
1045
+ const eventSym = L.checker.getSymbolAtLocation(member.parameters[0].name);
1046
+ const restSym = L.checker.getSymbolAtLocation(member.parameters[1].name);
1047
+ if (eventSym && restSym) {
1048
+ emitOverride = { decl: member, eventSym, restSym };
1049
+ continue;
1050
+ }
1051
+ }
1052
+ L.unsupported("SC1090", memberName, `overriding EventEmitter's 'emit' outside the forwarding shape (${reason ?? "its parameters do not resolve statically"}; the compiled form is \`emit(event: string, ...args: unknown[]): boolean\`)`);
1053
+ }
1023
1054
  L.unsupported("SC1090", memberName, `overriding the EventEmitter member '${memberName.text}' (the runtime owns the emitter surface)`);
1024
1055
  }
1025
1056
  // The stream surface is likewise runtime-provided on stream-rooted
@@ -1838,6 +1869,7 @@ mixin) {
1838
1869
  fieldOrder,
1839
1870
  methods,
1840
1871
  decl,
1872
+ ...(emitOverride !== undefined ? { emitOverride } : {}),
1841
1873
  ctor,
1842
1874
  ctorParams,
1843
1875
  ...(paramProps.length > 0 ? { paramProps } : {}),
@@ -3925,6 +3957,13 @@ export function lowerSuperMethodCall(L, call, access) {
3925
3957
  // tsc rejects super outside derived-class bodies first; defensive.
3926
3958
  L.unsupported("SC1090", access, "'super' outside a derived class");
3927
3959
  }
3960
+ // An emit-override SPECIALIZATION body's forward — `super.emit(event,
3961
+ // ...args)` — carries no literal event name; the specialization's own
3962
+ // context answers it (matched before any lookup: neither identifier
3963
+ // resolves through the ordinary lowering).
3964
+ const forward = emitSpecSuperForward(L, call, access);
3965
+ if (forward)
3966
+ return forward;
3928
3967
  const found = L.findMethodOn(cls.base, access.name.text);
3929
3968
  if (!found) {
3930
3969
  // `super.m(...)` of a GENERIC method: super dispatch is static in JS
@@ -3947,6 +3986,17 @@ export function lowerSuperMethodCall(L, call, access) {
3947
3986
  loc,
3948
3987
  };
3949
3988
  }
3989
+ // The runtime-provided emitter surface through `super` —
3990
+ // `super.emit('x', v)`, `super.on(...)`: Node's prototype-chain rule
3991
+ // is STATIC dispatch above the lexical class, which the emitter
3992
+ // spoke lowers with this method's own `this` as the receiver (an
3993
+ // emit override at-or-below `cls` never answers; the nearest one
3994
+ // strictly above does).
3995
+ if (EMITTER_API_MEMBERS.has(access.name.text) && emitterRooted(L, cls.base)) {
3996
+ const viaEmitter = lowerEmitterSuperCall(L, call, access, cls);
3997
+ if (viaEmitter)
3998
+ return viaEmitter;
3999
+ }
3950
4000
  L.unsupported("SC1090", access, `'super.${access.name.text}' (no base class declares it)`);
3951
4001
  }
3952
4002
  // tsc rejects super-access of abstract members (TS2513); defensive —