@gtkx/codegen 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +2 -1
  2. package/dist/analysis/descriptor-render.d.ts +7 -1
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +36 -15
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +4 -1
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +11 -2
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/param-capability.d.ts +5 -2
  11. package/dist/analysis/param-capability.d.ts.map +1 -1
  12. package/dist/analysis/param-capability.js +36 -4
  13. package/dist/analysis/param-capability.js.map +1 -1
  14. package/dist/analysis/param-structure.d.ts +1 -1
  15. package/dist/analysis/param-structure.d.ts.map +1 -1
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +1 -1
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +28 -10
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.js +1 -1
  22. package/dist/compile.js.map +1 -1
  23. package/dist/docs/api-reference.d.ts +6 -0
  24. package/dist/docs/api-reference.d.ts.map +1 -1
  25. package/dist/docs/api-reference.js +11 -2
  26. package/dist/docs/api-reference.js.map +1 -1
  27. package/dist/docs/pipeline.d.ts +3 -0
  28. package/dist/docs/pipeline.d.ts.map +1 -1
  29. package/dist/docs/pipeline.js +10 -1
  30. package/dist/docs/pipeline.js.map +1 -1
  31. package/dist/fingerprint.d.ts +5 -0
  32. package/dist/fingerprint.d.ts.map +1 -1
  33. package/dist/fingerprint.js +107 -15
  34. package/dist/fingerprint.js.map +1 -1
  35. package/dist/gi.d.ts +3 -0
  36. package/dist/gi.d.ts.map +1 -1
  37. package/dist/gi.js +29 -7
  38. package/dist/gi.js.map +1 -1
  39. package/dist/gir/external-namespaces.d.ts +8 -0
  40. package/dist/gir/external-namespaces.d.ts.map +1 -0
  41. package/dist/gir/external-namespaces.js +4 -0
  42. package/dist/gir/external-namespaces.js.map +1 -0
  43. package/dist/gir/finish-overrides.d.ts +3 -0
  44. package/dist/gir/finish-overrides.d.ts.map +1 -0
  45. package/dist/gir/finish-overrides.js +5 -0
  46. package/dist/gir/finish-overrides.js.map +1 -0
  47. package/dist/gir/function.d.ts +5 -2
  48. package/dist/gir/function.d.ts.map +1 -1
  49. package/dist/gir/function.js +34 -5
  50. package/dist/gir/function.js.map +1 -1
  51. package/dist/gir/hidden-symbols.d.ts +3 -0
  52. package/dist/gir/hidden-symbols.d.ts.map +1 -0
  53. package/dist/gir/hidden-symbols.js +39 -0
  54. package/dist/gir/hidden-symbols.js.map +1 -0
  55. package/dist/gir/library.d.ts +22 -2
  56. package/dist/gir/library.d.ts.map +1 -1
  57. package/dist/gir/library.js +21 -3
  58. package/dist/gir/library.js.map +1 -1
  59. package/dist/gir/ucs4-overrides.d.ts +3 -0
  60. package/dist/gir/ucs4-overrides.d.ts.map +1 -0
  61. package/dist/gir/ucs4-overrides.js +7 -0
  62. package/dist/gir/ucs4-overrides.js.map +1 -0
  63. package/dist/jsx.d.ts.map +1 -1
  64. package/dist/jsx.js +27 -8
  65. package/dist/jsx.js.map +1 -1
  66. package/dist/runner.d.ts +8 -0
  67. package/dist/runner.d.ts.map +1 -1
  68. package/dist/runner.js +9 -3
  69. package/dist/runner.js.map +1 -1
  70. package/dist/store/external-package-links.d.ts +6 -0
  71. package/dist/store/external-package-links.d.ts.map +1 -0
  72. package/dist/store/external-package-links.js +158 -0
  73. package/dist/store/external-package-links.js.map +1 -0
  74. package/dist/store/gi/callable-doc.d.ts.map +1 -1
  75. package/dist/store/gi/callable-doc.js +4 -4
  76. package/dist/store/gi/callable-doc.js.map +1 -1
  77. package/dist/store/gi/callables.js +1 -1
  78. package/dist/store/gi/callables.js.map +1 -1
  79. package/dist/store/gi/class.d.ts.map +1 -1
  80. package/dist/store/gi/class.js +17 -0
  81. package/dist/store/gi/class.js.map +1 -1
  82. package/dist/store/gi/constructor-props.js +1 -1
  83. package/dist/store/gi/constructor-props.js.map +1 -1
  84. package/dist/store/gi/function.d.ts.map +1 -1
  85. package/dist/store/gi/function.js +2 -1
  86. package/dist/store/gi/function.js.map +1 -1
  87. package/dist/store/gi/gtype-binding.d.ts +2 -1
  88. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  89. package/dist/store/gi/gtype-binding.js +6 -1
  90. package/dist/store/gi/gtype-binding.js.map +1 -1
  91. package/dist/store/gi/method.d.ts +7 -2
  92. package/dist/store/gi/method.d.ts.map +1 -1
  93. package/dist/store/gi/method.js +126 -30
  94. package/dist/store/gi/method.js.map +1 -1
  95. package/dist/store/gi/param-marshal.d.ts +8 -1
  96. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  97. package/dist/store/gi/param-marshal.js +52 -4
  98. package/dist/store/gi/param-marshal.js.map +1 -1
  99. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  100. package/dist/store/gi/record-constructor.js +2 -3
  101. package/dist/store/gi/record-constructor.js.map +1 -1
  102. package/dist/store/gi/record-field-accessor.d.ts +2 -1
  103. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  104. package/dist/store/gi/record-field-accessor.js +9 -3
  105. package/dist/store/gi/record-field-accessor.js.map +1 -1
  106. package/dist/store/gi/runtime-override.js +1 -1
  107. package/dist/store/gi/runtime-override.js.map +1 -1
  108. package/dist/store/gi/signal.js +2 -2
  109. package/dist/store/gi/signal.js.map +1 -1
  110. package/dist/store/gi/vtable.d.ts.map +1 -1
  111. package/dist/store/gi/vtable.js +82 -12
  112. package/dist/store/gi/vtable.js.map +1 -1
  113. package/dist/store/gi-store.d.ts +7 -2
  114. package/dist/store/gi-store.d.ts.map +1 -1
  115. package/dist/store/gi-store.js +19 -4
  116. package/dist/store/gi-store.js.map +1 -1
  117. package/dist/store/jsx/jsx.d.ts.map +1 -1
  118. package/dist/store/jsx/jsx.js +3 -1
  119. package/dist/store/jsx/jsx.js.map +1 -1
  120. package/dist/store/jsx-store.d.ts +8 -1
  121. package/dist/store/jsx-store.d.ts.map +1 -1
  122. package/dist/store/jsx-store.js +9 -2
  123. package/dist/store/jsx-store.js.map +1 -1
  124. package/dist/store/resolve-store.d.ts +2 -1
  125. package/dist/store/resolve-store.d.ts.map +1 -1
  126. package/dist/store/resolve-store.js +2 -1
  127. package/dist/store/resolve-store.js.map +1 -1
  128. package/dist/store/store-fs.d.ts +2 -1
  129. package/dist/store/store-fs.d.ts.map +1 -1
  130. package/dist/store/store-fs.js +8 -3
  131. package/dist/store/store-fs.js.map +1 -1
  132. package/dist/writer/context.d.ts.map +1 -1
  133. package/dist/writer/context.js +8 -0
  134. package/dist/writer/context.js.map +1 -1
  135. package/dist/writer/gtk-doc.d.ts.map +1 -1
  136. package/dist/writer/gtk-doc.js +27 -1
  137. package/dist/writer/gtk-doc.js.map +1 -1
  138. package/overrides/gdk/rgba.ts.ejs +15 -1
  139. package/overrides/glib/index.ts.ejs +3 -0
  140. package/overrides/glib/regex.ts.ejs +66 -0
  141. package/overrides/gobject/index.ts.ejs +3 -0
  142. package/overrides/gobject/object-class.ts.ejs +27 -0
  143. package/overrides/gobject/param-spec-getters.ts.ejs +57 -0
  144. package/overrides/gobject/param-spec.ts.ejs +21 -0
  145. package/overrides/gobject/value.ts.ejs +6 -1
  146. package/overrides/graphene/structs.ts.ejs +38 -3
  147. package/overrides/gtk/index.ts.ejs +2 -0
  148. package/overrides/gtk/widget-class.ts.ejs +28 -0
  149. package/package.json +6 -5
  150. package/src/analysis/descriptor-render.ts +59 -16
  151. package/src/analysis/descriptor.ts +15 -3
  152. package/src/analysis/param-capability.ts +68 -5
  153. package/src/analysis/param-structure.ts +1 -1
  154. package/src/analysis/ts-type.ts +45 -11
  155. package/src/compile.ts +1 -1
  156. package/src/docs/api-reference.ts +20 -2
  157. package/src/docs/pipeline.ts +15 -1
  158. package/src/fingerprint.ts +144 -16
  159. package/src/gi.ts +44 -9
  160. package/src/gir/external-namespaces.ts +8 -0
  161. package/src/gir/finish-overrides.ts +5 -0
  162. package/src/gir/function.ts +52 -14
  163. package/src/gir/hidden-symbols.ts +39 -0
  164. package/src/gir/library.ts +36 -3
  165. package/src/gir/ucs4-overrides.ts +7 -0
  166. package/src/jsx.ts +33 -8
  167. package/src/runner.ts +17 -3
  168. package/src/store/external-package-links.ts +226 -0
  169. package/src/store/gi/callable-doc.ts +8 -4
  170. package/src/store/gi/callables.ts +1 -1
  171. package/src/store/gi/class.ts +29 -0
  172. package/src/store/gi/constructor-props.ts +1 -1
  173. package/src/store/gi/function.ts +2 -1
  174. package/src/store/gi/gtype-binding.ts +8 -1
  175. package/src/store/gi/method.ts +189 -36
  176. package/src/store/gi/param-marshal.ts +67 -4
  177. package/src/store/gi/record-constructor.ts +8 -3
  178. package/src/store/gi/record-field-accessor.ts +11 -2
  179. package/src/store/gi/runtime-override.ts +1 -1
  180. package/src/store/gi/signal.ts +2 -2
  181. package/src/store/gi/vtable.ts +118 -11
  182. package/src/store/gi-store.ts +33 -3
  183. package/src/store/jsx/jsx.ts +3 -1
  184. package/src/store/jsx-store.ts +23 -7
  185. package/src/store/resolve-store.ts +2 -1
  186. package/src/store/store-fs.ts +10 -2
  187. package/src/writer/context.ts +11 -0
  188. package/src/writer/gtk-doc.ts +38 -1
  189. package/overrides/cairo/context.ts.ejs +0 -1269
  190. package/overrides/cairo/font-face.ts.ejs +0 -151
  191. package/overrides/cairo/font-options.ts.ejs +0 -199
  192. package/overrides/cairo/image-surface.ts.ejs +0 -132
  193. package/overrides/cairo/index.ts.ejs +0 -22
  194. package/overrides/cairo/matrix.ts.ejs +0 -171
  195. package/overrides/cairo/pattern.ts.ejs +0 -476
  196. package/overrides/cairo/recording-surface.ts.ejs +0 -102
  197. package/overrides/cairo/region.ts.ejs +0 -237
  198. package/overrides/cairo/scaled-font.ts.ejs +0 -330
  199. package/overrides/cairo/surface.ts.ejs +0 -296
