@gtkx/codegen 1.2.2 → 1.4.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/README.md +6 -4
- package/dist/analysis/descriptor-render.d.ts +7 -1
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +37 -15
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +5 -1
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +12 -2
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/param-capability.d.ts +5 -2
- package/dist/analysis/param-capability.d.ts.map +1 -1
- package/dist/analysis/param-capability.js +36 -4
- package/dist/analysis/param-capability.js.map +1 -1
- package/dist/analysis/param-structure.d.ts +1 -1
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +28 -10
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/compile.js +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +6 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +11 -2
- 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 +10 -1
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/fingerprint.d.ts +5 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +111 -15
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +3 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +33 -7
- package/dist/gi.js.map +1 -1
- package/dist/gir/external-namespaces.d.ts +8 -0
- package/dist/gir/external-namespaces.d.ts.map +1 -0
- package/dist/gir/external-namespaces.js +4 -0
- package/dist/gir/external-namespaces.js.map +1 -0
- package/dist/gir/finish-overrides.d.ts +3 -0
- package/dist/gir/finish-overrides.d.ts.map +1 -0
- package/dist/gir/finish-overrides.js +5 -0
- package/dist/gir/finish-overrides.js.map +1 -0
- package/dist/gir/function.d.ts +5 -2
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +34 -5
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/hidden-symbols.d.ts +3 -0
- package/dist/gir/hidden-symbols.d.ts.map +1 -0
- package/dist/gir/hidden-symbols.js +39 -0
- package/dist/gir/hidden-symbols.js.map +1 -0
- package/dist/gir/library.d.ts +22 -2
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +21 -3
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/ucs4-overrides.d.ts +3 -0
- package/dist/gir/ucs4-overrides.d.ts.map +1 -0
- package/dist/gir/ucs4-overrides.js +7 -0
- package/dist/gir/ucs4-overrides.js.map +1 -0
- package/dist/guards.d.ts +2 -1
- package/dist/guards.d.ts.map +1 -1
- package/dist/guards.js +3 -1
- package/dist/guards.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +27 -8
- package/dist/jsx.js.map +1 -1
- package/dist/runner.d.ts +8 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +9 -3
- package/dist/runner.js.map +1 -1
- package/dist/store/external-package-links.d.ts +6 -0
- package/dist/store/external-package-links.d.ts.map +1 -0
- package/dist/store/external-package-links.js +158 -0
- package/dist/store/external-package-links.js.map +1 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -1
- package/dist/store/gi/callable-doc.js +4 -4
- package/dist/store/gi/callable-doc.js.map +1 -1
- package/dist/store/gi/callables.js +1 -1
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +17 -0
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/constructor-props.js +1 -1
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +2 -1
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/generated-libraries.d.ts +26 -0
- package/dist/store/gi/generated-libraries.d.ts.map +1 -0
- package/dist/store/gi/generated-libraries.js +53 -0
- package/dist/store/gi/generated-libraries.js.map +1 -0
- package/dist/store/gi/gtype-binding.d.ts +2 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +6 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/method.d.ts +7 -2
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +126 -30
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +8 -1
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +52 -4
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +2 -3
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +2 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +9 -3
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/runtime-override.js +1 -1
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.js +2 -2
- 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 +82 -12
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +12 -2
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +24 -5
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +3 -1
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +35 -60
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx-store.d.ts +8 -1
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +9 -2
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +2 -1
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +3 -1
- package/dist/store/resolve-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 +8 -3
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +8 -0
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +27 -1
- package/dist/writer/gtk-doc.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +15 -1
- package/overrides/glib/index.ts.ejs +3 -0
- package/overrides/glib/regex.ts.ejs +66 -0
- package/overrides/gobject/index.ts.ejs +3 -0
- package/overrides/gobject/object-class.ts.ejs +27 -0
- package/overrides/gobject/param-spec-getters.ts.ejs +57 -0
- package/overrides/gobject/param-spec.ts.ejs +21 -0
- package/overrides/gobject/value.ts.ejs +6 -1
- package/overrides/graphene/structs.ts.ejs +38 -3
- package/overrides/gtk/index.ts.ejs +2 -0
- package/overrides/gtk/widget-class.ts.ejs +28 -0
- package/package.json +7 -6
- package/src/analysis/descriptor-render.ts +60 -16
- package/src/analysis/descriptor.ts +17 -3
- package/src/analysis/param-capability.ts +68 -5
- package/src/analysis/param-structure.ts +1 -1
- package/src/analysis/ts-type.ts +45 -11
- package/src/compile.ts +1 -1
- package/src/docs/api-reference.ts +20 -2
- package/src/docs/pipeline.ts +15 -1
- package/src/fingerprint.ts +151 -16
- package/src/gi.ts +48 -9
- package/src/gir/external-namespaces.ts +8 -0
- package/src/gir/finish-overrides.ts +5 -0
- package/src/gir/function.ts +52 -14
- package/src/gir/hidden-symbols.ts +39 -0
- package/src/gir/library.ts +36 -3
- package/src/gir/ucs4-overrides.ts +7 -0
- package/src/guards.ts +6 -1
- package/src/index.ts +2 -0
- package/src/jsx.ts +33 -8
- package/src/runner.ts +17 -3
- package/src/store/external-package-links.ts +226 -0
- package/src/store/gi/callable-doc.ts +8 -4
- package/src/store/gi/callables.ts +1 -1
- package/src/store/gi/class.ts +29 -0
- package/src/store/gi/constructor-props.ts +1 -1
- package/src/store/gi/function.ts +2 -1
- package/src/store/gi/generated-libraries.ts +91 -0
- package/src/store/gi/gtype-binding.ts +8 -1
- package/src/store/gi/method.ts +189 -36
- package/src/store/gi/param-marshal.ts +67 -4
- package/src/store/gi/record-constructor.ts +8 -3
- package/src/store/gi/record-field-accessor.ts +11 -2
- package/src/store/gi/runtime-override.ts +1 -1
- package/src/store/gi/signal.ts +2 -2
- package/src/store/gi/vtable.ts +118 -11
- package/src/store/gi-store.ts +48 -5
- package/src/store/jsx/jsx.ts +3 -1
- package/src/store/jsx/metadata.ts +46 -99
- package/src/store/jsx-store.ts +23 -7
- package/src/store/resolve-store.ts +3 -1
- package/src/store/store-fs.ts +10 -2
- package/src/writer/context.ts +11 -0
- package/src/writer/gtk-doc.ts +38 -1
- package/overrides/cairo/context.ts.ejs +0 -1269
- package/overrides/cairo/font-face.ts.ejs +0 -151
- package/overrides/cairo/font-options.ts.ejs +0 -199
- package/overrides/cairo/image-surface.ts.ejs +0 -132
- package/overrides/cairo/index.ts.ejs +0 -22
- package/overrides/cairo/matrix.ts.ejs +0 -171
- package/overrides/cairo/pattern.ts.ejs +0 -476
- package/overrides/cairo/recording-surface.ts.ejs +0 -102
- package/overrides/cairo/region.ts.ejs +0 -237
- package/overrides/cairo/scaled-font.ts.ejs +0 -330
- package/overrides/cairo/surface.ts.ejs +0 -296
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sanitizeTypeIdentifier } from "@gtkx/utils";
|
|
2
|
-
import { isInoutParameter } from "../../gir/parameter.js";
|
|
2
|
+
import { isCallerAllocatedOut, isInoutParameter } from "../../gir/parameter.js";
|
|
3
3
|
import { recordInlineSize } from "./record-layout.js";
|
|
4
4
|
import { isConstructibleRecord } from "./value-marshalable.js";
|
|
5
5
|
const isHandlePassedInPlace = (context, parameter) => {
|
|
@@ -64,6 +64,51 @@ const renderCallerOutInstance = (context, parameter) => {
|
|
|
64
64
|
return `wrapHandle(alloc(${String(allocation.size)}), ${classExpression})`;
|
|
65
65
|
};
|
|
66
66
|
const isCollectibleCallerOut = (context, parameter) => callerOutAllocation(context, parameter) !== undefined;
|
|
67
|
+
const hasInlineElementStride = (context, array) => {
|
|
68
|
+
if (array.elementCType?.includes("*") === true) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const element = underlyingType(context, array.element);
|
|
72
|
+
if (element === undefined) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
switch (element.kind) {
|
|
76
|
+
case "primitive": {
|
|
77
|
+
return (element.category !== "void" &&
|
|
78
|
+
element.category !== "string" &&
|
|
79
|
+
element.category !== "pointer" &&
|
|
80
|
+
element.category !== "unichar" &&
|
|
81
|
+
element.category !== "gtype");
|
|
82
|
+
}
|
|
83
|
+
case "enum": {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
case "record": {
|
|
87
|
+
return recordInlineSize(context, element.value) !== undefined;
|
|
88
|
+
}
|
|
89
|
+
case "alias":
|
|
90
|
+
case "callback":
|
|
91
|
+
case "carray":
|
|
92
|
+
case "class":
|
|
93
|
+
case "hashtable":
|
|
94
|
+
case "interface":
|
|
95
|
+
case "list":
|
|
96
|
+
case "varargs": {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const isFixedArrayCallerOut = (context, parameter) => {
|
|
102
|
+
if (!isCallerAllocatedOut(parameter)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
106
|
+
return (type?.kind === "carray" &&
|
|
107
|
+
type.fixedSize !== undefined &&
|
|
108
|
+
type.fixedSize > 0 &&
|
|
109
|
+
type.lengthParameterIndex === undefined &&
|
|
110
|
+
hasInlineElementStride(context, type));
|
|
111
|
+
};
|
|
67
112
|
const isAllocatableCallerOut = (context, parameter) => underlyingParamKind(context, parameter) === "record" && isCollectibleCallerOut(context, parameter);
|
|
68
113
|
const isRecordInout = (context, parameter) => isInoutParameter(parameter) && underlyingParamKind(context, parameter) === "record";
|
|
69
114
|
const isHandlePassing = (context, ref) => {
|
|
@@ -91,9 +136,12 @@ const isHandlePassing = (context, ref) => {
|
|
|
91
136
|
}
|
|
92
137
|
}
|
|
93
138
|
};
|
|
94
|
-
const
|
|
139
|
+
const isGObjectTypeNamed = (context, ref, typeName) => {
|
|
95
140
|
const name = context.library.nameFor(ref);
|
|
96
|
-
return name?.namespaceName === "GObject" && name.typeName ===
|
|
141
|
+
return name?.namespaceName === "GObject" && name.typeName === typeName;
|
|
97
142
|
};
|
|
98
|
-
|
|
143
|
+
const isClosureType = (context, ref) => isGObjectTypeNamed(context, ref, "Closure");
|
|
144
|
+
const isValueType = (context, ref) => isGObjectTypeNamed(context, ref, "Value");
|
|
145
|
+
const isValueTypeName = (name) => name.namespaceName === "GObject" && name.typeName === "Value";
|
|
146
|
+
export { isAllocatableCallerOut, isClosureType, isValueType, isValueTypeName, isHandlePassedInPlace, isCollectibleCallerOut, isFixedArrayCallerOut, isRecordInout, isHandlePassing, renderCallerOutInstance, underlyingType, };
|
|
99
147
|
//# sourceMappingURL=param-marshal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-marshal.js","sourceRoot":"","sources":["../../../src/store/gi/param-marshal.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier } from \"@gtkx/utils\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { type GirParameter, isInoutParameter } from \"../../gir/parameter.js\";\nimport { recordInlineSize } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype TypeName = { namespaceName: string; typeName: string };\ntype CallerOutAllocation = TypeName & ({ strategy: \"construct\" } | { strategy: \"allocate\"; size: number });\n\nconst isHandlePassedInPlace = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.direction !== \"out\" && parameter.direction !== \"inout\") {\n return false;\n }\n\n return (\n (parameter.callerAllocates || parameter.direction === \"inout\") &&\n parameter.type !== undefined &&\n isHandlePassing(context, parameter.type)\n );\n};\n\nconst underlyingType = (context: ModuleContext, ref: TypeId): GirType | undefined => {\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"alias\") {\n return type;\n }\n\n return type.value.target === undefined ? undefined : underlyingType(context, type.value.target);\n};\n\nconst underlyingParamKind = (context: ModuleContext, parameter: GirParameter): GirType[\"kind\"] | undefined =>\n parameter.type === undefined ? undefined : underlyingType(context, parameter.type)?.kind;\n\nconst resolvedTypeName = (context: ModuleContext, ref: TypeId | undefined): TypeName | undefined => {\n let current = ref;\n\n while (current !== undefined) {\n const resolved = context.library.typeFor(current);\n\n if (resolved?.kind === \"alias\" && resolved.value.target !== undefined) {\n current = resolved.value.target;\n continue;\n }\n\n return context.library.nameFor(current);\n }\n\n return undefined;\n};\n\nconst recordCallerOutAllocation = (\n context: ModuleContext,\n name: TypeName,\n type: Extract<GirType, { kind: \"record\" }>,\n): CallerOutAllocation | undefined => {\n const size = recordInlineSize(context, type.value);\n\n if (size === undefined) {\n return undefined;\n }\n\n return isConstructibleRecord(context, type.namespace.name, type.value)\n ? { ...name, strategy: \"construct\" }\n : { ...name, strategy: \"allocate\", size };\n};\n\nconst callerOutAllocation = (context: ModuleContext, parameter: GirParameter): CallerOutAllocation | undefined => {\n const name = resolvedTypeName(context, parameter.type);\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n if (name === undefined || type === undefined) {\n return undefined;\n }\n\n if (type.kind === \"class\") {\n return { ...name, strategy: \"construct\" };\n }\n\n return type.kind === \"record\" ? recordCallerOutAllocation(context, name, type) : undefined;\n};\n\nconst renderCallerOutInstance = (context: ModuleContext, parameter: GirParameter): string => {\n const allocation = callerOutAllocation(context, parameter);\n\n if (allocation === undefined) {\n throw new Error(\"renderCallerOutInstance: expected a caller-allocated out-parameter with a known layout\");\n }\n\n const classExpression = context.qualify(allocation.namespaceName, sanitizeTypeIdentifier(allocation.typeName));\n\n if (allocation.strategy === \"construct\") {\n return `new ${classExpression}()`;\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"wrapHandle\");\n\n return `wrapHandle(alloc(${String(allocation.size)}), ${classExpression})`;\n};\n\nconst isCollectibleCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n callerOutAllocation(context, parameter) !== undefined;\n\nconst isAllocatableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n underlyingParamKind(context, parameter) === \"record\" && isCollectibleCallerOut(context, parameter);\n\nconst isRecordInout = (context: ModuleContext, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) && underlyingParamKind(context, parameter) === \"record\";\n\nconst isHandlePassing = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"class\":\n case \"interface\":\n case \"record\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isHandlePassing(context, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"enum\":\n case \"hashtable\":\n case \"list\":\n case \"primitive\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isClosureType = (context: ModuleContext, ref: TypeId): boolean => {\n const name = context.library.nameFor(ref);\n\n return name?.namespaceName === \"GObject\" && name.typeName === \"Closure\";\n};\n\nexport {\n isAllocatableCallerOut,\n isClosureType,\n isHandlePassedInPlace,\n isCollectibleCallerOut,\n isRecordInout,\n isHandlePassing,\n renderCallerOutInstance,\n underlyingType,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"param-marshal.js","sourceRoot":"","sources":["../../../src/store/gi/param-marshal.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier } from \"@gtkx/utils\";\nimport type { CArrayType, TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { type GirParameter, isCallerAllocatedOut, isInoutParameter } from \"../../gir/parameter.js\";\nimport { recordInlineSize } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype TypeName = { namespaceName: string; typeName: string };\ntype CallerOutAllocation = TypeName & ({ strategy: \"construct\" } | { strategy: \"allocate\"; size: number });\n\nconst isHandlePassedInPlace = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.direction !== \"out\" && parameter.direction !== \"inout\") {\n return false;\n }\n\n return (\n (parameter.callerAllocates || parameter.direction === \"inout\") &&\n parameter.type !== undefined &&\n isHandlePassing(context, parameter.type)\n );\n};\n\nconst underlyingType = (context: ModuleContext, ref: TypeId): GirType | undefined => {\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"alias\") {\n return type;\n }\n\n return type.value.target === undefined ? undefined : underlyingType(context, type.value.target);\n};\n\nconst underlyingParamKind = (context: ModuleContext, parameter: GirParameter): GirType[\"kind\"] | undefined =>\n parameter.type === undefined ? undefined : underlyingType(context, parameter.type)?.kind;\n\nconst resolvedTypeName = (context: ModuleContext, ref: TypeId | undefined): TypeName | undefined => {\n let current = ref;\n\n while (current !== undefined) {\n const resolved = context.library.typeFor(current);\n\n if (resolved?.kind === \"alias\" && resolved.value.target !== undefined) {\n current = resolved.value.target;\n continue;\n }\n\n return context.library.nameFor(current);\n }\n\n return undefined;\n};\n\nconst recordCallerOutAllocation = (\n context: ModuleContext,\n name: TypeName,\n type: Extract<GirType, { kind: \"record\" }>,\n): CallerOutAllocation | undefined => {\n const size = recordInlineSize(context, type.value);\n\n if (size === undefined) {\n return undefined;\n }\n\n return isConstructibleRecord(context, type.namespace.name, type.value)\n ? { ...name, strategy: \"construct\" }\n : { ...name, strategy: \"allocate\", size };\n};\n\nconst callerOutAllocation = (context: ModuleContext, parameter: GirParameter): CallerOutAllocation | undefined => {\n const name = resolvedTypeName(context, parameter.type);\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n if (name === undefined || type === undefined) {\n return undefined;\n }\n\n if (type.kind === \"class\") {\n return { ...name, strategy: \"construct\" };\n }\n\n return type.kind === \"record\" ? recordCallerOutAllocation(context, name, type) : undefined;\n};\n\nconst renderCallerOutInstance = (context: ModuleContext, parameter: GirParameter): string => {\n const allocation = callerOutAllocation(context, parameter);\n\n if (allocation === undefined) {\n throw new Error(\"renderCallerOutInstance: expected a caller-allocated out-parameter with a known layout\");\n }\n\n const classExpression = context.qualify(allocation.namespaceName, sanitizeTypeIdentifier(allocation.typeName));\n\n if (allocation.strategy === \"construct\") {\n return `new ${classExpression}()`;\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"wrapHandle\");\n\n return `wrapHandle(alloc(${String(allocation.size)}), ${classExpression})`;\n};\n\nconst isCollectibleCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n callerOutAllocation(context, parameter) !== undefined;\n\nconst hasInlineElementStride = (context: ModuleContext, array: CArrayType): boolean => {\n if (array.elementCType?.includes(\"*\") === true) {\n return false;\n }\n\n const element = underlyingType(context, array.element);\n\n if (element === undefined) {\n return false;\n }\n\n switch (element.kind) {\n case \"primitive\": {\n return (\n element.category !== \"void\" &&\n element.category !== \"string\" &&\n element.category !== \"pointer\" &&\n element.category !== \"unichar\" &&\n element.category !== \"gtype\"\n );\n }\n case \"enum\": {\n return true;\n }\n case \"record\": {\n return recordInlineSize(context, element.value) !== undefined;\n }\n case \"alias\":\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isFixedArrayCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (!isCallerAllocatedOut(parameter)) {\n return false;\n }\n\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n return (\n type?.kind === \"carray\" &&\n type.fixedSize !== undefined &&\n type.fixedSize > 0 &&\n type.lengthParameterIndex === undefined &&\n hasInlineElementStride(context, type)\n );\n};\n\nconst isAllocatableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n underlyingParamKind(context, parameter) === \"record\" && isCollectibleCallerOut(context, parameter);\n\nconst isRecordInout = (context: ModuleContext, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) && underlyingParamKind(context, parameter) === \"record\";\n\nconst isHandlePassing = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"class\":\n case \"interface\":\n case \"record\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isHandlePassing(context, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"enum\":\n case \"hashtable\":\n case \"list\":\n case \"primitive\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isGObjectTypeNamed = (context: ModuleContext, ref: TypeId, typeName: string): boolean => {\n const name = context.library.nameFor(ref);\n\n return name?.namespaceName === \"GObject\" && name.typeName === typeName;\n};\n\nconst isClosureType = (context: ModuleContext, ref: TypeId): boolean => isGObjectTypeNamed(context, ref, \"Closure\");\nconst isValueType = (context: ModuleContext, ref: TypeId): boolean => isGObjectTypeNamed(context, ref, \"Value\");\nconst isValueTypeName = (name: TypeName): boolean => name.namespaceName === \"GObject\" && name.typeName === \"Value\";\n\nexport {\n isAllocatableCallerOut,\n isClosureType,\n isValueType,\n isValueTypeName,\n isHandlePassedInPlace,\n isCollectibleCallerOut,\n isFixedArrayCallerOut,\n isRecordInout,\n isHandlePassing,\n renderCallerOutInstance,\n underlyingType,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-constructor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"record-constructor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,gBAAgB,CAAC;AAe/D,KAAK,qBAAqB,GAAG;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC5B,CAAC;AAOF,QAAA,MAAM,qCAAqC,GACvC,SAAS,aAAa,EACtB,QAAQ,SAAS,EACjB,WAAW,MAAM,KAClB,MAaF,CAAC;AA0DF,QAAA,MAAM,uBAAuB,GAAI,SAAS,aAAa,EAAE,MAAM,qBAAqB,KAAG,MAyBtF,CAAC;AA+BF,OAAO,EAAE,qCAAqC,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
|
|
2
2
|
import { renderDescriptor } from "../../analysis/descriptor-render.js";
|
|
3
3
|
import { inputParameters, parameterIdentifier } from "../../analysis/param-structure.js";
|
|
4
|
-
import { renderTsType } from "../../analysis/ts-type.js";
|
|
5
4
|
import { renderBlock, renderBracedOrEmpty } from "../../writer/emit.js";
|
|
6
5
|
import { staticMembers } from "./callables.js";
|
|
7
6
|
import { getDoc } from "./doc-spec.js";
|
|
8
7
|
import { renderSourceGtype } from "./gtype-binding.js";
|
|
9
|
-
import { emitFieldWrite, isEmittableField, isInlineField, isStorableFieldType } from "./record-field-accessor.js";
|
|
8
|
+
import { emitFieldWrite, fieldTsType, isEmittableField, isInlineField, isStorableFieldType, } from "./record-field-accessor.js";
|
|
10
9
|
import { computeRecordFieldSlots } from "./record-layout.js";
|
|
11
10
|
import { isConstructibleRecord } from "./value-marshalable.js";
|
|
12
11
|
const isWritableFieldSlot = (context, entry) => entry.field.writable &&
|
|
@@ -18,7 +17,7 @@ const renderRecordConstructorPropsInterface = (context, record, className) => {
|
|
|
18
17
|
const lines = slots
|
|
19
18
|
.filter((entry) => isWritableFieldSlot(context, entry))
|
|
20
19
|
.map((entry) => `${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +
|
|
21
|
-
`${
|
|
20
|
+
`${fieldTsType(context, entry.field.type, true)};`);
|
|
22
21
|
return renderBracedOrEmpty(head, lines.join("\n"));
|
|
23
22
|
};
|
|
24
23
|
const isSelfReturning = (context, record, callable) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-constructor.js","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { inputParameters, parameterIdentifier } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { type Callables, staticMembers } from \"./callables.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { renderSourceGtype } from \"./gtype-binding.js\";\nimport { emitFieldWrite, isEmittableField, isInlineField, isStorableFieldType } from \"./record-field-accessor.js\";\nimport { computeRecordFieldSlots, type RecordFieldSlot } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype WritableFieldSlot = RecordFieldSlot & { field: GirField & { type: TypeId } };\n\ntype RecordConstructorSpec = {\n record: GirRecord;\n className: string;\n callables: Callables;\n isErrorSubclass: boolean;\n};\n\nconst isWritableFieldSlot = (context: ModuleContext, entry: RecordFieldSlot): entry is WritableFieldSlot =>\n entry.field.writable &&\n isEmittableField(context, entry.field) &&\n isStorableFieldType(context, entry.field.type);\n\nconst renderRecordConstructorPropsInterface = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n): string => {\n const head = `export interface ${className}ConstructorProps`;\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n const lines = slots\n .filter((entry): entry is WritableFieldSlot => isWritableFieldSlot(context, entry))\n .map(\n (entry) =>\n `${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +\n `${renderTsType(context, entry.field.type, true)};`,\n );\n\n return renderBracedOrEmpty(head, lines.join(\"\\n\"));\n};\n\nconst isSelfReturning = (context: ModuleContext, record: GirRecord, callable: GirFunction): boolean => {\n const ref = callable.returnValue.type;\n const name = ref === undefined ? undefined : context.library.nameFor(ref);\n\n return name?.namespaceName === context.namespace.name && name.typeName === record.name;\n};\n\nconst renderStaticCall = (context: ModuleContext, callable: GirFunction, name: string): string => {\n const args = inputParameters(context.library, callable).map(({ parameter, index }) =>\n parameterIdentifier(parameter, index));\n\n return `${name}(${args.join(\", \")})`;\n};\n\nconst constructionHint = (context: ModuleContext, spec: RecordConstructorSpec): string | undefined => {\n const candidates = staticMembers(context, spec.callables).filter(({ callable }) =>\n isSelfReturning(context, spec.record, callable));\n\n const candidate = candidates.find(({ name }) => name === \"new\") ?? candidates[0];\n\n return candidate === undefined ? undefined : renderStaticCall(context, candidate.callable, candidate.name);\n};\n\nconst unconstructibleMessage = (context: ModuleContext, spec: RecordConstructorSpec): string => {\n const qualified = `${context.namespace.name}.${spec.className}`;\n const hint = constructionHint(context, spec);\n\n return hint === undefined\n ? `Cannot construct ${qualified} with new: its instances come from the functions that return them.`\n : `Cannot construct ${qualified} with new: use ${qualified}.${hint} instead.`;\n};\n\nconst renderUnconstructibleGuard = (context: ModuleContext, spec: RecordConstructorSpec): string => {\n const superCall = spec.isErrorSubclass ? [\"super();\"] : [];\n const message = sourceStringLiteral(unconstructibleMessage(context, spec));\n\n return renderBlock(\"constructor()\", [...superCall, `throw new globalThis.Error(${message});`].join(\"\\n\"));\n};\n\nconst renderEmptyConstructor = (className: string, isErrorSubclass: boolean): string =>\n isErrorSubclass\n ? renderBlock(`constructor(props: ${className}ConstructorProps = {})`, \"super();\")\n : `constructor(props: ${className}ConstructorProps = {}) {}`;\n\nconst renderFieldWrites = (context: ModuleContext, slots: RecordFieldSlot[]): string[] => {\n const statements: string[] = [];\n\n for (const entry of slots) {\n if (isWritableFieldSlot(context, entry)) {\n statements.push(renderFieldWrite(context, entry));\n }\n }\n\n return statements;\n};\n\nconst renderRecordConstructor = (context: ModuleContext, spec: RecordConstructorSpec): string => {\n const { record, className, isErrorSubclass } = spec;\n\n if (!isConstructibleRecord(context, context.namespace.name, record)) {\n return renderUnconstructibleGuard(context, spec);\n }\n\n const superCall = isErrorSubclass ? [\"super();\"] : [];\n const { slots, size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n if (size === 0) {\n return renderEmptyConstructor(className, isErrorSubclass);\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"setHandle\");\n\n const statements = [\n ...superCall,\n `const __handle = alloc(${allocArgs(context, record, size).join(\", \")});`,\n ...renderFieldWrites(context, slots),\n \"setHandle(this, __handle);\",\n ];\n\n return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, statements.join(\"\\n\"));\n};\n\nconst allocArgs = (context: ModuleContext, record: GirRecord, size: number): string[] => {\n const args = [String(size)];\n\n if (renderSourceGtype(context, record) !== undefined) {\n args.push(\"this.__type__\");\n }\n\n return args;\n};\n\nconst renderFieldWrite = (context: ModuleContext, entry: WritableFieldSlot): string => {\n context.addRuntimeImport(\"t\");\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, entry.field.type, \"none\", { isInline: isInlineField(context, entry.field) }),\n );\n\n const name = toCamelIdentifier(entry.field.name);\n\n const write = emitFieldWrite(context, {\n descriptor,\n slot: entry.slot,\n targetExpr: \"__handle\",\n valueExpr: `props.${name}`,\n });\n\n return `if (props.${name} !== undefined) ${write}`;\n};\n\nexport { renderRecordConstructorPropsInterface, renderRecordConstructor };\n"]}
|
|
1
|
+
{"version":3,"file":"record-constructor.js","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAkB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACH,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,mBAAmB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAwB,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAW/D,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAE,KAAsB,EAA8B,EAAE,CACvG,KAAK,CAAC,KAAK,CAAC,QAAQ;IACpB,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;IACtC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEnD,MAAM,qCAAqC,GAAG,CAC1C,OAAsB,EACtB,MAAiB,EACjB,SAAiB,EACX,EAAE;IACR,MAAM,IAAI,GAAG,oBAAoB,SAAS,kBAAkB,CAAC;IAC7D,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAElF,MAAM,KAAK,GAAG,KAAK;SACd,MAAM,CAAC,CAAC,KAAK,EAA8B,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAClF,GAAG,CACA,CAAC,KAAK,EAAE,EAAE,CACN,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;QACjE,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CACzD,CAAC;IAEN,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAE,MAAiB,EAAE,QAAqB,EAAW,EAAE;IAClG,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1E,OAAO,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAE,IAAY,EAAU,EAAE;IAC7F,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CACjF,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAE3C,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,IAA2B,EAAsB,EAAE;IACjG,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC9E,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/G,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAsB,EAAE,IAA2B,EAAU,EAAE;IAC3F,MAAM,SAAS,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE7C,OAAO,IAAI,KAAK,SAAS;QACrB,CAAC,CAAC,oBAAoB,SAAS,oEAAoE;QACnG,CAAC,CAAC,oBAAoB,SAAS,kBAAkB,SAAS,IAAI,IAAI,WAAW,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,OAAsB,EAAE,IAA2B,EAAU,EAAE;IAC/F,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,MAAM,OAAO,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAE3E,OAAO,WAAW,CAAC,eAAe,EAAE,CAAC,GAAG,SAAS,EAAE,8BAA8B,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9G,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,SAAiB,EAAE,eAAwB,EAAU,EAAE,CACnF,eAAe;IACX,CAAC,CAAC,WAAW,CAAC,sBAAsB,SAAS,wBAAwB,EAAE,UAAU,CAAC;IAClF,CAAC,CAAC,sBAAsB,SAAS,2BAA2B,CAAC;AAErE,MAAM,iBAAiB,GAAG,CAAC,OAAsB,EAAE,KAAwB,EAAY,EAAE;IACrF,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAsB,EAAE,IAA2B,EAAU,EAAE;IAC5F,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAEpD,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAClE,OAAO,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAExF,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACb,OAAO,sBAAsB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEtC,MAAM,UAAU,GAAG;QACf,GAAG,SAAS;QACZ,0BAA0B,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACzE,GAAG,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;QACpC,4BAA4B;KAC/B,CAAC;IAEF,OAAO,WAAW,CAAC,sBAAsB,SAAS,wBAAwB,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,OAAsB,EAAE,MAAiB,EAAE,IAAY,EAAY,EAAE;IACpF,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5B,IAAI,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,KAAwB,EAAU,EAAE;IAClF,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAE9B,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CACtC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CACzG,CAAC;IAEF,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE;QAClC,UAAU;QACV,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,SAAS,IAAI,EAAE;KAC7B,CAAC,CAAC;IAEH,OAAO,aAAa,IAAI,mBAAmB,KAAK,EAAE,CAAC;AACvD,CAAC,CAAC;AAEF,OAAO,EAAE,qCAAqC,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["import { sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { inputParameters, parameterIdentifier } from \"../../analysis/param-structure.js\";\nimport { renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { type Callables, staticMembers } from \"./callables.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { renderSourceGtype } from \"./gtype-binding.js\";\nimport {\n emitFieldWrite,\n fieldTsType,\n isEmittableField,\n isInlineField,\n isStorableFieldType,\n} from \"./record-field-accessor.js\";\nimport { computeRecordFieldSlots, type RecordFieldSlot } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype WritableFieldSlot = RecordFieldSlot & { field: GirField & { type: TypeId } };\n\ntype RecordConstructorSpec = {\n record: GirRecord;\n className: string;\n callables: Callables;\n isErrorSubclass: boolean;\n};\n\nconst isWritableFieldSlot = (context: ModuleContext, entry: RecordFieldSlot): entry is WritableFieldSlot =>\n entry.field.writable &&\n isEmittableField(context, entry.field) &&\n isStorableFieldType(context, entry.field.type);\n\nconst renderRecordConstructorPropsInterface = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n): string => {\n const head = `export interface ${className}ConstructorProps`;\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n const lines = slots\n .filter((entry): entry is WritableFieldSlot => isWritableFieldSlot(context, entry))\n .map(\n (entry) =>\n `${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +\n `${fieldTsType(context, entry.field.type, true)};`,\n );\n\n return renderBracedOrEmpty(head, lines.join(\"\\n\"));\n};\n\nconst isSelfReturning = (context: ModuleContext, record: GirRecord, callable: GirFunction): boolean => {\n const ref = callable.returnValue.type;\n const name = ref === undefined ? undefined : context.library.nameFor(ref);\n\n return name?.namespaceName === context.namespace.name && name.typeName === record.name;\n};\n\nconst renderStaticCall = (context: ModuleContext, callable: GirFunction, name: string): string => {\n const args = inputParameters(context.library, callable).map(({ parameter, index }) =>\n parameterIdentifier(parameter, index));\n\n return `${name}(${args.join(\", \")})`;\n};\n\nconst constructionHint = (context: ModuleContext, spec: RecordConstructorSpec): string | undefined => {\n const candidates = staticMembers(context, spec.callables).filter(({ callable }) =>\n isSelfReturning(context, spec.record, callable));\n\n const candidate = candidates.find(({ name }) => name === \"new\") ?? candidates[0];\n\n return candidate === undefined ? undefined : renderStaticCall(context, candidate.callable, candidate.name);\n};\n\nconst unconstructibleMessage = (context: ModuleContext, spec: RecordConstructorSpec): string => {\n const qualified = `${context.namespace.name}.${spec.className}`;\n const hint = constructionHint(context, spec);\n\n return hint === undefined\n ? `Cannot construct ${qualified} with new: its instances come from the functions that return them.`\n : `Cannot construct ${qualified} with new: use ${qualified}.${hint} instead.`;\n};\n\nconst renderUnconstructibleGuard = (context: ModuleContext, spec: RecordConstructorSpec): string => {\n const superCall = spec.isErrorSubclass ? [\"super();\"] : [];\n const message = sourceStringLiteral(unconstructibleMessage(context, spec));\n\n return renderBlock(\"constructor()\", [...superCall, `throw new globalThis.Error(${message});`].join(\"\\n\"));\n};\n\nconst renderEmptyConstructor = (className: string, isErrorSubclass: boolean): string =>\n isErrorSubclass\n ? renderBlock(`constructor(props: ${className}ConstructorProps = {})`, \"super();\")\n : `constructor(props: ${className}ConstructorProps = {}) {}`;\n\nconst renderFieldWrites = (context: ModuleContext, slots: RecordFieldSlot[]): string[] => {\n const statements: string[] = [];\n\n for (const entry of slots) {\n if (isWritableFieldSlot(context, entry)) {\n statements.push(renderFieldWrite(context, entry));\n }\n }\n\n return statements;\n};\n\nconst renderRecordConstructor = (context: ModuleContext, spec: RecordConstructorSpec): string => {\n const { record, className, isErrorSubclass } = spec;\n\n if (!isConstructibleRecord(context, context.namespace.name, record)) {\n return renderUnconstructibleGuard(context, spec);\n }\n\n const superCall = isErrorSubclass ? [\"super();\"] : [];\n const { slots, size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n if (size === 0) {\n return renderEmptyConstructor(className, isErrorSubclass);\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"setHandle\");\n\n const statements = [\n ...superCall,\n `const __handle = alloc(${allocArgs(context, record, size).join(\", \")});`,\n ...renderFieldWrites(context, slots),\n \"setHandle(this, __handle);\",\n ];\n\n return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, statements.join(\"\\n\"));\n};\n\nconst allocArgs = (context: ModuleContext, record: GirRecord, size: number): string[] => {\n const args = [String(size)];\n\n if (renderSourceGtype(context, record) !== undefined) {\n args.push(\"this.__type__\");\n }\n\n return args;\n};\n\nconst renderFieldWrite = (context: ModuleContext, entry: WritableFieldSlot): string => {\n context.addRuntimeImport(\"t\");\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, entry.field.type, \"none\", { isInline: isInlineField(context, entry.field) }),\n );\n\n const name = toCamelIdentifier(entry.field.name);\n\n const write = emitFieldWrite(context, {\n descriptor,\n slot: entry.slot,\n targetExpr: \"__handle\",\n valueExpr: `props.${name}`,\n });\n\n return `if (props.${name} !== undefined) ${write}`;\n};\n\nexport { renderRecordConstructorPropsInterface, renderRecordConstructor };\n"]}
|
|
@@ -23,7 +23,8 @@ declare const isEmittableField: (context: ModuleContext, field: GirField) => fie
|
|
|
23
23
|
declare const emitFieldWrite: (context: ModuleContext, spec: FieldWriteSpec) => string;
|
|
24
24
|
declare const isStorableFieldType: (context: ModuleContext, ref: TypeId) => boolean;
|
|
25
25
|
declare const resolveRecordFieldEntry: (context: ModuleContext, slot: RecordFieldSlot, claimedNames: Set<string>, siblingFields: GirField[]) => RecordFieldEntry | undefined;
|
|
26
|
+
declare const fieldTsType: (context: ModuleContext, ref: TypeId | undefined, isNullable?: boolean) => string;
|
|
26
27
|
declare const renderRecordFieldAccessor: (context: ModuleContext, slot: RecordFieldSlot, claimedNames: Set<string>, siblingFields: GirField[]) => string | undefined;
|
|
27
28
|
declare const isInlineField: (context: ModuleContext, field: GirField) => boolean;
|
|
28
|
-
export { isEmittableField, isInlineField, isStorableFieldType, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, };
|
|
29
|
+
export { fieldTsType, isEmittableField, isInlineField, isStorableFieldType, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, };
|
|
29
30
|
//# sourceMappingURL=record-field-accessor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-field-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAO7D,OAAO,EAKH,KAAK,eAAe,EACvB,MAAM,oBAAoB,CAAC;AAI5B,KAAK,cAAc,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAWF,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,cAAc,CAAC;CAC/B,CAAC;AA2FF,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,KAAK,IAAI,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAIhE,CAAC;AAEvC,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,MAAM,cAAc,KAAG,MAuBtE,CAAC;AAuCF,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,EAAE,KAAK,MAAM,KAAG,OAIlE,CAAC;AA0BF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,EACzB,eAAe,QAAQ,EAAE,KAC1B,gBAAgB,GAAG,SAcrB,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAC3B,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,EACzB,eAAe,QAAQ,EAAE,KAC1B,MAAM,GAAG,SAsCX,CAAC;AAkCF,QAAA,MAAM,aAAa,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,OACwC,CAAC;AA0hB1G,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,yBAAyB,GAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"record-field-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAO7D,OAAO,EAKH,KAAK,eAAe,EACvB,MAAM,oBAAoB,CAAC;AAI5B,KAAK,cAAc,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAWF,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,cAAc,CAAC;CAC/B,CAAC;AA2FF,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,KAAK,IAAI,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAIhE,CAAC;AAEvC,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,MAAM,cAAc,KAAG,MAuBtE,CAAC;AAuCF,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,EAAE,KAAK,MAAM,KAAG,OAIlE,CAAC;AA0BF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,EACzB,eAAe,QAAQ,EAAE,KAC1B,gBAAgB,GAAG,SAcrB,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,SAAS,aAAa,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,oBAAkB,KAAG,MAM1F,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAC3B,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,EACzB,eAAe,QAAQ,EAAE,KAC1B,MAAM,GAAG,SAsCX,CAAC;AAkCF,QAAA,MAAM,aAAa,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,OACwC,CAAC;AA0hB1G,OAAO,EACH,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,yBAAyB,GAC5B,CAAC"}
|
|
@@ -80,12 +80,18 @@ const resolveRecordFieldEntry = (context, slot, claimedNames, siblingFields) =>
|
|
|
80
80
|
}
|
|
81
81
|
return {
|
|
82
82
|
jsName: admitted.jsName,
|
|
83
|
-
tsType:
|
|
83
|
+
tsType: fieldTsType(context, admitted.field.type),
|
|
84
84
|
isWritable: admitted.isSettable,
|
|
85
85
|
doc: admitted.field.doc,
|
|
86
86
|
annotations: admitted.field.annotations,
|
|
87
87
|
};
|
|
88
88
|
};
|
|
89
|
+
const fieldTsType = (context, ref, isNullable = false) => {
|
|
90
|
+
if (ref !== undefined && context.library.typeFor(ref)?.kind === "callback") {
|
|
91
|
+
return isNullable ? "bigint | null" : "bigint";
|
|
92
|
+
}
|
|
93
|
+
return renderTsType(context, ref, isNullable);
|
|
94
|
+
};
|
|
89
95
|
const renderRecordFieldAccessor = (context, slot, claimedNames, siblingFields) => {
|
|
90
96
|
const admitted = admitAccessibleField(context, slot, claimedNames, siblingFields);
|
|
91
97
|
if (admitted === undefined) {
|
|
@@ -99,7 +105,7 @@ const renderRecordFieldAccessor = (context, slot, claimedNames, siblingFields) =
|
|
|
99
105
|
return `${doc}${arrayAccessor}`;
|
|
100
106
|
}
|
|
101
107
|
const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, "none", { isInline: isInlineField(context, field) }));
|
|
102
|
-
const tsType =
|
|
108
|
+
const tsType = fieldTsType(context, field.type);
|
|
103
109
|
const accessorOptions = {
|
|
104
110
|
context,
|
|
105
111
|
jsName,
|
|
@@ -521,5 +527,5 @@ const setterBody = (context, descriptor, slot) => {
|
|
|
521
527
|
return emitFieldWrite(context, { descriptor, slot, targetExpr: "getHandle(this)", valueExpr: "value" });
|
|
522
528
|
};
|
|
523
529
|
const setterBlock = (options) => renderBlock(`set ${options.jsName}(value: ${options.tsType})`, setterBody(options.context, options.descriptor, options.slot));
|
|
524
|
-
export { isEmittableField, isInlineField, isStorableFieldType, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, };
|
|
530
|
+
export { fieldTsType, isEmittableField, isInlineField, isStorableFieldType, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, };
|
|
525
531
|
//# sourceMappingURL=record-field-accessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirAnnotations } from \"../../gir/annotations.js\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { isByteSequence, isUnboundedArray } from \"../../analysis/type-shape.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport {\n bitMask,\n computeRecordFieldSlots,\n inlineArrayStride,\n mergeBitfield,\n type RecordFieldSlot,\n} from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\nimport { isValueMarshalable } from \"./value-marshalable.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype AccessibleField = AdmittedField & {\n isSettable: boolean;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n isWritable: boolean;\n doc: string | undefined;\n annotations: GirAnnotations;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\ntype InlineArrayResolution = {\n element: TypeId;\n count: number;\n stride: number;\n isTypedByteArray: boolean;\n};\n\ntype InlineArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n offset: number;\n resolution: InlineArrayResolution;\n};\n\nconst isMarshalableField = (context: ModuleContext, field: GirField): boolean => {\n if (field.cType?.endsWith(\"*\") === true) {\n return true;\n }\n\n const type = field.type === undefined ? undefined : context.library.typeFor(field.type);\n\n if (type?.kind !== \"record\") {\n return true;\n }\n\n return isValueMarshalable(context, type.namespace.name, type.value);\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n isMarshalableField(context, field);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n context.addRuntimeImport(\"toNative\");\n\n return (\n `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +\n `toNative(${descriptor}, ${valueExpr}));`\n );\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst isNullTerminatedArrayField = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n return type?.kind === \"carray\" && isUnboundedArray(type) && type.elementCType?.endsWith(\"*\") === true;\n};\n\nconst isAccessibleFieldType = (context: ModuleContext, ref: TypeId): boolean =>\n isAccessorEligibleType(context, ref) || isNullTerminatedArrayField(context, ref);\n\nconst isStorableFieldType = (context: ModuleContext, ref: TypeId): boolean => {\n const kind = context.library.typeFor(ref)?.kind;\n\n return kind !== \"carray\" && kind !== \"list\" && kind !== \"hashtable\";\n};\n\nconst hasArrayAccessor = (context: ModuleContext, target: StructArrayTarget): boolean =>\n resolveInlineArray(context, target) !== undefined || resolveStructArray(context, target) !== undefined;\n\nconst admitAccessibleField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): AccessibleField | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const target: StructArrayTarget = { field, jsName, slot: slot.slot, siblingFields };\n const hasArray = hasArrayAccessor(context, target);\n const hasAccessor = hasArray || isAccessibleFieldType(context, field.type);\n const isSettable = field.writable && (hasArray || isStorableFieldType(context, field.type));\n\n return hasAccessor ? { ...admitted, isSettable } : undefined;\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): RecordFieldEntry | undefined => {\n const admitted = admitAccessibleField(context, slot, claimedNames, siblingFields);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: renderTsType(context, admitted.field.type, false),\n isWritable: admitted.isSettable,\n doc: admitted.field.doc,\n annotations: admitted.field.annotations,\n };\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitAccessibleField(context, slot, claimedNames, siblingFields);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = getDoc(field);\n const target: StructArrayTarget = { field, jsName, slot: slot.slot, siblingFields };\n const arrayAccessor = renderInlineArrayAccessor(context, target) ?? renderStructArrayAccessor(context, target);\n\n if (arrayAccessor !== undefined) {\n return `${doc}${arrayAccessor}`;\n }\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, field.type, \"none\", { isInline: isInlineField(context, field) }),\n );\n\n const tsType = renderTsType(context, field.type, false);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (admitted.isSettable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined && type.arrayCType?.endsWith(\"*\") === true;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isInlineField = (context: ModuleContext, field: GirField): boolean =>\n field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst isInlineScalarCategory = (category: PrimitiveCategory, isBehindPointer: boolean): boolean => {\n if (category === \"pointer\") {\n return true;\n }\n\n return !isBehindPointer && category !== \"void\" && category !== \"unichar\" && category !== \"string\";\n};\n\nconst isInlineArrayElement = (context: ModuleContext, ref: TypeId | undefined, cType: string | undefined): boolean => {\n const type = ref === undefined ? undefined : context.library.typeFor(ref);\n\n if (type === undefined) {\n return false;\n }\n\n const isBehindPointer = cType?.endsWith(\"*\") === true;\n\n switch (type.kind) {\n case \"primitive\": {\n return isInlineScalarCategory(type.category, isBehindPointer);\n }\n case \"enum\": {\n return !isBehindPointer;\n }\n case \"record\": {\n return (\n resolveInlineStructFields(context, ref, cType) !== undefined &&\n isValueMarshalable(context, type.namespace.name, type.value)\n );\n }\n case \"alias\": {\n return isInlineArrayElement(context, type.value.target, cType ?? type.value.targetCType);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst inlineArrayType = (\n context: ModuleContext,\n target: StructArrayTarget,\n): Extract<GirType, { kind: \"carray\" }> | undefined => {\n const { field, slot } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(field.type);\n\n if (type?.kind !== \"carray\" || type.fixedSize === undefined) {\n return undefined;\n }\n\n return type.arrayCType?.endsWith(\"*\") === true ? undefined : type;\n};\n\nconst resolveInlineArray = (context: ModuleContext, target: StructArrayTarget): InlineArrayResolution | undefined => {\n const type = inlineArrayType(context, target);\n\n if (type?.fixedSize === undefined || !isInlineArrayElement(context, type.element, type.elementCType)) {\n return undefined;\n }\n\n const stride = inlineArrayStride(context, type);\n\n if (stride === 0) {\n return undefined;\n }\n\n return {\n element: type.element,\n count: type.fixedSize,\n stride,\n isTypedByteArray: context.library.isByteArrayTyped && isByteSequence(context.library, type),\n };\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined || arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst inlineLeafCount = (context: ModuleContext, fields: GirField[]): number => {\n let count = 0;\n\n visitInlineStructFields(context, fields, 0, {\n leaf: () => {\n count += 1;\n },\n nested: (_jsName, nested) => {\n count += inlineLeafCount(context, nested);\n },\n });\n\n return count;\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields, lengthExpr } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(`if (__index >= ${lengthExpr}) {\\n break;\\n}\\n\\n${loop}`, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst isPlainDataRecord = (record: GirRecord): boolean =>\n record.glibGetType === undefined &&\n record.constructors.length === 0 &&\n record.functions.length === 0 &&\n record.methods.length === 0;\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && !isPlainDataRecord(elementType.value)) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined || inlineLeafCount(context, elements.elementFields) === 0) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst inlineArrayElementOffset = (options: InlineArrayAccessorOptions): string =>\n `${String(options.offset)} + __index * ${String(options.resolution.stride)}`;\n\nconst inlineArrayGetterBlock = (options: InlineArrayAccessorOptions): string => {\n const { context, jsName, tsType, descriptor, resolution } = options;\n const container = resolution.isTypedByteArray ? `new ${tsType}(${String(resolution.count)})` : \"[]\";\n\n const element = wrapReturnValue(context, {\n ref: resolution.element,\n isNullable: false,\n valueExpression: `read(getHandle(this), ${descriptor}, ${inlineArrayElementOffset(options)})`,\n });\n\n const body = [\n `const __result: ${tsType} = ${container};`,\n `for (let __index = 0; __index < ${String(resolution.count)}; __index++) {`,\n indent(`__result[__index] = ${element};`, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst inlineArraySetterBlock = (options: InlineArrayAccessorOptions): string => {\n const { jsName, tsType, descriptor, resolution } = options;\n\n const write =\n `write(getHandle(this), ${descriptor}, ${inlineArrayElementOffset(options)}, ` +\n `toNative(${descriptor}, __element));`;\n\n const body = [\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(`if (__index >= ${String(resolution.count)}) {\\n break;\\n}\\n\\n${write}`, 1),\n \"}\",\n ].join(\"\\n\");\n\n return renderBlock(`set ${jsName}(__value: ${tsType})`, body);\n};\n\nconst renderInlineArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveInlineArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: InlineArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, field.type, false),\n descriptor: context.hoistDescriptor(renderDescriptor(context, resolution.element, \"none\", { isInline: true })),\n offset: slot.byteOffset,\n resolution,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(inlineArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n context.addRuntimeImport(\"toNative\");\n blocks.push(inlineArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n isCallerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n isNullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport {\n isEmittableField,\n isInlineField,\n isStorableFieldType,\n emitFieldWrite,\n resolveRecordFieldEntry,\n renderRecordFieldAccessor,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirAnnotations } from \"../../gir/annotations.js\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { isByteSequence, isUnboundedArray } from \"../../analysis/type-shape.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport {\n bitMask,\n computeRecordFieldSlots,\n inlineArrayStride,\n mergeBitfield,\n type RecordFieldSlot,\n} from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\nimport { isValueMarshalable } from \"./value-marshalable.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype AccessibleField = AdmittedField & {\n isSettable: boolean;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n isWritable: boolean;\n doc: string | undefined;\n annotations: GirAnnotations;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\ntype InlineArrayResolution = {\n element: TypeId;\n count: number;\n stride: number;\n isTypedByteArray: boolean;\n};\n\ntype InlineArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n offset: number;\n resolution: InlineArrayResolution;\n};\n\nconst isMarshalableField = (context: ModuleContext, field: GirField): boolean => {\n if (field.cType?.endsWith(\"*\") === true) {\n return true;\n }\n\n const type = field.type === undefined ? undefined : context.library.typeFor(field.type);\n\n if (type?.kind !== \"record\") {\n return true;\n }\n\n return isValueMarshalable(context, type.namespace.name, type.value);\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n isMarshalableField(context, field);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n context.addRuntimeImport(\"toNative\");\n\n return (\n `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +\n `toNative(${descriptor}, ${valueExpr}));`\n );\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst isNullTerminatedArrayField = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n return type?.kind === \"carray\" && isUnboundedArray(type) && type.elementCType?.endsWith(\"*\") === true;\n};\n\nconst isAccessibleFieldType = (context: ModuleContext, ref: TypeId): boolean =>\n isAccessorEligibleType(context, ref) || isNullTerminatedArrayField(context, ref);\n\nconst isStorableFieldType = (context: ModuleContext, ref: TypeId): boolean => {\n const kind = context.library.typeFor(ref)?.kind;\n\n return kind !== \"carray\" && kind !== \"list\" && kind !== \"hashtable\";\n};\n\nconst hasArrayAccessor = (context: ModuleContext, target: StructArrayTarget): boolean =>\n resolveInlineArray(context, target) !== undefined || resolveStructArray(context, target) !== undefined;\n\nconst admitAccessibleField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): AccessibleField | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const target: StructArrayTarget = { field, jsName, slot: slot.slot, siblingFields };\n const hasArray = hasArrayAccessor(context, target);\n const hasAccessor = hasArray || isAccessibleFieldType(context, field.type);\n const isSettable = field.writable && (hasArray || isStorableFieldType(context, field.type));\n\n return hasAccessor ? { ...admitted, isSettable } : undefined;\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): RecordFieldEntry | undefined => {\n const admitted = admitAccessibleField(context, slot, claimedNames, siblingFields);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: fieldTsType(context, admitted.field.type),\n isWritable: admitted.isSettable,\n doc: admitted.field.doc,\n annotations: admitted.field.annotations,\n };\n};\n\nconst fieldTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string => {\n if (ref !== undefined && context.library.typeFor(ref)?.kind === \"callback\") {\n return isNullable ? \"bigint | null\" : \"bigint\";\n }\n\n return renderTsType(context, ref, isNullable);\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitAccessibleField(context, slot, claimedNames, siblingFields);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = getDoc(field);\n const target: StructArrayTarget = { field, jsName, slot: slot.slot, siblingFields };\n const arrayAccessor = renderInlineArrayAccessor(context, target) ?? renderStructArrayAccessor(context, target);\n\n if (arrayAccessor !== undefined) {\n return `${doc}${arrayAccessor}`;\n }\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, field.type, \"none\", { isInline: isInlineField(context, field) }),\n );\n\n const tsType = fieldTsType(context, field.type);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (admitted.isSettable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined && type.arrayCType?.endsWith(\"*\") === true;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isInlineField = (context: ModuleContext, field: GirField): boolean =>\n field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst isInlineScalarCategory = (category: PrimitiveCategory, isBehindPointer: boolean): boolean => {\n if (category === \"pointer\") {\n return true;\n }\n\n return !isBehindPointer && category !== \"void\" && category !== \"unichar\" && category !== \"string\";\n};\n\nconst isInlineArrayElement = (context: ModuleContext, ref: TypeId | undefined, cType: string | undefined): boolean => {\n const type = ref === undefined ? undefined : context.library.typeFor(ref);\n\n if (type === undefined) {\n return false;\n }\n\n const isBehindPointer = cType?.endsWith(\"*\") === true;\n\n switch (type.kind) {\n case \"primitive\": {\n return isInlineScalarCategory(type.category, isBehindPointer);\n }\n case \"enum\": {\n return !isBehindPointer;\n }\n case \"record\": {\n return (\n resolveInlineStructFields(context, ref, cType) !== undefined &&\n isValueMarshalable(context, type.namespace.name, type.value)\n );\n }\n case \"alias\": {\n return isInlineArrayElement(context, type.value.target, cType ?? type.value.targetCType);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst inlineArrayType = (\n context: ModuleContext,\n target: StructArrayTarget,\n): Extract<GirType, { kind: \"carray\" }> | undefined => {\n const { field, slot } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(field.type);\n\n if (type?.kind !== \"carray\" || type.fixedSize === undefined) {\n return undefined;\n }\n\n return type.arrayCType?.endsWith(\"*\") === true ? undefined : type;\n};\n\nconst resolveInlineArray = (context: ModuleContext, target: StructArrayTarget): InlineArrayResolution | undefined => {\n const type = inlineArrayType(context, target);\n\n if (type?.fixedSize === undefined || !isInlineArrayElement(context, type.element, type.elementCType)) {\n return undefined;\n }\n\n const stride = inlineArrayStride(context, type);\n\n if (stride === 0) {\n return undefined;\n }\n\n return {\n element: type.element,\n count: type.fixedSize,\n stride,\n isTypedByteArray: context.library.isByteArrayTyped && isByteSequence(context.library, type),\n };\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined || arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst inlineLeafCount = (context: ModuleContext, fields: GirField[]): number => {\n let count = 0;\n\n visitInlineStructFields(context, fields, 0, {\n leaf: () => {\n count += 1;\n },\n nested: (_jsName, nested) => {\n count += inlineLeafCount(context, nested);\n },\n });\n\n return count;\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields, lengthExpr } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(`if (__index >= ${lengthExpr}) {\\n break;\\n}\\n\\n${loop}`, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst isPlainDataRecord = (record: GirRecord): boolean =>\n record.glibGetType === undefined &&\n record.constructors.length === 0 &&\n record.functions.length === 0 &&\n record.methods.length === 0;\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && !isPlainDataRecord(elementType.value)) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined || inlineLeafCount(context, elements.elementFields) === 0) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst inlineArrayElementOffset = (options: InlineArrayAccessorOptions): string =>\n `${String(options.offset)} + __index * ${String(options.resolution.stride)}`;\n\nconst inlineArrayGetterBlock = (options: InlineArrayAccessorOptions): string => {\n const { context, jsName, tsType, descriptor, resolution } = options;\n const container = resolution.isTypedByteArray ? `new ${tsType}(${String(resolution.count)})` : \"[]\";\n\n const element = wrapReturnValue(context, {\n ref: resolution.element,\n isNullable: false,\n valueExpression: `read(getHandle(this), ${descriptor}, ${inlineArrayElementOffset(options)})`,\n });\n\n const body = [\n `const __result: ${tsType} = ${container};`,\n `for (let __index = 0; __index < ${String(resolution.count)}; __index++) {`,\n indent(`__result[__index] = ${element};`, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst inlineArraySetterBlock = (options: InlineArrayAccessorOptions): string => {\n const { jsName, tsType, descriptor, resolution } = options;\n\n const write =\n `write(getHandle(this), ${descriptor}, ${inlineArrayElementOffset(options)}, ` +\n `toNative(${descriptor}, __element));`;\n\n const body = [\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(`if (__index >= ${String(resolution.count)}) {\\n break;\\n}\\n\\n${write}`, 1),\n \"}\",\n ].join(\"\\n\");\n\n return renderBlock(`set ${jsName}(__value: ${tsType})`, body);\n};\n\nconst renderInlineArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveInlineArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: InlineArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, field.type, false),\n descriptor: context.hoistDescriptor(renderDescriptor(context, resolution.element, \"none\", { isInline: true })),\n offset: slot.byteOffset,\n resolution,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(inlineArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n context.addRuntimeImport(\"toNative\");\n blocks.push(inlineArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n isCallerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n isNullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport {\n fieldTsType,\n isEmittableField,\n isInlineField,\n isStorableFieldType,\n emitFieldWrite,\n resolveRecordFieldEntry,\n renderRecordFieldAccessor,\n};\n"]}
|
|
@@ -11,7 +11,7 @@ const RUNTIME_OVERRIDES = new Map([
|
|
|
11
11
|
[
|
|
12
12
|
"g_value_set_boxed",
|
|
13
13
|
{
|
|
14
|
-
signature: "boxed: object | null",
|
|
14
|
+
signature: "boxed: object | string | number | bigint | boolean | null",
|
|
15
15
|
returnType: "void",
|
|
16
16
|
body: 'throw new Error("g_value_set_boxed: runtime override not installed");',
|
|
17
17
|
renames: [["v_boxed", "boxed"]],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-override.js","sourceRoot":"","sources":["../../../src/store/gi/runtime-override.ts"],"names":[],"mappings":"AAUA,MAAM,iBAAiB,GAAiC,IAAI,GAAG,CAAC;IAC5D;QACI,mBAAmB;QACnB;YACI,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uEAAuE;SAChF;KACJ;IACD;QACI,mBAAmB;QACnB;YACI,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"runtime-override.js","sourceRoot":"","sources":["../../../src/store/gi/runtime-override.ts"],"names":[],"mappings":"AAUA,MAAM,iBAAiB,GAAiC,IAAI,GAAG,CAAC;IAC5D;QACI,mBAAmB;QACnB;YACI,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uEAAuE;SAChF;KACJ;IACD;QACI,mBAAmB;QACnB;YACI,SAAS,EAAE,2DAA2D;YACtE,UAAU,EAAE,MAAM;YAClB,IAAI,EAAE,uEAAuE;YAC7E,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SAClC;KACJ;CACJ,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,QAAqB,EAA+B,EAAE,CAC9E,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEjG,MAAM,sBAAsB,GAAG,CAAC,QAAqB,EAAmC,EAAE;IACtF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEtD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,QAAqB,EAAE,UAAkB,EAAsB,EAAE;IAC5F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEzC,OAAO,GAAG,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC,SAAS,MAAM,QAAQ,CAAC,UAAU,WAAW,QAAQ,CAAC,IAAI,KAAK,CAAC;AAChH,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAC","sourcesContent":["import type { GirFunction } from \"../../gir/function.js\";\n\ntype RuntimeOverride = {\n generics?: string;\n signature: string;\n returnType: string;\n body: string;\n renames?: [string, string][];\n};\n\nconst RUNTIME_OVERRIDES: Map<string, RuntimeOverride> = new Map([\n [\n \"g_value_get_boxed\",\n {\n generics: \"<T = unknown>\",\n signature: \"\",\n returnType: \"T\",\n body: 'throw new Error(\"g_value_get_boxed: runtime override not installed\");',\n },\n ],\n [\n \"g_value_set_boxed\",\n {\n signature: \"boxed: object | string | number | bigint | boolean | null\",\n returnType: \"void\",\n body: 'throw new Error(\"g_value_set_boxed: runtime override not installed\");',\n renames: [[\"v_boxed\", \"boxed\"]],\n },\n ],\n]);\n\nconst runtimeOverrideFor = (callable: GirFunction): RuntimeOverride | undefined =>\n callable.cIdentifier === undefined ? undefined : RUNTIME_OVERRIDES.get(callable.cIdentifier);\n\nconst runtimeOverrideRenames = (callable: GirFunction): Map<string, string> | undefined => {\n const renames = runtimeOverrideFor(callable)?.renames;\n\n return renames === undefined ? undefined : new Map(renames);\n};\n\nconst renderRuntimeOverride = (callable: GirFunction, memberName: string): string | undefined => {\n const override = runtimeOverrideFor(callable);\n\n if (override === undefined) {\n return undefined;\n }\n\n const generics = override.generics ?? \"\";\n\n return `${memberName}${generics}(${override.signature}): ${override.returnType} {\\n ${override.body}\\n}`;\n};\n\nexport { renderRuntimeOverride, runtimeOverrideRenames };\n"]}
|
package/dist/store/gi/signal.js
CHANGED
|
@@ -3,7 +3,7 @@ import { isCellInout, primaryReturnKind, renderDescriptor, renderParamDescriptor
|
|
|
3
3
|
import { tCallback, tObject, tVoid } from "../../analysis/descriptor.js";
|
|
4
4
|
import { collectInterfaceProperties, forEachAncestor, resolvePrerequisiteReference, } from "../../analysis/inheritance.js";
|
|
5
5
|
import { renderHandlerParameters, renderHandlerResultType } from "../../analysis/param-structure.js";
|
|
6
|
-
import { renderTsType } from "../../analysis/ts-type.js";
|
|
6
|
+
import { renderParameterTsType, renderTsType } from "../../analysis/ts-type.js";
|
|
7
7
|
import { resolveInterfaces } from "../../gir/ancestry.js";
|
|
8
8
|
import { isCallerAllocatedOut, isOutParameter } from "../../gir/parameter.js";
|
|
9
9
|
import { renderJsDoc } from "../../writer/doc.js";
|
|
@@ -158,7 +158,7 @@ const renderResultType = (context, signal, shouldIncludeCallerAllocated, isOptOu
|
|
|
158
158
|
isOptOut,
|
|
159
159
|
});
|
|
160
160
|
const renderSignalEmitEntry = (context, signal) => {
|
|
161
|
-
const args = renderHandlerParameters(signal.parameters, (ref, nullable) =>
|
|
161
|
+
const args = renderHandlerParameters(signal.parameters, (ref, nullable) => renderParameterTsType(context, ref, nullable), isCallerAllocatedOut);
|
|
162
162
|
const result = renderResultType(context, signal, true, false);
|
|
163
163
|
return `{ args: [${args.join(", ")}]; result: ${result} }`;
|
|
164
164
|
};
|