@scriptc/compiler 0.0.16 → 0.0.18
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 +4 -4
- package/dist/backend/cc.d.ts +5 -0
- package/dist/backend/cc.js +2 -0
- package/dist/backend/cc.js.map +1 -1
- package/dist/backend/emission/emit-async.js +35 -2
- package/dist/backend/emission/emit-async.js.map +1 -1
- package/dist/backend/emission/emit-exprs.js +44 -6
- package/dist/backend/emission/emit-exprs.js.map +1 -1
- package/dist/backend/emission/emitter.js +69 -11
- package/dist/backend/emission/emitter.js.map +1 -1
- package/dist/backend/emission/may-throw.d.ts +3 -3
- package/dist/backend/emission/may-throw.js +15 -4
- package/dist/backend/emission/may-throw.js.map +1 -1
- package/dist/backend/llvm/emitter.js +200 -21
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/coverage/surface-manifest.js +27 -9
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/frontend/lowering/lower-builtins.js +4 -7
- package/dist/frontend/lowering/lower-builtins.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +4 -4
- package/dist/frontend/lowering/lower-calls.js +44 -11
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-containers.d.ts +22 -17
- package/dist/frontend/lowering/lower-containers.js +628 -51
- package/dist/frontend/lowering/lower-containers.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +19 -1
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +2 -2
- package/dist/frontend/lowering/lower-island.js +57 -9
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +144 -10
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +8 -0
- package/dist/frontend/lowering/lower-stmts.js +408 -21
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +38 -0
- package/dist/frontend/lowering/lowerer.js +149 -2
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +8 -0
- package/dist/frontend/lowering/surfaces.js +10 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/shared.d.ts +4 -0
- package/dist/frontend/shared.js +9 -3
- package/dist/frontend/shared.js.map +1 -1
- package/dist/frontend/ts7/program.js +5 -4
- package/dist/frontend/ts7/program.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/ir/nodes.d.ts +53 -22
- package/dist/ir/nodes.js +42 -0
- package/dist/ir/nodes.js.map +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +1 -1
- package/dist/ir/validate.js +99 -39
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/fence-eval.js +9 -1
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/int-infer.js +191 -25
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +206 -1
- package/dist/library/int-infer.test.js.map +1 -1
- package/package.json +2 -2
- package/surface-manifest.json +27 -3
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
* stays the tool's. */
|
|
51
51
|
import { generateSurfaceManifest } from "../coverage/surface-manifest.js";
|
|
52
52
|
import { libFenceDiag } from "../diagnostics/diagnostic.js";
|
|
53
|
-
import { AMBIENT_SURFACE_FNS, BUILTIN_MODULE_CONSTS, BUILTIN_MODULE_FNS, BUILTIN_MODULE_FN_ALIASES, STATIC_MATH_FNS, STR_METHODS, } from "../frontend/lowering/surfaces.js";
|
|
53
|
+
import { AMBIENT_SURFACE_FNS, BUILTIN_MODULE_CONSTS, BUILTIN_MODULE_FNS, BUILTIN_MODULE_FN_ALIASES, STATIC_MATH_FNS, STATIC_NUMBER_METHODS, STR_METHODS, } from "../frontend/lowering/surfaces.js";
|
|
54
54
|
import { compilerReleaseVersion } from "./sidecar.js";
|
|
55
55
|
let taxonomy = null;
|
|
56
56
|
function builtinRootId(mod) {
|
|
@@ -142,6 +142,14 @@ function classifySurface(entry, tax) {
|
|
|
142
142
|
if (fn !== undefined)
|
|
143
143
|
return { kind: "detector", detector: { libFns: [fn.fn] } };
|
|
144
144
|
}
|
|
145
|
+
if (family === "number") {
|
|
146
|
+
const method = Object.hasOwn(STATIC_NUMBER_METHODS, member)
|
|
147
|
+
? STATIC_NUMBER_METHODS[member]
|
|
148
|
+
: undefined;
|
|
149
|
+
if (method !== undefined) {
|
|
150
|
+
return { kind: "detector", detector: { libFns: method.fns } };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
145
153
|
if (family === "string") {
|
|
146
154
|
const m = Object.hasOwn(STR_METHODS, member) ? STR_METHODS[member] : undefined;
|
|
147
155
|
if (m !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fence-eval.js","sourceRoot":"","sources":["../../src/library/fence-eval.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fence-eval.js","sourceRoot":"","sources":["../../src/library/fence-eval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAiDuB;AACvB,OAAO,EAAE,uBAAuB,EAAoD,MAAM,iCAAiC,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAsB,MAAM,8BAA8B,CAAC;AAChF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACrB,WAAW,GACZ,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAgEtD,IAAI,QAAQ,GAAyB,IAAI,CAAC;AAE1C,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,gBAAgB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,0DAA0D;YAC1D,oEAAoE;YACpE,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,SAAS;oBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,GAAG,KAAK,KAAK,IAAI,MAAM,KAAK,eAAe;gBAAE,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACnF,kEAAkE;YAClE,sDAAsD;YACtD,KAAK,MAAM,KAAK,IAAI,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;gBAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnF,UAAU,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5D,KAAK,MAAM,CAAC,IAAI,GAAG;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;YAAE,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAQ,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAwB,CAAC,CAAC,CAAC,CAAC;IACrG,QAAQ,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IAC7G,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6EAA6E;AAE7E;;6EAE6E;AAC7E,MAAM,cAAc,GAAkD;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;IAC5B,GAAG,EAAE,CAAC,KAAK,CAAC;IACZ,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACzE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAOlE,MAAM,aAAa,GACjB,mIAAmI,CAAC;AAEtI,SAAS,eAAe,CAAC,KAA2B,EAAE,GAAkB;IACtE,sEAAsE;IACtE,yDAAyD;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1D,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,sHAAsH;SAC5H,CAAC;IACJ,CAAC;IACD,qEAAqE;IACrE,sDAAsD;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IACtF,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;IAC5F,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IACtF,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACnF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxF,IAAI,EAAE,KAAK,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnF,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC;gBACzD,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC;gBAC/B,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;YAChE,CAAC;QACH,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACzF,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3F,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC1F,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,8GAA8G;SACpH,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACzC,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,uIAAuI;SAC7I,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,0DAA0D,EAAE,CAAC;AAClG,CAAC;AAED,8EAA8E;AAE9E;;;;;;;oDAOoD;AACpD,MAAM,UAAU,oBAAoB,CAClC,KAAkC;IAElC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,CAAC,KAA2B,EAAE,GAAiB,EAAQ,EAAE;YACpE,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EACJ,IAAI,CAAC,CAAC,IAAI,qEAAqE,CAAC,CAAC,EAAE,OAAO;wBAC1F,2IAA2I;iBAC9I,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,8BAA8B,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;YACrG,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EACJ,IAAI,CAAC,CAAC,IAAI,2EAA2E,CAAC,CAAC,MAAM,OAAO;wBACpG,+IAA+I;iBAClJ,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACxC,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC/B,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,SAAS,CAAC,wCAAwC;oBAC7E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,MAAM,cAAc,EAAE,8BAA8B,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;gBACxH,CAAC;gBACD,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,MAAM,kGAAkG;iBAC3I,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG;YACtE,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAYD;;;oDAGoD;AACpD,SAAS,sBAAsB,CAAC,GAAa;IAC3C,MAAM,OAAO,GAAoB;QAC/B,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,UAAU,EAAE,IAAI,GAAG,EAAE;KACtB,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,GAAwB,EAAE,GAAW,EAAE,GAAW,EAAQ,EAAE;QACxE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,QAAQ,GAAW,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,CAAU,EAAE,GAAW,EAAQ,EAAE;QAC9C,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,KAAK,MAAM,IAAI,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,CAAqE,CAAC;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;QAC7B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBAC3F,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;oBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBACzE,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;oBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBAC9E,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;oBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBAC9E,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;oBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,KAAK,CAAE,CAA6B,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC,CAAC;IACF,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,OAAwB,EAAE,GAAoB;IACjE,MAAM,IAAI,GAAG,CAAC,KAA0B,EAAE,IAAmC,EAAiB,EAAE;QAC9F,KAAK,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CACzC,CAAC;AACJ,CAAC;AAUD;;;;sDAIsD;AACtD,MAAM,UAAU,qBAAqB,CAAC,GAAa,EAAE,OAAyB;IAC5E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7F,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE,SAAS;YACzD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,IAAI;gBAAE,SAAS;YAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAE9E,SAAS,kBAAkB,CACzB,OAAgE,EAChE,IAAmB;IAEnB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC3E,wEAAwE;IACxE,wEAAwE;IACxE,iDAAiD;IACjD,OAAO,OAAO,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyB,EAAE,IAAmB;IACxE,qEAAqE;IACrE,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,MAAM,GACV,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9F,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,sEAAsE;IACtE,uEAAuE;IACvE,gDAAgD;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACjC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS,IAAI,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1E,CAAC;IACD,kEAAkE;IAClE,iEAAiE;IACjE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS;QAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;gEAGgE;AAChE,MAAM,UAAU,uBAAuB,CACrC,WAA4B,EAC5B,OAAyB;IAEzB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACnG,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QACrC,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,OAAO,CAAC,IAAI,cAAc,QAAQ,EAAE,EAAE,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -307,8 +307,33 @@ export function classSeed(cls) {
|
|
|
307
307
|
default: return { ...TOP };
|
|
308
308
|
}
|
|
309
309
|
}
|
|
310
|
+
/** Static-access facts share Env's join/clone machinery but have their own
|
|
311
|
+
* missing-key value: the declared slot seed. A killed field fact therefore
|
|
312
|
+
* falls back to the same whole-in-class-range assumption a field read had
|
|
313
|
+
* before access-path refinement, preserving SC4023 rather than degrading
|
|
314
|
+
* to a spurious SC4022. */
|
|
315
|
+
const PATH_I64_PREFIX = "%path.i64:";
|
|
316
|
+
const PATH_U64_PREFIX = "%path.u64:";
|
|
317
|
+
function pathClassOfKey(id) {
|
|
318
|
+
if (id.startsWith(PATH_I64_PREFIX))
|
|
319
|
+
return "i64";
|
|
320
|
+
if (id.startsWith(PATH_U64_PREFIX))
|
|
321
|
+
return "u64";
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
function clearPathFacts(env) {
|
|
325
|
+
for (const k of [...env.keys()]) {
|
|
326
|
+
if (pathClassOfKey(k) !== null)
|
|
327
|
+
env.delete(k);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
310
330
|
const isGlobalId = (id) => id.startsWith("%g.");
|
|
311
|
-
const defaultVal = (id) =>
|
|
331
|
+
const defaultVal = (id) => {
|
|
332
|
+
const pathClass = pathClassOfKey(id);
|
|
333
|
+
if (pathClass !== null)
|
|
334
|
+
return classSeed(pathClass);
|
|
335
|
+
return isGlobalId(id) ? TOP : BOTTOM;
|
|
336
|
+
};
|
|
312
337
|
function envGet(env, id) {
|
|
313
338
|
return env.get(id) ?? defaultVal(id);
|
|
314
339
|
}
|
|
@@ -322,6 +347,10 @@ function joinEnv(a, b) {
|
|
|
322
347
|
for (const k of keys) {
|
|
323
348
|
out.set(k, join(a.get(k) ?? defaultVal(k), b.get(k) ?? defaultVal(k)));
|
|
324
349
|
}
|
|
350
|
+
// A real flow join ends the cheap straight-line access-path proof even
|
|
351
|
+
// when both incoming facts happen to agree. A sole reachable edge
|
|
352
|
+
// (early return/throw on the other edge) retains its dominated fact.
|
|
353
|
+
clearPathFacts(out);
|
|
325
354
|
return out;
|
|
326
355
|
}
|
|
327
356
|
function envEquals(a, b) {
|
|
@@ -338,6 +367,7 @@ function widenEnv(prev, next) {
|
|
|
338
367
|
for (const k of keys) {
|
|
339
368
|
out.set(k, widen(prev.get(k) ?? defaultVal(k), next.get(k) ?? defaultVal(k)));
|
|
340
369
|
}
|
|
370
|
+
clearPathFacts(out);
|
|
341
371
|
return out;
|
|
342
372
|
}
|
|
343
373
|
function globalEffectsOf(mod) {
|
|
@@ -589,12 +619,14 @@ class FnAnalyzer {
|
|
|
589
619
|
if (s.init === null)
|
|
590
620
|
return env;
|
|
591
621
|
const v = this.evalExpr(s.init, env);
|
|
622
|
+
this.clearPathsRootedAt(env, s.localId);
|
|
592
623
|
if (this.bindingIsF64(s.localId))
|
|
593
624
|
env.set(s.localId, v);
|
|
594
625
|
return env;
|
|
595
626
|
}
|
|
596
627
|
case "assign": {
|
|
597
628
|
const v = this.evalExpr(s.value, env);
|
|
629
|
+
this.clearPathsRootedAt(env, s.localId);
|
|
598
630
|
if (this.bindingIsF64(s.localId))
|
|
599
631
|
env.set(s.localId, v);
|
|
600
632
|
return env;
|
|
@@ -604,8 +636,9 @@ class FnAnalyzer {
|
|
|
604
636
|
return env;
|
|
605
637
|
case "if": {
|
|
606
638
|
this.evalExpr(s.cond, env);
|
|
607
|
-
const
|
|
608
|
-
const
|
|
639
|
+
const allowPaths = this.stablePathGuard(s.cond);
|
|
640
|
+
const thenEnv = this.refine(cloneEnv(env), s.cond, true, allowPaths);
|
|
641
|
+
const elseEnv = this.refine(cloneEnv(env), s.cond, false, allowPaths);
|
|
609
642
|
const a = thenEnv === null ? null : this.execStmts(s.then, thenEnv);
|
|
610
643
|
const b = s.else_ === null ? elseEnv : elseEnv === null ? null : this.execStmts(s.else_, elseEnv);
|
|
611
644
|
return joinEnv(a, b);
|
|
@@ -668,10 +701,12 @@ class FnAnalyzer {
|
|
|
668
701
|
this.evalExpr(s.arr, env);
|
|
669
702
|
this.evalExpr(s.index, env);
|
|
670
703
|
this.evalExpr(s.value, env);
|
|
704
|
+
clearPathFacts(env);
|
|
671
705
|
return env;
|
|
672
706
|
case "fieldSet":
|
|
673
707
|
this.evalExpr(s.obj, env);
|
|
674
708
|
this.evalExpr(s.value, env);
|
|
709
|
+
clearPathFacts(env);
|
|
675
710
|
return env;
|
|
676
711
|
case "recordSet": {
|
|
677
712
|
this.evalExpr(s.obj, env);
|
|
@@ -679,16 +714,22 @@ class FnAnalyzer {
|
|
|
679
714
|
const slot = this.cfg.records.get(s.shapeId)?.get(s.field);
|
|
680
715
|
if (slot !== undefined)
|
|
681
716
|
this.emit(v, slot.path, slot.cls, s.loc);
|
|
717
|
+
// The RHS and its boundary obligation observe the pre-write value;
|
|
718
|
+
// only the completed heap write invalidates paths (JS evaluation
|
|
719
|
+
// order, and what lets `m.count = m.count + 1` prove).
|
|
720
|
+
clearPathFacts(env);
|
|
682
721
|
return env;
|
|
683
722
|
}
|
|
684
723
|
case "recordKeySet":
|
|
685
724
|
this.evalExpr(s.obj, env);
|
|
686
725
|
this.evalExpr(s.key, env);
|
|
687
726
|
this.evalExpr(s.value, env);
|
|
727
|
+
clearPathFacts(env);
|
|
688
728
|
return env;
|
|
689
729
|
case "recordKeyDelete":
|
|
690
730
|
this.evalExpr(s.obj, env);
|
|
691
731
|
this.evalExpr(s.key, env);
|
|
732
|
+
clearPathFacts(env);
|
|
692
733
|
return env;
|
|
693
734
|
case "return": {
|
|
694
735
|
if (s.value !== null) {
|
|
@@ -828,10 +869,14 @@ class FnAnalyzer {
|
|
|
828
869
|
if (isGlobalId(k))
|
|
829
870
|
out.delete(k); // absent global = TOP
|
|
830
871
|
}
|
|
872
|
+
clearPathFacts(out);
|
|
831
873
|
return out;
|
|
832
874
|
}
|
|
833
875
|
/* ── loops: header widening + body-edge refinement ──────────────────── */
|
|
834
876
|
execLoop(env, opts) {
|
|
877
|
+
// Loop headers/backedges are outside the deliberately straight-line
|
|
878
|
+
// access-path scope. Guards inside the body can establish fresh facts.
|
|
879
|
+
clearPathFacts(env);
|
|
835
880
|
const savedCollect = this.collect;
|
|
836
881
|
this.collect = false;
|
|
837
882
|
let head = cloneEnv(env);
|
|
@@ -870,10 +915,10 @@ class FnAnalyzer {
|
|
|
870
915
|
// (`for (;;)`) exits only through breaks.
|
|
871
916
|
let exit = null;
|
|
872
917
|
if (opts.doWhile ?? false) {
|
|
873
|
-
exit = opts.cond !== undefined && final.postBody !== null ? this.refine(final.postBody, opts.cond, false) : null;
|
|
918
|
+
exit = opts.cond !== undefined && final.postBody !== null ? this.refine(final.postBody, opts.cond, false, false) : null;
|
|
874
919
|
}
|
|
875
920
|
else if (opts.cond !== undefined) {
|
|
876
|
-
exit = this.refine(cloneEnv(head), opts.cond, false);
|
|
921
|
+
exit = this.refine(cloneEnv(head), opts.cond, false, false);
|
|
877
922
|
}
|
|
878
923
|
else if (opts.alwaysExits ?? false) {
|
|
879
924
|
exit = cloneEnv(head); // for-of ends when the array runs out
|
|
@@ -894,7 +939,7 @@ class FnAnalyzer {
|
|
|
894
939
|
let bodyIn = cloneEnv(head);
|
|
895
940
|
if (opts.cond !== undefined && !(opts.doWhile ?? false)) {
|
|
896
941
|
this.evalExpr(opts.cond, bodyIn);
|
|
897
|
-
bodyIn = this.refine(bodyIn, opts.cond, true);
|
|
942
|
+
bodyIn = this.refine(bodyIn, opts.cond, true, false);
|
|
898
943
|
}
|
|
899
944
|
if (bodyIn !== null && opts.seedEachIteration !== undefined) {
|
|
900
945
|
bodyIn.set(opts.seedEachIteration, { ...TOP });
|
|
@@ -915,7 +960,7 @@ class FnAnalyzer {
|
|
|
915
960
|
if ((opts.doWhile ?? false) && opts.cond !== undefined && out !== null) {
|
|
916
961
|
this.evalExpr(opts.cond, out);
|
|
917
962
|
postBody = cloneEnv(out);
|
|
918
|
-
out = this.refine(out, opts.cond, true);
|
|
963
|
+
out = this.refine(out, opts.cond, true, false);
|
|
919
964
|
}
|
|
920
965
|
return { back: out, postBody };
|
|
921
966
|
}
|
|
@@ -925,7 +970,7 @@ class FnAnalyzer {
|
|
|
925
970
|
* false when either side is NaN, so the edge where one HELD proves both
|
|
926
971
|
* operands NaN-free; on the failed edge NaN survives while the negated
|
|
927
972
|
* comparison still refines the numeric members. */
|
|
928
|
-
refine(env, cond, branch) {
|
|
973
|
+
refine(env, cond, branch, allowPaths = false) {
|
|
929
974
|
if (env === null)
|
|
930
975
|
return null;
|
|
931
976
|
switch (cond.kind) {
|
|
@@ -933,17 +978,17 @@ class FnAnalyzer {
|
|
|
933
978
|
return cond.value === branch ? env : null;
|
|
934
979
|
case "unary":
|
|
935
980
|
if (cond.op === "!")
|
|
936
|
-
return this.refine(env, cond.operand, !branch);
|
|
981
|
+
return this.refine(env, cond.operand, !branch, allowPaths);
|
|
937
982
|
return env;
|
|
938
983
|
case "logical": {
|
|
939
984
|
const isAnd = cond.op === "&&";
|
|
940
985
|
if (isAnd === branch) {
|
|
941
986
|
// (a && b) true — both held; (a || b) false — both failed.
|
|
942
|
-
return this.refine(this.refine(env, cond.left, branch), cond.right, branch);
|
|
987
|
+
return this.refine(this.refine(env, cond.left, branch, allowPaths), cond.right, branch, allowPaths);
|
|
943
988
|
}
|
|
944
989
|
// (a && b) false — a failed, or a held and b failed; dually for ||.
|
|
945
|
-
const viaLeft = this.refine(cloneEnv(env), cond.left, branch);
|
|
946
|
-
const viaRight = this.refine(this.refine(cloneEnv(env), cond.left, !branch), cond.right, branch);
|
|
990
|
+
const viaLeft = this.refine(cloneEnv(env), cond.left, branch, allowPaths);
|
|
991
|
+
const viaRight = this.refine(this.refine(cloneEnv(env), cond.left, !branch, allowPaths), cond.right, branch, allowPaths);
|
|
947
992
|
return joinEnv(viaLeft, viaRight);
|
|
948
993
|
}
|
|
949
994
|
case "bin": {
|
|
@@ -961,17 +1006,22 @@ class FnAnalyzer {
|
|
|
961
1006
|
const a = this.evalPure(cond.left, env);
|
|
962
1007
|
const b = this.evalPure(cond.right, env);
|
|
963
1008
|
const out = cloneEnv(env);
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
if (
|
|
967
|
-
out.set(
|
|
1009
|
+
const leftKey = this.refinementKey(cond.left, allowPaths);
|
|
1010
|
+
const rightKey = this.refinementKey(cond.right, allowPaths);
|
|
1011
|
+
if (leftKey !== null)
|
|
1012
|
+
out.set(leftKey, refineLhs(op, a, b, clearNaN));
|
|
1013
|
+
if (rightKey !== null)
|
|
1014
|
+
out.set(rightKey, refineLhs(FLIP[op], b, a, clearNaN));
|
|
968
1015
|
return out;
|
|
969
1016
|
}
|
|
970
1017
|
case "toBool": {
|
|
971
1018
|
const inner = cond.operand;
|
|
972
|
-
if (inner.type.kind !== "f64" ||
|
|
1019
|
+
if (inner.type.kind !== "f64" || !this.isPure(inner))
|
|
1020
|
+
return env;
|
|
1021
|
+
const key = this.refinementKey(inner, allowPaths);
|
|
1022
|
+
if (key === null)
|
|
973
1023
|
return env;
|
|
974
|
-
const v =
|
|
1024
|
+
const v = this.evalPure(inner, env);
|
|
975
1025
|
const out = cloneEnv(env);
|
|
976
1026
|
if (branch) {
|
|
977
1027
|
// Truthy: not NaN, not zero — endpoint exclusion when whole.
|
|
@@ -980,11 +1030,11 @@ class FnAnalyzer {
|
|
|
980
1030
|
r = absVal(1, r.hi, r.whole, false, r.spelling);
|
|
981
1031
|
else if (r.whole && r.hi === 0 && r.lo <= -1)
|
|
982
1032
|
r = absVal(r.lo, -1, r.whole, false, r.spelling);
|
|
983
|
-
out.set(
|
|
1033
|
+
out.set(key, r);
|
|
984
1034
|
}
|
|
985
1035
|
else {
|
|
986
1036
|
// Falsy: 0, -0, or NaN.
|
|
987
|
-
out.set(
|
|
1037
|
+
out.set(key, meetInterval(v, 0, 0, false));
|
|
988
1038
|
}
|
|
989
1039
|
return out;
|
|
990
1040
|
}
|
|
@@ -1019,11 +1069,19 @@ class FnAnalyzer {
|
|
|
1019
1069
|
case "boolLit":
|
|
1020
1070
|
case "varRef":
|
|
1021
1071
|
case "unitLit":
|
|
1072
|
+
case "selfRef":
|
|
1022
1073
|
return true;
|
|
1074
|
+
case "recordGet":
|
|
1075
|
+
case "fieldGet":
|
|
1076
|
+
return this.staticAccessPath(e) !== null;
|
|
1023
1077
|
case "bin":
|
|
1024
1078
|
return this.isPure(e.left) && this.isPure(e.right);
|
|
1025
1079
|
case "unary":
|
|
1026
1080
|
return this.isPure(e.operand);
|
|
1081
|
+
case "logical":
|
|
1082
|
+
return this.isPure(e.left) && this.isPure(e.right);
|
|
1083
|
+
case "toBool":
|
|
1084
|
+
return this.isPure(e.operand);
|
|
1027
1085
|
default:
|
|
1028
1086
|
return false;
|
|
1029
1087
|
}
|
|
@@ -1035,6 +1093,13 @@ class FnAnalyzer {
|
|
|
1035
1093
|
return constVal(e.value, e.spelling);
|
|
1036
1094
|
case "varRef":
|
|
1037
1095
|
return e.type.kind === "f64" ? envGet(env, e.localId) : { ...TOP };
|
|
1096
|
+
case "recordGet": {
|
|
1097
|
+
const slot = this.cfg.records.get(e.shapeId)?.get(e.field);
|
|
1098
|
+
if (slot === undefined || e.type.kind !== "f64")
|
|
1099
|
+
return { ...TOP };
|
|
1100
|
+
const key = this.pathKey(e, slot.cls);
|
|
1101
|
+
return key === null ? classSeed(slot.cls) : envGet(env, key);
|
|
1102
|
+
}
|
|
1038
1103
|
case "unary":
|
|
1039
1104
|
if (e.op === "-")
|
|
1040
1105
|
return transferNeg(this.evalPure(e.operand, env));
|
|
@@ -1049,6 +1114,82 @@ class FnAnalyzer {
|
|
|
1049
1114
|
return { ...TOP };
|
|
1050
1115
|
}
|
|
1051
1116
|
}
|
|
1117
|
+
/** A canonical static data path. Source spellings that lower to the same
|
|
1118
|
+
* IR access (`m.total`, `m["total"]`) intentionally share a key; distinct
|
|
1119
|
+
* receiver bindings never do. Accessors/dynamic keys/computed receivers
|
|
1120
|
+
* have different IR nodes and are excluded. */
|
|
1121
|
+
staticAccessPath(e) {
|
|
1122
|
+
switch (e.kind) {
|
|
1123
|
+
case "varRef":
|
|
1124
|
+
return { rootId: e.localId, steps: [["var", e.localId]] };
|
|
1125
|
+
case "selfRef":
|
|
1126
|
+
return { rootId: null, steps: [["self"]] };
|
|
1127
|
+
case "recordGet": {
|
|
1128
|
+
const base = this.staticAccessPath(e.obj);
|
|
1129
|
+
if (base === null)
|
|
1130
|
+
return null;
|
|
1131
|
+
return { rootId: base.rootId, steps: [...base.steps, ["record", e.shapeId, e.field]] };
|
|
1132
|
+
}
|
|
1133
|
+
case "fieldGet": {
|
|
1134
|
+
const base = this.staticAccessPath(e.obj);
|
|
1135
|
+
if (base === null)
|
|
1136
|
+
return null;
|
|
1137
|
+
return { rootId: base.rootId, steps: [...base.steps, ["field", e.className, e.field]] };
|
|
1138
|
+
}
|
|
1139
|
+
default:
|
|
1140
|
+
return null;
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1143
|
+
pathRoots = new Map();
|
|
1144
|
+
pathKey(e, cls) {
|
|
1145
|
+
const path = this.staticAccessPath(e);
|
|
1146
|
+
if (path === null)
|
|
1147
|
+
return null;
|
|
1148
|
+
const prefix = cls === "i64" ? PATH_I64_PREFIX : PATH_U64_PREFIX;
|
|
1149
|
+
const key = `${prefix}${JSON.stringify(path.steps)}`;
|
|
1150
|
+
this.pathRoots.set(key, path.rootId);
|
|
1151
|
+
return key;
|
|
1152
|
+
}
|
|
1153
|
+
refinementKey(e, allowPaths) {
|
|
1154
|
+
if (e.kind === "varRef")
|
|
1155
|
+
return e.localId;
|
|
1156
|
+
if (!allowPaths || e.kind !== "recordGet" || e.type.kind !== "f64")
|
|
1157
|
+
return null;
|
|
1158
|
+
const slot = this.cfg.records.get(e.shapeId)?.get(e.field);
|
|
1159
|
+
return slot === undefined ? null : this.pathKey(e, slot.cls);
|
|
1160
|
+
}
|
|
1161
|
+
/** Path facts are admitted only when the entire guard is synchronous,
|
|
1162
|
+
* call-free, assignment-free static data access. This prevents a later
|
|
1163
|
+
* subexpression from mutating a field and `refine` subsequently
|
|
1164
|
+
* reconstructing a stale fact from the guard syntax. */
|
|
1165
|
+
stablePathGuard(e) {
|
|
1166
|
+
switch (e.kind) {
|
|
1167
|
+
case "numLit":
|
|
1168
|
+
case "strLit":
|
|
1169
|
+
case "boolLit":
|
|
1170
|
+
case "unitLit":
|
|
1171
|
+
case "varRef":
|
|
1172
|
+
case "selfRef":
|
|
1173
|
+
return true;
|
|
1174
|
+
case "recordGet":
|
|
1175
|
+
case "fieldGet":
|
|
1176
|
+
return this.staticAccessPath(e) !== null;
|
|
1177
|
+
case "bin":
|
|
1178
|
+
case "logical":
|
|
1179
|
+
return this.stablePathGuard(e.left) && this.stablePathGuard(e.right);
|
|
1180
|
+
case "unary":
|
|
1181
|
+
case "toBool":
|
|
1182
|
+
return this.stablePathGuard(e.operand);
|
|
1183
|
+
default:
|
|
1184
|
+
return false;
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
clearPathsRootedAt(env, localId) {
|
|
1188
|
+
for (const k of [...env.keys()]) {
|
|
1189
|
+
if (pathClassOfKey(k) !== null && this.pathRoots.get(k) === localId)
|
|
1190
|
+
env.delete(k);
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1052
1193
|
/* ── expression evaluation (side effects applied to env) ────────────── */
|
|
1053
1194
|
evalMath(e, env, mutate) {
|
|
1054
1195
|
const arg = (i) => (mutate ? this.evalExpr(e.args[i], env) : this.evalPure(e.args[i], env));
|
|
@@ -1123,14 +1264,16 @@ class FnAnalyzer {
|
|
|
1123
1264
|
}
|
|
1124
1265
|
case "assignExpr": {
|
|
1125
1266
|
const v = this.evalExpr(e.value, env);
|
|
1267
|
+
this.clearPathsRootedAt(env, e.localId);
|
|
1126
1268
|
if (this.bindingIsF64(e.localId))
|
|
1127
1269
|
env.set(e.localId, v);
|
|
1128
1270
|
return v;
|
|
1129
1271
|
}
|
|
1130
1272
|
case "ternary": {
|
|
1131
1273
|
this.evalExpr(e.cond, env);
|
|
1132
|
-
const
|
|
1133
|
-
const
|
|
1274
|
+
const allowPaths = this.stablePathGuard(e.cond);
|
|
1275
|
+
const thenEnv = this.refine(cloneEnv(env), e.cond, true, allowPaths);
|
|
1276
|
+
const elseEnv = this.refine(cloneEnv(env), e.cond, false, allowPaths);
|
|
1134
1277
|
const a = thenEnv === null ? BOTTOM : this.evalExpr(e.then, thenEnv);
|
|
1135
1278
|
const b = elseEnv === null ? BOTTOM : this.evalExpr(e.else_, elseEnv);
|
|
1136
1279
|
mergeInto(env, joinEnv(thenEnv, elseEnv));
|
|
@@ -1187,12 +1330,15 @@ class FnAnalyzer {
|
|
|
1187
1330
|
}
|
|
1188
1331
|
case "libCall": {
|
|
1189
1332
|
const math = this.evalMath(e, env, true);
|
|
1190
|
-
if (math !== null)
|
|
1333
|
+
if (math !== null) {
|
|
1334
|
+
clearPathFacts(env);
|
|
1191
1335
|
return math;
|
|
1336
|
+
}
|
|
1192
1337
|
for (const a of e.args)
|
|
1193
1338
|
this.evalExpr(a, env);
|
|
1194
1339
|
if (e.args.some((a) => typeContainsFunc(a.type)))
|
|
1195
1340
|
this.havocAllGlobals(env);
|
|
1341
|
+
clearPathFacts(env);
|
|
1196
1342
|
return { ...TOP };
|
|
1197
1343
|
}
|
|
1198
1344
|
case "callValue":
|
|
@@ -1207,6 +1353,15 @@ class FnAnalyzer {
|
|
|
1207
1353
|
this.havocAllGlobals(env);
|
|
1208
1354
|
return { ...TOP };
|
|
1209
1355
|
}
|
|
1356
|
+
case "ffiCall":
|
|
1357
|
+
case "yieldExpr":
|
|
1358
|
+
case "awaitExpr":
|
|
1359
|
+
case "awaitUnionExpr": {
|
|
1360
|
+
for (const v of childExprs(e))
|
|
1361
|
+
this.evalExpr(v, env);
|
|
1362
|
+
clearPathFacts(env);
|
|
1363
|
+
return { ...TOP };
|
|
1364
|
+
}
|
|
1210
1365
|
case "recordLit": {
|
|
1211
1366
|
const slotMap = this.cfg.records.get(e.type.shapeId);
|
|
1212
1367
|
for (const f of e.fields) {
|
|
@@ -1226,18 +1381,28 @@ class FnAnalyzer {
|
|
|
1226
1381
|
// — instead of a spurious may-be-NaN wholeness refusal).
|
|
1227
1382
|
this.evalExpr(e.obj, env);
|
|
1228
1383
|
const slot = this.cfg.records.get(e.shapeId)?.get(e.field);
|
|
1229
|
-
if (slot !== undefined && e.type.kind === "f64")
|
|
1230
|
-
|
|
1384
|
+
if (slot !== undefined && e.type.kind === "f64") {
|
|
1385
|
+
const key = this.pathKey(e, slot.cls);
|
|
1386
|
+
return key === null ? classSeed(slot.cls) : envGet(env, key);
|
|
1387
|
+
}
|
|
1231
1388
|
return { ...TOP };
|
|
1232
1389
|
}
|
|
1390
|
+
case "fieldGet":
|
|
1391
|
+
this.evalExpr(e.obj, env);
|
|
1392
|
+
return { ...TOP };
|
|
1233
1393
|
default: {
|
|
1234
1394
|
for (const v of childExprs(e))
|
|
1235
1395
|
this.evalExpr(v, env);
|
|
1396
|
+
// Unmodeled expressions do not participate in the cheap
|
|
1397
|
+
// straight-line proof. Some can invoke runtime/user machinery;
|
|
1398
|
+
// refusing to carry a field fact through them is the safe verdict.
|
|
1399
|
+
clearPathFacts(env);
|
|
1236
1400
|
return { ...TOP };
|
|
1237
1401
|
}
|
|
1238
1402
|
}
|
|
1239
1403
|
}
|
|
1240
1404
|
havocCall(callee, env) {
|
|
1405
|
+
clearPathFacts(env);
|
|
1241
1406
|
if (this.effects.havocAll.has(callee) || !this.effects.perFn.has(callee)) {
|
|
1242
1407
|
this.havocAllGlobals(env);
|
|
1243
1408
|
return;
|
|
@@ -1246,6 +1411,7 @@ class FnAnalyzer {
|
|
|
1246
1411
|
env.delete(g); // absent global = TOP
|
|
1247
1412
|
}
|
|
1248
1413
|
havocAllGlobals(env) {
|
|
1414
|
+
clearPathFacts(env);
|
|
1249
1415
|
for (const k of [...env.keys()]) {
|
|
1250
1416
|
if (isGlobalId(k))
|
|
1251
1417
|
env.delete(k);
|