@gtkx/codegen 1.5.0 → 1.6.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/dist/analysis/descriptor-render.d.ts +1 -0
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +56 -28
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +3 -1
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +10 -9
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +24 -3
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +2 -1
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/pipeline.d.ts +3 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +44 -12
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/fingerprint.d.ts +3 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +4 -0
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +1 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +4 -1
- package/dist/gi.js.map +1 -1
- package/dist/gir/libraries.d.ts +12 -5
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +50 -14
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +5 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +6 -0
- package/dist/gir/library.js.map +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -1
- package/dist/jsx.d.ts +1 -0
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +2 -0
- package/dist/jsx.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +3 -1
- package/dist/runner.js.map +1 -1
- package/dist/store/gi/bootstrap.d.ts +4 -0
- package/dist/store/gi/bootstrap.d.ts.map +1 -0
- package/dist/store/gi/bootstrap.js +48 -0
- package/dist/store/gi/bootstrap.js.map +1 -0
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +75 -28
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +2 -1
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/enum.js +3 -3
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/folded.d.ts +14 -0
- package/dist/store/gi/folded.d.ts.map +1 -0
- package/dist/store/gi/folded.js +35 -0
- package/dist/store/gi/folded.js.map +1 -0
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +22 -3
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +11 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +43 -4
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +2 -0
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts +5 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +13 -1
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/property-accessor.js +1 -1
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +3 -3
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +44 -12
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.js +1 -1
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +7 -3
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +1 -1
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +1 -0
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +16 -7
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +64 -10
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +2 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +2 -0
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +28 -1
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx-store.d.ts +1 -0
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +7 -2
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +2 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +1 -1
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts +17 -0
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +83 -11
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/emit.d.ts +2 -1
- package/dist/writer/emit.d.ts.map +1 -1
- package/dist/writer/emit.js +2 -1
- package/dist/writer/emit.js.map +1 -1
- package/dist/writer/imports.d.ts.map +1 -1
- package/dist/writer/imports.js +6 -1
- package/dist/writer/imports.js.map +1 -1
- package/dist/writer/module.d.ts +1 -0
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +6 -1
- package/dist/writer/module.js.map +1 -1
- package/overrides/glib/regex.ts.ejs +2 -0
- package/package.json +4 -4
- package/src/analysis/descriptor-render.ts +79 -30
- package/src/analysis/descriptor.ts +19 -11
- package/src/compile.ts +42 -3
- package/src/docs/api-reference.ts +4 -1
- package/src/docs/pipeline.ts +64 -13
- package/src/fingerprint.ts +7 -0
- package/src/gi.ts +6 -1
- package/src/gir/libraries.ts +64 -16
- package/src/gir/library.ts +9 -0
- package/src/internal.ts +1 -0
- package/src/jsx.ts +3 -0
- package/src/runner.ts +5 -1
- package/src/store/gi/bootstrap.ts +64 -0
- package/src/store/gi/class.ts +100 -29
- package/src/store/gi/constructor-props.ts +2 -1
- package/src/store/gi/enum.ts +4 -4
- package/src/store/gi/folded.ts +57 -0
- package/src/store/gi/function.ts +22 -3
- package/src/store/gi/gtype-binding.ts +15 -2
- package/src/store/gi/interface.ts +64 -7
- package/src/store/gi/method.ts +2 -0
- package/src/store/gi/pipeline.ts +21 -2
- package/src/store/gi/property-accessor.ts +1 -1
- package/src/store/gi/record-field-accessor.ts +5 -3
- package/src/store/gi/record.ts +61 -14
- package/src/store/gi/registration.ts +2 -2
- package/src/store/gi/return-wrap.ts +1 -1
- package/src/store/gi/signal.ts +8 -3
- package/src/store/gi/vtable.ts +1 -0
- package/src/store/gi-store.ts +19 -7
- package/src/store/jsx/element-components.ts +107 -10
- package/src/store/jsx/element-prop-types.ts +4 -0
- package/src/store/jsx/metadata.ts +41 -0
- package/src/store/jsx-store.ts +10 -4
- package/src/store/store-fs.ts +3 -2
- package/src/writer/context.ts +109 -16
- package/src/writer/emit.ts +3 -1
- package/src/writer/imports.ts +9 -1
- package/src/writer/module.ts +9 -1
|
@@ -10,6 +10,7 @@ type ArgIndexOptions = {
|
|
|
10
10
|
argIndexMap: Map<number, number> | undefined;
|
|
11
11
|
cursor: GirCursorBounds | undefined;
|
|
12
12
|
hasOutIndirection: boolean;
|
|
13
|
+
isReceived: boolean;
|
|
13
14
|
};
|
|
14
15
|
type RenderDescriptorOptions = Partial<ArgIndexOptions> & {
|
|
15
16
|
isCallerAllocated?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EAInB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKH,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAGH,KAAK,SAAS,EA0BjB,MAAM,iBAAiB,CAAC;AAGzB,KAAK,iBAAiB,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,iBAAiB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,7 @@ const argIndexOptions = (options) => ({
|
|
|
40
40
|
argIndexMap: options.argIndexMap,
|
|
41
41
|
cursor: options.cursor,
|
|
42
42
|
hasOutIndirection: options.hasOutIndirection === true,
|
|
43
|
+
isReceived: options.isReceived === true,
|
|
43
44
|
});
|
|
44
45
|
const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
|
|
45
46
|
if (ref === undefined) {
|
|
@@ -143,7 +144,12 @@ const isStrvRef = (library, ref) => {
|
|
|
143
144
|
const isCellInout = (library, parameter) => isInoutParameter(parameter) &&
|
|
144
145
|
(isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));
|
|
145
146
|
const renderParamDescriptor = (context, parameter, ref, argIndex = {}) => {
|
|
146
|
-
const behindRef = {
|
|
147
|
+
const behindRef = {
|
|
148
|
+
...argIndex,
|
|
149
|
+
cursor: parameter.cursor,
|
|
150
|
+
hasOutIndirection: true,
|
|
151
|
+
isReceived: true,
|
|
152
|
+
};
|
|
147
153
|
if (isCellInout(context.library, parameter)) {
|
|
148
154
|
return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);
|
|
149
155
|
}
|
|
@@ -153,6 +159,7 @@ const renderParamDescriptor = (context, parameter, ref, argIndex = {}) => {
|
|
|
153
159
|
return renderDescriptor(context, ref, parameter.transferOwnership, {
|
|
154
160
|
...argIndex,
|
|
155
161
|
isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),
|
|
162
|
+
isReceived: true,
|
|
156
163
|
});
|
|
157
164
|
};
|
|
158
165
|
const userDataIndexByName = (parameters) => {
|
|
@@ -196,7 +203,7 @@ const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
|
|
|
196
203
|
const { returnValue } = callback;
|
|
197
204
|
return tCallback({
|
|
198
205
|
argTypes,
|
|
199
|
-
returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),
|
|
206
|
+
returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership, { isReceived: true }),
|
|
200
207
|
options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters), callback.throws),
|
|
201
208
|
});
|
|
202
209
|
};
|
|
@@ -216,27 +223,36 @@ const primitiveExpression = (category, ownership) => {
|
|
|
216
223
|
return tScalar(category);
|
|
217
224
|
};
|
|
218
225
|
const renderFundamental = (descriptor) => {
|
|
219
|
-
const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass,
|
|
226
|
+
const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, fallbackClass } = descriptor;
|
|
220
227
|
return tFundamental(lib, refFunc, unrefFunc, {
|
|
221
228
|
ownership,
|
|
222
229
|
typeName,
|
|
223
230
|
wrapperClass,
|
|
224
|
-
|
|
225
|
-
|
|
231
|
+
fallbackClass,
|
|
232
|
+
isCallerAllocated: descriptor.isCallerAllocated,
|
|
233
|
+
isInline: descriptor.isInline,
|
|
226
234
|
});
|
|
227
235
|
};
|
|
236
|
+
const fallbackClassThunk = (context, namespaceName, name, isReceived) => isReceived && context.library.isTreeShaken
|
|
237
|
+
? `() => ${context.qualify(namespaceName, sanitizeTypeIdentifier(name))}`
|
|
238
|
+
: undefined;
|
|
228
239
|
const sunkOwnership = (ancestor, ownership, isNewlyCreated) => {
|
|
229
240
|
if (!isNewlyCreated || ownership !== "full" || ancestor.typeName === undefined) {
|
|
230
241
|
return ownership;
|
|
231
242
|
}
|
|
232
243
|
return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? "borrowed" : ownership;
|
|
233
244
|
};
|
|
234
|
-
const classOrInterfaceExpression = (context, resolved, ownership,
|
|
245
|
+
const classOrInterfaceExpression = (context, resolved, ownership, options) => {
|
|
235
246
|
const ancestor = fundamentalAncestor(context, resolved);
|
|
247
|
+
const fallbackClass = fallbackClassThunk(context, resolved.namespace.name, resolved.value.name, options.isReceived);
|
|
236
248
|
if (ancestor === undefined) {
|
|
237
|
-
return tObject(ownership);
|
|
249
|
+
return tObject(ownership, fallbackClass);
|
|
238
250
|
}
|
|
239
|
-
return renderFundamental({
|
|
251
|
+
return renderFundamental({
|
|
252
|
+
...ancestor,
|
|
253
|
+
ownership: sunkOwnership(ancestor, ownership, options.isNewlyCreated),
|
|
254
|
+
fallbackClass,
|
|
255
|
+
});
|
|
240
256
|
};
|
|
241
257
|
const isClassOrInterface = (type) => type !== undefined && (type.kind === "class" || type.kind === "interface");
|
|
242
258
|
const getFundamental = (node) => {
|
|
@@ -296,6 +312,7 @@ const renderSelfDescriptor = (context, instance) => {
|
|
|
296
312
|
const recordLayout = (placement) => ({
|
|
297
313
|
isCallerAllocated: placement.isCallerAllocated ?? false,
|
|
298
314
|
isInline: placement.isInline ?? false,
|
|
315
|
+
isReceived: placement.isReceived === true,
|
|
299
316
|
});
|
|
300
317
|
const recordRefPair = (record) => ({
|
|
301
318
|
refFunc: record.glibRefFunc ?? record.copyFunc,
|
|
@@ -320,7 +337,7 @@ const structExpression = (context, resolved, ownership, options) => {
|
|
|
320
337
|
});
|
|
321
338
|
};
|
|
322
339
|
const fundamentalRecordExpression = (options) => {
|
|
323
|
-
const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass,
|
|
340
|
+
const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, fallbackClass } = options;
|
|
324
341
|
return renderFundamental({
|
|
325
342
|
lib,
|
|
326
343
|
refFunc,
|
|
@@ -328,8 +345,9 @@ const fundamentalRecordExpression = (options) => {
|
|
|
328
345
|
typeName: resolved.value.glibTypeName,
|
|
329
346
|
ownership,
|
|
330
347
|
wrapperClass,
|
|
331
|
-
|
|
332
|
-
|
|
348
|
+
fallbackClass,
|
|
349
|
+
isCallerAllocated: options.isCallerAllocated,
|
|
350
|
+
isInline: options.isInline,
|
|
333
351
|
});
|
|
334
352
|
};
|
|
335
353
|
const boxedRecordExpression = (options) => {
|
|
@@ -345,6 +363,7 @@ const boxedRecordExpression = (options) => {
|
|
|
345
363
|
isCallerAllocated,
|
|
346
364
|
isInline,
|
|
347
365
|
size: size > 0 ? size : undefined,
|
|
366
|
+
fallbackClass: fallbackClassThunk(context, resolved.namespace.name, record.name, options.isReceived),
|
|
348
367
|
});
|
|
349
368
|
};
|
|
350
369
|
const plainRecordExpression = (context, resolved, ownership, placement) => {
|
|
@@ -363,26 +382,31 @@ const isPlainStruct = (resolved) => {
|
|
|
363
382
|
}
|
|
364
383
|
return record.glibGetType === undefined;
|
|
365
384
|
};
|
|
366
|
-
const
|
|
385
|
+
const fundamentalRecordPath = (context, resolved, ownership, placement) => {
|
|
367
386
|
const record = resolved.value;
|
|
368
387
|
const { refFunc, unrefFunc } = recordRefPair(record);
|
|
369
388
|
const lib = resolved.namespace.sharedLibrary;
|
|
370
|
-
if (refFunc
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
389
|
+
if (refFunc === undefined || unrefFunc === undefined || lib === undefined) {
|
|
390
|
+
return undefined;
|
|
391
|
+
}
|
|
392
|
+
const wrapperClass = requiresFallbackClass(record)
|
|
393
|
+
? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))
|
|
394
|
+
: undefined;
|
|
395
|
+
return fundamentalRecordExpression({
|
|
396
|
+
resolved,
|
|
397
|
+
lib,
|
|
398
|
+
refFunc,
|
|
399
|
+
unrefFunc,
|
|
400
|
+
ownership,
|
|
401
|
+
wrapperClass,
|
|
402
|
+
fallbackClass: wrapperClass === undefined
|
|
403
|
+
? fallbackClassThunk(context, resolved.namespace.name, record.name, placement.isReceived === true)
|
|
404
|
+
: undefined,
|
|
405
|
+
...recordLayout(placement),
|
|
406
|
+
});
|
|
385
407
|
};
|
|
408
|
+
const recordExpression = (context, resolved, ownership, placement = {}) => fundamentalRecordPath(context, resolved, ownership, placement) ??
|
|
409
|
+
plainRecordExpression(context, resolved, ownership, placement);
|
|
386
410
|
const rawEnumDescriptor = (isSigned) => (isSigned ? tInt32 : tUint32);
|
|
387
411
|
const flagsMask = (resolved) => resolved.value.members.reduce((mask, member) => (mask | Number(member.value)) >>> 0, 0);
|
|
388
412
|
const enumExpression = (resolved) => {
|
|
@@ -400,12 +424,16 @@ const expressionForResolved = (context, resolved, transfer, options) => {
|
|
|
400
424
|
switch (resolved.kind) {
|
|
401
425
|
case "class":
|
|
402
426
|
case "interface": {
|
|
403
|
-
return classOrInterfaceExpression(context, resolved, ownership,
|
|
427
|
+
return classOrInterfaceExpression(context, resolved, ownership, {
|
|
428
|
+
isNewlyCreated: options.isNewlyCreated ?? false,
|
|
429
|
+
isReceived: options.isReceived === true,
|
|
430
|
+
});
|
|
404
431
|
}
|
|
405
432
|
case "record": {
|
|
406
433
|
return recordExpression(context, resolved, ownership, {
|
|
407
434
|
isCallerAllocated: options.isCallerAllocated ?? false,
|
|
408
435
|
isInline: options.isInline ?? false,
|
|
436
|
+
isReceived: options.isReceived === true,
|
|
409
437
|
});
|
|
410
438
|
}
|
|
411
439
|
case "enum": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCallback } from \"../gir/callback.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport {\n type GirCursorBounds,\n type GirParameter,\n type GirReturnValue,\n isCallerAllocatedOut,\n isInoutParameter,\n isOutParameter,\n type ParameterTransfer,\n} from \"../gir/parameter.js\";\nimport {\n type CArrayType,\n hasUnknownArrayLength,\n type ListFlavor,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isRecordInout } from \"../store/gi/param-marshal.js\";\nimport { computeRecordFieldSlots, recordInlineSize } from \"../store/gi/record-layout.js\";\nimport { isValueMarshalable } from \"../store/gi/value-marshalable.js\";\nimport {\n type ArrayLayout,\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBiguint64,\n tBoxed,\n tByteArray,\n tCallback,\n tCursorArray,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tNumericByteArray,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\nimport { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\ntype PrimaryReturnKind = \"surfaced\" | \"void\" | \"skipped\";\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n cursor: GirCursorBounds | undefined;\n hasOutIndirection: boolean;\n};\n\ntype CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };\ntype CArrayExpressionOptions = ArgIndexOptions & { isCallerAllocated: boolean };\n\ntype RenderDescriptorOptions = Partial<ArgIndexOptions> & {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype RecordPlacement = {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype RecordLayout = {\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\ntype FundamentalDescriptor = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n ownership: Ownership;\n wrapperClass?: string | undefined;\n isCallerAllocated?: boolean | undefined;\n isInline?: boolean | undefined;\n};\n\ntype AncestorFundamental = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n};\n\ntype ResolvedRecord = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype FundamentalRecordOptions = {\n resolved: Extract<EntityType, { kind: \"record\" }>;\n lib: string;\n refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\nconst LIST_HELPERS: Record<Exclude<ListFlavor, \"gbytearray\">, ListDescriptorName> = {\n glist: \"list\",\n gslist: \"slist\",\n gptrarray: \"ptrArray\",\n garray: \"gArray\",\n};\n\nconst FLOATING_FUNDAMENTALS: Set<string> = new Set([\"GParam\"]);\n\nconst mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>\n options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;\n\nconst transferOwnership = (transfer: ParameterTransfer): Ownership => {\n if (transfer === \"full\") {\n return \"full\";\n }\n\n if (transfer === \"container\") {\n return \"full\";\n }\n\n return \"borrowed\";\n};\n\nconst deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>\n transfer === \"container\" ? \"none\" : transfer;\n\nconst isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref === undefined || primitiveCategoryFor(library, ref) === \"void\";\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {\n if (isVoidRef(library, returnValue.type)) {\n return \"void\";\n }\n\n return returnValue.skip ? \"skipped\" : \"surfaced\";\n};\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) !== \"surfaced\";\n\nconst isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"skipped\";\n\nconst isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"void\";\n\nconst argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({\n argIndexOffset: options.argIndexOffset ?? 0,\n argIndexMap: options.argIndexMap,\n cursor: options.cursor,\n hasOutIndirection: options.hasOutIndirection === true,\n});\n\nconst renderDescriptor = (\n context: ModuleContext,\n ref: TypeId | undefined,\n transfer: ParameterTransfer = \"none\",\n options: RenderDescriptorOptions = {},\n): string => {\n if (ref === undefined) {\n return tVoid;\n }\n\n const indexOptions = argIndexOptions(options);\n const ownership = transferOwnership(transfer);\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(ownership);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return primitiveExpression(type.category, ownership);\n }\n case \"varargs\": {\n return tVoid;\n }\n case \"callback\": {\n return tBiguint64;\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return expressionForResolved(context, type, transfer, options);\n }\n case \"carray\": {\n return arrayExpression(context, type, transfer, {\n ...indexOptions,\n isCallerAllocated: options.isCallerAllocated === true,\n });\n }\n case \"list\": {\n return listExpression(context, type, transfer, indexOptions);\n }\n case \"hashtable\": {\n const elementTransfer = deriveElementTransfer(transfer);\n const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);\n const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);\n\n return tHashTable(key, value, ownership);\n }\n }\n};\n\nconst listExpression = (\n context: ModuleContext,\n type: ListType,\n transfer: ParameterTransfer,\n indexOptions: ArgIndexOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n if (type.flavor === \"gbytearray\") {\n return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);\n }\n\n const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);\n\n return tList(LIST_HELPERS[type.flavor], element, ownership);\n};\n\nconst resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"callback\") {\n return undefined;\n }\n\n return type.value;\n};\n\nconst isScalarType = (library: Library, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"string\" && type.category !== \"void\";\n }\n case \"enum\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isScalarRef(library, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = library.typeFor(ref);\n\n return type !== undefined && isScalarType(library, type);\n};\n\nconst isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {\n const type = carrayFor(library, ref);\n\n if (type === undefined) {\n return false;\n }\n\n return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === \"string\";\n};\n\nconst isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) &&\n (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };\n\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n });\n};\n\nconst userDataIndexByName = (parameters: GirParameter[]): number | undefined => {\n let userDataIndex: number | undefined;\n\n for (const [index, parameter] of parameters.entries()) {\n if (parameter.name === \"user_data\" || parameter.name === \"data\") {\n userDataIndex = index;\n }\n }\n\n return userDataIndex;\n};\n\nconst findUserDataIndex = (parameters: GirParameter[]): number | undefined => {\n const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);\n\n return declared?.closureIndex ?? userDataIndexByName(parameters);\n};\n\nconst callbackOptionsArg = (\n owningParameter: GirParameter,\n userDataIndex: number | undefined,\n canThrow: boolean,\n): string[] => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: true\");\n }\n\n if (owningParameter.closureIndex !== undefined) {\n options.push(\"hasUserData: true\");\n }\n\n if (userDataIndex !== undefined) {\n options.push(`userDataIndex: ${String(userDataIndex)}`);\n }\n\n if (canThrow) {\n options.push(\"canThrow: true\");\n }\n\n if (owningParameter.scope !== undefined) {\n options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);\n }\n\n return options;\n};\n\nconst renderCallbackType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n owningParameter: GirParameter,\n argOverrides?: Map<number, string>,\n): string | undefined => {\n const callback = resolveCallbackType(context, ref);\n\n if (callback === undefined) {\n return undefined;\n }\n\n const argTypes = callback.parameters.map(\n (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),\n );\n\n const { returnValue } = callback;\n\n return tCallback({\n argTypes,\n returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),\n options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters), callback.throws),\n });\n};\n\nconst primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {\n if (category === \"void\") {\n return tVoid;\n }\n\n if (category === \"string\") {\n return tString(ownership);\n }\n\n if (category === \"pointer\") {\n return tBiguint64;\n }\n\n if (category === \"gtype\") {\n return tGtype;\n }\n\n return tScalar(category satisfies ScalarDescriptorName);\n};\n\nconst renderFundamental = (descriptor: FundamentalDescriptor): string => {\n const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isCallerAllocated, isInline } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst sunkOwnership = (\n ancestor: AncestorFundamental,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): Ownership => {\n if (!isNewlyCreated || ownership !== \"full\" || ancestor.typeName === undefined) {\n return ownership;\n }\n\n return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? \"borrowed\" : ownership;\n};\n\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n\n if (ancestor === undefined) {\n return tObject(ownership);\n }\n\n return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });\n};\n\nconst isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: \"class\" | \"interface\" }> =>\n type !== undefined && (type.kind === \"class\" || type.kind === \"interface\");\n\nconst getFundamental = (\n node: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => {\n const cls = node.value;\n const lib = node.namespace.sharedLibrary;\n\n if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib,\n refFunc: cls.glibRefFunc,\n unrefFunc: cls.glibUnrefFunc,\n typeName: cls.glibTypeName,\n };\n};\n\nconst walkFundamental = (\n context: ModuleContext,\n current: GirType | undefined,\n seen: Set<string>,\n): AncestorFundamental | undefined => {\n if (!isClassOrInterface(current)) {\n return undefined;\n }\n\n const key = `${current.namespace.name}.${current.value.name}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n const fundamental = getFundamental(current);\n\n if (fundamental !== undefined) {\n return fundamental;\n }\n\n if (current.value.parent === undefined) {\n return undefined;\n }\n\n const parent = context.library.resolveType(current.namespace.name, current.value.parent);\n\n return walkFundamental(context, parent, seen);\n};\n\nconst fundamentalAncestor = (\n context: ModuleContext,\n start: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());\n\nconst classSelfDescriptor = (\n context: ModuleContext,\n type: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\n};\n\nconst renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {\n const ref = instance.type;\n\n if (ref === undefined) {\n return tObject(\"borrowed\");\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(\"borrowed\");\n }\n\n if (isClassOrInterface(type)) {\n return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\nconst recordLayout = (placement: RecordPlacement): RecordLayout => ({\n isCallerAllocated: placement.isCallerAllocated ?? false,\n isInline: placement.isInline ?? false,\n});\n\nconst recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({\n refFunc: record.glibRefFunc ?? record.copyFunc,\n unrefFunc: record.glibUnrefFunc ?? record.freeFunc,\n});\n\nconst requiresFallbackClass = (record: ResolvedRecord): boolean => {\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n return record.glibTypeName === undefined;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst structExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n options: { isCallerAllocated: boolean; isInline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));\n const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);\n\n return tStruct(ownership, {\n size: isCopyable && size > 0 ? size : undefined,\n wrapperClass,\n isCallerAllocated: options.isCallerAllocated,\n isInline: options.isInline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isCallerAllocated, isInline } = options;\n\n return renderFundamental({\n lib,\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n isCallerAllocated: boolean;\n isInline: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, isCallerAllocated, isInline, typeFnName } = options;\n const record = resolved.value;\n const glibName = record.glibTypeName ?? record.cType ?? record.name;\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return tBoxed(glibName, {\n ownership,\n sharedLibrary: resolved.namespace.sharedLibrary,\n getTypeFnName: typeFnName,\n freeFnName: record.freeFunc,\n isCallerAllocated,\n isInline,\n size: size > 0 ? size : undefined,\n });\n};\n\nconst plainRecordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string => {\n const record = resolved.value;\n const layout = recordLayout(placement);\n\n if (record.glibGetType === undefined) {\n return structExpression(context, resolved, ownership, layout);\n }\n\n return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });\n};\n\nconst isPlainStruct = (resolved: Extract<EntityType, { kind: \"record\" }>): boolean => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined && resolved.namespace.sharedLibrary !== undefined) {\n return false;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst recordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement = {},\n): string => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n const lib = resolved.namespace.sharedLibrary;\n\n if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n lib,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n ...recordLayout(placement),\n });\n }\n\n return plainRecordExpression(context, resolved, ownership, placement);\n};\n\nconst rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);\n\nconst flagsMask = (resolved: Extract<EntityType, { kind: \"enum\" }>): number =>\n resolved.value.members.reduce((mask, member) => (mask | Number(member.value)) >>> 0, 0);\n\nconst enumExpression = (resolved: Extract<EntityType, { kind: \"enum\" }>): string => {\n const getter = resolved.value.glibGetType;\n const isSigned = resolved.value.members.some((member) => member.value.startsWith(\"-\"));\n const lib = resolved.namespace.sharedLibrary;\n const isBitfield = resolved.value.kind === \"bitfield\";\n\n if (getter === undefined || getter === \"\" || lib === undefined) {\n return isBitfield ? tFlags(\"\", \"\", isSigned, flagsMask(resolved)) : rawEnumDescriptor(isSigned);\n }\n\n return isBitfield ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);\n};\n\nconst expressionForResolved = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" | \"record\" | \"enum\" | \"alias\" }>,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n switch (resolved.kind) {\n case \"class\":\n case \"interface\": {\n return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.isCallerAllocated ?? false,\n isInline: options.isInline ?? false,\n });\n }\n case \"enum\": {\n return enumExpression(resolved);\n }\n case \"alias\": {\n return aliasExpression(context, resolved.value.target, transfer, options);\n }\n }\n};\n\nconst elementExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string =>\n renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {\n ...options,\n cursor: undefined,\n hasOutIndirection: false,\n isCallerAllocated: false,\n });\n\nconst cursorArrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CursorArgIndexOptions & { layout: ArrayLayout },\n): string =>\n tCursorArray(\n elementExpression(context, ref, transfer, options),\n {\n baseIndex: mapArgIndex(options, options.cursor.baseIndex),\n lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),\n },\n transferOwnership(transfer),\n options.layout,\n );\n\nconst arrayLayout = (context: ModuleContext, ref: CArrayType, options: ArgIndexOptions): ArrayLayout => ({\n elementSize: inlineElementSize(context, ref, options.hasOutIndirection),\n isBytes:\n context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),\n});\n\nconst fixedArrayLayout = (layout: ArrayLayout, isCallerAllocated: boolean): ArrayLayout =>\n isCallerAllocated ? { ...layout, isCallerAllocated: true } : layout;\n\nconst arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CArrayExpressionOptions,\n): string => {\n const { cursor } = options;\n const layout = arrayLayout(context, ref, options);\n\n if (cursor !== undefined) {\n return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });\n }\n\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = elementExpression(context, ref, transfer, options);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, fixedArrayLayout(layout, options.isCallerAllocated));\n }\n\n return tArray(element, ownership, layout);\n};\n\nconst elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {\n const declared = elementCType === undefined ? 0 : elementCType.split(\"*\").length - 1;\n\n return hasOutIndirection ? declared - 1 : declared;\n};\n\nconst inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {\n if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref.element);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n return recordInlineSize(context, type.value);\n};\n\nconst aliasExpression = (\n context: ModuleContext,\n target: TypeId | undefined,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n if (target === undefined) {\n return tObject(transferOwnership(transfer));\n }\n\n return renderDescriptor(context, target, transfer, options);\n};\n\nexport {\n isPlainStruct,\n transferOwnership,\n isInlineCallbackRef,\n isSkippedPrimaryReturn,\n isVoidPrimaryReturn,\n primaryReturnKind,\n shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCallback } from \"../gir/callback.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport {\n type GirCursorBounds,\n type GirParameter,\n type GirReturnValue,\n isCallerAllocatedOut,\n isInoutParameter,\n isOutParameter,\n type ParameterTransfer,\n} from \"../gir/parameter.js\";\nimport {\n type CArrayType,\n hasUnknownArrayLength,\n type ListFlavor,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isRecordInout } from \"../store/gi/param-marshal.js\";\nimport { computeRecordFieldSlots, recordInlineSize } from \"../store/gi/record-layout.js\";\nimport { isValueMarshalable } from \"../store/gi/value-marshalable.js\";\nimport {\n type ArrayLayout,\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBiguint64,\n tBoxed,\n tByteArray,\n tCallback,\n tCursorArray,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tNumericByteArray,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\nimport { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\ntype PrimaryReturnKind = \"surfaced\" | \"void\" | \"skipped\";\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n cursor: GirCursorBounds | undefined;\n hasOutIndirection: boolean;\n isReceived: boolean;\n};\n\ntype CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };\ntype CArrayExpressionOptions = ArgIndexOptions & { isCallerAllocated: boolean };\n\ntype RenderDescriptorOptions = Partial<ArgIndexOptions> & {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype RecordPlacement = {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isReceived?: boolean;\n};\n\ntype RecordLayout = {\n isCallerAllocated: boolean;\n isInline: boolean;\n isReceived: boolean;\n};\n\ntype FundamentalDescriptor = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n ownership: Ownership;\n wrapperClass?: string | undefined;\n fallbackClass?: string | undefined;\n isCallerAllocated?: boolean | undefined;\n isInline?: boolean | undefined;\n};\n\ntype AncestorFundamental = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n};\n\ntype ResolvedRecord = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype FundamentalRecordOptions = {\n resolved: Extract<EntityType, { kind: \"record\" }>;\n lib: string;\n refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n fallbackClass?: string | undefined;\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\nconst LIST_HELPERS: Record<Exclude<ListFlavor, \"gbytearray\">, ListDescriptorName> = {\n glist: \"list\",\n gslist: \"slist\",\n gptrarray: \"ptrArray\",\n garray: \"gArray\",\n};\n\nconst FLOATING_FUNDAMENTALS: Set<string> = new Set([\"GParam\"]);\n\nconst mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>\n options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;\n\nconst transferOwnership = (transfer: ParameterTransfer): Ownership => {\n if (transfer === \"full\") {\n return \"full\";\n }\n\n if (transfer === \"container\") {\n return \"full\";\n }\n\n return \"borrowed\";\n};\n\nconst deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>\n transfer === \"container\" ? \"none\" : transfer;\n\nconst isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref === undefined || primitiveCategoryFor(library, ref) === \"void\";\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {\n if (isVoidRef(library, returnValue.type)) {\n return \"void\";\n }\n\n return returnValue.skip ? \"skipped\" : \"surfaced\";\n};\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) !== \"surfaced\";\n\nconst isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"skipped\";\n\nconst isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"void\";\n\nconst argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({\n argIndexOffset: options.argIndexOffset ?? 0,\n argIndexMap: options.argIndexMap,\n cursor: options.cursor,\n hasOutIndirection: options.hasOutIndirection === true,\n isReceived: options.isReceived === true,\n});\n\nconst renderDescriptor = (\n context: ModuleContext,\n ref: TypeId | undefined,\n transfer: ParameterTransfer = \"none\",\n options: RenderDescriptorOptions = {},\n): string => {\n if (ref === undefined) {\n return tVoid;\n }\n\n const indexOptions = argIndexOptions(options);\n const ownership = transferOwnership(transfer);\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(ownership);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return primitiveExpression(type.category, ownership);\n }\n case \"varargs\": {\n return tVoid;\n }\n case \"callback\": {\n return tBiguint64;\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return expressionForResolved(context, type, transfer, options);\n }\n case \"carray\": {\n return arrayExpression(context, type, transfer, {\n ...indexOptions,\n isCallerAllocated: options.isCallerAllocated === true,\n });\n }\n case \"list\": {\n return listExpression(context, type, transfer, indexOptions);\n }\n case \"hashtable\": {\n const elementTransfer = deriveElementTransfer(transfer);\n const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);\n const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);\n\n return tHashTable(key, value, ownership);\n }\n }\n};\n\nconst listExpression = (\n context: ModuleContext,\n type: ListType,\n transfer: ParameterTransfer,\n indexOptions: ArgIndexOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n if (type.flavor === \"gbytearray\") {\n return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);\n }\n\n const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);\n\n return tList(LIST_HELPERS[type.flavor], element, ownership);\n};\n\nconst resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"callback\") {\n return undefined;\n }\n\n return type.value;\n};\n\nconst isScalarType = (library: Library, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"string\" && type.category !== \"void\";\n }\n case \"enum\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isScalarRef(library, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = library.typeFor(ref);\n\n return type !== undefined && isScalarType(library, type);\n};\n\nconst isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {\n const type = carrayFor(library, ref);\n\n if (type === undefined) {\n return false;\n }\n\n return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === \"string\";\n};\n\nconst isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) &&\n (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n const behindRef: RenderDescriptorOptions = {\n ...argIndex,\n cursor: parameter.cursor,\n hasOutIndirection: true,\n isReceived: true,\n };\n\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n isReceived: true,\n });\n};\n\nconst userDataIndexByName = (parameters: GirParameter[]): number | undefined => {\n let userDataIndex: number | undefined;\n\n for (const [index, parameter] of parameters.entries()) {\n if (parameter.name === \"user_data\" || parameter.name === \"data\") {\n userDataIndex = index;\n }\n }\n\n return userDataIndex;\n};\n\nconst findUserDataIndex = (parameters: GirParameter[]): number | undefined => {\n const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);\n\n return declared?.closureIndex ?? userDataIndexByName(parameters);\n};\n\nconst callbackOptionsArg = (\n owningParameter: GirParameter,\n userDataIndex: number | undefined,\n canThrow: boolean,\n): string[] => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: true\");\n }\n\n if (owningParameter.closureIndex !== undefined) {\n options.push(\"hasUserData: true\");\n }\n\n if (userDataIndex !== undefined) {\n options.push(`userDataIndex: ${String(userDataIndex)}`);\n }\n\n if (canThrow) {\n options.push(\"canThrow: true\");\n }\n\n if (owningParameter.scope !== undefined) {\n options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);\n }\n\n return options;\n};\n\nconst renderCallbackType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n owningParameter: GirParameter,\n argOverrides?: Map<number, string>,\n): string | undefined => {\n const callback = resolveCallbackType(context, ref);\n\n if (callback === undefined) {\n return undefined;\n }\n\n const argTypes = callback.parameters.map(\n (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),\n );\n\n const { returnValue } = callback;\n\n return tCallback({\n argTypes,\n returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership, { isReceived: true }),\n options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters), callback.throws),\n });\n};\n\nconst primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {\n if (category === \"void\") {\n return tVoid;\n }\n\n if (category === \"string\") {\n return tString(ownership);\n }\n\n if (category === \"pointer\") {\n return tBiguint64;\n }\n\n if (category === \"gtype\") {\n return tGtype;\n }\n\n return tScalar(category satisfies ScalarDescriptorName);\n};\n\nconst renderFundamental = (descriptor: FundamentalDescriptor): string => {\n const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, fallbackClass } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n fallbackClass,\n isCallerAllocated: descriptor.isCallerAllocated,\n isInline: descriptor.isInline,\n });\n};\n\nconst fallbackClassThunk = (\n context: ModuleContext,\n namespaceName: string,\n name: string,\n isReceived: boolean,\n): string | undefined =>\n isReceived && context.library.isTreeShaken\n ? `() => ${context.qualify(namespaceName, sanitizeTypeIdentifier(name))}`\n : undefined;\n\nconst sunkOwnership = (\n ancestor: AncestorFundamental,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): Ownership => {\n if (!isNewlyCreated || ownership !== \"full\" || ancestor.typeName === undefined) {\n return ownership;\n }\n\n return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? \"borrowed\" : ownership;\n};\n\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n options: { isNewlyCreated: boolean; isReceived: boolean },\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n const fallbackClass = fallbackClassThunk(context, resolved.namespace.name, resolved.value.name, options.isReceived);\n\n if (ancestor === undefined) {\n return tObject(ownership, fallbackClass);\n }\n\n return renderFundamental({\n ...ancestor,\n ownership: sunkOwnership(ancestor, ownership, options.isNewlyCreated),\n fallbackClass,\n });\n};\n\nconst isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: \"class\" | \"interface\" }> =>\n type !== undefined && (type.kind === \"class\" || type.kind === \"interface\");\n\nconst getFundamental = (\n node: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => {\n const cls = node.value;\n const lib = node.namespace.sharedLibrary;\n\n if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib,\n refFunc: cls.glibRefFunc,\n unrefFunc: cls.glibUnrefFunc,\n typeName: cls.glibTypeName,\n };\n};\n\nconst walkFundamental = (\n context: ModuleContext,\n current: GirType | undefined,\n seen: Set<string>,\n): AncestorFundamental | undefined => {\n if (!isClassOrInterface(current)) {\n return undefined;\n }\n\n const key = `${current.namespace.name}.${current.value.name}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n const fundamental = getFundamental(current);\n\n if (fundamental !== undefined) {\n return fundamental;\n }\n\n if (current.value.parent === undefined) {\n return undefined;\n }\n\n const parent = context.library.resolveType(current.namespace.name, current.value.parent);\n\n return walkFundamental(context, parent, seen);\n};\n\nconst fundamentalAncestor = (\n context: ModuleContext,\n start: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());\n\nconst classSelfDescriptor = (\n context: ModuleContext,\n type: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\n};\n\nconst renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {\n const ref = instance.type;\n\n if (ref === undefined) {\n return tObject(\"borrowed\");\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(\"borrowed\");\n }\n\n if (isClassOrInterface(type)) {\n return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\nconst recordLayout = (placement: RecordPlacement): RecordLayout => ({\n isCallerAllocated: placement.isCallerAllocated ?? false,\n isInline: placement.isInline ?? false,\n isReceived: placement.isReceived === true,\n});\n\nconst recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({\n refFunc: record.glibRefFunc ?? record.copyFunc,\n unrefFunc: record.glibUnrefFunc ?? record.freeFunc,\n});\n\nconst requiresFallbackClass = (record: ResolvedRecord): boolean => {\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n return record.glibTypeName === undefined;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst structExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n options: { isCallerAllocated: boolean; isInline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));\n const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);\n\n return tStruct(ownership, {\n size: isCopyable && size > 0 ? size : undefined,\n wrapperClass,\n isCallerAllocated: options.isCallerAllocated,\n isInline: options.isInline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, fallbackClass } = options;\n\n return renderFundamental({\n lib,\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n fallbackClass,\n isCallerAllocated: options.isCallerAllocated,\n isInline: options.isInline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n isCallerAllocated: boolean;\n isInline: boolean;\n isReceived: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, isCallerAllocated, isInline, typeFnName } = options;\n const record = resolved.value;\n const glibName = record.glibTypeName ?? record.cType ?? record.name;\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return tBoxed(glibName, {\n ownership,\n sharedLibrary: resolved.namespace.sharedLibrary,\n getTypeFnName: typeFnName,\n freeFnName: record.freeFunc,\n isCallerAllocated,\n isInline,\n size: size > 0 ? size : undefined,\n fallbackClass: fallbackClassThunk(context, resolved.namespace.name, record.name, options.isReceived),\n });\n};\n\nconst plainRecordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string => {\n const record = resolved.value;\n const layout = recordLayout(placement);\n\n if (record.glibGetType === undefined) {\n return structExpression(context, resolved, ownership, layout);\n }\n\n return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });\n};\n\nconst isPlainStruct = (resolved: Extract<EntityType, { kind: \"record\" }>): boolean => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined && resolved.namespace.sharedLibrary !== undefined) {\n return false;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst fundamentalRecordPath = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string | undefined => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n const lib = resolved.namespace.sharedLibrary;\n\n if (refFunc === undefined || unrefFunc === undefined || lib === undefined) {\n return undefined;\n }\n\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n lib,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n fallbackClass:\n wrapperClass === undefined\n ? fallbackClassThunk(context, resolved.namespace.name, record.name, placement.isReceived === true)\n : undefined,\n ...recordLayout(placement),\n });\n};\n\nconst recordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement = {},\n): string =>\n fundamentalRecordPath(context, resolved, ownership, placement) ??\n plainRecordExpression(context, resolved, ownership, placement);\n\nconst rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);\n\nconst flagsMask = (resolved: Extract<EntityType, { kind: \"enum\" }>): number =>\n resolved.value.members.reduce((mask, member) => (mask | Number(member.value)) >>> 0, 0);\n\nconst enumExpression = (resolved: Extract<EntityType, { kind: \"enum\" }>): string => {\n const getter = resolved.value.glibGetType;\n const isSigned = resolved.value.members.some((member) => member.value.startsWith(\"-\"));\n const lib = resolved.namespace.sharedLibrary;\n const isBitfield = resolved.value.kind === \"bitfield\";\n\n if (getter === undefined || getter === \"\" || lib === undefined) {\n return isBitfield ? tFlags(\"\", \"\", isSigned, flagsMask(resolved)) : rawEnumDescriptor(isSigned);\n }\n\n return isBitfield ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);\n};\n\nconst expressionForResolved = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" | \"record\" | \"enum\" | \"alias\" }>,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n switch (resolved.kind) {\n case \"class\":\n case \"interface\": {\n return classOrInterfaceExpression(context, resolved, ownership, {\n isNewlyCreated: options.isNewlyCreated ?? false,\n isReceived: options.isReceived === true,\n });\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.isCallerAllocated ?? false,\n isInline: options.isInline ?? false,\n isReceived: options.isReceived === true,\n });\n }\n case \"enum\": {\n return enumExpression(resolved);\n }\n case \"alias\": {\n return aliasExpression(context, resolved.value.target, transfer, options);\n }\n }\n};\n\nconst elementExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string =>\n renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {\n ...options,\n cursor: undefined,\n hasOutIndirection: false,\n isCallerAllocated: false,\n });\n\nconst cursorArrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CursorArgIndexOptions & { layout: ArrayLayout },\n): string =>\n tCursorArray(\n elementExpression(context, ref, transfer, options),\n {\n baseIndex: mapArgIndex(options, options.cursor.baseIndex),\n lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),\n },\n transferOwnership(transfer),\n options.layout,\n );\n\nconst arrayLayout = (context: ModuleContext, ref: CArrayType, options: ArgIndexOptions): ArrayLayout => ({\n elementSize: inlineElementSize(context, ref, options.hasOutIndirection),\n isBytes:\n context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),\n});\n\nconst fixedArrayLayout = (layout: ArrayLayout, isCallerAllocated: boolean): ArrayLayout =>\n isCallerAllocated ? { ...layout, isCallerAllocated: true } : layout;\n\nconst arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CArrayExpressionOptions,\n): string => {\n const { cursor } = options;\n const layout = arrayLayout(context, ref, options);\n\n if (cursor !== undefined) {\n return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });\n }\n\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = elementExpression(context, ref, transfer, options);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, fixedArrayLayout(layout, options.isCallerAllocated));\n }\n\n return tArray(element, ownership, layout);\n};\n\nconst elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {\n const declared = elementCType === undefined ? 0 : elementCType.split(\"*\").length - 1;\n\n return hasOutIndirection ? declared - 1 : declared;\n};\n\nconst inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {\n if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref.element);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n return recordInlineSize(context, type.value);\n};\n\nconst aliasExpression = (\n context: ModuleContext,\n target: TypeId | undefined,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n if (target === undefined) {\n return tObject(transferOwnership(transfer));\n }\n\n return renderDescriptor(context, target, transfer, options);\n};\n\nexport {\n isPlainStruct,\n transferOwnership,\n isInlineCallbackRef,\n isSkippedPrimaryReturn,\n isVoidPrimaryReturn,\n primaryReturnKind,\n shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
|
|
@@ -9,6 +9,7 @@ type BoxedOptions = {
|
|
|
9
9
|
isCallerAllocated: boolean;
|
|
10
10
|
isInline?: boolean;
|
|
11
11
|
size: number | undefined;
|
|
12
|
+
fallbackClass?: string | undefined;
|
|
12
13
|
};
|
|
13
14
|
type StructOptions = {
|
|
14
15
|
size: number | string | undefined;
|
|
@@ -20,6 +21,7 @@ type FundamentalOptions = {
|
|
|
20
21
|
ownership: Ownership;
|
|
21
22
|
typeName: string | undefined;
|
|
22
23
|
wrapperClass: string | undefined;
|
|
24
|
+
fallbackClass?: string | undefined;
|
|
23
25
|
isCallerAllocated?: boolean | undefined;
|
|
24
26
|
isInline?: boolean | undefined;
|
|
25
27
|
};
|
|
@@ -58,7 +60,7 @@ declare const tGtype: string;
|
|
|
58
60
|
declare const tBuffer: string;
|
|
59
61
|
declare const tScalar: (name: ScalarDescriptorName) => string;
|
|
60
62
|
declare const tString: (ownership: Ownership, length?: string) => string;
|
|
61
|
-
declare const tObject: (ownership: Ownership) => string;
|
|
63
|
+
declare const tObject: (ownership: Ownership, fallbackClass?: string) => string;
|
|
62
64
|
declare const tBoxed: (glibName: string, options: BoxedOptions) => string;
|
|
63
65
|
declare const tStruct: (ownership: Ownership, options: StructOptions) => string;
|
|
64
66
|
declare const tInlineStruct: () => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,KAAK,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AA4CrC,KAAK,oBAAoB,GACnB,SAAS,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,UAAU,GACV,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAEd,KAAK,YAAY,GAAG;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sourceStringLiteral } from "@gtkx/utils";
|
|
2
|
-
import { joinArgs } from "../writer/emit.js";
|
|
2
|
+
import { joinArgs, pure } from "../writer/emit.js";
|
|
3
3
|
const SKIPPED_RETURN_ENTRY = "isReturnSkipped: true";
|
|
4
4
|
const UNPACKED_RETURN_ENTRY = "isReturnUnpacked: true";
|
|
5
5
|
const T = {
|
|
@@ -56,21 +56,21 @@ const optionsObject = (parts) => {
|
|
|
56
56
|
const present = parts.filter((part) => part !== undefined);
|
|
57
57
|
return present.length === 0 ? undefined : `{ ${present.join(", ")} }`;
|
|
58
58
|
};
|
|
59
|
+
const optionalLiteralEntry = (key, value) => value === undefined ? undefined : `${key}: ${sourceStringLiteral(value)}`;
|
|
59
60
|
const tScalar = (name) => T[name];
|
|
60
61
|
const tString = (ownership, length) => call("string", [sourceStringLiteral(ownership), length]);
|
|
61
|
-
const tObject = (ownership) => call("object", [sourceStringLiteral(ownership)]);
|
|
62
|
+
const tObject = (ownership, fallbackClass) => call("object", [sourceStringLiteral(ownership), fallbackClass]);
|
|
62
63
|
const tBoxed = (glibName, options) => call("boxed", [
|
|
63
64
|
sourceStringLiteral(glibName),
|
|
64
65
|
optionsObject([
|
|
65
66
|
`ownership: ${sourceStringLiteral(options.ownership)}`,
|
|
66
|
-
options.sharedLibrary
|
|
67
|
-
? undefined
|
|
68
|
-
: `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,
|
|
67
|
+
optionalLiteralEntry("sharedLibrary", options.sharedLibrary),
|
|
69
68
|
`getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,
|
|
70
|
-
|
|
69
|
+
optionalLiteralEntry("freeFnName", options.freeFnName),
|
|
71
70
|
options.isCallerAllocated ? "isCallerAllocated: true" : undefined,
|
|
72
71
|
options.isInline === true ? "isInline: true" : undefined,
|
|
73
72
|
options.size === undefined ? undefined : `size: ${String(options.size)}`,
|
|
73
|
+
options.fallbackClass === undefined ? undefined : `fallbackClass: ${options.fallbackClass}`,
|
|
74
74
|
]),
|
|
75
75
|
]);
|
|
76
76
|
const tStruct = (ownership, options) => call("struct", [
|
|
@@ -91,6 +91,7 @@ const tFundamental = (lib, refFunc, unrefFunc, options) => call("fundamental", [
|
|
|
91
91
|
`ownership: ${sourceStringLiteral(options.ownership)}`,
|
|
92
92
|
options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,
|
|
93
93
|
options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
|
|
94
|
+
options.fallbackClass === undefined ? undefined : `fallbackClass: ${options.fallbackClass}`,
|
|
94
95
|
options.isCallerAllocated === true ? "isCallerAllocated: true" : undefined,
|
|
95
96
|
options.isInline === true ? "isInline: true" : undefined,
|
|
96
97
|
]),
|
|
@@ -155,11 +156,11 @@ const tFn = (lib, cIdentifier, spec) => {
|
|
|
155
156
|
const skipEntry = spec.isReturnSkipped ? `, ${SKIPPED_RETURN_ENTRY}` : "";
|
|
156
157
|
const unpackEntry = spec.isReturnUnpacked ? `, ${UNPACKED_RETURN_ENTRY}` : "";
|
|
157
158
|
const throwsEntry = spec.canThrow ? ", canThrow: true" : "";
|
|
158
|
-
return call("fn", [
|
|
159
|
+
return pure(call("fn", [
|
|
159
160
|
sourceStringLiteral(lib),
|
|
160
161
|
sourceStringLiteral(cIdentifier),
|
|
161
|
-
`{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${unpackEntry}${throwsEntry} }`,
|
|
162
|
-
]);
|
|
162
|
+
`() => ({ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${unpackEntry}${throwsEntry} })`,
|
|
163
|
+
]));
|
|
163
164
|
};
|
|
164
165
|
export { tVoid, tBoolean, tUint8, tUint32, tInt32, tUint64, tBiguint64, tGtype, tBuffer, tScalar, tString, tObject, tBoxed, tStruct, tInlineStruct, tFundamental, tRef, tHashTable, tEnum, tFlags, tByteArray, tNumericByteArray, tList, tArray, tSizedArray, tFixedArray, tCursorArray, tCallback, tBind, tFn, };
|
|
165
166
|
//# sourceMappingURL=descriptor.js.map
|