@exornea/zeno-compiler 2.2.0 → 2.3.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.
@@ -0,0 +1,3 @@
1
+ import { type FieldLayout, type StructLayout } from "@exornea/zeno-schema";
2
+ export declare function emitField(layout: StructLayout, field: FieldLayout): string[];
3
+ //# sourceMappingURL=emitter-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-fields.d.ts","sourceRoot":"","sources":["../src/emitter-fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAM9B,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,CA2G5E"}
@@ -0,0 +1,180 @@
1
+ import { scalarGetterMethod, scalarSetterMethod, scalarTsType, } from "@exornea/zeno-schema";
2
+ import { emitFixedArrayFieldAccessor } from "./emitter-fixed-array.js";
3
+ import { encodingLiteral, toPascalCase } from "./emitter-names.js";
4
+ import { method } from "./emitter-template.js";
5
+ export function emitField(layout, field) {
6
+ // This switch intentionally mirrors the Layout IR field-kind surface.
7
+ // Split it only when a dispatch table removes real emitter complexity.
8
+ switch (field.kind) {
9
+ case "scalar": {
10
+ const getterMethod = scalarGetterMethod(field.scalar);
11
+ const setterMethod = scalarSetterMethod(field.scalar);
12
+ const typeName = scalarTsType(field.scalar);
13
+ const getterArgs = field.byteLength === 1 || field.scalar === "bool" ? "" : ", this.littleEndian";
14
+ const instanceOffset = `this.baseOffset + ${field.offset}`;
15
+ const getterBody = field.scalar === "bool"
16
+ ? `return this.view.${getterMethod}(${instanceOffset}) !== 0;`
17
+ : `return this.view.${getterMethod}(${instanceOffset}${getterArgs});`;
18
+ const setterBody = field.scalar === "bool"
19
+ ? `this.view.${setterMethod}(${instanceOffset}, value ? 1 : 0);`
20
+ : `this.view.${setterMethod}(${instanceOffset}, value${getterArgs});`;
21
+ return method `
22
+ get ${field.name}(): ${typeName} {
23
+ ${getterBody}
24
+ }
25
+ set ${field.name}(value: ${typeName}) {
26
+ ${setterBody}
27
+ }`;
28
+ }
29
+ case "fixed-bytes":
30
+ return method `
31
+ ${field.name}Bytes(): Uint8Array {
32
+ return fixedBytesView(this.backingBuffer(), this.backingOffset(${field.offset}), ${field.byteLength});
33
+ }`;
34
+ case "fixed-string":
35
+ return method `
36
+ ${field.name}Text(): string {
37
+ return decodeFixedText(this.backingBuffer(), this.backingOffset(${field.offset}), ${field.byteLength}, ${encodingLiteral(field.encoding)});
38
+ }
39
+ ${field.name}Bytes(): Uint8Array {
40
+ return fixedBytesView(this.backingBuffer(), this.backingOffset(${field.offset}), ${field.byteLength});
41
+ }`;
42
+ case "dynamic-string":
43
+ return method `
44
+ ${field.name}View(): Utf8SpanView {
45
+ return new Utf8SpanView(this.view, ${field.offset}, this.baseOffset, this.littleEndian, ${encodingLiteral(field.encoding)});
46
+ }`;
47
+ case "dynamic-bytes":
48
+ return method `
49
+ ${field.name}View(): BytesSpanView {
50
+ return new BytesSpanView(this.view, ${field.offset}, this.baseOffset, this.littleEndian);
51
+ }
52
+ ${field.name}Bytes(): Uint8Array {
53
+ return this.${field.name}View().bytes();
54
+ }`;
55
+ case "struct":
56
+ return method `
57
+ ${field.name}View(): ${field.typeName}View {
58
+ return new ${field.typeName}View(this.view, this.absoluteOffset(${field.offset}), this.littleEndian);
59
+ }`;
60
+ case "pointer": {
61
+ return emitPointerField(layout, field);
62
+ }
63
+ case "fixed-array":
64
+ return emitFixedArrayFieldAccessor(field, encodingLiteral);
65
+ case "vector":
66
+ switch (field.element.kind) {
67
+ case "scalar":
68
+ return method `
69
+ ${field.name}View(): ScalarVectorView<${scalarTsType(field.element.scalar)}> {
70
+ return new ScalarVectorView(this.view, ${field.offset}, "${field.element.scalar}", this.baseOffset, this.littleEndian);
71
+ }`;
72
+ case "dynamic-string":
73
+ return method `
74
+ ${field.name}View(): Utf8VectorView {
75
+ return new Utf8VectorView(this.view, ${field.offset}, this.baseOffset, this.littleEndian, ${encodingLiteral(field.element.encoding)});
76
+ }`;
77
+ case "dynamic-bytes":
78
+ return method `
79
+ ${field.name}View(): BytesVectorView {
80
+ return new BytesVectorView(this.view, ${field.offset}, this.baseOffset, this.littleEndian);
81
+ }`;
82
+ case "fixed-bytes":
83
+ return method `
84
+ ${field.name}View(): FixedBytesVectorView {
85
+ return new FixedBytesVectorView(this.view, ${field.offset}, ${field.element.byteLength}, this.baseOffset, this.littleEndian);
86
+ }`;
87
+ case "fixed-string":
88
+ return method `
89
+ ${field.name}View(): FixedStringVectorView {
90
+ return new FixedStringVectorView(this.view, ${field.offset}, ${field.element.byteLength}, this.baseOffset, this.littleEndian, ${encodingLiteral(field.element.encoding)});
91
+ }`;
92
+ case "struct":
93
+ return method `
94
+ ${field.name}View(): StructVectorView<${field.element.typeName}View> {
95
+ return new StructVectorView(this.view, ${field.offset}, ${field.element.byteLength}, (view, baseOffset, littleEndian) => new ${field.element.typeName}View(view, baseOffset, littleEndian), this.baseOffset, this.littleEndian);
96
+ }`;
97
+ case "dynamic-struct":
98
+ return method `
99
+ ${field.name}View(): DynamicStructVectorView<${field.element.typeName}View> {
100
+ return new DynamicStructVectorView(this.view, ${field.offset}, (view, baseOffset, littleEndian) => new ${field.element.typeName}View(view, baseOffset, littleEndian), this.baseOffset, this.littleEndian);
101
+ }`;
102
+ case "pointer":
103
+ return method `
104
+ ${field.name}View(): PointerVectorView<${field.element.targetTypeName}View> {
105
+ return new PointerVectorView(this.view, ${field.offset}, ${field.element.targetTypeName}View.byteLength, (view, baseOffset, littleEndian) => new ${field.element.targetTypeName}View(view, baseOffset, littleEndian), this.baseOffset, this.littleEndian);
106
+ }`;
107
+ }
108
+ }
109
+ }
110
+ function emitPointerField(layout, field) {
111
+ const pascalName = toPascalCase(field.name);
112
+ return method `
113
+ get raw${pascalName}RelativeOffset(): number {
114
+ return this.view.getUint32(this.baseOffset + ${field.offset}, this.littleEndian);
115
+ }
116
+ get ${field.name}RelativeOffset(): number | null {
117
+ const rawValue = this.raw${pascalName}RelativeOffset;
118
+ if (rawValue === 0xffffffff) {
119
+ return null;
120
+ }
121
+ return this.view.getInt32(this.baseOffset + ${field.offset}, this.littleEndian);
122
+ }
123
+ set ${field.name}RelativeOffset(value: number | null) {
124
+ if (value === null) {
125
+ this.view.setUint32(this.baseOffset + ${field.offset}, 0xffffffff, this.littleEndian);
126
+ return;
127
+ }
128
+ if (!Number.isInteger(value) || value < -0x80000000 || value > 0x7fffffff || value === -1) {
129
+ throw new RangeError(\`pointer32 target offset must encode to signed i32 except -1: \${value}\`);
130
+ }
131
+ this.view.setInt32(this.baseOffset + ${field.offset}, value, this.littleEndian);
132
+ }
133
+ get unchecked${pascalName}TargetOffset(): number | null {
134
+ const relativeOffset = this.${field.name}RelativeOffset;
135
+ if (relativeOffset === null) {
136
+ return null;
137
+ }
138
+ return this.baseOffset + ${field.offset} + relativeOffset;
139
+ }
140
+ get ${field.name}TargetOffset(): number | null {
141
+ const targetOffset = this.unchecked${pascalName}TargetOffset;
142
+ if (targetOffset === null) {
143
+ return null;
144
+ }
145
+ ${layout.name}View.assertPointerTargetRange(this.view, targetOffset, ${field.targetTypeName}View.byteLength);
146
+ return targetOffset;
147
+ }
148
+ set unchecked${pascalName}TargetOffset(targetOffset: number | null) {
149
+ if (targetOffset === null) {
150
+ this.${field.name}RelativeOffset = null;
151
+ return;
152
+ }
153
+ const relativeOffset = targetOffset - (this.baseOffset + ${field.offset});
154
+ this.${field.name}RelativeOffset = relativeOffset;
155
+ }
156
+ set ${field.name}TargetOffset(targetOffset: number | null) {
157
+ if (targetOffset !== null) {
158
+ ${layout.name}View.assertPointerTargetRange(this.view, targetOffset, ${field.targetTypeName}View.byteLength);
159
+ }
160
+ this.unchecked${pascalName}TargetOffset = targetOffset;
161
+ }
162
+ ${field.name}View(): ${field.targetTypeName}View | null {
163
+ const targetOffset = this.${field.name}TargetOffset;
164
+ if (targetOffset === null) {
165
+ return null;
166
+ }
167
+ const target = new ${field.targetTypeName}View(this.view, 0, this.littleEndian);
168
+ target.moveToOffset(targetOffset, ${field.targetTypeName}View.byteLength);
169
+ return target;
170
+ }
171
+ ${field.name}Into(out: ${field.targetTypeName}View): boolean {
172
+ const targetOffset = this.${field.name}TargetOffset;
173
+ if (targetOffset === null) {
174
+ return false;
175
+ }
176
+ out.moveToOffset(targetOffset, ${field.targetTypeName}View.byteLength);
177
+ return true;
178
+ }`;
179
+ }
180
+ //# sourceMappingURL=emitter-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-fields.js","sourceRoot":"","sources":["../src/emitter-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type FieldLayout, type StructLayout } from "@exornea/zeno-schema";
2
+ import { type ScanKernelMode } from "./emitter-scan-kernels.js";
3
+ export declare function emitStaticFieldAccessor(layout: StructLayout, field: FieldLayout, scanKernelMode: ScanKernelMode): string[];
4
+ //# sourceMappingURL=emitter-static-accessors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-static-accessors.d.ts","sourceRoot":"","sources":["../src/emitter-static-accessors.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGvF,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,cAAc,GAC7B,MAAM,EAAE,CAMV"}
@@ -0,0 +1,114 @@
1
+ import { scalarGetterMethod, scalarSetterMethod, scalarTsType, } from "@exornea/zeno-schema";
2
+ import { toLittleEndianLiteral, toPascalCase } from "./emitter-names.js";
3
+ import { emitScalarScanKernels } from "./emitter-scan-kernels.js";
4
+ import { method } from "./emitter-template.js";
5
+ export function emitStaticFieldAccessor(layout, field, scanKernelMode) {
6
+ if (field.kind === "pointer") {
7
+ return emitStaticPointerAccessor(layout, field);
8
+ }
9
+ return field.kind === "scalar" ? emitStaticScalarAccessor(layout, field, scanKernelMode) : [];
10
+ }
11
+ function emitStaticScalarAccessor(layout, field, scanKernelMode) {
12
+ const getterMethod = scalarGetterMethod(field.scalar);
13
+ const setterMethod = scalarSetterMethod(field.scalar);
14
+ const typeName = scalarTsType(field.scalar);
15
+ const littleEndianDefault = toLittleEndianLiteral(layout);
16
+ const endianArg = field.byteLength === 1 || field.scalar === "bool" ? "" : ", littleEndian";
17
+ const indexOffset = `index * ${layout.byteLength} + ${field.offset}`;
18
+ const pascalName = toPascalCase(field.name);
19
+ return [
20
+ ` static get${pascalName}(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): ${typeName} {`,
21
+ emitStaticScalarReadBody(field, getterMethod, `baseOffset + ${field.offset}`, endianArg),
22
+ " }",
23
+ ` static set${pascalName}(view: DataView, value: ${typeName}, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {`,
24
+ emitStaticScalarWriteBody(field, setterMethod, `baseOffset + ${field.offset}`, endianArg),
25
+ " }",
26
+ ` static get${pascalName}At(view: DataView, index: number, littleEndian = ${littleEndianDefault}): ${typeName} {`,
27
+ emitStaticScalarReadBody(field, getterMethod, indexOffset, endianArg),
28
+ " }",
29
+ ` static set${pascalName}At(view: DataView, value: ${typeName}, index: number, littleEndian = ${littleEndianDefault}): void {`,
30
+ emitStaticScalarWriteBody(field, setterMethod, indexOffset, endianArg),
31
+ " }",
32
+ ...emitScalarScanKernels(layout, field, getterMethod, littleEndianDefault, pascalName, scanKernelMode),
33
+ ];
34
+ }
35
+ function emitStaticScalarReadBody(field, getterMethod, offsetExpr, endianArg) {
36
+ return field.scalar === "bool"
37
+ ? ` return view.${getterMethod}(${offsetExpr}) !== 0;`
38
+ : ` return view.${getterMethod}(${offsetExpr}${endianArg});`;
39
+ }
40
+ function emitStaticScalarWriteBody(field, setterMethod, offsetExpr, endianArg) {
41
+ return field.scalar === "bool"
42
+ ? ` view.${setterMethod}(${offsetExpr}, value ? 1 : 0);`
43
+ : ` view.${setterMethod}(${offsetExpr}, value${endianArg});`;
44
+ }
45
+ function emitStaticPointerAccessor(layout, field) {
46
+ const pascalName = toPascalCase(field.name);
47
+ const littleEndianDefault = toLittleEndianLiteral(layout);
48
+ const indexOffset = `index * ${layout.byteLength} + ${field.offset}`;
49
+ const pointerPosition = `baseOffset + ${field.offset}`;
50
+ return method `
51
+ static getRaw${pascalName}RelativeOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number {
52
+ return view.getUint32(baseOffset + ${field.offset}, littleEndian);
53
+ }
54
+ static get${pascalName}RelativeOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number | null {
55
+ const rawValue = ${layout.name}View.getRaw${pascalName}RelativeOffset(view, baseOffset, littleEndian);
56
+ if (rawValue === 0xffffffff) {
57
+ return null;
58
+ }
59
+ return view.getInt32(baseOffset + ${field.offset}, littleEndian);
60
+ }
61
+ static set${pascalName}RelativeOffset(view: DataView, value: number | null, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {
62
+ if (value === null) {
63
+ view.setUint32(baseOffset + ${field.offset}, 0xffffffff, littleEndian);
64
+ return;
65
+ }
66
+ ${layout.name}View.assertPointer32Payload(value);
67
+ view.setInt32(baseOffset + ${field.offset}, value, littleEndian);
68
+ }
69
+ static getUnchecked${pascalName}TargetOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number | null {
70
+ const relativeOffset = ${layout.name}View.get${pascalName}RelativeOffset(view, baseOffset, littleEndian);
71
+ if (relativeOffset === null) {
72
+ return null;
73
+ }
74
+ return ${pointerPosition} + relativeOffset;
75
+ }
76
+ static get${pascalName}TargetOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number | null {
77
+ const targetOffset = ${layout.name}View.getUnchecked${pascalName}TargetOffset(view, baseOffset, littleEndian);
78
+ if (targetOffset === null) {
79
+ return null;
80
+ }
81
+ ${layout.name}View.assertPointerTargetRange(view, targetOffset, ${field.targetTypeName}View.byteLength);
82
+ return targetOffset;
83
+ }
84
+ static setUnchecked${pascalName}TargetOffset(view: DataView, targetOffset: number | null, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {
85
+ if (targetOffset === null) {
86
+ ${layout.name}View.set${pascalName}RelativeOffset(view, null, baseOffset, littleEndian);
87
+ return;
88
+ }
89
+ const relativeOffset = targetOffset - (${pointerPosition});
90
+ ${layout.name}View.set${pascalName}RelativeOffset(view, relativeOffset, baseOffset, littleEndian);
91
+ }
92
+ static set${pascalName}TargetOffset(view: DataView, targetOffset: number | null, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {
93
+ if (targetOffset !== null) {
94
+ ${layout.name}View.assertPointerTargetRange(view, targetOffset, ${field.targetTypeName}View.byteLength);
95
+ }
96
+ ${layout.name}View.setUnchecked${pascalName}TargetOffset(view, targetOffset, baseOffset, littleEndian);
97
+ }
98
+ static get${pascalName}RelativeOffsetAt(view: DataView, index: number, littleEndian = ${littleEndianDefault}): number | null {
99
+ const rawValue = ${layout.name}View.getRaw${pascalName}RelativeOffset(view, index * ${layout.byteLength}, littleEndian);
100
+ if (rawValue === 0xffffffff) {
101
+ return null;
102
+ }
103
+ return view.getInt32(${indexOffset}, littleEndian);
104
+ }
105
+ static set${pascalName}RelativeOffsetAt(view: DataView, value: number | null, index: number, littleEndian = ${littleEndianDefault}): void {
106
+ if (value === null) {
107
+ view.setUint32(${indexOffset}, 0xffffffff, littleEndian);
108
+ return;
109
+ }
110
+ ${layout.name}View.assertPointer32Payload(value);
111
+ view.setInt32(${indexOffset}, value, littleEndian);
112
+ }`;
113
+ }
114
+ //# sourceMappingURL=emitter-static-accessors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-static-accessors.js","sourceRoot":"","sources":["../src/emitter-static-accessors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type StructLayout } from "@exornea/zeno-schema";
2
+ export declare function emitDynamicWriterMethods(layout: StructLayout, layoutMap: ReadonlyMap<string, StructLayout>): string[];
3
+ export declare function emitObjectWriterMethod(layout: StructLayout, layoutMap: ReadonlyMap<string, StructLayout>): string[];
4
+ //# sourceMappingURL=emitter-writers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-writers.d.ts","sourceRoot":"","sources":["../src/emitter-writers.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAmC9B,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,MAAM,EAAE,CA0CV;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,GAC3C,MAAM,EAAE,CAuCV"}
@@ -0,0 +1,246 @@
1
+ import { scalarTsType, } from "@exornea/zeno-schema";
2
+ import { emitFixedArrayObjectFieldWrite } from "./emitter-fixed-array.js";
3
+ import { canEmitObjectWriter, hasTailWriterFields, isTailWriterField, structFieldHasTailFields, } from "./emitter-capabilities.js";
4
+ import { encodingLiteral, toLittleEndianLiteral, toPascalCase } from "./emitter-names.js";
5
+ import { method } from "./emitter-template.js";
6
+ export function emitDynamicWriterMethods(layout, layoutMap) {
7
+ const fields = layout.fields.filter((field) => isTailWriterField(field, layoutMap));
8
+ if (fields.length === 0) {
9
+ return [];
10
+ }
11
+ const lines = [
12
+ ...method `
13
+ static createWriter(view: DataView, baseOffset = 0, tailOffset = ${layout.name}View.byteLength, littleEndian = ${toLittleEndianLiteral(layout)}): DynamicLayoutWriter {
14
+ return new DynamicLayoutWriter(view, tailOffset, baseOffset, littleEndian);
15
+ }`,
16
+ "",
17
+ ];
18
+ for (const field of fields) {
19
+ const pascalName = toPascalCase(field.name);
20
+ switch (field.kind) {
21
+ case "dynamic-string":
22
+ lines.push(...method `
23
+ static write${pascalName}(writer: DynamicLayoutWriter, value: string) {
24
+ return writer.writeText(${layout.name}View.${field.name}Offset, value, ${encodingLiteral(field.encoding)});
25
+ }`);
26
+ break;
27
+ case "dynamic-bytes":
28
+ lines.push(...method `
29
+ static write${pascalName}(writer: DynamicLayoutWriter, value: ArrayLike<number> | Uint8Array) {
30
+ return writer.writeBytes(${layout.name}View.${field.name}Offset, value);
31
+ }`);
32
+ break;
33
+ case "vector":
34
+ lines.push(...emitVectorWriterMethod(layout, layoutMap, field, pascalName));
35
+ break;
36
+ }
37
+ lines.push("");
38
+ }
39
+ lines.pop();
40
+ return lines;
41
+ }
42
+ export function emitObjectWriterMethod(layout, layoutMap) {
43
+ if (!canEmitObjectWriter(layout, layoutMap)) {
44
+ return [];
45
+ }
46
+ const hasTailFields = hasTailWriterFields(layout, layoutMap);
47
+ const returnType = hasTailFields ? "DynamicLayoutWriter" : "void";
48
+ const bodyLines = [];
49
+ if (hasTailFields) {
50
+ bodyLines.push(` const writer = ${layout.name}View.createWriter(view, baseOffset, ${layout.name}View.byteLength, littleEndian);`, ` ${layout.name}View.writeInto(view, writer, value, baseOffset, littleEndian);`, " return writer;");
51
+ }
52
+ else {
53
+ for (const field of layout.fields) {
54
+ bodyLines.push(...emitObjectFieldWrite(layout, layoutMap, field));
55
+ }
56
+ }
57
+ const lines = method `
58
+ static write(view: DataView, value: ${layout.name}ViewInput, baseOffset = 0, littleEndian = ${toLittleEndianLiteral(layout)}): ${returnType} {
59
+ ${bodyLines}
60
+ }`;
61
+ if (hasTailFields) {
62
+ const writeIntoLines = layout.fields.flatMap((field) => emitObjectFieldWriteAtBase(layout, layoutMap, field));
63
+ lines.push("");
64
+ lines.push(...method `
65
+ static writeInto(view: DataView, writer: DynamicLayoutWriter, value: ${layout.name}ViewInput, baseOffset = 0, littleEndian = ${toLittleEndianLiteral(layout)}): void {
66
+ ${writeIntoLines}
67
+ }`);
68
+ }
69
+ return lines;
70
+ }
71
+ const vectorWriterEmitters = {
72
+ "dynamic-string": ({ layout, field, pascalName }) => method `
73
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly string[]) {
74
+ return writer.writeTextVector(${layout.name}View.${field.name}Offset, values, ${encodingLiteral(field.element.encoding)});
75
+ }`,
76
+ "dynamic-bytes": ({ layout, field, pascalName }) => method `
77
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly (ArrayLike<number> | Uint8Array)[]) {
78
+ return writer.writeBytesVector(${layout.name}View.${field.name}Offset, values);
79
+ }`,
80
+ "fixed-bytes": ({ layout, field, pascalName }) => method `
81
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly (ArrayLike<number> | Uint8Array)[]) {
82
+ return writer.writeFixedBytesVector(${layout.name}View.${field.name}Offset, values, ${field.element.byteLength});
83
+ }`,
84
+ "fixed-string": ({ layout, field, pascalName }) => method `
85
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly string[]) {
86
+ return writer.writeFixedTextVector(${layout.name}View.${field.name}Offset, values, ${field.element.byteLength}, ${encodingLiteral(field.element.encoding)});
87
+ }`,
88
+ scalar: ({ layout, field, pascalName }) => method `
89
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly ${scalarTsType(field.element.scalar)}[]) {
90
+ return writer.writeScalarVector(${layout.name}View.${field.name}Offset, "${field.element.scalar}", values);
91
+ }`,
92
+ struct: ({ layout, layoutMap, field, pascalName }) => {
93
+ const elementLayout = layoutMap.get(field.element.typeName);
94
+ const alignment = elementLayout?.alignment ?? 1;
95
+ return method `
96
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly ${field.element.typeName}ViewInput[]) {
97
+ return writer.writeStructVector(${layout.name}View.${field.name}Offset, values, ${field.element.byteLength}, (view, value, baseOffset, littleEndian) => ${field.element.typeName}View.write(view, value, baseOffset, littleEndian), ${alignment});
98
+ }`;
99
+ },
100
+ "dynamic-struct": ({ layout, layoutMap, field, pascalName }) => {
101
+ const elementLayout = layoutMap.get(field.element.typeName);
102
+ const alignment = elementLayout?.alignment ?? 1;
103
+ const elementByteLength = elementLayout?.byteLength ?? field.element.byteLength;
104
+ const writeElement = elementLayout !== undefined && hasTailWriterFields(elementLayout, layoutMap)
105
+ ? `${field.element.typeName}View.writeInto(view, elementWriter, value, baseOffset, littleEndian)`
106
+ : `${field.element.typeName}View.write(view, value, baseOffset, littleEndian)`;
107
+ return method `
108
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly ${field.element.typeName}ViewInput[]) {
109
+ return writer.writeDynamicStructVector(${layout.name}View.${field.name}Offset, values, ${elementByteLength}, (view, elementWriter, value, baseOffset, littleEndian) => ${writeElement}, ${alignment});
110
+ }`;
111
+ },
112
+ pointer: ({ layout, field, pascalName }) => method `
113
+ static write${pascalName}(writer: DynamicLayoutWriter, values: readonly (number | null)[]) {
114
+ return writer.writePointerVector(${layout.name}View.${field.name}Offset, values, ${field.element.targetTypeName}View.byteLength);
115
+ }`,
116
+ };
117
+ function emitVectorWriterMethod(layout, layoutMap, field, pascalName) {
118
+ const emitWriter = vectorWriterEmitters[field.element.kind];
119
+ return emitWriter({ layout, layoutMap, field, pascalName });
120
+ }
121
+ function emitObjectFieldWrite(layout, layoutMap, field) {
122
+ const pascalName = toPascalCase(field.name);
123
+ switch (field.kind) {
124
+ case "scalar":
125
+ return [
126
+ ` ${layout.name}View.set${pascalName}(view, value.${field.name}, baseOffset, littleEndian);`,
127
+ ];
128
+ case "fixed-bytes":
129
+ return [
130
+ ` writeFixedBytes(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name});`,
131
+ ];
132
+ case "fixed-string":
133
+ return [
134
+ ` writeFixedText(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name}, ${encodingLiteral(field.encoding)});`,
135
+ ];
136
+ case "dynamic-string":
137
+ case "dynamic-bytes":
138
+ return [` ${layout.name}View.write${pascalName}(writer, value.${field.name});`];
139
+ case "struct":
140
+ if (structFieldHasTailFields(layoutMap, field.typeName)) {
141
+ return [
142
+ ` ${field.typeName}View.writeInto(view, writer, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
143
+ ];
144
+ }
145
+ return [
146
+ ` ${field.typeName}View.write(view, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
147
+ ];
148
+ case "pointer":
149
+ return [
150
+ ` ${layout.name}View.set${pascalName}TargetOffset(view, value.${field.name}, baseOffset, littleEndian);`,
151
+ ];
152
+ case "fixed-array":
153
+ return emitFixedArrayObjectFieldWrite(field, encodingLiteral);
154
+ case "vector":
155
+ return [` ${layout.name}View.write${pascalName}(writer, value.${field.name});`];
156
+ }
157
+ }
158
+ function emitObjectFieldWriteAtBase(layout, layoutMap, field) {
159
+ const pascalName = toPascalCase(field.name);
160
+ switch (field.kind) {
161
+ case "scalar":
162
+ return [
163
+ ` ${layout.name}View.set${pascalName}(view, value.${field.name}, baseOffset, littleEndian);`,
164
+ ];
165
+ case "fixed-bytes":
166
+ return [
167
+ ` writeFixedBytes(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name});`,
168
+ ];
169
+ case "fixed-string":
170
+ return [
171
+ ` writeFixedText(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name}, ${encodingLiteral(field.encoding)});`,
172
+ ];
173
+ case "dynamic-string":
174
+ return [
175
+ ` writer.writeTextAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${encodingLiteral(field.encoding)});`,
176
+ ];
177
+ case "dynamic-bytes":
178
+ return [
179
+ ` writer.writeBytesAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name});`,
180
+ ];
181
+ case "struct":
182
+ if (structFieldHasTailFields(layoutMap, field.typeName)) {
183
+ return [
184
+ ` ${field.typeName}View.writeInto(view, writer, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
185
+ ];
186
+ }
187
+ return [
188
+ ` ${field.typeName}View.write(view, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
189
+ ];
190
+ case "pointer":
191
+ return [
192
+ ` ${layout.name}View.set${pascalName}TargetOffset(view, value.${field.name}, baseOffset, littleEndian);`,
193
+ ];
194
+ case "fixed-array":
195
+ return emitFixedArrayObjectFieldWrite(field, encodingLiteral);
196
+ case "vector":
197
+ return emitVectorObjectFieldWriteAtBase(layout, layoutMap, field);
198
+ }
199
+ }
200
+ function emitVectorObjectFieldWriteAtBase(layout, layoutMap, field) {
201
+ switch (field.element.kind) {
202
+ case "dynamic-string":
203
+ return [
204
+ ` writer.writeTextVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${encodingLiteral(field.element.encoding)});`,
205
+ ];
206
+ case "dynamic-bytes":
207
+ return [
208
+ ` writer.writeBytesVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name});`,
209
+ ];
210
+ case "fixed-bytes":
211
+ return [
212
+ ` writer.writeFixedBytesVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.byteLength});`,
213
+ ];
214
+ case "fixed-string":
215
+ return [
216
+ ` writer.writeFixedTextVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.byteLength}, ${encodingLiteral(field.element.encoding)});`,
217
+ ];
218
+ case "scalar":
219
+ return [
220
+ ` writer.writeScalarVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, "${field.element.scalar}", value.${field.name});`,
221
+ ];
222
+ case "struct": {
223
+ const elementLayout = layoutMap.get(field.element.typeName);
224
+ const alignment = elementLayout?.alignment ?? 1;
225
+ return [
226
+ ` writer.writeStructVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.byteLength}, (view, elementValue, elementBaseOffset, elementLittleEndian) => ${field.element.typeName}View.write(view, elementValue, elementBaseOffset, elementLittleEndian), ${alignment});`,
227
+ ];
228
+ }
229
+ case "dynamic-struct": {
230
+ const elementLayout = layoutMap.get(field.element.typeName);
231
+ const alignment = elementLayout?.alignment ?? 1;
232
+ const elementByteLength = elementLayout?.byteLength ?? field.element.byteLength;
233
+ const writeElement = elementLayout !== undefined && hasTailWriterFields(elementLayout, layoutMap)
234
+ ? `${field.element.typeName}View.writeInto(view, elementWriter, elementValue, elementBaseOffset, elementLittleEndian)`
235
+ : `${field.element.typeName}View.write(view, elementValue, elementBaseOffset, elementLittleEndian)`;
236
+ return [
237
+ ` writer.writeDynamicStructVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${elementByteLength}, (view, elementWriter, elementValue, elementBaseOffset, elementLittleEndian) => ${writeElement}, ${alignment});`,
238
+ ];
239
+ }
240
+ case "pointer":
241
+ return [
242
+ ` writer.writePointerVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.targetTypeName}View.byteLength);`,
243
+ ];
244
+ }
245
+ }
246
+ //# sourceMappingURL=emitter-writers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter-writers.js","sourceRoot":"","sources":["../src/emitter-writers.ts"],"names":[],"mappings":"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"}
package/dist/emitter.d.ts CHANGED
@@ -11,4 +11,5 @@ export interface EmitProjectionFileResult {
11
11
  export declare function emitStructView(layout: StructLayout, options?: EmitOptions): string;
12
12
  export declare function emitProjectionFile(layouts: readonly StructLayout[], options?: EmitOptions): string;
13
13
  export declare function emitProjectionFileWithSourceMap(layouts: readonly StructLayout[], generatedFile: string, options?: EmitOptions): EmitProjectionFileResult;
14
+ export type { ScanKernelMode };
14
15
  //# sourceMappingURL=emitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAgB9B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAyBtF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,CAEtF;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,GAAE,WAAgB,GACxB,MAAM,CAER;AAwBD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,WAAgB,GACxB,wBAAwB,CAO1B"}
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOzD,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,CAEtF;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,GAAE,WAAgB,GACxB,MAAM,CAER;AAwBD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,WAAgB,GACxB,wBAAwB,CAO1B;AA4GD,YAAY,EAAE,cAAc,EAAE,CAAC"}
package/dist/emitter.js CHANGED
@@ -1,12 +1,13 @@
1
- import { scalarGetterMethod, scalarSetterMethod, scalarTsType, } from "@exornea/zeno-schema";
2
- import { emitFixedArrayFieldAccessor, emitFixedArrayObjectFieldWrite, } from "./emitter-fixed-array.js";
1
+ import {} from "@exornea/zeno-schema";
3
2
  import { emitAstCheckedSource } from "./emitter-ast.js";
4
- import { canEmitObjectWriter, hasTailWriterFields, isTailWriterField, structFieldHasTailFields, } from "./emitter-capabilities.js";
3
+ import { emitField } from "./emitter-fields.js";
5
4
  import { emitInputInterface } from "./emitter-input.js";
6
- import { encodingLiteral, toLittleEndianLiteral, toPascalCase } from "./emitter-names.js";
5
+ import { toLittleEndianLiteral, toPascalCase } from "./emitter-names.js";
7
6
  import { collectRuntimeImports } from "./emitter-runtime-imports.js";
8
- import { emitScalarScanKernels, emitScanRangeHelper, hasScanKernels, normalizeScanKernelMode, } from "./emitter-scan-kernels.js";
7
+ import { emitScanRangeHelper, hasScanKernels, normalizeScanKernelMode, } from "./emitter-scan-kernels.js";
8
+ import { emitStaticFieldAccessor } from "./emitter-static-accessors.js";
9
9
  import { method } from "./emitter-template.js";
10
+ import { emitDynamicWriterMethods, emitObjectWriterMethod } from "./emitter-writers.js";
10
11
  import { createProjectionSourceMap } from "./source-map.js";
11
12
  export function emitStructView(layout, options = {}) {
12
13
  return emitProjectionFile([layout], options);
@@ -101,558 +102,16 @@ moveToUnchecked(index: number): this {
101
102
  return this.rebaseUnchecked(index * ${layout.byteLength});
102
103
  }`);
103
104
  lines.push("");
104
- const writerLines = emitDynamicWriterMethods(layout, layoutMap);
105
- for (const line of writerLines) {
106
- lines.push(line);
107
- }
108
- if (writerLines.length > 0) {
109
- lines.push("");
110
- }
111
- const objectWriterLines = emitObjectWriterMethod(layout, layoutMap);
112
- for (const line of objectWriterLines) {
113
- lines.push(line);
114
- }
115
- if (objectWriterLines.length > 0) {
116
- lines.push("");
117
- }
105
+ lines.push(...emitLayerBlock(emitDynamicWriterMethods(layout, layoutMap)));
106
+ lines.push(...emitLayerBlock(emitObjectWriterMethod(layout, layoutMap)));
118
107
  for (const field of layout.fields) {
119
- const staticAccessorLines = emitStaticFieldAccessor(layout, field, scanKernelMode);
120
- for (const line of staticAccessorLines) {
121
- lines.push(line);
122
- }
123
- if (staticAccessorLines.length > 0) {
124
- lines.push("");
125
- }
126
- for (const line of emitField(layout, field)) {
127
- lines.push(line);
128
- }
129
- lines.push("");
108
+ lines.push(...emitLayerBlock(emitStaticFieldAccessor(layout, field, scanKernelMode)));
109
+ lines.push(...emitLayerBlock(emitField(layout, field)));
130
110
  }
131
111
  lines.push("}");
132
112
  return lines;
133
113
  }
134
- function emitDynamicWriterMethods(layout, layoutMap) {
135
- const fields = layout.fields.filter((field) => isTailWriterField(field, layoutMap));
136
- if (fields.length === 0) {
137
- return [];
138
- }
139
- const lines = [
140
- ...method `
141
- static createWriter(view: DataView, baseOffset = 0, tailOffset = ${layout.name}View.byteLength, littleEndian = ${toLittleEndianLiteral(layout)}): DynamicLayoutWriter {
142
- return new DynamicLayoutWriter(view, tailOffset, baseOffset, littleEndian);
143
- }`,
144
- "",
145
- ];
146
- for (const field of fields) {
147
- const pascalName = toPascalCase(field.name);
148
- switch (field.kind) {
149
- case "dynamic-string":
150
- lines.push(...method `
151
- static write${pascalName}(writer: DynamicLayoutWriter, value: string) {
152
- return writer.writeText(${layout.name}View.${field.name}Offset, value, ${encodingLiteral(field.encoding)});
153
- }`);
154
- break;
155
- case "dynamic-bytes":
156
- lines.push(...method `
157
- static write${pascalName}(writer: DynamicLayoutWriter, value: ArrayLike<number> | Uint8Array) {
158
- return writer.writeBytes(${layout.name}View.${field.name}Offset, value);
159
- }`);
160
- break;
161
- case "vector":
162
- lines.push(...emitVectorWriterMethod(layout, layoutMap, field, pascalName));
163
- break;
164
- }
165
- lines.push("");
166
- }
167
- lines.pop();
168
- return lines;
169
- }
170
- const vectorWriterEmitters = {
171
- "dynamic-string": ({ layout, field, pascalName }) => method `
172
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly string[]) {
173
- return writer.writeTextVector(${layout.name}View.${field.name}Offset, values, ${encodingLiteral(field.element.encoding)});
174
- }`,
175
- "dynamic-bytes": ({ layout, field, pascalName }) => method `
176
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly (ArrayLike<number> | Uint8Array)[]) {
177
- return writer.writeBytesVector(${layout.name}View.${field.name}Offset, values);
178
- }`,
179
- "fixed-bytes": ({ layout, field, pascalName }) => method `
180
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly (ArrayLike<number> | Uint8Array)[]) {
181
- return writer.writeFixedBytesVector(${layout.name}View.${field.name}Offset, values, ${field.element.byteLength});
182
- }`,
183
- "fixed-string": ({ layout, field, pascalName }) => method `
184
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly string[]) {
185
- return writer.writeFixedTextVector(${layout.name}View.${field.name}Offset, values, ${field.element.byteLength}, ${encodingLiteral(field.element.encoding)});
186
- }`,
187
- scalar: ({ layout, field, pascalName }) => method `
188
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly ${scalarTsType(field.element.scalar)}[]) {
189
- return writer.writeScalarVector(${layout.name}View.${field.name}Offset, "${field.element.scalar}", values);
190
- }`,
191
- struct: ({ layout, layoutMap, field, pascalName }) => {
192
- const elementLayout = layoutMap.get(field.element.typeName);
193
- const alignment = elementLayout?.alignment ?? 1;
194
- return method `
195
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly ${field.element.typeName}ViewInput[]) {
196
- return writer.writeStructVector(${layout.name}View.${field.name}Offset, values, ${field.element.byteLength}, (view, value, baseOffset, littleEndian) => ${field.element.typeName}View.write(view, value, baseOffset, littleEndian), ${alignment});
197
- }`;
198
- },
199
- "dynamic-struct": ({ layout, layoutMap, field, pascalName }) => {
200
- const elementLayout = layoutMap.get(field.element.typeName);
201
- const alignment = elementLayout?.alignment ?? 1;
202
- const elementByteLength = elementLayout?.byteLength ?? field.element.byteLength;
203
- const writeElement = elementLayout !== undefined && hasTailWriterFields(elementLayout, layoutMap)
204
- ? `${field.element.typeName}View.writeInto(view, elementWriter, value, baseOffset, littleEndian)`
205
- : `${field.element.typeName}View.write(view, value, baseOffset, littleEndian)`;
206
- return method `
207
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly ${field.element.typeName}ViewInput[]) {
208
- return writer.writeDynamicStructVector(${layout.name}View.${field.name}Offset, values, ${elementByteLength}, (view, elementWriter, value, baseOffset, littleEndian) => ${writeElement}, ${alignment});
209
- }`;
210
- },
211
- pointer: ({ layout, field, pascalName }) => method `
212
- static write${pascalName}(writer: DynamicLayoutWriter, values: readonly (number | null)[]) {
213
- return writer.writePointerVector(${layout.name}View.${field.name}Offset, values, ${field.element.targetTypeName}View.byteLength);
214
- }`,
215
- };
216
- function emitVectorWriterMethod(layout, layoutMap, field, pascalName) {
217
- const emitWriter = vectorWriterEmitters[field.element.kind];
218
- return emitWriter({ layout, layoutMap, field, pascalName });
219
- }
220
- function emitObjectWriterMethod(layout, layoutMap) {
221
- if (!canEmitObjectWriter(layout, layoutMap)) {
222
- return [];
223
- }
224
- const hasTailFields = hasTailWriterFields(layout, layoutMap);
225
- const returnType = hasTailFields ? "DynamicLayoutWriter" : "void";
226
- const bodyLines = [];
227
- if (hasTailFields) {
228
- bodyLines.push(` const writer = ${layout.name}View.createWriter(view, baseOffset, ${layout.name}View.byteLength, littleEndian);`, ` ${layout.name}View.writeInto(view, writer, value, baseOffset, littleEndian);`, " return writer;");
229
- }
230
- else {
231
- for (const field of layout.fields) {
232
- bodyLines.push(...emitObjectFieldWrite(layout, layoutMap, field));
233
- }
234
- }
235
- const lines = method `
236
- static write(view: DataView, value: ${layout.name}ViewInput, baseOffset = 0, littleEndian = ${toLittleEndianLiteral(layout)}): ${returnType} {
237
- ${bodyLines}
238
- }`;
239
- if (hasTailFields) {
240
- const writeIntoLines = layout.fields.flatMap((field) => emitObjectFieldWriteAtBase(layout, layoutMap, field));
241
- lines.push("");
242
- lines.push(...method `
243
- static writeInto(view: DataView, writer: DynamicLayoutWriter, value: ${layout.name}ViewInput, baseOffset = 0, littleEndian = ${toLittleEndianLiteral(layout)}): void {
244
- ${writeIntoLines}
245
- }`);
246
- }
247
- return lines;
248
- }
249
- function emitObjectFieldWrite(layout, layoutMap, field) {
250
- const pascalName = toPascalCase(field.name);
251
- switch (field.kind) {
252
- case "scalar":
253
- return [
254
- ` ${layout.name}View.set${pascalName}(view, value.${field.name}, baseOffset, littleEndian);`,
255
- ];
256
- case "fixed-bytes":
257
- return [
258
- ` writeFixedBytes(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name});`,
259
- ];
260
- case "fixed-string":
261
- return [
262
- ` writeFixedText(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name}, ${encodingLiteral(field.encoding)});`,
263
- ];
264
- case "dynamic-string":
265
- case "dynamic-bytes":
266
- return [` ${layout.name}View.write${pascalName}(writer, value.${field.name});`];
267
- case "struct":
268
- if (structFieldHasTailFields(layoutMap, field.typeName)) {
269
- return [
270
- ` ${field.typeName}View.writeInto(view, writer, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
271
- ];
272
- }
273
- return [
274
- ` ${field.typeName}View.write(view, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
275
- ];
276
- case "pointer":
277
- return [
278
- ` ${layout.name}View.set${pascalName}TargetOffset(view, value.${field.name}, baseOffset, littleEndian);`,
279
- ];
280
- case "fixed-array":
281
- return emitFixedArrayObjectFieldWrite(field, encodingLiteral);
282
- case "vector":
283
- return [` ${layout.name}View.write${pascalName}(writer, value.${field.name});`];
284
- }
285
- }
286
- function emitObjectFieldWriteAtBase(layout, layoutMap, field) {
287
- const pascalName = toPascalCase(field.name);
288
- switch (field.kind) {
289
- case "scalar":
290
- return [
291
- ` ${layout.name}View.set${pascalName}(view, value.${field.name}, baseOffset, littleEndian);`,
292
- ];
293
- case "fixed-bytes":
294
- return [
295
- ` writeFixedBytes(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name});`,
296
- ];
297
- case "fixed-string":
298
- return [
299
- ` writeFixedText(view.buffer, view.byteOffset + baseOffset + ${field.offset}, ${field.byteLength}, value.${field.name}, ${encodingLiteral(field.encoding)});`,
300
- ];
301
- case "dynamic-string":
302
- return [
303
- ` writer.writeTextAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${encodingLiteral(field.encoding)});`,
304
- ];
305
- case "dynamic-bytes":
306
- return [
307
- ` writer.writeBytesAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name});`,
308
- ];
309
- case "struct":
310
- if (structFieldHasTailFields(layoutMap, field.typeName)) {
311
- return [
312
- ` ${field.typeName}View.writeInto(view, writer, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
313
- ];
314
- }
315
- return [
316
- ` ${field.typeName}View.write(view, value.${field.name}, baseOffset + ${field.offset}, littleEndian);`,
317
- ];
318
- case "pointer":
319
- return [
320
- ` ${layout.name}View.set${pascalName}TargetOffset(view, value.${field.name}, baseOffset, littleEndian);`,
321
- ];
322
- case "fixed-array":
323
- return emitFixedArrayObjectFieldWrite(field, encodingLiteral);
324
- case "vector":
325
- return emitVectorObjectFieldWriteAtBase(layout, layoutMap, field);
326
- }
327
- }
328
- function emitVectorObjectFieldWriteAtBase(layout, layoutMap, field) {
329
- switch (field.element.kind) {
330
- case "dynamic-string":
331
- return [
332
- ` writer.writeTextVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${encodingLiteral(field.element.encoding)});`,
333
- ];
334
- case "dynamic-bytes":
335
- return [
336
- ` writer.writeBytesVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name});`,
337
- ];
338
- case "fixed-bytes":
339
- return [
340
- ` writer.writeFixedBytesVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.byteLength});`,
341
- ];
342
- case "fixed-string":
343
- return [
344
- ` writer.writeFixedTextVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.byteLength}, ${encodingLiteral(field.element.encoding)});`,
345
- ];
346
- case "scalar":
347
- return [
348
- ` writer.writeScalarVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, "${field.element.scalar}", value.${field.name});`,
349
- ];
350
- case "struct": {
351
- const elementLayout = layoutMap.get(field.element.typeName);
352
- const alignment = elementLayout?.alignment ?? 1;
353
- return [
354
- ` writer.writeStructVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.byteLength}, (view, elementValue, elementBaseOffset, elementLittleEndian) => ${field.element.typeName}View.write(view, elementValue, elementBaseOffset, elementLittleEndian), ${alignment});`,
355
- ];
356
- }
357
- case "dynamic-struct": {
358
- const elementLayout = layoutMap.get(field.element.typeName);
359
- const alignment = elementLayout?.alignment ?? 1;
360
- const elementByteLength = elementLayout?.byteLength ?? field.element.byteLength;
361
- const writeElement = elementLayout !== undefined && hasTailWriterFields(elementLayout, layoutMap)
362
- ? `${field.element.typeName}View.writeInto(view, elementWriter, elementValue, elementBaseOffset, elementLittleEndian)`
363
- : `${field.element.typeName}View.write(view, elementValue, elementBaseOffset, elementLittleEndian)`;
364
- return [
365
- ` writer.writeDynamicStructVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${elementByteLength}, (view, elementWriter, elementValue, elementBaseOffset, elementLittleEndian) => ${writeElement}, ${alignment});`,
366
- ];
367
- }
368
- case "pointer":
369
- return [
370
- ` writer.writePointerVectorAtBase(baseOffset, ${layout.name}View.${field.name}Offset, value.${field.name}, ${field.element.targetTypeName}View.byteLength);`,
371
- ];
372
- }
373
- }
374
- function emitStaticFieldAccessor(layout, field, scanKernelMode) {
375
- if (field.kind === "pointer") {
376
- return emitStaticPointerAccessor(layout, field);
377
- }
378
- return field.kind === "scalar" ? emitStaticScalarAccessor(layout, field, scanKernelMode) : [];
379
- }
380
- function emitStaticScalarAccessor(layout, field, scanKernelMode) {
381
- const getterMethod = scalarGetterMethod(field.scalar);
382
- const setterMethod = scalarSetterMethod(field.scalar);
383
- const typeName = scalarTsType(field.scalar);
384
- const littleEndianDefault = toLittleEndianLiteral(layout);
385
- const endianArg = field.byteLength === 1 || field.scalar === "bool" ? "" : ", littleEndian";
386
- const indexOffset = `index * ${layout.byteLength} + ${field.offset}`;
387
- const pascalName = toPascalCase(field.name);
388
- return [
389
- ` static get${pascalName}(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): ${typeName} {`,
390
- emitStaticScalarReadBody(field, getterMethod, `baseOffset + ${field.offset}`, endianArg),
391
- " }",
392
- ` static set${pascalName}(view: DataView, value: ${typeName}, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {`,
393
- emitStaticScalarWriteBody(field, setterMethod, `baseOffset + ${field.offset}`, endianArg),
394
- " }",
395
- ` static get${pascalName}At(view: DataView, index: number, littleEndian = ${littleEndianDefault}): ${typeName} {`,
396
- emitStaticScalarReadBody(field, getterMethod, indexOffset, endianArg),
397
- " }",
398
- ` static set${pascalName}At(view: DataView, value: ${typeName}, index: number, littleEndian = ${littleEndianDefault}): void {`,
399
- emitStaticScalarWriteBody(field, setterMethod, indexOffset, endianArg),
400
- " }",
401
- ...emitScalarScanKernels(layout, field, getterMethod, littleEndianDefault, pascalName, scanKernelMode),
402
- ];
403
- }
404
- function emitStaticScalarReadBody(field, getterMethod, offsetExpr, endianArg) {
405
- return field.scalar === "bool"
406
- ? ` return view.${getterMethod}(${offsetExpr}) !== 0;`
407
- : ` return view.${getterMethod}(${offsetExpr}${endianArg});`;
408
- }
409
- function emitStaticScalarWriteBody(field, setterMethod, offsetExpr, endianArg) {
410
- return field.scalar === "bool"
411
- ? ` view.${setterMethod}(${offsetExpr}, value ? 1 : 0);`
412
- : ` view.${setterMethod}(${offsetExpr}, value${endianArg});`;
413
- }
414
- function emitStaticPointerAccessor(layout, field) {
415
- const pascalName = toPascalCase(field.name);
416
- const littleEndianDefault = toLittleEndianLiteral(layout);
417
- const indexOffset = `index * ${layout.byteLength} + ${field.offset}`;
418
- const pointerPosition = `baseOffset + ${field.offset}`;
419
- return method `
420
- static getRaw${pascalName}RelativeOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number {
421
- return view.getUint32(baseOffset + ${field.offset}, littleEndian);
422
- }
423
- static get${pascalName}RelativeOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number | null {
424
- const rawValue = ${layout.name}View.getRaw${pascalName}RelativeOffset(view, baseOffset, littleEndian);
425
- if (rawValue === 0xffffffff) {
426
- return null;
427
- }
428
- return view.getInt32(baseOffset + ${field.offset}, littleEndian);
429
- }
430
- static set${pascalName}RelativeOffset(view: DataView, value: number | null, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {
431
- if (value === null) {
432
- view.setUint32(baseOffset + ${field.offset}, 0xffffffff, littleEndian);
433
- return;
434
- }
435
- ${layout.name}View.assertPointer32Payload(value);
436
- view.setInt32(baseOffset + ${field.offset}, value, littleEndian);
437
- }
438
- static getUnchecked${pascalName}TargetOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number | null {
439
- const relativeOffset = ${layout.name}View.get${pascalName}RelativeOffset(view, baseOffset, littleEndian);
440
- if (relativeOffset === null) {
441
- return null;
442
- }
443
- return ${pointerPosition} + relativeOffset;
444
- }
445
- static get${pascalName}TargetOffset(view: DataView, baseOffset = 0, littleEndian = ${littleEndianDefault}): number | null {
446
- const targetOffset = ${layout.name}View.getUnchecked${pascalName}TargetOffset(view, baseOffset, littleEndian);
447
- if (targetOffset === null) {
448
- return null;
449
- }
450
- ${layout.name}View.assertPointerTargetRange(view, targetOffset, ${field.targetTypeName}View.byteLength);
451
- return targetOffset;
452
- }
453
- static setUnchecked${pascalName}TargetOffset(view: DataView, targetOffset: number | null, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {
454
- if (targetOffset === null) {
455
- ${layout.name}View.set${pascalName}RelativeOffset(view, null, baseOffset, littleEndian);
456
- return;
457
- }
458
- const relativeOffset = targetOffset - (${pointerPosition});
459
- ${layout.name}View.set${pascalName}RelativeOffset(view, relativeOffset, baseOffset, littleEndian);
460
- }
461
- static set${pascalName}TargetOffset(view: DataView, targetOffset: number | null, baseOffset = 0, littleEndian = ${littleEndianDefault}): void {
462
- if (targetOffset !== null) {
463
- ${layout.name}View.assertPointerTargetRange(view, targetOffset, ${field.targetTypeName}View.byteLength);
464
- }
465
- ${layout.name}View.setUnchecked${pascalName}TargetOffset(view, targetOffset, baseOffset, littleEndian);
466
- }
467
- static get${pascalName}RelativeOffsetAt(view: DataView, index: number, littleEndian = ${littleEndianDefault}): number | null {
468
- const rawValue = ${layout.name}View.getRaw${pascalName}RelativeOffset(view, index * ${layout.byteLength}, littleEndian);
469
- if (rawValue === 0xffffffff) {
470
- return null;
471
- }
472
- return view.getInt32(${indexOffset}, littleEndian);
473
- }
474
- static set${pascalName}RelativeOffsetAt(view: DataView, value: number | null, index: number, littleEndian = ${littleEndianDefault}): void {
475
- if (value === null) {
476
- view.setUint32(${indexOffset}, 0xffffffff, littleEndian);
477
- return;
478
- }
479
- ${layout.name}View.assertPointer32Payload(value);
480
- view.setInt32(${indexOffset}, value, littleEndian);
481
- }`;
482
- }
483
- function emitField(layout, field) {
484
- // This switch intentionally mirrors the Layout IR field-kind surface.
485
- // Split it only when a dispatch table removes real emitter complexity.
486
- switch (field.kind) {
487
- case "scalar": {
488
- const getterMethod = scalarGetterMethod(field.scalar);
489
- const setterMethod = scalarSetterMethod(field.scalar);
490
- const typeName = scalarTsType(field.scalar);
491
- const getterArgs = field.byteLength === 1 || field.scalar === "bool" ? "" : ", this.littleEndian";
492
- const instanceOffset = `this.baseOffset + ${field.offset}`;
493
- const getterBody = field.scalar === "bool"
494
- ? `return this.view.${getterMethod}(${instanceOffset}) !== 0;`
495
- : `return this.view.${getterMethod}(${instanceOffset}${getterArgs});`;
496
- const setterBody = field.scalar === "bool"
497
- ? `this.view.${setterMethod}(${instanceOffset}, value ? 1 : 0);`
498
- : `this.view.${setterMethod}(${instanceOffset}, value${getterArgs});`;
499
- return method `
500
- get ${field.name}(): ${typeName} {
501
- ${getterBody}
502
- }
503
- set ${field.name}(value: ${typeName}) {
504
- ${setterBody}
505
- }`;
506
- }
507
- case "fixed-bytes":
508
- return method `
509
- ${field.name}Bytes(): Uint8Array {
510
- return fixedBytesView(this.backingBuffer(), this.backingOffset(${field.offset}), ${field.byteLength});
511
- }`;
512
- case "fixed-string":
513
- return method `
514
- ${field.name}Text(): string {
515
- return decodeFixedText(this.backingBuffer(), this.backingOffset(${field.offset}), ${field.byteLength}, ${encodingLiteral(field.encoding)});
516
- }
517
- ${field.name}Bytes(): Uint8Array {
518
- return fixedBytesView(this.backingBuffer(), this.backingOffset(${field.offset}), ${field.byteLength});
519
- }`;
520
- case "dynamic-string":
521
- return method `
522
- ${field.name}View(): Utf8SpanView {
523
- return new Utf8SpanView(this.view, ${field.offset}, this.baseOffset, this.littleEndian, ${encodingLiteral(field.encoding)});
524
- }`;
525
- case "dynamic-bytes":
526
- return method `
527
- ${field.name}View(): BytesSpanView {
528
- return new BytesSpanView(this.view, ${field.offset}, this.baseOffset, this.littleEndian);
529
- }
530
- ${field.name}Bytes(): Uint8Array {
531
- return this.${field.name}View().bytes();
532
- }`;
533
- case "struct":
534
- return method `
535
- ${field.name}View(): ${field.typeName}View {
536
- return new ${field.typeName}View(this.view, this.absoluteOffset(${field.offset}), this.littleEndian);
537
- }`;
538
- case "pointer": {
539
- return emitPointerField(layout, field);
540
- }
541
- case "fixed-array":
542
- return emitFixedArrayFieldAccessor(field, encodingLiteral);
543
- case "vector":
544
- switch (field.element.kind) {
545
- case "scalar":
546
- return method `
547
- ${field.name}View(): ScalarVectorView<${scalarTsType(field.element.scalar)}> {
548
- return new ScalarVectorView(this.view, ${field.offset}, "${field.element.scalar}", this.baseOffset, this.littleEndian);
549
- }`;
550
- case "dynamic-string":
551
- return method `
552
- ${field.name}View(): Utf8VectorView {
553
- return new Utf8VectorView(this.view, ${field.offset}, this.baseOffset, this.littleEndian, ${encodingLiteral(field.element.encoding)});
554
- }`;
555
- case "dynamic-bytes":
556
- return method `
557
- ${field.name}View(): BytesVectorView {
558
- return new BytesVectorView(this.view, ${field.offset}, this.baseOffset, this.littleEndian);
559
- }`;
560
- case "fixed-bytes":
561
- return method `
562
- ${field.name}View(): FixedBytesVectorView {
563
- return new FixedBytesVectorView(this.view, ${field.offset}, ${field.element.byteLength}, this.baseOffset, this.littleEndian);
564
- }`;
565
- case "fixed-string":
566
- return method `
567
- ${field.name}View(): FixedStringVectorView {
568
- return new FixedStringVectorView(this.view, ${field.offset}, ${field.element.byteLength}, this.baseOffset, this.littleEndian, ${encodingLiteral(field.element.encoding)});
569
- }`;
570
- case "struct":
571
- return method `
572
- ${field.name}View(): StructVectorView<${field.element.typeName}View> {
573
- return new StructVectorView(this.view, ${field.offset}, ${field.element.byteLength}, (view, baseOffset, littleEndian) => new ${field.element.typeName}View(view, baseOffset, littleEndian), this.baseOffset, this.littleEndian);
574
- }`;
575
- case "dynamic-struct":
576
- return method `
577
- ${field.name}View(): DynamicStructVectorView<${field.element.typeName}View> {
578
- return new DynamicStructVectorView(this.view, ${field.offset}, (view, baseOffset, littleEndian) => new ${field.element.typeName}View(view, baseOffset, littleEndian), this.baseOffset, this.littleEndian);
579
- }`;
580
- case "pointer":
581
- return method `
582
- ${field.name}View(): PointerVectorView<${field.element.targetTypeName}View> {
583
- return new PointerVectorView(this.view, ${field.offset}, ${field.element.targetTypeName}View.byteLength, (view, baseOffset, littleEndian) => new ${field.element.targetTypeName}View(view, baseOffset, littleEndian), this.baseOffset, this.littleEndian);
584
- }`;
585
- }
586
- }
587
- }
588
- function emitPointerField(layout, field) {
589
- const pascalName = toPascalCase(field.name);
590
- return method `
591
- get raw${pascalName}RelativeOffset(): number {
592
- return this.view.getUint32(this.baseOffset + ${field.offset}, this.littleEndian);
593
- }
594
- get ${field.name}RelativeOffset(): number | null {
595
- const rawValue = this.raw${pascalName}RelativeOffset;
596
- if (rawValue === 0xffffffff) {
597
- return null;
598
- }
599
- return this.view.getInt32(this.baseOffset + ${field.offset}, this.littleEndian);
600
- }
601
- set ${field.name}RelativeOffset(value: number | null) {
602
- if (value === null) {
603
- this.view.setUint32(this.baseOffset + ${field.offset}, 0xffffffff, this.littleEndian);
604
- return;
605
- }
606
- if (!Number.isInteger(value) || value < -0x80000000 || value > 0x7fffffff || value === -1) {
607
- throw new RangeError(\`pointer32 target offset must encode to signed i32 except -1: \${value}\`);
608
- }
609
- this.view.setInt32(this.baseOffset + ${field.offset}, value, this.littleEndian);
610
- }
611
- get unchecked${pascalName}TargetOffset(): number | null {
612
- const relativeOffset = this.${field.name}RelativeOffset;
613
- if (relativeOffset === null) {
614
- return null;
615
- }
616
- return this.baseOffset + ${field.offset} + relativeOffset;
617
- }
618
- get ${field.name}TargetOffset(): number | null {
619
- const targetOffset = this.unchecked${pascalName}TargetOffset;
620
- if (targetOffset === null) {
621
- return null;
622
- }
623
- ${layout.name}View.assertPointerTargetRange(this.view, targetOffset, ${field.targetTypeName}View.byteLength);
624
- return targetOffset;
625
- }
626
- set unchecked${pascalName}TargetOffset(targetOffset: number | null) {
627
- if (targetOffset === null) {
628
- this.${field.name}RelativeOffset = null;
629
- return;
630
- }
631
- const relativeOffset = targetOffset - (this.baseOffset + ${field.offset});
632
- this.${field.name}RelativeOffset = relativeOffset;
633
- }
634
- set ${field.name}TargetOffset(targetOffset: number | null) {
635
- if (targetOffset !== null) {
636
- ${layout.name}View.assertPointerTargetRange(this.view, targetOffset, ${field.targetTypeName}View.byteLength);
637
- }
638
- this.unchecked${pascalName}TargetOffset = targetOffset;
639
- }
640
- ${field.name}View(): ${field.targetTypeName}View | null {
641
- const targetOffset = this.${field.name}TargetOffset;
642
- if (targetOffset === null) {
643
- return null;
644
- }
645
- const target = new ${field.targetTypeName}View(this.view, 0, this.littleEndian);
646
- target.moveToOffset(targetOffset, ${field.targetTypeName}View.byteLength);
647
- return target;
648
- }
649
- ${field.name}Into(out: ${field.targetTypeName}View): boolean {
650
- const targetOffset = this.${field.name}TargetOffset;
651
- if (targetOffset === null) {
652
- return false;
653
- }
654
- out.moveToOffset(targetOffset, ${field.targetTypeName}View.byteLength);
655
- return true;
656
- }`;
114
+ function emitLayerBlock(lines) {
115
+ return lines.length === 0 ? [] : [...lines, ""];
657
116
  }
658
117
  //# sourceMappingURL=emitter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exornea/zeno-compiler",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "TypeScript schema analyzer and code generator for Zeno zero-copy binary views.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -43,7 +43,7 @@
43
43
  "access": "public"
44
44
  },
45
45
  "dependencies": {
46
- "@exornea/zeno-schema": "2.2.0",
46
+ "@exornea/zeno-schema": "2.3.0",
47
47
  "typescript": "^5.9.0"
48
48
  }
49
49
  }