package/README.md CHANGED
@@ -98,7 +98,7 @@ GTK4 is mature, and GtkBuilder XML can lay out a static interface, but nothing r
98
98
  - a React reconciler that exposes every GObject as a JSX element,
99
99
  - a CLI for scaffolding, development, and production builds,
100
100
  - a dev server with Fast Refresh that patches your running UI in place,
101
- - CSS-in-JS styling and high-level list, grid, and dialog components,
101
+ - CSS-in-JS styling, React Spring animations, and high-level list, grid, and dialog components,
102
102
  - a Testing Library-style API for querying and driving your widgets in tests,
103
103
  - and a Model Context Protocol (MCP) server that exposes your live app to AI agents.
104
104
 
@@ -157,6 +157,7 @@ Explore the [example apps](https://github.com/gtkx-org/gtkx/tree/main/examples):
157
157
  - [`hello-world`](https://github.com/gtkx-org/gtkx/tree/main/examples/hello-world): the counter above.
158
158
  - [`gtk-demo`](https://github.com/gtkx-org/gtkx/tree/main/examples/gtk-demo): a React port of the official GTK4 widget showcase, covering lists, dialogs, gestures, CSS, and OpenGL.
159
159
  - [`browser`](https://github.com/gtkx-org/gtkx/tree/main/examples/browser): a WebKitWebView-based web browser.
160
+ - [`animations`](https://github.com/gtkx-org/gtkx/tree/main/examples/animations): a tour of `@gtkx/animated`, React Spring animations driven by the GTK frame clock.
160
161
  - [`tutorial`](https://github.com/gtkx-org/gtkx/tree/main/examples/tutorial): the Tasks app the documentation builds.
161
162
 
162
163
  ## Status
@@ -1,7 +1,9 @@
1
1
  import type { Library } from "../gir/library.js";
2
+ import type { EntityType } from "../gir/type.js";
2
3
  import type { ModuleContext } from "../writer/context.js";
3
4
  import { type GirCursorBounds, type GirParameter, type GirReturnValue, type ParameterTransfer } from "../gir/parameter.js";
4
5
  import { type TypeId } from "../gir/type-id.js";
6
+ import { type Ownership } from "./descriptor.js";
5
7
  type PrimaryReturnKind = "surfaced" | "void" | "skipped";
6
8
  type ArgIndexOptions = {
7
9
  argIndexOffset: number;
@@ -14,6 +16,7 @@ type RenderDescriptorOptions = Partial<ArgIndexOptions> & {
14
16
  isInline?: boolean;
15
17
  isNewlyCreated?: boolean;
16
18
  };
19
+ declare const transferOwnership: (transfer: ParameterTransfer) => Ownership;
17
20
  declare const isInlineCallbackRef: (library: Library, ref: TypeId | undefined) => boolean;
18
21
  declare const primaryReturnKind: (library: Library, returnValue: GirReturnValue) => PrimaryReturnKind;
19
22
  declare const shouldOmitPrimaryReturn: (library: Library, returnValue: GirReturnValue) => boolean;
@@ -25,5 +28,8 @@ declare const isCellInout: (library: Library, parameter: GirParameter) => boolea
25
28
  declare const renderParamDescriptor: (context: ModuleContext, parameter: GirParameter, ref: TypeId | undefined, argIndex?: Partial<ArgIndexOptions>) => string;
26
29
  declare const renderCallbackType: (context: ModuleContext, ref: TypeId | undefined, owningParameter: GirParameter, argOverrides?: Map<number, string>) => string | undefined;
27
30
  declare const renderSelfDescriptor: (context: ModuleContext, instance: GirParameter) => string;
28
- export { isInlineCallbackRef, isSkippedPrimaryReturn, isVoidPrimaryReturn, primaryReturnKind, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
31
+ declare const isPlainStruct: (resolved: Extract<EntityType, {
32
+ kind: "record";
33
+ }>) => boolean;
34
+ export { isPlainStruct, transferOwnership, isInlineCallbackRef, isSkippedPrimaryReturn, isVoidPrimaryReturn, primaryReturnKind, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
29
35
  //# sourceMappingURL=descriptor-render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EAInB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKH,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAC;AAoC3B,KAAK,iBAAiB,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD,KAAK,eAAe,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,iBAAiB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAIF,KAAK,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG;IACtD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAkEF,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,OAC+B,CAAC;AAEzG,QAAA,MAAM,iBAAiB,GAAI,SAAS,OAAO,EAAE,aAAa,cAAc,KAAG,iBAM1E,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,SAAS,OAAO,EAAE,aAAa,cAAc,KAAG,OACvB,CAAC;AAE3D,QAAA,MAAM,sBAAsB,GAAI,SAAS,OAAO,EAAE,aAAa,cAAc,KAAG,OACvB,CAAC;AAE1D,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,EAAE,aAAa,cAAc,KAAG,OACvB,CAAC;AASvD,QAAA,MAAM,gBAAgB,GAClB,SAAS,aAAa,EACtB,KAAK,MAAM,GAAG,SAAS,EACvB,WAAU,iBAA0B,EACpC,UAAS,uBAA4B,KACtC,MA4CF,CAAC;AAyDF,QAAA,MAAM,WAAW,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,OAQhE,CAAC;AAYF,QAAA,MAAM,WAAW,GAAI,SAAS,OAAO,EAAE,WAAW,YAAY,KAAG,OAEe,CAAC;AAEjF,QAAA,MAAM,qBAAqB,GACvB,SAAS,aAAa,EACtB,WAAW,YAAY,EACvB,KAAK,MAAM,GAAG,SAAS,EACvB,WAAU,OAAO,CAAC,eAAe,CAAM,KACxC,MAeF,CAAC;AA0CF,QAAA,MAAM,kBAAkB,GACpB,SAAS,aAAa,EACtB,KAAK,MAAM,GAAG,SAAS,EACvB,iBAAiB,YAAY,EAC7B,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAAM,GAAG,SAkBX,CAAC;AA+HF,QAAA,MAAM,oBAAoB,GAAI,SAAS,aAAa,EAAE,UAAU,YAAY,KAAG,MAsB9E,CAAC;AAqQF,OAAO,EACH,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACvB,CAAC"}
1
+ {"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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"}
@@ -59,7 +59,7 @@ const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
59
59
  return tVoid;
60
60
  }
61
61
  case "callback": {
62
- return tUint64;
62
+ return tBiguint64;
63
63
  }
64
64
  case "class":
65
65
  case "interface":
@@ -69,7 +69,10 @@ const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
69
69
  return expressionForResolved(context, type, transfer, options);
70
70
  }
71
71
  case "carray": {
72
- return arrayExpression(context, type, transfer, indexOptions);
72
+ return arrayExpression(context, type, transfer, {
73
+ ...indexOptions,
74
+ isCallerAllocated: options.isCallerAllocated === true,
75
+ });
73
76
  }
74
77
  case "list": {
75
78
  return listExpression(context, type, transfer, indexOptions);
@@ -165,7 +168,7 @@ const findUserDataIndex = (parameters) => {
165
168
  const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);
166
169
  return declared?.closureIndex ?? userDataIndexByName(parameters);
167
170
  };
168
- const callbackOptionsArg = (owningParameter, userDataIndex) => {
171
+ const callbackOptionsArg = (owningParameter, userDataIndex, canThrow) => {
169
172
  const options = [];
170
173
  if (owningParameter.destroyIndex !== undefined) {
171
174
  options.push("hasDestroy: true");
@@ -176,6 +179,9 @@ const callbackOptionsArg = (owningParameter, userDataIndex) => {
176
179
  if (userDataIndex !== undefined) {
177
180
  options.push(`userDataIndex: ${String(userDataIndex)}`);
178
181
  }
182
+ if (canThrow) {
183
+ options.push("canThrow: true");
184
+ }
179
185
  if (owningParameter.scope !== undefined) {
180
186
  options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
181
187
  }
@@ -191,7 +197,7 @@ const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
191
197
  return tCallback({
192
198
  argTypes,
193
199
  returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),
194
- options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters)),
200
+ options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters), callback.throws),
195
201
  });
196
202
  };
197
203
  const primitiveExpression = (category, ownership) => {
@@ -210,11 +216,12 @@ const primitiveExpression = (category, ownership) => {
210
216
  return tScalar(category);
211
217
  };
212
218
  const renderFundamental = (descriptor) => {
213
- const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isInline } = descriptor;
219
+ const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isCallerAllocated, isInline } = descriptor;
214
220
  return tFundamental(lib, refFunc, unrefFunc, {
215
221
  ownership,
216
222
  typeName,
217
223
  wrapperClass,
224
+ isCallerAllocated,
218
225
  isInline,
219
226
  });
220
227
  };
@@ -286,6 +293,10 @@ const renderSelfDescriptor = (context, instance) => {
286
293
  }
287
294
  return tObject("borrowed");
288
295
  };
296
+ const recordLayout = (placement) => ({
297
+ isCallerAllocated: placement.isCallerAllocated ?? false,
298
+ isInline: placement.isInline ?? false,
299
+ });
289
300
  const recordRefPair = (record) => ({
290
301
  refFunc: record.glibRefFunc ?? record.copyFunc,
291
302
  unrefFunc: record.glibUnrefFunc ?? record.freeFunc,
@@ -309,7 +320,7 @@ const structExpression = (context, resolved, ownership, options) => {
309
320
  });
310
321
  };
311
322
  const fundamentalRecordExpression = (options) => {
312
- const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
323
+ const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isCallerAllocated, isInline } = options;
313
324
  return renderFundamental({
314
325
  lib,
315
326
  refFunc,
@@ -317,6 +328,7 @@ const fundamentalRecordExpression = (options) => {
317
328
  typeName: resolved.value.glibTypeName,
318
329
  ownership,
319
330
  wrapperClass,
331
+ isCallerAllocated,
320
332
  isInline,
321
333
  });
322
334
  };
@@ -336,15 +348,20 @@ const boxedRecordExpression = (options) => {
336
348
  };
337
349
  const plainRecordExpression = (context, resolved, ownership, placement) => {
338
350
  const record = resolved.value;
339
- const layout = {
340
- isCallerAllocated: placement.isCallerAllocated ?? false,
341
- isInline: placement.isInline ?? false,
342
- };
351
+ const layout = recordLayout(placement);
343
352
  if (record.glibGetType === undefined) {
344
353
  return structExpression(context, resolved, ownership, layout);
345
354
  }
346
355
  return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });
347
356
  };
357
+ const isPlainStruct = (resolved) => {
358
+ const record = resolved.value;
359
+ const { refFunc, unrefFunc } = recordRefPair(record);
360
+ if (refFunc !== undefined && unrefFunc !== undefined && resolved.namespace.sharedLibrary !== undefined) {
361
+ return false;
362
+ }
363
+ return record.glibGetType === undefined;
364
+ };
348
365
  const recordExpression = (context, resolved, ownership, placement = {}) => {
349
366
  const record = resolved.value;
350
367
  const { refFunc, unrefFunc } = recordRefPair(record);
@@ -360,20 +377,22 @@ const recordExpression = (context, resolved, ownership, placement = {}) => {
360
377
  unrefFunc,
361
378
  ownership,
362
379
  wrapperClass,
363
- isInline: placement.isInline ?? false,
380
+ ...recordLayout(placement),
364
381
  });
365
382
  }
