@exornea/zeno-compiler 1.7.0

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 (42) hide show
  1. package/bin/zeno-codegen.mjs +117 -0
  2. package/dist/analyzer.d.ts +13 -0
  3. package/dist/analyzer.d.ts.map +1 -0
  4. package/dist/analyzer.js +153 -0
  5. package/dist/analyzer.js.map +1 -0
  6. package/dist/diagnostics.d.ts +38 -0
  7. package/dist/diagnostics.d.ts.map +1 -0
  8. package/dist/diagnostics.js +36 -0
  9. package/dist/diagnostics.js.map +1 -0
  10. package/dist/emitter-fixed-array.d.ts +11 -0
  11. package/dist/emitter-fixed-array.d.ts.map +1 -0
  12. package/dist/emitter-fixed-array.js +90 -0
  13. package/dist/emitter-fixed-array.js.map +1 -0
  14. package/dist/emitter-template.d.ts +5 -0
  15. package/dist/emitter-template.d.ts.map +1 -0
  16. package/dist/emitter-template.js +37 -0
  17. package/dist/emitter-template.js.map +1 -0
  18. package/dist/emitter.d.ts +7 -0
  19. package/dist/emitter.d.ts.map +1 -0
  20. package/dist/emitter.js +746 -0
  21. package/dist/emitter.js.map +1 -0
  22. package/dist/index.d.ts +8 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +8 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/lowering.d.ts +18 -0
  27. package/dist/lowering.d.ts.map +1 -0
  28. package/dist/lowering.js +631 -0
  29. package/dist/lowering.js.map +1 -0
  30. package/dist/measurement.d.ts +41 -0
  31. package/dist/measurement.d.ts.map +1 -0
  32. package/dist/measurement.js +58 -0
  33. package/dist/measurement.js.map +1 -0
  34. package/dist/result.d.ts +20 -0
  35. package/dist/result.d.ts.map +1 -0
  36. package/dist/result.js +25 -0
  37. package/dist/result.js.map +1 -0
  38. package/dist/validator.d.ts +4 -0
  39. package/dist/validator.d.ts.map +1 -0
  40. package/dist/validator.js +342 -0
  41. package/dist/validator.js.map +1 -0
  42. package/package.json +47 -0
