@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.
- package/bin/zeno-codegen.mjs +117 -0
- package/dist/analyzer.d.ts +13 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +153 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/diagnostics.d.ts +38 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +36 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/emitter-fixed-array.d.ts +11 -0
- package/dist/emitter-fixed-array.d.ts.map +1 -0
- package/dist/emitter-fixed-array.js +90 -0
- package/dist/emitter-fixed-array.js.map +1 -0
- package/dist/emitter-template.d.ts +5 -0
- package/dist/emitter-template.d.ts.map +1 -0
- package/dist/emitter-template.js +37 -0
- package/dist/emitter-template.js.map +1 -0
- package/dist/emitter.d.ts +7 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +746 -0
- package/dist/emitter.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lowering.d.ts +18 -0
- package/dist/lowering.d.ts.map +1 -0
- package/dist/lowering.js +631 -0
- package/dist/lowering.js.map +1 -0
- package/dist/measurement.d.ts +41 -0
- package/dist/measurement.d.ts.map +1 -0
- package/dist/measurement.js +58 -0
- package/dist/measurement.js.map +1 -0
- package/dist/result.d.ts +20 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +25 -0
- package/dist/result.js.map +1 -0
- package/dist/validator.d.ts +4 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +342 -0
- package/dist/validator.js.map +1 -0
- package/package.json +47 -0
package/dist/lowering.js
ADDED
|
@@ -0,0 +1,631 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { POINTER32_BYTE_LENGTH, POINTER32_NULL, SPAN32_BYTE_LENGTH, VECTOR32_BYTE_LENGTH, scalarAlignment, scalarByteLength, } from "@exornea/zeno-schema";
|
|
3
|
+
import { createDiagnostic, } from "./diagnostics.js";
|
|
4
|
+
import { ambiguousLayout, insufficientResolution, measure, unsupportedAtPhase, } from "./measurement.js";
|
|
5
|
+
import { err, ok } from "./result.js";
|
|
6
|
+
const SCALAR_NAMES = new Set([
|
|
7
|
+
"i8",
|
|
8
|
+
"u8",
|
|
9
|
+
"i16",
|
|
10
|
+
"u16",
|
|
11
|
+
"i32",
|
|
12
|
+
"u32",
|
|
13
|
+
"i64",
|
|
14
|
+
"u64",
|
|
15
|
+
"f32",
|
|
16
|
+
"f64",
|
|
17
|
+
"bool",
|
|
18
|
+
]);
|
|
19
|
+
const SCALAR_ALIASES = new Map([
|
|
20
|
+
["enum_u8", "u8"],
|
|
21
|
+
["enumU8", "u8"],
|
|
22
|
+
["enum_u16", "u16"],
|
|
23
|
+
["enumU16", "u16"],
|
|
24
|
+
["flags8", "u8"],
|
|
25
|
+
["flags32", "u32"],
|
|
26
|
+
["timestamp_ms", "i64"],
|
|
27
|
+
["timestampMs", "i64"],
|
|
28
|
+
]);
|
|
29
|
+
export function lowerField(property, context) {
|
|
30
|
+
const fieldName = getPropertyName(property.name);
|
|
31
|
+
if (fieldName === undefined) {
|
|
32
|
+
return loweringError(createDiagnostic(context.sourceFile, property.name, "UNSUPPORTED_MEMBER", "Only identifier property names are supported.", {
|
|
33
|
+
structName: context.structName,
|
|
34
|
+
measurement: measure("computed property name", "typescript-syntax", "phase-0"),
|
|
35
|
+
error: unsupportedAtPhase("computed property name", "phase-0"),
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
if (property.type === undefined) {
|
|
39
|
+
return loweringError(createDiagnostic(context.sourceFile, property, "MISSING_TYPE", `Field "${fieldName}" must have an explicit type annotation.`, {
|
|
40
|
+
structName: context.structName,
|
|
41
|
+
fieldName,
|
|
42
|
+
measurement: measure("implicit property type", "typescript-syntax", "phase-0"),
|
|
43
|
+
error: insufficientResolution("implicit property type", "typescript-type", "typescript-syntax", "phase-0"),
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
if (property.questionToken !== undefined) {
|
|
47
|
+
return loweringError(createDiagnostic(context.sourceFile, property.questionToken, "UNSUPPORTED_MEMBER", `Field "${fieldName}" uses optional property syntax. Optional fields need a schema-evolution policy.`, {
|
|
48
|
+
structName: context.structName,
|
|
49
|
+
fieldName,
|
|
50
|
+
measurement: measure("optional property", "typescript-syntax", "phase-0"),
|
|
51
|
+
error: unsupportedAtPhase("optional property", "phase-0"),
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
return lowerTypeNode(property.type, fieldName, context);
|
|
55
|
+
}
|
|
56
|
+
function lowerTypeNode(typeNode, fieldName, context) {
|
|
57
|
+
const syntaxResult = lowerSyntaxTypeNode(typeNode, fieldName, context);
|
|
58
|
+
if (syntaxResult !== undefined) {
|
|
59
|
+
return syntaxResult;
|
|
60
|
+
}
|
|
61
|
+
if (!ts.isTypeReferenceNode(typeNode)) {
|
|
62
|
+
return loweringError(createDiagnostic(context.sourceFile, typeNode, "UNSUPPORTED_TYPE", `Field "${fieldName}" has an unsupported type expression.`, {
|
|
63
|
+
structName: context.structName,
|
|
64
|
+
fieldName,
|
|
65
|
+
measurement: measure(typeNode.getText(context.sourceFile), "typescript-syntax", "phase-0"),
|
|
66
|
+
error: unsupportedAtPhase(typeNode.getText(context.sourceFile), "phase-0"),
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
const referenceName = getReferenceName(typeNode.typeName);
|
|
70
|
+
if (referenceName === undefined) {
|
|
71
|
+
return loweringError(createDiagnostic(context.sourceFile, typeNode, "UNSUPPORTED_TYPE", `Field "${fieldName}" has an unsupported qualified type name.`, {
|
|
72
|
+
structName: context.structName,
|
|
73
|
+
fieldName,
|
|
74
|
+
measurement: measure(typeNode.getText(context.sourceFile), "typescript-syntax", "phase-0"),
|
|
75
|
+
error: unsupportedAtPhase(typeNode.getText(context.sourceFile), "phase-0"),
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
return lowerTypeReferenceNode(typeNode, referenceName, fieldName, context);
|
|
79
|
+
}
|
|
80
|
+
function lowerSyntaxTypeNode(typeNode, fieldName, context) {
|
|
81
|
+
switch (typeNode.kind) {
|
|
82
|
+
case ts.SyntaxKind.NumberKeyword:
|
|
83
|
+
return unsupportedNumberType(typeNode, fieldName, context);
|
|
84
|
+
case ts.SyntaxKind.StringKeyword:
|
|
85
|
+
return lowerBareStringType(fieldName);
|
|
86
|
+
case ts.SyntaxKind.ArrayType:
|
|
87
|
+
return unsupportedBareArrayType(typeNode, fieldName, context);
|
|
88
|
+
default:
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function unsupportedNumberType(typeNode, fieldName, context) {
|
|
93
|
+
return loweringError(createDiagnostic(context.sourceFile, typeNode, "UNSUPPORTED_NUMBER", `Field "${fieldName}" uses bare "number". Use a branded scalar alias such as i32 or f64.`, {
|
|
94
|
+
structName: context.structName,
|
|
95
|
+
fieldName,
|
|
96
|
+
measurement: measure("number", "typescript-type", "phase-0"),
|
|
97
|
+
error: ambiguousLayout("number", [
|
|
98
|
+
"i8",
|
|
99
|
+
"u8",
|
|
100
|
+
"i16",
|
|
101
|
+
"u16",
|
|
102
|
+
"i32",
|
|
103
|
+
"u32",
|
|
104
|
+
"f32",
|
|
105
|
+
"f64",
|
|
106
|
+
]),
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
function lowerBareStringType(fieldName) {
|
|
110
|
+
return ok({
|
|
111
|
+
alignment: 4,
|
|
112
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
113
|
+
build: (offset) => ({
|
|
114
|
+
kind: "dynamic-string",
|
|
115
|
+
name: fieldName,
|
|
116
|
+
offset,
|
|
117
|
+
alignment: 4,
|
|
118
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
119
|
+
encoding: "utf8",
|
|
120
|
+
descriptor: "span32",
|
|
121
|
+
}),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function unsupportedBareArrayType(typeNode, fieldName, context) {
|
|
125
|
+
return loweringError(createDiagnostic(context.sourceFile, typeNode, "UNSUPPORTED_ARRAY", `Field "${fieldName}" uses bare array syntax. Use vector<T> instead.`, {
|
|
126
|
+
structName: context.structName,
|
|
127
|
+
fieldName,
|
|
128
|
+
measurement: measure("bare array syntax", "typescript-syntax", "phase-0"),
|
|
129
|
+
error: insufficientResolution("bare array syntax", "layout-ir-dynamic", "layout-ir-fixed", "phase-0"),
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
function lowerTypeReferenceNode(typeNode, referenceName, fieldName, context) {
|
|
133
|
+
if (SCALAR_NAMES.has(referenceName)) {
|
|
134
|
+
return lowerScalarReference(referenceName, fieldName);
|
|
135
|
+
}
|
|
136
|
+
const scalarAlias = SCALAR_ALIASES.get(referenceName);
|
|
137
|
+
if (scalarAlias !== undefined) {
|
|
138
|
+
return lowerScalarReference(scalarAlias, fieldName);
|
|
139
|
+
}
|
|
140
|
+
if (referenceName === "fixed_bytes" || referenceName === "fixedBytes") {
|
|
141
|
+
return lowerFixedBytesReference(typeNode, fieldName, context);
|
|
142
|
+
}
|
|
143
|
+
if (referenceName === "fixed_utf8" ||
|
|
144
|
+
referenceName === "fixed_ascii" ||
|
|
145
|
+
referenceName === "fixedUtf8" ||
|
|
146
|
+
referenceName === "fixedAscii") {
|
|
147
|
+
return lowerFixedStringReference(typeNode, referenceName, fieldName, context);
|
|
148
|
+
}
|
|
149
|
+
if (referenceName === "utf8" || referenceName === "ascii") {
|
|
150
|
+
return lowerDynamicStringReference(referenceName, fieldName);
|
|
151
|
+
}
|
|
152
|
+
if (referenceName === "bytes") {
|
|
153
|
+
return lowerDynamicBytesReference(fieldName);
|
|
154
|
+
}
|
|
155
|
+
if (referenceName === "vector") {
|
|
156
|
+
return lowerVectorReference(typeNode, fieldName, context);
|
|
157
|
+
}
|
|
158
|
+
if (referenceName === "fixed_array" || referenceName === "fixedArray") {
|
|
159
|
+
return lowerFixedArrayReference(typeNode, fieldName, context);
|
|
160
|
+
}
|
|
161
|
+
if (referenceName === "pointer") {
|
|
162
|
+
return lowerPointerReference(typeNode, fieldName, context);
|
|
163
|
+
}
|
|
164
|
+
return lowerStructReference(typeNode, referenceName, fieldName, context);
|
|
165
|
+
}
|
|
166
|
+
function lowerScalarReference(scalar, fieldName) {
|
|
167
|
+
return ok({
|
|
168
|
+
alignment: scalarAlignment(scalar),
|
|
169
|
+
byteLength: scalarByteLength(scalar),
|
|
170
|
+
build: (offset) => ({
|
|
171
|
+
kind: "scalar",
|
|
172
|
+
name: fieldName,
|
|
173
|
+
scalar,
|
|
174
|
+
offset,
|
|
175
|
+
alignment: scalarAlignment(scalar),
|
|
176
|
+
byteLength: scalarByteLength(scalar),
|
|
177
|
+
}),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function lowerFixedBytesReference(typeNode, fieldName, context) {
|
|
181
|
+
const byteLength = extractNumericTypeArg(typeNode, fieldName, context);
|
|
182
|
+
if (!byteLength.ok) {
|
|
183
|
+
return byteLength;
|
|
184
|
+
}
|
|
185
|
+
return ok({
|
|
186
|
+
alignment: 1,
|
|
187
|
+
byteLength: byteLength.value,
|
|
188
|
+
build: (offset) => ({
|
|
189
|
+
kind: "fixed-bytes",
|
|
190
|
+
name: fieldName,
|
|
191
|
+
offset,
|
|
192
|
+
alignment: 1,
|
|
193
|
+
byteLength: byteLength.value,
|
|
194
|
+
}),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
function lowerFixedStringReference(typeNode, referenceName, fieldName, context) {
|
|
198
|
+
const byteLength = extractNumericTypeArg(typeNode, fieldName, context);
|
|
199
|
+
if (!byteLength.ok) {
|
|
200
|
+
return byteLength;
|
|
201
|
+
}
|
|
202
|
+
const encoding = fixedStringEncoding(referenceName);
|
|
203
|
+
return ok({
|
|
204
|
+
alignment: 1,
|
|
205
|
+
byteLength: byteLength.value,
|
|
206
|
+
build: (offset) => ({
|
|
207
|
+
kind: "fixed-string",
|
|
208
|
+
name: fieldName,
|
|
209
|
+
offset,
|
|
210
|
+
alignment: 1,
|
|
211
|
+
byteLength: byteLength.value,
|
|
212
|
+
encoding,
|
|
213
|
+
}),
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
function lowerDynamicStringReference(encoding, fieldName) {
|
|
217
|
+
return ok({
|
|
218
|
+
alignment: 4,
|
|
219
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
220
|
+
build: (offset) => ({
|
|
221
|
+
kind: "dynamic-string",
|
|
222
|
+
name: fieldName,
|
|
223
|
+
offset,
|
|
224
|
+
alignment: 4,
|
|
225
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
226
|
+
encoding,
|
|
227
|
+
descriptor: "span32",
|
|
228
|
+
}),
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
function lowerDynamicBytesReference(fieldName) {
|
|
232
|
+
return ok({
|
|
233
|
+
alignment: 4,
|
|
234
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
235
|
+
build: (offset) => ({
|
|
236
|
+
kind: "dynamic-bytes",
|
|
237
|
+
name: fieldName,
|
|
238
|
+
offset,
|
|
239
|
+
alignment: 4,
|
|
240
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
241
|
+
descriptor: "span32",
|
|
242
|
+
}),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function lowerVectorReference(typeNode, fieldName, context) {
|
|
246
|
+
const element = lowerVectorElement(typeNode, fieldName, context);
|
|
247
|
+
if (!element.ok) {
|
|
248
|
+
return element;
|
|
249
|
+
}
|
|
250
|
+
return ok({
|
|
251
|
+
alignment: 4,
|
|
252
|
+
byteLength: VECTOR32_BYTE_LENGTH,
|
|
253
|
+
build: (offset) => ({
|
|
254
|
+
kind: "vector",
|
|
255
|
+
name: fieldName,
|
|
256
|
+
offset,
|
|
257
|
+
alignment: 4,
|
|
258
|
+
byteLength: VECTOR32_BYTE_LENGTH,
|
|
259
|
+
descriptor: "vector32",
|
|
260
|
+
element: element.value,
|
|
261
|
+
}),
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
function lowerFixedArrayReference(typeNode, fieldName, context) {
|
|
265
|
+
const [elementType] = typeNode.typeArguments ?? [];
|
|
266
|
+
if (elementType === undefined) {
|
|
267
|
+
return missingFixedArrayElementType(typeNode, fieldName, context);
|
|
268
|
+
}
|
|
269
|
+
const length = extractNumericTypeArgAt(typeNode, 1, fieldName, context);
|
|
270
|
+
if (!length.ok) {
|
|
271
|
+
return length;
|
|
272
|
+
}
|
|
273
|
+
const element = lowerFixedArrayElementType(elementType, fieldName, context);
|
|
274
|
+
if (!element.ok) {
|
|
275
|
+
return element;
|
|
276
|
+
}
|
|
277
|
+
return ok({
|
|
278
|
+
alignment: element.value.alignment,
|
|
279
|
+
byteLength: element.value.byteLength * length.value,
|
|
280
|
+
build: (offset) => ({
|
|
281
|
+
kind: "fixed-array",
|
|
282
|
+
name: fieldName,
|
|
283
|
+
offset,
|
|
284
|
+
alignment: element.value.alignment,
|
|
285
|
+
byteLength: element.value.byteLength * length.value,
|
|
286
|
+
length: length.value,
|
|
287
|
+
element: element.value.layout,
|
|
288
|
+
}),
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
function lowerPointerReference(typeNode, fieldName, context) {
|
|
292
|
+
const targetTypeName = extractReferenceTypeArg(typeNode, fieldName, context);
|
|
293
|
+
if (!targetTypeName.ok) {
|
|
294
|
+
return targetTypeName;
|
|
295
|
+
}
|
|
296
|
+
return ok({
|
|
297
|
+
alignment: 4,
|
|
298
|
+
byteLength: POINTER32_BYTE_LENGTH,
|
|
299
|
+
build: (offset) => ({
|
|
300
|
+
kind: "pointer",
|
|
301
|
+
name: fieldName,
|
|
302
|
+
offset,
|
|
303
|
+
alignment: 4,
|
|
304
|
+
byteLength: POINTER32_BYTE_LENGTH,
|
|
305
|
+
descriptor: "pointer32",
|
|
306
|
+
targetTypeName: targetTypeName.value,
|
|
307
|
+
nullValue: POINTER32_NULL,
|
|
308
|
+
offsetBase: "field",
|
|
309
|
+
offsetEncoding: "i32",
|
|
310
|
+
}),
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
function lowerStructReference(typeNode, referenceName, fieldName, context) {
|
|
314
|
+
const structLayout = context.lowerStructByName(referenceName, typeNode);
|
|
315
|
+
if (!structLayout.ok) {
|
|
316
|
+
return structLayout;
|
|
317
|
+
}
|
|
318
|
+
return ok({
|
|
319
|
+
alignment: structLayout.value.alignment,
|
|
320
|
+
byteLength: structLayout.value.byteLength,
|
|
321
|
+
build: (offset) => ({
|
|
322
|
+
kind: "struct",
|
|
323
|
+
name: fieldName,
|
|
324
|
+
offset,
|
|
325
|
+
alignment: structLayout.value.alignment,
|
|
326
|
+
byteLength: structLayout.value.byteLength,
|
|
327
|
+
typeName: structLayout.value.name,
|
|
328
|
+
}),
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
function fixedStringEncoding(referenceName) {
|
|
332
|
+
return referenceName === "fixed_ascii" || referenceName === "fixedAscii"
|
|
333
|
+
? "ascii"
|
|
334
|
+
: "utf8";
|
|
335
|
+
}
|
|
336
|
+
function missingFixedArrayElementType(typeNode, fieldName, context) {
|
|
337
|
+
return loweringError(createDiagnostic(context.sourceFile, typeNode, "UNSUPPORTED_TYPE", `Field "${fieldName}" must provide a fixedArray<T, N> element type.`, {
|
|
338
|
+
structName: context.structName,
|
|
339
|
+
fieldName,
|
|
340
|
+
measurement: measure("fixed array without element type", "typescript-type", "phase-0"),
|
|
341
|
+
error: insufficientResolution("fixed array without element type", "typescript-type", "typescript-syntax", "phase-0"),
|
|
342
|
+
}));
|
|
343
|
+
}
|
|
344
|
+
function lowerFixedArrayElementType(elementType, fieldName, context) {
|
|
345
|
+
if (!ts.isTypeReferenceNode(elementType)) {
|
|
346
|
+
return unsupportedFixedArrayElementType(elementType, fieldName, context);
|
|
347
|
+
}
|
|
348
|
+
const referenceName = getReferenceName(elementType.typeName);
|
|
349
|
+
if (referenceName === undefined) {
|
|
350
|
+
return unsupportedFixedArrayElementType(elementType, fieldName, context);
|
|
351
|
+
}
|
|
352
|
+
const scalar = SCALAR_NAMES.has(referenceName)
|
|
353
|
+
? referenceName
|
|
354
|
+
: SCALAR_ALIASES.get(referenceName);
|
|
355
|
+
if (scalar !== undefined) {
|
|
356
|
+
return ok({
|
|
357
|
+
alignment: scalarAlignment(scalar),
|
|
358
|
+
byteLength: scalarByteLength(scalar),
|
|
359
|
+
layout: {
|
|
360
|
+
kind: "scalar",
|
|
361
|
+
scalar,
|
|
362
|
+
byteLength: scalarByteLength(scalar),
|
|
363
|
+
},
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
if (referenceName === "fixed_bytes" || referenceName === "fixedBytes") {
|
|
367
|
+
const byteLength = extractNumericTypeArg(elementType, fieldName, context);
|
|
368
|
+
if (!byteLength.ok) {
|
|
369
|
+
return byteLength;
|
|
370
|
+
}
|
|
371
|
+
return ok({
|
|
372
|
+
alignment: 1,
|
|
373
|
+
byteLength: byteLength.value,
|
|
374
|
+
layout: {
|
|
375
|
+
kind: "fixed-bytes",
|
|
376
|
+
byteLength: byteLength.value,
|
|
377
|
+
},
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
if (referenceName === "fixed_utf8" ||
|
|
381
|
+
referenceName === "fixed_ascii" ||
|
|
382
|
+
referenceName === "fixedUtf8" ||
|
|
383
|
+
referenceName === "fixedAscii") {
|
|
384
|
+
const byteLength = extractNumericTypeArg(elementType, fieldName, context);
|
|
385
|
+
if (!byteLength.ok) {
|
|
386
|
+
return byteLength;
|
|
387
|
+
}
|
|
388
|
+
return ok({
|
|
389
|
+
alignment: 1,
|
|
390
|
+
byteLength: byteLength.value,
|
|
391
|
+
layout: {
|
|
392
|
+
kind: "fixed-string",
|
|
393
|
+
encoding: fixedStringEncoding(referenceName),
|
|
394
|
+
byteLength: byteLength.value,
|
|
395
|
+
},
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
if (referenceName === "utf8" ||
|
|
399
|
+
referenceName === "ascii" ||
|
|
400
|
+
referenceName === "bytes" ||
|
|
401
|
+
referenceName === "vector" ||
|
|
402
|
+
referenceName === "fixed_array" ||
|
|
403
|
+
referenceName === "fixedArray" ||
|
|
404
|
+
referenceName === "pointer") {
|
|
405
|
+
return unsupportedFixedArrayElementType(elementType, fieldName, context);
|
|
406
|
+
}
|
|
407
|
+
const structLayout = context.lowerStructByName(referenceName, elementType);
|
|
408
|
+
if (!structLayout.ok) {
|
|
409
|
+
return structLayout;
|
|
410
|
+
}
|
|
411
|
+
return ok({
|
|
412
|
+
alignment: structLayout.value.alignment,
|
|
413
|
+
byteLength: structLayout.value.byteLength,
|
|
414
|
+
layout: {
|
|
415
|
+
kind: "struct",
|
|
416
|
+
typeName: structLayout.value.name,
|
|
417
|
+
byteLength: structLayout.value.byteLength,
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
function unsupportedFixedArrayElementType(elementType, fieldName, context) {
|
|
422
|
+
return loweringError(createDiagnostic(context.sourceFile, elementType, "UNSUPPORTED_TYPE", `Field "${fieldName}" has an unsupported fixed array element type.`, {
|
|
423
|
+
structName: context.structName,
|
|
424
|
+
fieldName,
|
|
425
|
+
measurement: measure(elementType.getText(context.sourceFile), "typescript-type", "phase-0"),
|
|
426
|
+
error: unsupportedAtPhase(elementType.getText(context.sourceFile), "phase-0"),
|
|
427
|
+
}));
|
|
428
|
+
}
|
|
429
|
+
function lowerVectorElement(vectorType, fieldName, context) {
|
|
430
|
+
const [elementType] = vectorType.typeArguments ?? [];
|
|
431
|
+
if (elementType === undefined) {
|
|
432
|
+
return missingVectorElementType(vectorType, fieldName, context);
|
|
433
|
+
}
|
|
434
|
+
return lowerVectorElementType(elementType, fieldName, context);
|
|
435
|
+
}
|
|
436
|
+
function lowerVectorElementType(elementType, fieldName, context) {
|
|
437
|
+
if (ts.isArrayTypeNode(elementType)) {
|
|
438
|
+
return nestedBareArrayElement(elementType, fieldName, context);
|
|
439
|
+
}
|
|
440
|
+
if (elementType.kind === ts.SyntaxKind.StringKeyword) {
|
|
441
|
+
return lowerDynamicStringVectorElement("utf8");
|
|
442
|
+
}
|
|
443
|
+
if (!ts.isTypeReferenceNode(elementType)) {
|
|
444
|
+
return unsupportedVectorElementType(elementType, fieldName, context);
|
|
445
|
+
}
|
|
446
|
+
const referenceName = getReferenceName(elementType.typeName);
|
|
447
|
+
if (referenceName === undefined) {
|
|
448
|
+
return unsupportedQualifiedVectorElementType(elementType, fieldName, context);
|
|
449
|
+
}
|
|
450
|
+
return lowerVectorElementReference(elementType, referenceName, fieldName, context);
|
|
451
|
+
}
|
|
452
|
+
function missingVectorElementType(vectorType, fieldName, context) {
|
|
453
|
+
return loweringError(createDiagnostic(context.sourceFile, vectorType, "UNSUPPORTED_TYPE", `Field "${fieldName}" must provide a vector element type.`, {
|
|
454
|
+
structName: context.structName,
|
|
455
|
+
fieldName,
|
|
456
|
+
measurement: measure("vector without element type", "typescript-type", "phase-0"),
|
|
457
|
+
error: insufficientResolution("vector without element type", "typescript-type", "typescript-syntax", "phase-0"),
|
|
458
|
+
}));
|
|
459
|
+
}
|
|
460
|
+
function nestedBareArrayElement(elementType, fieldName, context) {
|
|
461
|
+
return loweringError(createDiagnostic(context.sourceFile, elementType, "UNSUPPORTED_ARRAY", `Field "${fieldName}" cannot nest bare arrays inside vector<T>.`, {
|
|
462
|
+
structName: context.structName,
|
|
463
|
+
fieldName,
|
|
464
|
+
measurement: measure("nested bare array", "typescript-syntax", "phase-0"),
|
|
465
|
+
error: unsupportedAtPhase("nested bare array", "phase-0"),
|
|
466
|
+
}));
|
|
467
|
+
}
|
|
468
|
+
function unsupportedVectorElementType(elementType, fieldName, context) {
|
|
469
|
+
return loweringError(createDiagnostic(context.sourceFile, elementType, "UNSUPPORTED_TYPE", `Field "${fieldName}" has an unsupported vector element type.`, {
|
|
470
|
+
structName: context.structName,
|
|
471
|
+
fieldName,
|
|
472
|
+
measurement: measure(elementType.getText(context.sourceFile), "typescript-syntax", "phase-0"),
|
|
473
|
+
error: unsupportedAtPhase(elementType.getText(context.sourceFile), "phase-0"),
|
|
474
|
+
}));
|
|
475
|
+
}
|
|
476
|
+
function unsupportedQualifiedVectorElementType(elementType, fieldName, context) {
|
|
477
|
+
return loweringError(createDiagnostic(context.sourceFile, elementType, "UNSUPPORTED_TYPE", `Field "${fieldName}" has an unsupported qualified vector element type.`, {
|
|
478
|
+
structName: context.structName,
|
|
479
|
+
fieldName,
|
|
480
|
+
measurement: measure(elementType.getText(context.sourceFile), "typescript-syntax", "phase-0"),
|
|
481
|
+
error: unsupportedAtPhase(elementType.getText(context.sourceFile), "phase-0"),
|
|
482
|
+
}));
|
|
483
|
+
}
|
|
484
|
+
function lowerVectorElementReference(elementType, referenceName, fieldName, context) {
|
|
485
|
+
if (SCALAR_NAMES.has(referenceName)) {
|
|
486
|
+
return lowerScalarVectorElement(referenceName);
|
|
487
|
+
}
|
|
488
|
+
const scalarAlias = SCALAR_ALIASES.get(referenceName);
|
|
489
|
+
if (scalarAlias !== undefined) {
|
|
490
|
+
return lowerScalarVectorElement(scalarAlias);
|
|
491
|
+
}
|
|
492
|
+
if (referenceName === "fixed_bytes" || referenceName === "fixedBytes") {
|
|
493
|
+
return lowerFixedBytesVectorElement(elementType, fieldName, context);
|
|
494
|
+
}
|
|
495
|
+
if (referenceName === "fixed_utf8" ||
|
|
496
|
+
referenceName === "fixed_ascii" ||
|
|
497
|
+
referenceName === "fixedUtf8" ||
|
|
498
|
+
referenceName === "fixedAscii") {
|
|
499
|
+
return lowerFixedStringVectorElement(elementType, referenceName, fieldName, context);
|
|
500
|
+
}
|
|
501
|
+
if (referenceName === "utf8" || referenceName === "ascii") {
|
|
502
|
+
return lowerDynamicStringVectorElement(referenceName);
|
|
503
|
+
}
|
|
504
|
+
if (referenceName === "bytes") {
|
|
505
|
+
return lowerDynamicBytesVectorElement();
|
|
506
|
+
}
|
|
507
|
+
if (referenceName === "pointer") {
|
|
508
|
+
return lowerPointerVectorElement(elementType, fieldName, context);
|
|
509
|
+
}
|
|
510
|
+
return lowerStructVectorElement(elementType, referenceName, context);
|
|
511
|
+
}
|
|
512
|
+
function lowerScalarVectorElement(scalar) {
|
|
513
|
+
return ok({
|
|
514
|
+
kind: "scalar",
|
|
515
|
+
scalar,
|
|
516
|
+
byteLength: scalarByteLength(scalar),
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
function lowerFixedBytesVectorElement(elementType, fieldName, context) {
|
|
520
|
+
const byteLength = extractNumericTypeArg(elementType, fieldName, context);
|
|
521
|
+
if (!byteLength.ok) {
|
|
522
|
+
return byteLength;
|
|
523
|
+
}
|
|
524
|
+
return ok({
|
|
525
|
+
kind: "fixed-bytes",
|
|
526
|
+
byteLength: byteLength.value,
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
function lowerFixedStringVectorElement(elementType, referenceName, fieldName, context) {
|
|
530
|
+
const byteLength = extractNumericTypeArg(elementType, fieldName, context);
|
|
531
|
+
if (!byteLength.ok) {
|
|
532
|
+
return byteLength;
|
|
533
|
+
}
|
|
534
|
+
return ok({
|
|
535
|
+
kind: "fixed-string",
|
|
536
|
+
encoding: fixedStringEncoding(referenceName),
|
|
537
|
+
byteLength: byteLength.value,
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
function lowerDynamicStringVectorElement(encoding) {
|
|
541
|
+
return ok({
|
|
542
|
+
kind: "dynamic-string",
|
|
543
|
+
encoding,
|
|
544
|
+
descriptor: "span32",
|
|
545
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
function lowerDynamicBytesVectorElement() {
|
|
549
|
+
return ok({
|
|
550
|
+
kind: "dynamic-bytes",
|
|
551
|
+
descriptor: "span32",
|
|
552
|
+
byteLength: SPAN32_BYTE_LENGTH,
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
function lowerPointerVectorElement(elementType, fieldName, context) {
|
|
556
|
+
const targetTypeName = extractReferenceTypeArg(elementType, fieldName, context);
|
|
557
|
+
if (!targetTypeName.ok) {
|
|
558
|
+
return targetTypeName;
|
|
559
|
+
}
|
|
560
|
+
return ok({
|
|
561
|
+
kind: "pointer",
|
|
562
|
+
descriptor: "pointer32",
|
|
563
|
+
targetTypeName: targetTypeName.value,
|
|
564
|
+
byteLength: POINTER32_BYTE_LENGTH,
|
|
565
|
+
nullValue: POINTER32_NULL,
|
|
566
|
+
offsetBase: "element",
|
|
567
|
+
offsetEncoding: "i32",
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
function lowerStructVectorElement(elementType, referenceName, context) {
|
|
571
|
+
const structLayout = context.lowerStructByName(referenceName, elementType);
|
|
572
|
+
if (!structLayout.ok) {
|
|
573
|
+
return structLayout;
|
|
574
|
+
}
|
|
575
|
+
return ok({
|
|
576
|
+
kind: "struct",
|
|
577
|
+
typeName: structLayout.value.name,
|
|
578
|
+
byteLength: structLayout.value.byteLength,
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
function extractNumericTypeArg(typeNode, fieldName, context) {
|
|
582
|
+
return extractNumericTypeArgAt(typeNode, 0, fieldName, context);
|
|
583
|
+
}
|
|
584
|
+
function extractNumericTypeArgAt(typeNode, index, fieldName, context) {
|
|
585
|
+
const arg = typeNode.typeArguments?.[index];
|
|
586
|
+
if (arg !== undefined &&
|
|
587
|
+
ts.isLiteralTypeNode(arg) &&
|
|
588
|
+
ts.isNumericLiteral(arg.literal)) {
|
|
589
|
+
return ok(Number(arg.literal.text));
|
|
590
|
+
}
|
|
591
|
+
return loweringError(createDiagnostic(context.sourceFile, typeNode, "NON_NUMERIC_LENGTH", `Field "${fieldName}" must use a numeric literal length.`, {
|
|
592
|
+
structName: context.structName,
|
|
593
|
+
fieldName,
|
|
594
|
+
measurement: measure(`${getReferenceName(typeNode.typeName) ?? "type"} length`, "typescript-type", "phase-0"),
|
|
595
|
+
error: insufficientResolution(`${getReferenceName(typeNode.typeName) ?? "type"} length`, "layout-ir-fixed", "typescript-type", "phase-0"),
|
|
596
|
+
}));
|
|
597
|
+
}
|
|
598
|
+
function extractReferenceTypeArg(typeNode, fieldName, context) {
|
|
599
|
+
const [arg] = typeNode.typeArguments ?? [];
|
|
600
|
+
if (arg !== undefined && ts.isTypeReferenceNode(arg)) {
|
|
601
|
+
const referenceName = getReferenceName(arg.typeName);
|
|
602
|
+
if (referenceName !== undefined) {
|
|
603
|
+
return ok(referenceName);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
return loweringError(createDiagnostic(context.sourceFile, typeNode, "UNSUPPORTED_TYPE", `Field "${fieldName}" must use pointer<T> with a named struct target.`, {
|
|
607
|
+
structName: context.structName,
|
|
608
|
+
fieldName,
|
|
609
|
+
measurement: measure("pointer target", "typescript-type", "phase-0"),
|
|
610
|
+
error: insufficientResolution("pointer target", "layout-ir-fixed", "typescript-type", "phase-0"),
|
|
611
|
+
}));
|
|
612
|
+
}
|
|
613
|
+
function loweringError(diagnostic) {
|
|
614
|
+
return err(diagnostic);
|
|
615
|
+
}
|
|
616
|
+
function getReferenceName(typeName) {
|
|
617
|
+
if (ts.isIdentifier(typeName)) {
|
|
618
|
+
return typeName.text;
|
|
619
|
+
}
|
|
620
|
+
if (ts.isQualifiedName(typeName)) {
|
|
621
|
+
return typeName.right.text;
|
|
622
|
+
}
|
|
623
|
+
return undefined;
|
|
624
|
+
}
|
|
625
|
+
function getPropertyName(propertyName) {
|
|
626
|
+
if (ts.isIdentifier(propertyName) || ts.isStringLiteral(propertyName)) {
|
|
627
|
+
return propertyName.text;
|
|
628
|
+
}
|
|
629
|
+
return undefined;
|
|
630
|
+
}
|
|
631
|
+
//# sourceMappingURL=lowering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lowering.js","sourceRoot":"","sources":["../src/lowering.ts"],"names":[],"mappings":"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"}
|