@scriptc/compiler 0.0.10 → 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.
- package/ambient/scriptc-node-fallback.d.ts +54 -9
- package/dist/backend/emission/emit-exprs.js +34 -2
- package/dist/backend/emission/emit-exprs.js.map +1 -1
- package/dist/backend/emission/emitter.js +25 -1
- package/dist/backend/emission/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.js +59 -4
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/coverage/surface-manifest.js +16 -2
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +20 -7
- package/dist/diagnostics/diagnostic.js +44 -11
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.d.ts +56 -0
- package/dist/frontend/lowering/lower-builtins.js +235 -4
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +38 -4
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +7 -0
- package/dist/frontend/lowering/lower-classes.js +51 -1
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +4 -0
- package/dist/frontend/lowering/lower-containers.js +69 -7
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-emitter.d.ts +70 -3
- package/dist/frontend/lowering/lower-emitter.js +436 -29
- package/dist/frontend/lowering/lower-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +80 -5
- package/dist/frontend/lowering/lower-exprs.js +472 -13
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +8 -5
- package/dist/frontend/lowering/lower-modules.js +141 -47
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +14 -0
- package/dist/frontend/lowering/lower-namespaces.js +122 -15
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +80 -6
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +113 -6
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +17 -0
- package/dist/frontend/lowering/lowerer.js +105 -17
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +44 -0
- package/dist/frontend/lowering/surfaces.js +234 -3
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/npm.d.ts +12 -0
- package/dist/frontend/npm.js +30 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/program.d.ts +25 -0
- package/dist/frontend/program.js +144 -135
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/shared.d.ts +1 -1
- package/dist/frontend/shared.js +1 -1
- package/dist/frontend/shared.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +137 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/nodes.d.ts +64 -8
- package/dist/ir/nodes.js +21 -3
- package/dist/ir/nodes.js.map +1 -1
- package/dist/ir/validate.js +11 -2
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/fence-eval.js +12 -2
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/int-infer.d.ts +119 -0
- package/dist/library/int-infer.js +1301 -0
- package/dist/library/int-infer.js.map +1 -0
- package/dist/library/int-infer.test.d.ts +1 -0
- package/dist/library/int-infer.test.js +279 -0
- package/dist/library/int-infer.test.js.map +1 -0
- package/dist/library/profile.d.ts +32 -5
- package/dist/library/profile.js +77 -13
- package/dist/library/profile.js.map +1 -1
- package/dist/library/sidecar.d.ts +23 -0
- package/dist/library/sidecar.js +150 -16
- package/dist/library/sidecar.js.map +1 -1
- package/package.json +2 -2
- 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 —
|