@@ -0,0 +1,41 @@
1
+ export declare const MEASUREMENT_LAYERS: readonly ["typescript-syntax", "typescript-type", "layout-ir-fixed", "layout-ir-dynamic", "emitted-view"];
2
+ export type Resolution = (typeof MEASUREMENT_LAYERS)[number];
3
+ export type Phase = "phase-0" | "phase-1" | "phase-2" | "phase-3";
4
+ export interface Measurement {
5
+ readonly construct: string;
6
+ readonly layer: Resolution;
7
+ readonly phase: Phase;
8
+ }
9
+ export type MeasurementFailure = {
10
+ readonly kind: "InsufficientResolution";
11
+ readonly construct: string;
12
+ readonly required: Resolution;
13
+ readonly given: Resolution;
14
+ readonly phase?: Phase;
15
+ } | {
16
+ readonly kind: "UnsupportedAtPhase";
17
+ readonly construct: string;
18
+ readonly phase: Phase;
19
+ } | {
20
+ readonly kind: "AmbiguousLayout";
21
+ readonly construct: string;
22
+ readonly candidates: readonly string[];
23
+ } | {
24
+ readonly kind: "DuplicateDefinition";
25
+ readonly construct: string;
26
+ readonly first: string;
27
+ readonly duplicate: string;
28
+ } | {
29
+ readonly kind: "LayoutInvariantViolation";
30
+ readonly construct: string;
31
+ readonly invariant: string;
32
+ };
33
+ export type ValidationError = MeasurementFailure;
34
+ export declare function measure(construct: string, layer: Resolution, phase: Phase): Measurement;
35
+ export declare function insufficientResolution(construct: string, required: Resolution, given: Resolution, phase?: Phase): MeasurementFailure;
36
+ export declare function unsupportedAtPhase(construct: string, phase: Phase): MeasurementFailure;
37
+ export declare function ambiguousLayout(construct: string, candidates: readonly string[]): MeasurementFailure;
38
+ export declare function duplicateDefinition(construct: string, first: string, duplicate: string): MeasurementFailure;
39
+ export declare function layoutInvariantViolation(construct: string, invariant: string): MeasurementFailure;
40
+ export declare function layerCanObserve(given: Resolution, required: Resolution): boolean;
41
+ //# sourceMappingURL=measurement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurement.d.ts","sourceRoot":"","sources":["../src/measurement.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,2GAMrB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAEjD,wBAAgB,OAAO,CACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,GACX,WAAW,CAEb;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,UAAU,EACjB,KAAK,CAAC,EAAE,KAAK,GACZ,kBAAkB,CAgBpB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,GACX,kBAAkB,CAMpB;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,kBAAkB,CAMpB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,kBAAkB,CAMpB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,UAAU,GACnB,OAAO,CAET"}
@@ -0,0 +1,58 @@
1
+ export const MEASUREMENT_LAYERS = [
2
+ "typescript-syntax",
3
+ "typescript-type",
4
+ "layout-ir-fixed",
5
+ "layout-ir-dynamic",
6
+ "emitted-view",
7
+ ];
8
+ export function measure(construct, layer, phase) {
9
+ return { construct, layer, phase };
10
+ }
11
+ export function insufficientResolution(construct, required, given, phase) {
12
+ const failure = {
13
+ kind: "InsufficientResolution",
14
+ construct,
15
+ required,
16
+ given,
17
+ };
18
+ if (phase === undefined) {
19
+ return failure;
20
+ }
21
+ return { ...failure, phase };
22
+ }
23
+ export function unsupportedAtPhase(construct, phase) {
24
+ return {
25
+ kind: "UnsupportedAtPhase",
26
+ construct,
27
+ phase,
28
+ };
29
+ }
30
+ export function ambiguousLayout(construct, candidates) {
31
+ return {
32
+ kind: "AmbiguousLayout",
33
+ construct,
34
+ candidates,
35
+ };
36
+ }
37
+ export function duplicateDefinition(construct, first, duplicate) {
38
+ return {
39
+ kind: "DuplicateDefinition",
40
+ construct,
41
+ first,
42
+ duplicate,
43
+ };
44
+ }
45
+ export function layoutInvariantViolation(construct, invariant) {
46
+ return {
47
+ kind: "LayoutInvariantViolation",
48
+ construct,
49
+ invariant,
50
+ };
51
+ }
52
+ export function layerCanObserve(given, required) {
53
+ return layerRank(given) >= layerRank(required);
54
+ }
55
+ function layerRank(layer) {
56
+ return MEASUREMENT_LAYERS.indexOf(layer);
57
+ }
58
+ //# sourceMappingURL=measurement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurement.js","sourceRoot":"","sources":["../src/measurement.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;CACN,CAAC;AA4CX,MAAM,UAAU,OAAO,CACrB,SAAiB,EACjB,KAAiB,EACjB,KAAY;IAEZ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,QAAoB,EACpB,KAAiB,EACjB,KAAa;IAEb,MAAM,OAAO,GAGT;QACF,IAAI,EAAE,wBAAwB;QAC9B,SAAS;QACT,QAAQ;QACR,KAAK;KACN,CAAC;IAEF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,KAAY;IAEZ,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,SAAS;QACT,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,UAA6B;IAE7B,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,KAAa,EACb,SAAiB;IAEjB,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,SAAS;QACT,KAAK;QACL,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,SAAiB;IAEjB,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,SAAS;QACT,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAiB,EACjB,QAAoB;IAEpB,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,SAAS,CAAC,KAAiB;IAClC,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type Result<T, E> = {
2
+ readonly ok: true;
3
+ readonly value: T;
4
+ } | {
5
+ readonly ok: false;
6
+ readonly error: E;
7
+ };
8
+ export declare function ok<T>(value: T): Result<T, never>;
9
+ export declare function err<E>(error: E): Result<never, E>;
10
+ export declare function isOk<T, E>(result: Result<T, E>): result is {
11
+ readonly ok: true;
12
+ readonly value: T;
13
+ };
14
+ export declare function isErr<T, E>(result: Result<T, E>): result is {
15
+ readonly ok: false;
16
+ readonly error: E;
17
+ };
18
+ export declare function mapResult<T, U, E>(result: Result<T, E>, map: (value: T) => U): Result<U, E>;
19
+ export declare function andThen<T, U, E>(result: Result<T, E>, next: (value: T) => Result<U, E>): Result<U, E>;
20
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IACnB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACxC;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAE9C,wBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAEhD;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAEjD;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAEnG;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAErG;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GACnB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAMd;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAMd"}
package/dist/result.js ADDED
@@ -0,0 +1,25 @@
1
+ export function ok(value) {
2
+ return { ok: true, value };
3
+ }
4
+ export function err(error) {
5
+ return { ok: false, error };
6
+ }
7
+ export function isOk(result) {
8
+ return result.ok;
9
+ }
10
+ export function isErr(result) {
11
+ return !result.ok;
12
+ }
13
+ export function mapResult(result, map) {
14
+ if (!result.ok) {
15
+ return result;
16
+ }
17
+ return ok(map(result.value));
18
+ }
19
+ export function andThen(result, next) {
20
+ if (!result.ok) {
21
+ return result;
22
+ }
23
+ return next(result.value);
24
+ }
25
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,KAAQ;IAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,IAAI,CAAO,MAAoB;IAC7C,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,KAAK,CAAO,MAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAoB,EACpB,GAAoB;IAEpB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAAoB,EACpB,IAAgC;IAEhC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type StructLayout } from "@exornea/zeno-schema";
2
+ import { type LayoutDiagnostic } from "./diagnostics.js";
3
+ export declare function validateLayouts(layouts: StructLayout[]): LayoutDiagnostic[];
4
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA+B7E,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CA2B3E"}
@@ -0,0 +1,342 @@
1
+ import { POINTER32_BYTE_LENGTH, SPAN32_BYTE_LENGTH, VECTOR32_BYTE_LENGTH, alignTo, scalarByteLength, } from "@exornea/zeno-schema";
2
+ import { createIrDiagnostic } from "./diagnostics.js";
3
+ import { duplicateDefinition, layoutInvariantViolation, measure, unsupportedAtPhase, } from "./measurement.js";
4
+ export function validateLayouts(layouts) {
5
+ const diagnostics = [];
6
+ const context = {
7
+ layoutNames: new Set(layouts.map((layout) => layout.name)),
8
+ layoutMap: new Map(layouts.map((layout) => [layout.name, layout])),
9
+ };
10
+ for (const layout of layouts) {
11
+ const seenFieldNames = new Set();
12
+ for (const field of layout.fields) {
13
+ const fieldContext = { ...context, layout, field, seenFieldNames };
14
+ for (const rule of fieldValidationRules) {
15
+ const diagnostic = rule(fieldContext);
16
+ if (diagnostic !== null) {
17
+ diagnostics.push(diagnostic);
18
+ }
19
+ }
20
+ seenFieldNames.add(field.name);
21
+ }
22
+ const layoutContext = { ...context, layout };
23
+ for (const rule of layoutValidationRules) {
24
+ diagnostics.push(...rule(layoutContext));
25
+ }
26
+ }
27
+ return diagnostics;
28
+ }
29
+ const fieldValidationRules = [
30
+ validateDuplicateField,
31
+ validateFieldAlignment,
32
+ validateDescriptorShape,
33
+ validatePointerTarget,
34
+ validatePointerVectorTarget,
35
+ validatePointerShape,
36
+ validatePointerVectorElementShape,
37
+ validateVectorElementByteLength,
38
+ validateFixedArrayElementByteLength,
39
+ validateStructVectorElementTarget,
40
+ validateStructVectorElementStride,
41
+ validateStructFixedArrayElementTarget,
42
+ validateStructFixedArrayElementStride,
43
+ ];
44
+ const layoutValidationRules = [
45
+ validateNoOverlappingFields,
46
+ validateStructByteLength,
47
+ validateNoInlineStructCycle,
48
+ ];
49
+ function validateDuplicateField({ layout, field, seenFieldNames, }) {
50
+ if (!seenFieldNames.has(field.name)) {
51
+ return null;
52
+ }
53
+ return createIrDiagnostic("DUPLICATE_FIELD", `Field "${field.name}" is duplicated in struct "${layout.name}".`, `validateLayouts:${layout.name}.${field.name}`, {
54
+ structName: layout.name,
55
+ fieldName: field.name,
56
+ measurement: measure(`field "${field.name}" definition`, "layout-ir-fixed", "phase-0"),
57
+ error: duplicateDefinition(`field "${field.name}"`, "first declaration", "duplicate declaration"),
58
+ });
59
+ }
60
+ function validateFieldAlignment({ layout, field, }) {
61
+ if (isAligned(field)) {
62
+ return null;
63
+ }
64
+ return invariantDiagnostic(layout, field, "ALIGNMENT_VIOLATION", `Field "${field.name}" in struct "${layout.name}" is not aligned to ${field.alignment} bytes.`, `field "${field.name}" alignment`, `offset must be divisible by ${field.alignment}`);
65
+ }
66
+ function validateDescriptorShape({ layout, field, }) {
67
+ if (hasValidDescriptorShape(field)) {
68
+ return null;
69
+ }
70
+ return invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Field "${field.name}" in struct "${layout.name}" has an invalid descriptor layout.`, `field "${field.name}" descriptor`, "descriptor fields must use 4-byte alignment and the correct descriptor byte length");
71
+ }
72
+ function validatePointerTarget({ layout, field, layoutNames, }) {
73
+ if (field.kind !== "pointer" || layoutNames.has(field.targetTypeName)) {
74
+ return null;
75
+ }
76
+ return unknownPointerTargetDiagnostic(layout, field.name, field.targetTypeName, `validateLayouts:${layout.name}.${field.name}`);
77
+ }
78
+ function validatePointerVectorTarget({ layout, field, layoutNames, }) {
79
+ if (field.kind !== "vector" ||
80
+ field.element.kind !== "pointer" ||
81
+ layoutNames.has(field.element.targetTypeName)) {
82
+ return null;
83
+ }
84
+ return unknownPointerTargetDiagnostic(layout, field.name, field.element.targetTypeName, `validateLayouts:${layout.name}.${field.name}.element`);
85
+ }
86
+ function validatePointerShape({ layout, field, }) {
87
+ if (field.kind !== "pointer" || hasValidPointerShape(field)) {
88
+ return null;
89
+ }
90
+ return invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Pointer field "${field.name}" in struct "${layout.name}" has an invalid pointer layout.`, `field "${field.name}" pointer`, "pointer32 must use signed i32 field-relative offsets and raw 0xffffffff null");
91
+ }
92
+ function validatePointerVectorElementShape({ layout, field, }) {
93
+ if (field.kind !== "vector" ||
94
+ field.element.kind !== "pointer" ||
95
+ hasValidPointerElementShape(field.element)) {
96
+ return null;
97
+ }
98
+ return invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Pointer vector field "${field.name}" in struct "${layout.name}" has an invalid pointer element layout.`, `field "${field.name}" pointer vector element`, "pointer vector elements must use signed i32 element-relative offsets and raw 0xffffffff null");
99
+ }
100
+ function validateVectorElementByteLength({ layout, field, }) {
101
+ if (field.kind !== "vector" || hasValidVectorElementByteLength(field.element)) {
102
+ return null;
103
+ }
104
+ return invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Vector field "${field.name}" in struct "${layout.name}" has an invalid element byte length.`, `field "${field.name}" vector element`, "vector element byteLength must match its element kind");
105
+ }
106
+ function validateFixedArrayElementByteLength({ layout, field, }) {
107
+ if (field.kind !== "fixed-array" ||
108
+ (field.length > 0 &&
109
+ hasValidFixedArrayElementByteLength(field.element) &&
110
+ field.byteLength === field.length * field.element.byteLength)) {
111
+ return null;
112
+ }
113
+ return invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Fixed array field "${field.name}" in struct "${layout.name}" has an invalid element layout.`, `field "${field.name}" fixed array element`, "fixed array length must be positive and byteLength must equal length * element byteLength");
114
+ }
115
+ function validateStructVectorElementTarget({ layout, field, layoutNames, }) {
116
+ if (field.kind !== "vector" ||
117
+ field.element.kind !== "struct" ||
118
+ layoutNames.has(field.element.typeName)) {
119
+ return null;
120
+ }
121
+ return unknownStructVectorElementDiagnostic(layout, field.name, field.element.typeName, `validateLayouts:${layout.name}.${field.name}.element`);
122
+ }
123
+ function validateStructFixedArrayElementTarget({ layout, field, layoutNames, }) {
124
+ if (field.kind !== "fixed-array" ||
125
+ field.element.kind !== "struct" ||
126
+ layoutNames.has(field.element.typeName)) {
127
+ return null;
128
+ }
129
+ return unknownStructElementDiagnostic(layout, field.name, field.element.typeName, `validateLayouts:${layout.name}.${field.name}.element`, "Fixed array");
130
+ }
131
+ function validateStructVectorElementStride({ layout, field, layoutNames, layoutMap, }) {
132
+ if (field.kind !== "vector" ||
133
+ field.element.kind !== "struct" ||
134
+ !layoutNames.has(field.element.typeName) ||
135
+ isFixedStrideStruct(field.element.typeName, layoutMap, new Set())) {
136
+ return null;
137
+ }
138
+ return invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Vector field "${field.name}" in struct "${layout.name}" uses struct element "${field.element.typeName}" with dynamic tail fields; use vector<pointer<T>> for dynamic or graph-shaped elements.`, `field "${field.name}" struct vector element`, "vector<struct> elements must be fixed-stride; use vector<pointer<T>> for dynamic or graph-shaped elements");
139
+ }
140
+ function validateStructFixedArrayElementStride({ layout, field, layoutNames, layoutMap, }) {
141
+ if (field.kind !== "fixed-array" ||
142
+ field.element.kind !== "struct" ||
143
+ !layoutNames.has(field.element.typeName) ||
144
+ isFixedStrideStruct(field.element.typeName, layoutMap, new Set())) {
145
+ return null;
146
+ }
147
+ return invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Fixed array field "${field.name}" in struct "${layout.name}" uses struct element "${field.element.typeName}" with dynamic tail fields; use fixedArray<pointer<T>, N> only after pointer fixed arrays have an ABI policy.`, `field "${field.name}" fixed array struct element`, "fixedArray<struct, N> elements must be fixed-stride");
148
+ }
149
+ function validateNoOverlappingFields({ layout, }) {
150
+ return overlappingFields(layout.fields).map((field) => invariantDiagnostic(layout, field, "LAYOUT_INVARIANT", `Field "${field.name}" in struct "${layout.name}" overlaps a previous field.`, `field "${field.name}" offset range`, "field ranges must not overlap"));
151
+ }
152
+ function validateStructByteLength({ layout, }) {
153
+ const expectedByteLength = expectedStructByteLength(layout);
154
+ if (layout.byteLength === expectedByteLength) {
155
+ return [];
156
+ }
157
+ return [
158
+ createIrDiagnostic("LAYOUT_INVARIANT", `Struct "${layout.name}" byteLength is ${layout.byteLength}, expected ${expectedByteLength}.`, `validateLayouts:${layout.name}.byteLength`, {
159
+ structName: layout.name,
160
+ measurement: measure(`struct "${layout.name}" byteLength`, "layout-ir-fixed", "phase-0"),
161
+ error: layoutInvariantViolation(`struct "${layout.name}" byteLength`, "byteLength must equal the aligned end of the last field"),
162
+ }),
163
+ ];
164
+ }
165
+ function validateNoInlineStructCycle({ layout, layoutMap, }) {
166
+ if (!hasInlineStructCycle(layout.name, layoutMap, new Set())) {
167
+ return [];
168
+ }
169
+ return [
170
+ createIrDiagnostic("RECURSIVE_STRUCT", `Struct "${layout.name}" contains an inline recursive layout. Use pointer<T> for recursive references.`, `validateLayouts:${layout.name}.inlineCycle`, {
171
+ structName: layout.name,
172
+ measurement: measure(`struct "${layout.name}" inline size`, "layout-ir-fixed", "phase-0"),
173
+ error: unsupportedAtPhase(`inline recursive struct "${layout.name}"`, "phase-0"),
174
+ }),
175
+ ];
176
+ }
177
+ function unknownStructVectorElementDiagnostic(layout, fieldName, typeName, description) {
178
+ return createIrDiagnostic("UNKNOWN_STRUCT", `Vector field "${fieldName}" in struct "${layout.name}" targets unknown struct "${typeName}".`, description, {
179
+ structName: layout.name,
180
+ fieldName,
181
+ measurement: measure(`vector "${fieldName}" struct element`, "layout-ir-fixed", "phase-0"),
182
+ error: unsupportedAtPhase(`vector struct element "${typeName}"`, "phase-0"),
183
+ });
184
+ }
185
+ function unknownStructElementDiagnostic(layout, fieldName, typeName, description, label) {
186
+ return createIrDiagnostic("UNKNOWN_STRUCT", `${label} field "${fieldName}" in struct "${layout.name}" targets unknown struct "${typeName}".`, description, {
187
+ structName: layout.name,
188
+ fieldName,
189
+ measurement: measure(`${label.toLowerCase()} "${fieldName}" struct element`, "layout-ir-fixed", "phase-0"),
190
+ error: unsupportedAtPhase(`${label.toLowerCase()} struct element "${typeName}"`, "phase-0"),
191
+ });
192
+ }
193
+ function unknownPointerTargetDiagnostic(layout, fieldName, targetTypeName, description) {
194
+ return createIrDiagnostic("UNKNOWN_STRUCT", `Pointer field "${fieldName}" in struct "${layout.name}" targets unknown struct "${targetTypeName}".`, description, {
195
+ structName: layout.name,
196
+ fieldName,
197
+ measurement: measure(`pointer "${fieldName}" target`, "layout-ir-fixed", "phase-0"),
198
+ error: unsupportedAtPhase(`pointer target "${targetTypeName}"`, "phase-0"),
199
+ });
200
+ }
201
+ function hasValidPointerShape(field) {
202
+ return (field.descriptor === "pointer32" &&
203
+ field.nullValue === 0xffffffff &&
204
+ field.offsetBase === "field" &&
205
+ field.offsetEncoding === "i32");
206
+ }
207
+ function hasValidPointerElementShape(element) {
208
+ return (element.descriptor === "pointer32" &&
209
+ element.nullValue === 0xffffffff &&
210
+ element.offsetBase === "element" &&
211
+ element.offsetEncoding === "i32");
212
+ }
213
+ function hasInlineStructCycle(layoutName, layouts, active) {
214
+ if (active.has(layoutName)) {
215
+ return true;
216
+ }
217
+ const layout = layouts.get(layoutName);
218
+ if (layout === undefined) {
219
+ return false;
220
+ }
221
+ active.add(layoutName);
222
+ for (const field of layout.fields) {
223
+ if (field.kind === "struct" &&
224
+ hasInlineStructCycle(field.typeName, layouts, active)) {
225
+ active.delete(layoutName);
226
+ return true;
227
+ }
228
+ if (field.kind === "fixed-array" &&
229
+ field.element.kind === "struct" &&
230
+ hasInlineStructCycle(field.element.typeName, layouts, active)) {
231
+ active.delete(layoutName);
232
+ return true;
233
+ }
234
+ }
235
+ active.delete(layoutName);
236
+ return false;
237
+ }
238
+ function isFixedStrideStruct(layoutName, layouts, active) {
239
+ if (active.has(layoutName)) {
240
+ return false;
241
+ }
242
+ const layout = layouts.get(layoutName);
243
+ if (layout === undefined) {
244
+ return false;
245
+ }
246
+ active.add(layoutName);
247
+ for (const field of layout.fields) {
248
+ switch (field.kind) {
249
+ case "dynamic-string":
250
+ case "dynamic-bytes":
251
+ case "vector":
252
+ active.delete(layoutName);
253
+ return false;
254
+ case "fixed-array":
255
+ if (field.element.kind === "struct" &&
256
+ !isFixedStrideStruct(field.element.typeName, layouts, active)) {
257
+ active.delete(layoutName);
258
+ return false;
259
+ }
260
+ break;
261
+ case "struct":
262
+ if (!isFixedStrideStruct(field.typeName, layouts, active)) {
263
+ active.delete(layoutName);
264
+ return false;
265
+ }
266
+ break;
267
+ default:
268
+ break;
269
+ }
270
+ }
271
+ active.delete(layoutName);
272
+ return true;
273
+ }
274
+ function isAligned(field) {
275
+ if (field.alignment <= 0) {
276
+ return false;
277
+ }
278
+ return field.offset % field.alignment === 0;
279
+ }
280
+ function hasValidDescriptorShape(field) {
281
+ switch (field.kind) {
282
+ case "dynamic-string":
283
+ case "dynamic-bytes":
284
+ return field.alignment >= 4 && field.byteLength === SPAN32_BYTE_LENGTH;
285
+ case "vector":
286
+ return field.alignment >= 4 && field.byteLength === VECTOR32_BYTE_LENGTH;
287
+ case "pointer":
288
+ return field.alignment >= 4 && field.byteLength === POINTER32_BYTE_LENGTH;
289
+ default:
290
+ return true;
291
+ }
292
+ }
293
+ function hasValidVectorElementByteLength(element) {
294
+ switch (element.kind) {
295
+ case "scalar":
296
+ return element.byteLength === scalarByteLength(element.scalar);
297
+ case "dynamic-string":
298
+ case "dynamic-bytes":
299
+ return element.byteLength === SPAN32_BYTE_LENGTH;
300
+ case "fixed-bytes":
301
+ case "fixed-string":
302
+ case "struct":
303
+ return element.byteLength > 0;
304
+ case "pointer":
305
+ return element.byteLength === POINTER32_BYTE_LENGTH;
306
+ }
307
+ }
308
+ function hasValidFixedArrayElementByteLength(element) {
309
+ switch (element.kind) {
310
+ case "scalar":
311
+ return element.byteLength === scalarByteLength(element.scalar);
312
+ case "fixed-bytes":
313
+ case "fixed-string":
314
+ case "struct":
315
+ return element.byteLength > 0;
316
+ }
317
+ }
318
+ function overlappingFields(fields) {
319
+ const sortedFields = [...fields].sort((left, right) => left.offset - right.offset);
320
+ const overlaps = [];
321
+ let previousEnd = 0;
322
+ for (const field of sortedFields) {
323
+ if (field.offset < previousEnd) {
324
+ overlaps.push(field);
325
+ }
326
+ previousEnd = Math.max(previousEnd, field.offset + field.byteLength);
327
+ }
328
+ return overlaps;
329
+ }
330
+ function expectedStructByteLength(layout) {
331
+ const end = layout.fields.reduce((maxEnd, field) => Math.max(maxEnd, field.offset + field.byteLength), 0);
332
+ return alignTo(end, layout.alignment);
333
+ }
334
+ function invariantDiagnostic(layout, field, code, message, construct, invariant) {
335
+ return createIrDiagnostic(code, message, `validateLayouts:${layout.name}.${field.name}`, {
336
+ structName: layout.name,
337
+ fieldName: field.name,
338
+ measurement: measure(construct, "layout-ir-fixed", "phase-0"),
339
+ error: layoutInvariantViolation(construct, invariant),
340
+ });
341
+ }
342
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@exornea/zeno-compiler",
3
+ "version": "1.7.0",
4
+ "description": "TypeScript schema analyzer and code generator for Zeno zero-copy binary views.",
5
+ "keywords": [
6
+ "typescript",
7
+ "binary",
8
+ "zero-copy",
9
+ "codegen",
10
+ "cli",
11
+ "dataview",
12
+ "schema"
13
+ ],
14
+ "homepage": "https://github.com/srtdog64/zeno#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/srtdog64/zeno/issues"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/srtdog64/zeno.git",
21
+ "directory": "packages/compiler"
22
+ },
23
+ "type": "module",
24
+ "main": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "files": [
27
+ "dist/",
28
+ "bin/",
29
+ "!dist/plugin.*"
30
+ ],
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "default": "./dist/index.js"
35
+ }
36
+ },
37
+ "bin": {
38
+ "zeno-codegen": "./bin/zeno-codegen.mjs"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "dependencies": {
44
+ "@exornea/zeno-schema": "1.7.0",
45
+ "typescript": "^5.9.0"
46
+ }
47
+ }