366
383
  return plainRecordExpression(context, resolved, ownership, placement);
367
384
  };
368
385
  const rawEnumDescriptor = (isSigned) => (isSigned ? tInt32 : tUint32);
386
+ const flagsMask = (resolved) => resolved.value.members.reduce((mask, member) => (mask | Number(member.value)) >>> 0, 0);
369
387
  const enumExpression = (resolved) => {
370
388
  const getter = resolved.value.glibGetType;
371
389
  const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
372
390
  const lib = resolved.namespace.sharedLibrary;
391
+ const isBitfield = resolved.value.kind === "bitfield";
373
392
  if (getter === undefined || getter === "" || lib === undefined) {
374
- return rawEnumDescriptor(isSigned);
393
+ return isBitfield ? tFlags("", "", isSigned, flagsMask(resolved)) : rawEnumDescriptor(isSigned);
375
394
  }
376
- return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
395
+ return isBitfield ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
377
396
  };
378
397
  const expressionForResolved = (context, resolved, transfer, options) => {
379
398
  const ownership = transferOwnership(transfer);
@@ -400,6 +419,7 @@ const elementExpression = (context, ref, transfer, options) => renderDescriptor(
400
419
  ...options,
401
420
  cursor: undefined,
402
421
  hasOutIndirection: false,
422
+ isCallerAllocated: false,
403
423
  });
404
424
  const cursorArrayExpression = (context, ref, transfer, options) => tCursorArray(elementExpression(context, ref, transfer, options), {
405
425
  baseIndex: mapArgIndex(options, options.cursor.baseIndex),
@@ -409,6 +429,7 @@ const arrayLayout = (context, ref, options) => ({
409
429
  elementSize: inlineElementSize(context, ref, options.hasOutIndirection),
410
430
  isBytes: context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),
411
431
  });
432
+ const fixedArrayLayout = (layout, isCallerAllocated) => isCallerAllocated ? { ...layout, isCallerAllocated: true } : layout;
412
433
  const arrayExpression = (context, ref, transfer, options) => {
413
434
  const { cursor } = options;
414
435
  const layout = arrayLayout(context, ref, options);
@@ -424,7 +445,7 @@ const arrayExpression = (context, ref, transfer, options) => {
424
445
  return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);
425
446
  }
426
447
  if (ref.fixedSize !== undefined) {
427
- return tFixedArray(element, ref.fixedSize, ownership, layout);
448
+ return tFixedArray(element, ref.fixedSize, ownership, fixedArrayLayout(layout, options.isCallerAllocated));
428
449
  }
429
450
  return tArray(element, ownership, layout);
430
451
  };
@@ -448,5 +469,5 @@ const aliasExpression = (context, target, transfer, options) => {
448
469
  }
449
470
  return renderDescriptor(context, target, transfer, options);
450
471
  };
451
- export { isInlineCallbackRef, isSkippedPrimaryReturn, isVoidPrimaryReturn, primaryReturnKind, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
472
+ export { isPlainStruct, transferOwnership, isInlineCallbackRef, isSkippedPrimaryReturn, isVoidPrimaryReturn, primaryReturnKind, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
452
473
  //# sourceMappingURL=descriptor-render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAM1E,OAAO,EAIH,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,GAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEH,qBAAqB,GAIxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAKH,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,YAAY,EACZ,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,IAAI,EACJ,OAAO,EACP,WAAW,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,GACR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAqDpG,MAAM,YAAY,GAAkE;IAChF,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAM,qBAAqB,GAAgB,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE/D,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAE,QAAgB,EAAU,EAAE,CACvE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;AAE5E,MAAM,iBAAiB,GAAG,CAAC,QAA2B,EAAa,EAAE;IACjE,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,QAA2B,EAAqB,EAAE,CAC7E,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAEjD,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE,CACrE,GAAG,KAAK,SAAS,IAAI,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;AAEvE,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE,CAC/E,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AAEzG,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAqB,EAAE;IAC3F,IAAI,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAW,EAAE,CACvF,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,UAAU,CAAC;AAE3D,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAW,EAAE,CACtF,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC;AAE1D,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,WAA2B,EAAW,EAAE,CACnF,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,MAAM,CAAC;AAEvD,MAAM,eAAe,GAAG,CAAC,OAAgC,EAAmB,EAAE,CAAC,CAAC;IAC5E,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC;IAC3C,WAAW,EAAE,OAAO,CAAC,WAAW;IAChC,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,KAAK,IAAI;CACxD,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,GAAuB,EACvB,WAA8B,MAAM,EACpC,UAAmC,EAAE,EAC/B,EAAE;IACR,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,qBAAqB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;YAEnF,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,OAAsB,EACtB,IAAc,EACd,QAA2B,EAC3B,YAA6B,EACvB,EAAE;IACR,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IAEvG,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAE,GAAuB,EAA2B,EAAE;IACrG,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,IAAa,EAAW,EAAE;IAC9D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC;QAClE,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE;IACvE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAW,EAAE;IACrE,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAErC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,SAAuB,EAAW,EAAE,CACvE,gBAAgB,CAAC,SAAS,CAAC;IAC3B,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,SAAuB,EACvB,GAAuB,EACvB,WAAqC,EAAE,EACjC,EAAE;IACR,MAAM,SAAS,GAA4B,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAE9G,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,iBAAiB,EAAE;QAC/D,GAAG,QAAQ;QACX,iBAAiB,EAAE,oBAAoB,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC;KAC1F,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAA0B,EAAsB,EAAE;IAC3E,IAAI,aAAiC,CAAC;IAEtC,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9D,aAAa,GAAG,KAAK,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,OAAO,aAAa,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAA0B,EAAsB,EAAE;IACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;IAEtF,OAAO,QAAQ,EAAE,YAAY,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,eAA6B,EAAE,aAAiC,EAAY,EAAE;IACtG,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,eAAe,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,eAAe,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,eAAe,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,UAAU,mBAAmB,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACvB,OAAsB,EACtB,GAAuB,EACvB,eAA6B,EAC7B,YAAkC,EAChB,EAAE;IACpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CACpC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAC9G,CAAC;IAEF,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IAEjC,OAAO,SAAS,CAAC;QACb,QAAQ;QACR,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,iBAAiB,CAAC;QACnF,OAAO,EAAE,kBAAkB,CAAC,eAAe,EAAE,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KACvF,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,QAA2B,EAAE,SAAoB,EAAU,EAAE;IACtF,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,OAAO,CAAC,QAAuC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAAiC,EAAU,EAAE;IACpE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE5F,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE;QACzC,SAAS;QACT,QAAQ;QACR,YAAY;QACZ,QAAQ;KACX,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAClB,QAA6B,EAC7B,SAAoB,EACpB,cAAuB,EACd,EAAE;IACX,IAAI,CAAC,cAAc,IAAI,SAAS,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC7E,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,OAAsB,EACtB,QAA8D,EAC9D,SAAoB,EACpB,cAAuB,EACjB,EAAE;IACR,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAExD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,iBAAiB,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAyB,EAAgE,EAAE,CACnH,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AAE/E,MAAM,cAAc,GAAG,CACnB,IAA0D,EAC3B,EAAE;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;IAEzC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5G,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACH,GAAG;QACH,OAAO,EAAE,GAAG,CAAC,WAAW;QACxB,SAAS,EAAE,GAAG,CAAC,aAAa;QAC5B,QAAQ,EAAE,GAAG,CAAC,YAAY;KAC7B,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,OAAsB,EACtB,OAA4B,EAC5B,IAAiB,EACc,EAAE;IACjC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAE9D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACd,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzF,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,KAA2D,EAC5B,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC;AAEzF,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,IAA0D,EAC1D,SAAoB,EACd,EAAE;IACR,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEpD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAsB,EAAE,QAAsB,EAAU,EAAE;IACpF,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAsB,EAAkE,EAAE,CAAC,CAAC;IAC/G,OAAO,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ;IAC9C,SAAS,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ;CACrD,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,MAAsB,EAAW,EAAE;IAC9D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,QAAiD,EACjD,SAAoB,EACpB,OAA0D,EACpD,EAAE;IACR,MAAM,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3G,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExF,OAAO,OAAO,CAAC,SAAS,EAAE;QACtB,IAAI,EAAE,UAAU,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC/C,YAAY;QACZ,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC7B,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,OAAiC,EAAU,EAAE;IAC9E,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEzF,OAAO,iBAAiB,CAAC;QACrB,GAAG;QACH,OAAO;QACP,SAAS;QACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;QACrC,SAAS;QACT,YAAY;QACZ,QAAQ;KACX,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAO9B,EAAU,EAAE;IACT,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC1F,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;IACpE,MAAM,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjF,OAAO,MAAM,CAAC,QAAQ,EAAE;QACpB,SAAS;QACT,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,aAAa;QAC/C,aAAa,EAAE,UAAU;QACzB,iBAAiB;QACjB,QAAQ;QACR,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACpC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,QAAiD,EACjD,SAAoB,EACpB,SAA0B,EACpB,EAAE;IACR,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE9B,MAAM,MAAM,GAAG;QACX,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,IAAI,KAAK;QACvD,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,KAAK;KACxC,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,QAAiD,EACjD,SAAoB,EACpB,YAA6B,EAAE,EACzB,EAAE;IACR,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC;IAE7C,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACxE,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAAC;YAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/E,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO,2BAA2B,CAAC;YAC/B,QAAQ;YACR,GAAG;YACH,OAAO;YACP,SAAS;YACT,SAAS;YACT,YAAY;YACZ,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,KAAK;SACxC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAAiB,EAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAEvF,MAAM,cAAc,GAAG,CAAC,QAA+C,EAAU,EAAE;IAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC;IAE7C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,QAA4F,EAC5F,QAA2B,EAC3B,OAAgC,EAC1B,EAAE;IACR,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE9C,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC;QACrG,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;gBAClD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;gBACrD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;aACtC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,OAAsB,EACtB,GAAe,EACf,QAA2B,EAC3B,OAAwB,EAClB,EAAE,CACR,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE;IACpE,GAAG,OAAO;IACV,MAAM,EAAE,SAAS;IACjB,iBAAiB,EAAE,KAAK;CAC3B,CAAC,CAAC;AAEP,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,GAAe,EACf,QAA2B,EAC3B,OAAwD,EAClD,EAAE,CACR,YAAY,CACR,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAClD;IACI,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;IACzD,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;CAChE,EACD,iBAAiB,CAAC,QAAQ,CAAC,EAC3B,OAAO,CAAC,MAAM,CACjB,CAAC;AAEN,MAAM,WAAW,GAAG,CAAC,OAAsB,EAAE,GAAe,EAAE,OAAwB,EAAe,EAAE,CAAC,CAAC;IACrG,WAAW,EAAE,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,iBAAiB,CAAC;IACvE,OAAO,EACH,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;CAC9G,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CACpB,OAAsB,EACtB,GAAe,EACf,QAA2B,EAC3B,OAAwB,EAClB,EAAE;IACR,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAElD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnE,IAAI,GAAG,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,YAAgC,EAAE,iBAA0B,EAAU,EAAE;IACjG,MAAM,QAAQ,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAErF,OAAO,iBAAiB,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,OAAsB,EAAE,GAAe,EAAE,iBAA0B,EAAsB,EAAE;IAClH,IAAI,mBAAmB,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,OAAsB,EACtB,MAA0B,EAC1B,QAA2B,EAC3B,OAAgC,EAC1B,EAAE;IACR,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,OAAO,EACH,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACvB,CAAC","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCallback } from \"../gir/callback.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport {\n type GirCursorBounds,\n type GirParameter,\n type GirReturnValue,\n isCallerAllocatedOut,\n isInoutParameter,\n isOutParameter,\n type ParameterTransfer,\n} from \"../gir/parameter.js\";\nimport {\n type CArrayType,\n hasUnknownArrayLength,\n type ListFlavor,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isRecordInout } from \"../store/gi/param-marshal.js\";\nimport { computeRecordFieldSlots, recordInlineSize } from \"../store/gi/record-layout.js\";\nimport { isValueMarshalable } from \"../store/gi/value-marshalable.js\";\nimport {\n type ArrayLayout,\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBiguint64,\n tBoxed,\n tByteArray,\n tCallback,\n tCursorArray,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tNumericByteArray,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\nimport { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\ntype PrimaryReturnKind = \"surfaced\" | \"void\" | \"skipped\";\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n cursor: GirCursorBounds | undefined;\n hasOutIndirection: boolean;\n};\n\ntype CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };\n\ntype RenderDescriptorOptions = Partial<ArgIndexOptions> & {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype RecordPlacement = {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype FundamentalDescriptor = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n ownership: Ownership;\n wrapperClass?: string | undefined;\n isInline?: boolean | undefined;\n};\n\ntype AncestorFundamental = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n};\n\ntype ResolvedRecord = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype FundamentalRecordOptions = {\n resolved: Extract<EntityType, { kind: \"record\" }>;\n lib: string;\n refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n isInline: boolean;\n};\n\nconst LIST_HELPERS: Record<Exclude<ListFlavor, \"gbytearray\">, ListDescriptorName> = {\n glist: \"list\",\n gslist: \"slist\",\n gptrarray: \"ptrArray\",\n garray: \"gArray\",\n};\n\nconst FLOATING_FUNDAMENTALS: Set<string> = new Set([\"GParam\"]);\n\nconst mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>\n options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;\n\nconst transferOwnership = (transfer: ParameterTransfer): Ownership => {\n if (transfer === \"full\") {\n return \"full\";\n }\n\n if (transfer === \"container\") {\n return \"full\";\n }\n\n return \"borrowed\";\n};\n\nconst deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>\n transfer === \"container\" ? \"none\" : transfer;\n\nconst isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref === undefined || primitiveCategoryFor(library, ref) === \"void\";\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {\n if (isVoidRef(library, returnValue.type)) {\n return \"void\";\n }\n\n return returnValue.skip ? \"skipped\" : \"surfaced\";\n};\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) !== \"surfaced\";\n\nconst isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"skipped\";\n\nconst isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"void\";\n\nconst argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({\n argIndexOffset: options.argIndexOffset ?? 0,\n argIndexMap: options.argIndexMap,\n cursor: options.cursor,\n hasOutIndirection: options.hasOutIndirection === true,\n});\n\nconst renderDescriptor = (\n context: ModuleContext,\n ref: TypeId | undefined,\n transfer: ParameterTransfer = \"none\",\n options: RenderDescriptorOptions = {},\n): string => {\n if (ref === undefined) {\n return tVoid;\n }\n\n const indexOptions = argIndexOptions(options);\n const ownership = transferOwnership(transfer);\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(ownership);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return primitiveExpression(type.category, ownership);\n }\n case \"varargs\": {\n return tVoid;\n }\n case \"callback\": {\n return tUint64;\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return expressionForResolved(context, type, transfer, options);\n }\n case \"carray\": {\n return arrayExpression(context, type, transfer, indexOptions);\n }\n case \"list\": {\n return listExpression(context, type, transfer, indexOptions);\n }\n case \"hashtable\": {\n const elementTransfer = deriveElementTransfer(transfer);\n const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);\n const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);\n\n return tHashTable(key, value, ownership);\n }\n }\n};\n\nconst listExpression = (\n context: ModuleContext,\n type: ListType,\n transfer: ParameterTransfer,\n indexOptions: ArgIndexOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n if (type.flavor === \"gbytearray\") {\n return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);\n }\n\n const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);\n\n return tList(LIST_HELPERS[type.flavor], element, ownership);\n};\n\nconst resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"callback\") {\n return undefined;\n }\n\n return type.value;\n};\n\nconst isScalarType = (library: Library, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"string\" && type.category !== \"void\";\n }\n case \"enum\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isScalarRef(library, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = library.typeFor(ref);\n\n return type !== undefined && isScalarType(library, type);\n};\n\nconst isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {\n const type = carrayFor(library, ref);\n\n if (type === undefined) {\n return false;\n }\n\n return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === \"string\";\n};\n\nconst isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) &&\n (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };\n\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n });\n};\n\nconst userDataIndexByName = (parameters: GirParameter[]): number | undefined => {\n let userDataIndex: number | undefined;\n\n for (const [index, parameter] of parameters.entries()) {\n if (parameter.name === \"user_data\" || parameter.name === \"data\") {\n userDataIndex = index;\n }\n }\n\n return userDataIndex;\n};\n\nconst findUserDataIndex = (parameters: GirParameter[]): number | undefined => {\n const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);\n\n return declared?.closureIndex ?? userDataIndexByName(parameters);\n};\n\nconst callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string[] => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: true\");\n }\n\n if (owningParameter.closureIndex !== undefined) {\n options.push(\"hasUserData: true\");\n }\n\n if (userDataIndex !== undefined) {\n options.push(`userDataIndex: ${String(userDataIndex)}`);\n }\n\n if (owningParameter.scope !== undefined) {\n options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);\n }\n\n return options;\n};\n\nconst renderCallbackType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n owningParameter: GirParameter,\n argOverrides?: Map<number, string>,\n): string | undefined => {\n const callback = resolveCallbackType(context, ref);\n\n if (callback === undefined) {\n return undefined;\n }\n\n const argTypes = callback.parameters.map(\n (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),\n );\n\n const { returnValue } = callback;\n\n return tCallback({\n argTypes,\n returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),\n options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters)),\n });\n};\n\nconst primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {\n if (category === \"void\") {\n return tVoid;\n }\n\n if (category === \"string\") {\n return tString(ownership);\n }\n\n if (category === \"pointer\") {\n return tBiguint64;\n }\n\n if (category === \"gtype\") {\n return tGtype;\n }\n\n return tScalar(category satisfies ScalarDescriptorName);\n};\n\nconst renderFundamental = (descriptor: FundamentalDescriptor): string => {\n const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isInline } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n isInline,\n });\n};\n\nconst sunkOwnership = (\n ancestor: AncestorFundamental,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): Ownership => {\n if (!isNewlyCreated || ownership !== \"full\" || ancestor.typeName === undefined) {\n return ownership;\n }\n\n return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? \"borrowed\" : ownership;\n};\n\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n\n if (ancestor === undefined) {\n return tObject(ownership);\n }\n\n return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });\n};\n\nconst isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: \"class\" | \"interface\" }> =>\n type !== undefined && (type.kind === \"class\" || type.kind === \"interface\");\n\nconst getFundamental = (\n node: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => {\n const cls = node.value;\n const lib = node.namespace.sharedLibrary;\n\n if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib,\n refFunc: cls.glibRefFunc,\n unrefFunc: cls.glibUnrefFunc,\n typeName: cls.glibTypeName,\n };\n};\n\nconst walkFundamental = (\n context: ModuleContext,\n current: GirType | undefined,\n seen: Set<string>,\n): AncestorFundamental | undefined => {\n if (!isClassOrInterface(current)) {\n return undefined;\n }\n\n const key = `${current.namespace.name}.${current.value.name}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n const fundamental = getFundamental(current);\n\n if (fundamental !== undefined) {\n return fundamental;\n }\n\n if (current.value.parent === undefined) {\n return undefined;\n }\n\n const parent = context.library.resolveType(current.namespace.name, current.value.parent);\n\n return walkFundamental(context, parent, seen);\n};\n\nconst fundamentalAncestor = (\n context: ModuleContext,\n start: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());\n\nconst classSelfDescriptor = (\n context: ModuleContext,\n type: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\n};\n\nconst renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {\n const ref = instance.type;\n\n if (ref === undefined) {\n return tObject(\"borrowed\");\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(\"borrowed\");\n }\n\n if (isClassOrInterface(type)) {\n return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\nconst recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({\n refFunc: record.glibRefFunc ?? record.copyFunc,\n unrefFunc: record.glibUnrefFunc ?? record.freeFunc,\n});\n\nconst requiresFallbackClass = (record: ResolvedRecord): boolean => {\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n return record.glibTypeName === undefined;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst structExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n options: { isCallerAllocated: boolean; isInline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));\n const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);\n\n return tStruct(ownership, {\n size: isCopyable && size > 0 ? size : undefined,\n wrapperClass,\n isCallerAllocated: options.isCallerAllocated,\n isInline: options.isInline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;\n\n return renderFundamental({\n lib,\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n isInline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n isCallerAllocated: boolean;\n isInline: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, isCallerAllocated, isInline, typeFnName } = options;\n const record = resolved.value;\n const glibName = record.glibTypeName ?? record.cType ?? record.name;\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return tBoxed(glibName, {\n ownership,\n sharedLibrary: resolved.namespace.sharedLibrary,\n getTypeFnName: typeFnName,\n isCallerAllocated,\n isInline,\n size: size > 0 ? size : undefined,\n });\n};\n\nconst plainRecordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string => {\n const record = resolved.value;\n\n const layout = {\n isCallerAllocated: placement.isCallerAllocated ?? false,\n isInline: placement.isInline ?? false,\n };\n\n if (record.glibGetType === undefined) {\n return structExpression(context, resolved, ownership, layout);\n }\n\n return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });\n};\n\nconst recordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement = {},\n): string => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n const lib = resolved.namespace.sharedLibrary;\n\n if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n lib,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n isInline: placement.isInline ?? false,\n });\n }\n\n return plainRecordExpression(context, resolved, ownership, placement);\n};\n\nconst rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);\n\nconst enumExpression = (resolved: Extract<EntityType, { kind: \"enum\" }>): string => {\n const getter = resolved.value.glibGetType;\n const isSigned = resolved.value.members.some((member) => member.value.startsWith(\"-\"));\n const lib = resolved.namespace.sharedLibrary;\n\n if (getter === undefined || getter === \"\" || lib === undefined) {\n return rawEnumDescriptor(isSigned);\n }\n\n return resolved.value.kind === \"bitfield\" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);\n};\n\nconst expressionForResolved = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" | \"record\" | \"enum\" | \"alias\" }>,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n switch (resolved.kind) {\n case \"class\":\n case \"interface\": {\n return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.isCallerAllocated ?? false,\n isInline: options.isInline ?? false,\n });\n }\n case \"enum\": {\n return enumExpression(resolved);\n }\n case \"alias\": {\n return aliasExpression(context, resolved.value.target, transfer, options);\n }\n }\n};\n\nconst elementExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string =>\n renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {\n ...options,\n cursor: undefined,\n hasOutIndirection: false,\n });\n\nconst cursorArrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CursorArgIndexOptions & { layout: ArrayLayout },\n): string =>\n tCursorArray(\n elementExpression(context, ref, transfer, options),\n {\n baseIndex: mapArgIndex(options, options.cursor.baseIndex),\n lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),\n },\n transferOwnership(transfer),\n options.layout,\n );\n\nconst arrayLayout = (context: ModuleContext, ref: CArrayType, options: ArgIndexOptions): ArrayLayout => ({\n elementSize: inlineElementSize(context, ref, options.hasOutIndirection),\n isBytes:\n context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),\n});\n\nconst arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string => {\n const { cursor } = options;\n const layout = arrayLayout(context, ref, options);\n\n if (cursor !== undefined) {\n return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });\n }\n\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = elementExpression(context, ref, transfer, options);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, layout);\n }\n\n return tArray(element, ownership, layout);\n};\n\nconst elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {\n const declared = elementCType === undefined ? 0 : elementCType.split(\"*\").length - 1;\n\n return hasOutIndirection ? declared - 1 : declared;\n};\n\nconst inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {\n if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref.element);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n return recordInlineSize(context, type.value);\n};\n\nconst aliasExpression = (\n context: ModuleContext,\n target: TypeId | undefined,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n if (target === undefined) {\n return tObject(transferOwnership(transfer));\n }\n\n return renderDescriptor(context, target, transfer, options);\n};\n\nexport {\n isInlineCallbackRef,\n isSkippedPrimaryReturn,\n isVoidPrimaryReturn,\n primaryReturnKind,\n shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
1
+ {"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCallback } from \"../gir/callback.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport {\n type GirCursorBounds,\n type GirParameter,\n type GirReturnValue,\n isCallerAllocatedOut,\n isInoutParameter,\n isOutParameter,\n type ParameterTransfer,\n} from \"../gir/parameter.js\";\nimport {\n type CArrayType,\n hasUnknownArrayLength,\n type ListFlavor,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isRecordInout } from \"../store/gi/param-marshal.js\";\nimport { computeRecordFieldSlots, recordInlineSize } from \"../store/gi/record-layout.js\";\nimport { isValueMarshalable } from \"../store/gi/value-marshalable.js\";\nimport {\n type ArrayLayout,\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBiguint64,\n tBoxed,\n tByteArray,\n tCallback,\n tCursorArray,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tNumericByteArray,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\nimport { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\ntype PrimaryReturnKind = \"surfaced\" | \"void\" | \"skipped\";\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n cursor: GirCursorBounds | undefined;\n hasOutIndirection: boolean;\n};\n\ntype CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };\ntype CArrayExpressionOptions = ArgIndexOptions & { isCallerAllocated: boolean };\n\ntype RenderDescriptorOptions = Partial<ArgIndexOptions> & {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype RecordPlacement = {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype RecordLayout = {\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\ntype FundamentalDescriptor = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n ownership: Ownership;\n wrapperClass?: string | undefined;\n isCallerAllocated?: boolean | undefined;\n isInline?: boolean | undefined;\n};\n\ntype AncestorFundamental = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n};\n\ntype ResolvedRecord = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype FundamentalRecordOptions = {\n resolved: Extract<EntityType, { kind: \"record\" }>;\n lib: string;\n refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n isCallerAllocated: boolean;\n isInline: boolean;\n};\n\nconst LIST_HELPERS: Record<Exclude<ListFlavor, \"gbytearray\">, ListDescriptorName> = {\n glist: \"list\",\n gslist: \"slist\",\n gptrarray: \"ptrArray\",\n garray: \"gArray\",\n};\n\nconst FLOATING_FUNDAMENTALS: Set<string> = new Set([\"GParam\"]);\n\nconst mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>\n options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;\n\nconst transferOwnership = (transfer: ParameterTransfer): Ownership => {\n if (transfer === \"full\") {\n return \"full\";\n }\n\n if (transfer === \"container\") {\n return \"full\";\n }\n\n return \"borrowed\";\n};\n\nconst deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>\n transfer === \"container\" ? \"none\" : transfer;\n\nconst isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref === undefined || primitiveCategoryFor(library, ref) === \"void\";\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {\n if (isVoidRef(library, returnValue.type)) {\n return \"void\";\n }\n\n return returnValue.skip ? \"skipped\" : \"surfaced\";\n};\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) !== \"surfaced\";\n\nconst isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"skipped\";\n\nconst isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n primaryReturnKind(library, returnValue) === \"void\";\n\nconst argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({\n argIndexOffset: options.argIndexOffset ?? 0,\n argIndexMap: options.argIndexMap,\n cursor: options.cursor,\n hasOutIndirection: options.hasOutIndirection === true,\n});\n\nconst renderDescriptor = (\n context: ModuleContext,\n ref: TypeId | undefined,\n transfer: ParameterTransfer = \"none\",\n options: RenderDescriptorOptions = {},\n): string => {\n if (ref === undefined) {\n return tVoid;\n }\n\n const indexOptions = argIndexOptions(options);\n const ownership = transferOwnership(transfer);\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(ownership);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return primitiveExpression(type.category, ownership);\n }\n case \"varargs\": {\n return tVoid;\n }\n case \"callback\": {\n return tBiguint64;\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return expressionForResolved(context, type, transfer, options);\n }\n case \"carray\": {\n return arrayExpression(context, type, transfer, {\n ...indexOptions,\n isCallerAllocated: options.isCallerAllocated === true,\n });\n }\n case \"list\": {\n return listExpression(context, type, transfer, indexOptions);\n }\n case \"hashtable\": {\n const elementTransfer = deriveElementTransfer(transfer);\n const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);\n const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);\n\n return tHashTable(key, value, ownership);\n }\n }\n};\n\nconst listExpression = (\n context: ModuleContext,\n type: ListType,\n transfer: ParameterTransfer,\n indexOptions: ArgIndexOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n if (type.flavor === \"gbytearray\") {\n return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);\n }\n\n const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);\n\n return tList(LIST_HELPERS[type.flavor], element, ownership);\n};\n\nconst resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"callback\") {\n return undefined;\n }\n\n return type.value;\n};\n\nconst isScalarType = (library: Library, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"string\" && type.category !== \"void\";\n }\n case \"enum\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isScalarRef(library, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = library.typeFor(ref);\n\n return type !== undefined && isScalarType(library, type);\n};\n\nconst isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {\n const type = carrayFor(library, ref);\n\n if (type === undefined) {\n return false;\n }\n\n return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === \"string\";\n};\n\nconst isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) &&\n (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };\n\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n });\n};\n\nconst userDataIndexByName = (parameters: GirParameter[]): number | undefined => {\n let userDataIndex: number | undefined;\n\n for (const [index, parameter] of parameters.entries()) {\n if (parameter.name === \"user_data\" || parameter.name === \"data\") {\n userDataIndex = index;\n }\n }\n\n return userDataIndex;\n};\n\nconst findUserDataIndex = (parameters: GirParameter[]): number | undefined => {\n const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);\n\n return declared?.closureIndex ?? userDataIndexByName(parameters);\n};\n\nconst callbackOptionsArg = (\n owningParameter: GirParameter,\n userDataIndex: number | undefined,\n canThrow: boolean,\n): string[] => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: true\");\n }\n\n if (owningParameter.closureIndex !== undefined) {\n options.push(\"hasUserData: true\");\n }\n\n if (userDataIndex !== undefined) {\n options.push(`userDataIndex: ${String(userDataIndex)}`);\n }\n\n if (canThrow) {\n options.push(\"canThrow: true\");\n }\n\n if (owningParameter.scope !== undefined) {\n options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);\n }\n\n return options;\n};\n\nconst renderCallbackType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n owningParameter: GirParameter,\n argOverrides?: Map<number, string>,\n): string | undefined => {\n const callback = resolveCallbackType(context, ref);\n\n if (callback === undefined) {\n return undefined;\n }\n\n const argTypes = callback.parameters.map(\n (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),\n );\n\n const { returnValue } = callback;\n\n return tCallback({\n argTypes,\n returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),\n options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters), callback.throws),\n });\n};\n\nconst primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {\n if (category === \"void\") {\n return tVoid;\n }\n\n if (category === \"string\") {\n return tString(ownership);\n }\n\n if (category === \"pointer\") {\n return tBiguint64;\n }\n\n if (category === \"gtype\") {\n return tGtype;\n }\n\n return tScalar(category satisfies ScalarDescriptorName);\n};\n\nconst renderFundamental = (descriptor: FundamentalDescriptor): string => {\n const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isCallerAllocated, isInline } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst sunkOwnership = (\n ancestor: AncestorFundamental,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): Ownership => {\n if (!isNewlyCreated || ownership !== \"full\" || ancestor.typeName === undefined) {\n return ownership;\n }\n\n return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? \"borrowed\" : ownership;\n};\n\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n isNewlyCreated: boolean,\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n\n if (ancestor === undefined) {\n return tObject(ownership);\n }\n\n return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });\n};\n\nconst isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: \"class\" | \"interface\" }> =>\n type !== undefined && (type.kind === \"class\" || type.kind === \"interface\");\n\nconst getFundamental = (\n node: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => {\n const cls = node.value;\n const lib = node.namespace.sharedLibrary;\n\n if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib,\n refFunc: cls.glibRefFunc,\n unrefFunc: cls.glibUnrefFunc,\n typeName: cls.glibTypeName,\n };\n};\n\nconst walkFundamental = (\n context: ModuleContext,\n current: GirType | undefined,\n seen: Set<string>,\n): AncestorFundamental | undefined => {\n if (!isClassOrInterface(current)) {\n return undefined;\n }\n\n const key = `${current.namespace.name}.${current.value.name}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n const fundamental = getFundamental(current);\n\n if (fundamental !== undefined) {\n return fundamental;\n }\n\n if (current.value.parent === undefined) {\n return undefined;\n }\n\n const parent = context.library.resolveType(current.namespace.name, current.value.parent);\n\n return walkFundamental(context, parent, seen);\n};\n\nconst fundamentalAncestor = (\n context: ModuleContext,\n start: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());\n\nconst classSelfDescriptor = (\n context: ModuleContext,\n type: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\n};\n\nconst renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {\n const ref = instance.type;\n\n if (ref === undefined) {\n return tObject(\"borrowed\");\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(\"borrowed\");\n }\n\n if (isClassOrInterface(type)) {\n return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\nconst recordLayout = (placement: RecordPlacement): RecordLayout => ({\n isCallerAllocated: placement.isCallerAllocated ?? false,\n isInline: placement.isInline ?? false,\n});\n\nconst recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({\n refFunc: record.glibRefFunc ?? record.copyFunc,\n unrefFunc: record.glibUnrefFunc ?? record.freeFunc,\n});\n\nconst requiresFallbackClass = (record: ResolvedRecord): boolean => {\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n return record.glibTypeName === undefined;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst structExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n options: { isCallerAllocated: boolean; isInline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));\n const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);\n\n return tStruct(ownership, {\n size: isCopyable && size > 0 ? size : undefined,\n wrapperClass,\n isCallerAllocated: options.isCallerAllocated,\n isInline: options.isInline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isCallerAllocated, isInline } = options;\n\n return renderFundamental({\n lib,\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n isCallerAllocated,\n isInline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n isCallerAllocated: boolean;\n isInline: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, isCallerAllocated, isInline, typeFnName } = options;\n const record = resolved.value;\n const glibName = record.glibTypeName ?? record.cType ?? record.name;\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return tBoxed(glibName, {\n ownership,\n sharedLibrary: resolved.namespace.sharedLibrary,\n getTypeFnName: typeFnName,\n isCallerAllocated,\n isInline,\n size: size > 0 ? size : undefined,\n });\n};\n\nconst plainRecordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string => {\n const record = resolved.value;\n const layout = recordLayout(placement);\n\n if (record.glibGetType === undefined) {\n return structExpression(context, resolved, ownership, layout);\n }\n\n return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });\n};\n\nconst isPlainStruct = (resolved: Extract<EntityType, { kind: \"record\" }>): boolean => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined && resolved.namespace.sharedLibrary !== undefined) {\n return false;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst recordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement = {},\n): string => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n const lib = resolved.namespace.sharedLibrary;\n\n if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n lib,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n ...recordLayout(placement),\n });\n }\n\n return plainRecordExpression(context, resolved, ownership, placement);\n};\n\nconst rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);\n\nconst flagsMask = (resolved: Extract<EntityType, { kind: \"enum\" }>): number =>\n resolved.value.members.reduce((mask, member) => (mask | Number(member.value)) >>> 0, 0);\n\nconst enumExpression = (resolved: Extract<EntityType, { kind: \"enum\" }>): string => {\n const getter = resolved.value.glibGetType;\n const isSigned = resolved.value.members.some((member) => member.value.startsWith(\"-\"));\n const lib = resolved.namespace.sharedLibrary;\n const isBitfield = resolved.value.kind === \"bitfield\";\n\n if (getter === undefined || getter === \"\" || lib === undefined) {\n return isBitfield ? tFlags(\"\", \"\", isSigned, flagsMask(resolved)) : rawEnumDescriptor(isSigned);\n }\n\n return isBitfield ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);\n};\n\nconst expressionForResolved = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" | \"record\" | \"enum\" | \"alias\" }>,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n switch (resolved.kind) {\n case \"class\":\n case \"interface\": {\n return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.isCallerAllocated ?? false,\n isInline: options.isInline ?? false,\n });\n }\n case \"enum\": {\n return enumExpression(resolved);\n }\n case \"alias\": {\n return aliasExpression(context, resolved.value.target, transfer, options);\n }\n }\n};\n\nconst elementExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string =>\n renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {\n ...options,\n cursor: undefined,\n hasOutIndirection: false,\n isCallerAllocated: false,\n });\n\nconst cursorArrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CursorArgIndexOptions & { layout: ArrayLayout },\n): string =>\n tCursorArray(\n elementExpression(context, ref, transfer, options),\n {\n baseIndex: mapArgIndex(options, options.cursor.baseIndex),\n lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),\n },\n transferOwnership(transfer),\n options.layout,\n );\n\nconst arrayLayout = (context: ModuleContext, ref: CArrayType, options: ArgIndexOptions): ArrayLayout => ({\n elementSize: inlineElementSize(context, ref, options.hasOutIndirection),\n isBytes:\n context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),\n});\n\nconst fixedArrayLayout = (layout: ArrayLayout, isCallerAllocated: boolean): ArrayLayout =>\n isCallerAllocated ? { ...layout, isCallerAllocated: true } : layout;\n\nconst arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: CArrayExpressionOptions,\n): string => {\n const { cursor } = options;\n const layout = arrayLayout(context, ref, options);\n\n if (cursor !== undefined) {\n return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });\n }\n\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = elementExpression(context, ref, transfer, options);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, fixedArrayLayout(layout, options.isCallerAllocated));\n }\n\n return tArray(element, ownership, layout);\n};\n\nconst elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {\n const declared = elementCType === undefined ? 0 : elementCType.split(\"*\").length - 1;\n\n return hasOutIndirection ? declared - 1 : declared;\n};\n\nconst inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {\n if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref.element);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n return recordInlineSize(context, type.value);\n};\n\nconst aliasExpression = (\n context: ModuleContext,\n target: TypeId | undefined,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n if (target === undefined) {\n return tObject(transferOwnership(transfer));\n }\n\n return renderDescriptor(context, target, transfer, options);\n};\n\nexport {\n isPlainStruct,\n transferOwnership,\n isInlineCallbackRef,\n isSkippedPrimaryReturn,\n isVoidPrimaryReturn,\n primaryReturnKind,\n shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
@@ -19,12 +19,14 @@ type FundamentalOptions = {
19
19
  ownership: Ownership;
20
20
  typeName: string | undefined;
21
21
  wrapperClass: string | undefined;
22
+ isCallerAllocated?: boolean | undefined;
22
23
  isInline?: boolean | undefined;
23
24
  };
24
25
  type ListDescriptorName = "list" | "slist" | "ptrArray" | "gArray";
25
26
  type ArrayLayout = {
26
27
  elementSize?: number | undefined;
27
28
  isBytes: boolean;
29
+ isCallerAllocated?: boolean | undefined;
28
30
  };
29
31
  type BindArgs = {
30
32
  libExpr: string;
@@ -36,6 +38,7 @@ type FnSpecParts = {
36
38
  args: string;
37
39
  returns: string;
38
40
  isReturnSkipped: boolean;
41
+ isReturnUnpacked: boolean;
39
42
  canThrow: boolean;
40
43
  };
41
44
  type CallbackSpecParts = {
@@ -62,7 +65,7 @@ declare const tFundamental: (lib: string, refFunc: string, unrefFunc: string, op
62
65
  declare const tRef: (inner: string, isInout?: boolean) => string;
63
66
  declare const tHashTable: (key: string, value: string, ownership: Ownership) => string;
64
67
  declare const tEnum: (lib: string, typeFnName: string, isSigned: boolean) => string;
65
- declare const tFlags: (lib: string, typeFnName: string, isSigned: boolean) => string;
68
+ declare const tFlags: (lib: string, typeFnName: string, isSigned: boolean, mask?: number) => string;
66
69
  declare const tByteArray: (ownership: Ownership) => string;
67
70
  declare const tNumericByteArray: (ownership: Ownership) => string;
68
71
  declare const tList: (name: ListDescriptorName, element: string, ownership: Ownership) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { sourceStringLiteral } from "@gtkx/utils";
2
2
  import { joinArgs } from "../writer/emit.js";
3
3
  const SKIPPED_RETURN_ENTRY = "isReturnSkipped: true";
4
+ const UNPACKED_RETURN_ENTRY = "isReturnUnpacked: true";
4
5
  const T = {
5
6
  bind: "t.bind",
6
7
  int8: "t.int8",
@@ -89,13 +90,19 @@ const tFundamental = (lib, refFunc, unrefFunc, options) => call("fundamental", [
89
90
  `ownership: ${sourceStringLiteral(options.ownership)}`,
90
91
  options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,
91
92
  options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
93
+ options.isCallerAllocated === true ? "isCallerAllocated: true" : undefined,
92
94
  options.isInline === true ? "isInline: true" : undefined,
93
95
  ]),
94
96
  ]);
95
97
  const tRef = (inner, isInout = false) => call("ref", [inner, isInout ? "true" : undefined]);
96
98
  const tHashTable = (key, value, ownership) => call("hashTable", [key, value, sourceStringLiteral(ownership)]);
97
99
  const tEnum = (lib, typeFnName, isSigned) => call("enum", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);
98
- const tFlags = (lib, typeFnName, isSigned) => call("flags", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);
100
+ const tFlags = (lib, typeFnName, isSigned, mask) => call("flags", [
101
+ sourceStringLiteral(lib),
102
+ sourceStringLiteral(typeFnName),
103
+ String(isSigned),
104
+ mask === undefined ? undefined : `0x${mask.toString(16)}`,
105
+ ]);
99
106
  const tByteArray = (ownership) => call("byteArray", [sourceStringLiteral(ownership)]);
100
107
  const tNumericByteArray = (ownership) => call("array", [
101
108
  tUint8,
@@ -110,6 +117,7 @@ const arrayLayoutArg = (ownership, layout) => {
110
117
  const entries = [
111
118
  layout.elementSize === undefined ? undefined : `elementSize: ${String(layout.elementSize)}`,
112
119
  layout.isBytes ? "isBytes: true" : undefined,
120
+ layout.isCallerAllocated === true ? "isCallerAllocated: true" : undefined,
113
121
  ].filter((entry) => entry !== undefined);
114
122
  return entries.length === 0 ? undefined : `{ ${entries.join(", ")} }`;
115
123
  };
@@ -144,11 +152,12 @@ const tCallback = (spec) => {
144
152
  const tBind = (args) => call("bind", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);
145
153
  const tFn = (lib, cIdentifier, spec) => {
146
154
  const skipEntry = spec.isReturnSkipped ? `, ${SKIPPED_RETURN_ENTRY}` : "";
155
+ const unpackEntry = spec.isReturnUnpacked ? `, ${UNPACKED_RETURN_ENTRY}` : "";
147
156
  const throwsEntry = spec.canThrow ? ", canThrow: true" : "";
148
157
  return call("fn", [
149
158
  sourceStringLiteral(lib),
150
159
  sourceStringLiteral(cIdentifier),
151
- `{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${throwsEntry} }`,
160
+ `{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${unpackEntry}${throwsEntry} }`,
152
161
  ]);
153
162
  };
154
163
  export { tVoid, tBoolean, tUint8, tUint32, tInt32, tUint64, tBiguint64, tGtype, tBuffer, tScalar, tString, tObject, tBoxed, tStruct, tInlineStruct, tFundamental, tRef, tHashTable, tEnum, tFlags, tByteArray, tNumericByteArray, tList, tArray, tSizedArray, tFixedArray, tCursorArray, tCallback, tBind, tFn, };