@gtkx/codegen 1.0.0-rc.2 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -5
- package/dist/analysis/descriptor-render.d.ts +2 -2
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +30 -32
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +6 -6
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +7 -7
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/param-structure.d.ts +2 -2
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +5 -7
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +7 -13
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +77 -1
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +66 -8
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +5 -4
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/pipeline.d.ts +5 -3
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +5 -3
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.js +6 -6
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +5 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +2 -2
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +2 -4
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +7 -6
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +7 -10
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +4 -9
- package/dist/gi.js.map +1 -1
- package/dist/gir/field.d.ts +0 -1
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +0 -3
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/gir-path.d.ts +7 -0
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +7 -0
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +17 -3
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +14 -1
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +0 -4
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -3
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +1 -1
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -3
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.js +1 -1
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/index.d.ts +18 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/jsx.d.ts +8 -11
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +18 -15
- package/dist/jsx.js.map +1 -1
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +1 -1
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/pipeline.js +1 -1
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +2 -2
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +6 -6
- package/dist/khronos/plan.js.map +1 -1
- package/dist/react/element-config.d.ts +18 -9
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js +23 -13
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +36 -16
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +22 -20
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +1 -2
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +2 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +4 -9
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +0 -2
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +1 -7
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +26 -23
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +1 -1
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +5 -7
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +5 -4
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +3 -2
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +21 -11
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +0 -4
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +0 -7
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/return-wrap.d.ts +1 -1
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +4 -4
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +13 -16
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +7 -0
- package/dist/store/gi/value-marshalable.d.ts.map +1 -0
- package/dist/store/gi/value-marshalable.js +57 -0
- package/dist/store/gi/value-marshalable.js.map +1 -0
- package/dist/store/gi-store.d.ts +2 -3
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +0 -2
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +0 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +2 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js +0 -2
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +0 -1
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +0 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +29 -0
- package/dist/store/jsx/generated-elements.d.ts.map +1 -0
- package/dist/store/jsx/generated-elements.js +30 -0
- package/dist/store/jsx/generated-elements.js.map +1 -0
- package/dist/store/jsx/intrinsic-elements.d.ts +1 -2
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js +1 -2
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.js +6 -6
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +7 -7
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/omitted-props.d.ts +8 -0
- package/dist/store/jsx/omitted-props.d.ts.map +1 -0
- package/dist/store/jsx/omitted-props.js +20 -0
- package/dist/store/jsx/omitted-props.js.map +1 -0
- package/dist/store/jsx/pipeline.d.ts +4 -0
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js +4 -1
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -1
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +8 -13
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/store/jsx-store.d.ts +2 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -3
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +28 -0
- package/dist/store/resolve-store.d.ts.map +1 -0
- package/dist/store/resolve-store.js +65 -0
- package/dist/store/resolve-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +5 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +6 -4
- package/dist/store/store-fs.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +8 -8
- package/package.json +6 -11
- package/src/analysis/descriptor-render.ts +45 -38
- package/src/analysis/descriptor.ts +13 -13
- package/src/analysis/param-structure.ts +8 -10
- package/src/analysis/ts-type.ts +8 -17
- package/src/compile.ts +2 -1
- package/src/docs/api-reference.ts +131 -13
- package/src/docs/element-page.ts +5 -9
- package/src/docs/pipeline.ts +9 -6
- package/src/docs/render.ts +7 -7
- package/src/docs/symbol-page.ts +7 -2
- package/src/fingerprint.ts +21 -12
- package/src/gi.ts +13 -11
- package/src/gir/field.ts +0 -4
- package/src/gir/gir-path.ts +7 -0
- package/src/gir/libraries.ts +18 -4
- package/src/gir/parameter.ts +0 -4
- package/src/gir/size.ts +0 -3
- package/src/gir/type-id.ts +2 -4
- package/src/gir/type-ref.ts +1 -1
- package/src/index.ts +18 -15
- package/src/internal.ts +2 -0
- package/src/jsx.ts +26 -21
- package/src/khronos/args.ts +1 -1
- package/src/khronos/pipeline.ts +1 -1
- package/src/khronos/plan.ts +8 -8
- package/src/react/element-config.ts +25 -16
- package/src/runner.ts +62 -37
- package/src/store/compile-store.ts +3 -4
- package/src/store/gi/callables.ts +5 -11
- package/src/store/gi/constant.ts +0 -2
- package/src/store/gi/function.ts +1 -7
- package/src/store/gi/method.ts +31 -28
- package/src/store/gi/property-accessor.ts +6 -8
- package/src/store/gi/record-constructor.ts +9 -4
- package/src/store/gi/record-field-accessor.ts +41 -12
- package/src/store/gi/record-layout.ts +0 -4
- package/src/store/gi/record.ts +0 -9
- package/src/store/gi/return-wrap.ts +5 -5
- package/src/store/gi/signal.ts +17 -17
- package/src/store/gi/value-marshalable.ts +87 -0
- package/src/store/gi-store.ts +2 -4
- package/src/store/jsx/element-components.ts +0 -6
- package/src/store/jsx/element-prop-imports.ts +7 -4
- package/src/store/jsx/element-prop-types.ts +0 -1
- package/src/store/jsx/generated-elements.ts +60 -0
- package/src/store/jsx/intrinsic-elements.ts +0 -9
- package/src/store/jsx/jsx.ts +7 -7
- package/src/store/jsx/metadata.ts +8 -8
- package/src/store/jsx/omitted-props.ts +30 -0
- package/src/store/jsx/pipeline.ts +6 -1
- package/src/store/jsx/props.ts +8 -20
- package/src/store/jsx-store.ts +5 -7
- package/src/store/resolve-store.ts +100 -0
- package/src/store/store-fs.ts +12 -5
- package/dist/store/gi/class-struct-record.d.ts +0 -10
- package/dist/store/gi/class-struct-record.d.ts.map +0 -1
- package/dist/store/gi/class-struct-record.js +0 -52
- package/dist/store/gi/class-struct-record.js.map +0 -1
- package/src/store/gi/class-struct-record.ts +0 -72
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
The React framework for Linux.<br />
|
|
9
|
-
|
|
9
|
+
Write native Linux applications with React and TypeScript.
|
|
10
|
+
Built on the GNOME stack and standard web tooling.
|
|
10
11
|
</p>
|
|
11
12
|
|
|
12
13
|
<p align="center">
|
|
@@ -20,15 +21,13 @@
|
|
|
20
21
|
|
|
21
22
|
<p align="center">
|
|
22
23
|
<a href="https://gtkx.dev">Homepage</a> ·
|
|
23
|
-
<a href="https://gtkx.dev/guide/
|
|
24
|
+
<a href="https://gtkx.dev/guide/getting-started">Documentation</a> ·
|
|
24
25
|
<a href="https://github.com/gtkx-org/gtkx/tree/main/examples">Examples</a> ·
|
|
25
26
|
<a href="https://github.com/gtkx-org/gtkx/blob/main/CONTRIBUTING.md">Contributing</a>
|
|
26
27
|
</p>
|
|
27
28
|
|
|
28
29
|
---
|
|
29
30
|
|
|
30
|
-
GTKX generates fully typed bindings for the entire GTK4 and Adwaita surface directly from GObject-Introspection. On top of those bindings you get the React programming model: components and hooks driving GObject instances, with Fast Refresh while you develop.
|
|
31
|
-
|
|
32
31
|
<p align="center">
|
|
33
32
|
<img src="https://raw.githubusercontent.com/gtkx-org/gtkx/main/examples/tutorial/assets/screenshot.png" alt="The Tasks app: an Adwaita window with a sidebar of smart views and colored lists on the left, and a boxed task list on the right." />
|
|
34
33
|
</p>
|
|
@@ -109,7 +108,7 @@ React Native and similar frameworks hide the native toolkit so one API can run e
|
|
|
109
108
|
|
|
110
109
|
### Why Node.js, and why generated bindings
|
|
111
110
|
|
|
112
|
-
GTKX runs on Node.js, which puts native modules, the npm ecosystem, and the tooling built for Node.js APIs within reach. GJS is GNOME's own runtime, built on SpiderMonkey rather than V8; node-gtk runs on Node.js but is lightly maintained, on the older nan/V8 ABI rather than N-API, and still centered on GTK3. The [
|
|
111
|
+
GTKX runs on Node.js, which puts native modules, the npm ecosystem, and the tooling built for Node.js APIs within reach. GJS is GNOME's own runtime, built on SpiderMonkey rather than V8; node-gtk runs on Node.js but is lightly maintained, on the older nan/V8 ABI rather than N-API, and still centered on GTK3. The [Why GTKX guide](https://gtkx.dev/guide/why-gtkx) covers the comparison in full.
|
|
113
112
|
|
|
114
113
|
GTKX generates the TypeScript types and the native FFI calls from the same GObject-Introspection data, so the types cannot drift from the calls they back. Codegen covers the whole GTK4 and Adwaita surface.
|
|
115
114
|
|
|
@@ -4,10 +4,10 @@ import { type GirParameter, type GirReturnValue, type ParameterTransfer } from "
|
|
|
4
4
|
import { type TypeId } from "../gir/type-id.js";
|
|
5
5
|
type RenderDescriptorOptions = {
|
|
6
6
|
argIndexOffset?: number;
|
|
7
|
-
/** GIR parameter index to emitted argument index, for callables that drop parameters. */
|
|
8
7
|
argIndexMap?: Map<number, number> | undefined;
|
|
9
|
-
|
|
8
|
+
isCallerAllocated?: boolean;
|
|
10
9
|
isInline?: boolean;
|
|
10
|
+
isNewlyCreated?: boolean;
|
|
11
11
|
};
|
|
12
12
|
type ArgIndexOptions = {
|
|
13
13
|
argIndexOffset: number;
|
|
@@ -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,YAAY,EACjB,KAAK,cAAc,EAInB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKH,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAC;
|
|
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,YAAY,EACjB,KAAK,cAAc,EAInB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKH,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAC;AA+B3B,KAAK,uBAAuB,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC9C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAChD,CAAC;AAwEF,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,OAC+B,CAAC;AAEzG,QAAA,MAAM,uBAAuB,GAAI,SAAS,OAAO,EAAE,aAAa,cAAc,KAAG,OACrB,CAAC;AAE7D,QAAA,MAAM,gBAAgB,GAClB,SAAS,aAAa,EACtB,KAAK,MAAM,GAAG,SAAS,EACvB,WAAU,iBAA0B,EACpC,UAAS,uBAA4B,KACtC,MA6CF,CAAC;AAyDF,QAAA,MAAM,WAAW,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,OAQhE,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,SAAS,OAAO,EAAE,WAAW,YAAY,KAAG,OACM,CAAC;AAExE,QAAA,MAAM,qBAAqB,GACvB,SAAS,aAAa,EACtB,WAAW,YAAY,EACvB,KAAK,MAAM,GAAG,SAAS,EACvB,WAAU,OAAO,CAAC,eAAe,CAAM,KACxC,MAaF,CAAC;AAsCF,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,SAoBX,CAAC;AA6HF,QAAA,MAAM,oBAAoB,GAAI,SAAS,aAAa,EAAE,UAAU,YAAY,KAAG,MAsB9E,CAAC;AAwOF,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACvB,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { isCallerAllocatedOut, isInoutParameter, isOutParameter, } from "../gir/
|
|
|
3
3
|
import { hasUnknownArrayLength, } from "../gir/type-id.js";
|
|
4
4
|
import { isRecordInout } from "../store/gi/param-marshal.js";
|
|
5
5
|
import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
|
|
6
|
+
import { isValueMarshalable } from "../store/gi/value-marshalable.js";
|
|
6
7
|
import { tArray, tBoxed, tByteArray, tCallback, tEnum, tFixedArray, tFlags, tFundamental, tGtype, tHashTable, tInt32, tList, tObject, tRef, tScalar, tSizedArray, tString, tStruct, tUint32, tUint64, tVoid, } from "./descriptor.js";
|
|
7
8
|
const LIST_HELPERS = {
|
|
8
9
|
glist: "list",
|
|
@@ -10,9 +11,7 @@ const LIST_HELPERS = {
|
|
|
10
11
|
gptrarray: "ptrArray",
|
|
11
12
|
garray: "gArray",
|
|
12
13
|
};
|
|
13
|
-
|
|
14
|
-
// shifts every later parameter left, so a GIR length index has to be looked up in the emitted list
|
|
15
|
-
// rather than shifted by the instance offset alone.
|
|
14
|
+
const FLOATING_FUNDAMENTALS = new Set(["GParam"]);
|
|
16
15
|
const mapArgIndex = (options, girIndex) => options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;
|
|
17
16
|
const transferOwnership = (transfer) => {
|
|
18
17
|
if (transfer === "full") {
|
|
@@ -51,9 +50,6 @@ const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
|
|
|
51
50
|
case "varargs": {
|
|
52
51
|
return tVoid;
|
|
53
52
|
}
|
|
54
|
-
// A callback in a slot no `renderCallbackType` covers (a vtable entry, a signal argument, a
|
|
55
|
-
// record field) is still a function pointer occupying a pointer-sized slot. `t.void` would
|
|
56
|
-
// hand the implementation `undefined` where the pointer belongs.
|
|
57
53
|
case "callback": {
|
|
58
54
|
return tUint64;
|
|
59
55
|
}
|
|
@@ -136,12 +132,9 @@ const renderParamDescriptor = (context, parameter, ref, argIndex = {}) => {
|
|
|
136
132
|
}
|
|
137
133
|
return renderDescriptor(context, ref, parameter.transferOwnership, {
|
|
138
134
|
...argIndex,
|
|
139
|
-
|
|
135
|
+
isCallerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),
|
|
140
136
|
});
|
|
141
137
|
};
|
|
142
|
-
// `closure=` on a callback's own parameter states which slot carries the user data, and it is what
|
|
143
|
-
// the TypeScript signature already goes by. The name scan stays as a fallback: 88 callbacks across
|
|
144
|
-
// the installed GIRs carry no `closure=` at all.
|
|
145
138
|
const userDataIndexByName = (parameters) => {
|
|
146
139
|
let userDataIndex;
|
|
147
140
|
for (const [index, parameter] of parameters.entries()) {
|
|
@@ -197,19 +190,26 @@ const primitiveExpression = (category, ownership) => {
|
|
|
197
190
|
return tScalar(category);
|
|
198
191
|
};
|
|
199
192
|
const renderFundamental = (descriptor) => {
|
|
200
|
-
const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass,
|
|
193
|
+
const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, isInline } = descriptor;
|
|
201
194
|
return tFundamental(lib, refFunc, unrefFunc, {
|
|
202
195
|
ownership,
|
|
203
196
|
typeName,
|
|
204
197
|
wrapperClass,
|
|
205
|
-
|
|
198
|
+
isInline,
|
|
206
199
|
});
|
|
207
200
|
};
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
201
|
+
const sunkOwnership = (ancestor, ownership, isNewlyCreated) => {
|
|
202
|
+
if (!isNewlyCreated || ownership !== "full" || ancestor.typeName === undefined) {
|
|
203
|
+
return ownership;
|
|
204
|
+
}
|
|
205
|
+
return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? "borrowed" : ownership;
|
|
206
|
+
};
|
|
207
|
+
const classOrInterfaceExpression = (context, resolved, ownership, isNewlyCreated) => {
|
|
211
208
|
const ancestor = fundamentalAncestor(context, resolved);
|
|
212
|
-
|
|
209
|
+
if (ancestor === undefined) {
|
|
210
|
+
return tObject(ownership);
|
|
211
|
+
}
|
|
212
|
+
return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });
|
|
213
213
|
};
|
|
214
214
|
const isClassOrInterface = (type) => type !== undefined && (type.kind === "class" || type.kind === "interface");
|
|
215
215
|
const getFundamental = (node) => {
|
|
@@ -265,9 +265,6 @@ const renderSelfDescriptor = (context, instance) => {
|
|
|
265
265
|
}
|
|
266
266
|
return tObject("borrowed");
|
|
267
267
|
};
|
|
268
|
-
// A record expresses its acquire/release pair as `copy-function`/`free-function`: no `<record>` in
|
|
269
|
-
// any installed GIR carries `glib:ref-func`, and GVariant's copy function really is
|
|
270
|
-
// `g_variant_ref_sink`.
|
|
271
268
|
const recordRefPair = (record) => ({
|
|
272
269
|
refFunc: record.glibRefFunc ?? record.copyFunc,
|
|
273
270
|
unrefFunc: record.glibUnrefFunc ?? record.freeFunc,
|
|
@@ -282,15 +279,16 @@ const requiresFallbackClass = (record) => {
|
|
|
282
279
|
const structExpression = (context, resolved, ownership, options) => {
|
|
283
280
|
const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
|
|
284
281
|
const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
|
|
282
|
+
const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);
|
|
285
283
|
return tStruct(ownership, {
|
|
286
|
-
size: size > 0 ? size : undefined,
|
|
284
|
+
size: isCopyable && size > 0 ? size : undefined,
|
|
287
285
|
wrapperClass,
|
|
288
|
-
|
|
289
|
-
|
|
286
|
+
isCallerAllocated: options.isCallerAllocated,
|
|
287
|
+
isInline: options.isInline,
|
|
290
288
|
});
|
|
291
289
|
};
|
|
292
290
|
const fundamentalRecordExpression = (options) => {
|
|
293
|
-
const { resolved, refFunc, unrefFunc, ownership, wrapperClass,
|
|
291
|
+
const { resolved, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
|
|
294
292
|
return renderFundamental({
|
|
295
293
|
lib: resolved.namespace.sharedLibrary ?? "",
|
|
296
294
|
refFunc,
|
|
@@ -298,11 +296,11 @@ const fundamentalRecordExpression = (options) => {
|
|
|
298
296
|
typeName: resolved.value.glibTypeName,
|
|
299
297
|
ownership,
|
|
300
298
|
wrapperClass,
|
|
301
|
-
|
|
299
|
+
isInline,
|
|
302
300
|
});
|
|
303
301
|
};
|
|
304
302
|
const boxedRecordExpression = (options) => {
|
|
305
|
-
const { context, resolved, ownership,
|
|
303
|
+
const { context, resolved, ownership, isCallerAllocated, isInline, typeFnName } = options;
|
|
306
304
|
const record = resolved.value;
|
|
307
305
|
const glibName = record.glibTypeName ?? record.cType ?? record.name;
|
|
308
306
|
const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
|
|
@@ -310,16 +308,16 @@ const boxedRecordExpression = (options) => {
|
|
|
310
308
|
ownership,
|
|
311
309
|
sharedLibrary: resolved.namespace.sharedLibrary,
|
|
312
310
|
getTypeFnName: typeFnName,
|
|
313
|
-
|
|
314
|
-
|
|
311
|
+
isCallerAllocated,
|
|
312
|
+
isInline,
|
|
315
313
|
size: size > 0 ? size : undefined,
|
|
316
314
|
});
|
|
317
315
|
};
|
|
318
316
|
const plainRecordExpression = (context, resolved, ownership, placement) => {
|
|
319
317
|
const record = resolved.value;
|
|
320
318
|
const layout = {
|
|
321
|
-
|
|
322
|
-
|
|
319
|
+
isCallerAllocated: placement.isCallerAllocated ?? false,
|
|
320
|
+
isInline: placement.isInline ?? false,
|
|
323
321
|
};
|
|
324
322
|
if (record.glibGetType === undefined) {
|
|
325
323
|
return structExpression(context, resolved, ownership, layout);
|
|
@@ -339,7 +337,7 @@ const recordExpression = (context, resolved, ownership, placement = {}) => {
|
|
|
339
337
|
unrefFunc,
|
|
340
338
|
ownership,
|
|
341
339
|
wrapperClass,
|
|
342
|
-
|
|
340
|
+
isInline: placement.isInline ?? false,
|
|
343
341
|
});
|
|
344
342
|
}
|
|
345
343
|
return plainRecordExpression(context, resolved, ownership, placement);
|
|
@@ -359,11 +357,11 @@ const expressionForResolved = (context, resolved, transfer, options) => {
|
|
|
359
357
|
switch (resolved.kind) {
|
|
360
358
|
case "class":
|
|
361
359
|
case "interface": {
|
|
362
|
-
return classOrInterfaceExpression(context, resolved, ownership);
|
|
360
|
+
return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);
|
|
363
361
|
}
|
|
364
362
|
case "record": {
|
|
365
363
|
return recordExpression(context, resolved, ownership, {
|
|
366
|
-
isCallerAllocated: options.
|
|
364
|
+
isCallerAllocated: options.isCallerAllocated ?? false,
|
|
367
365
|
isInline: options.isInline ?? false,
|
|
368
366
|
});
|
|
369
367
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 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 } from \"../store/gi/record-layout.js\";\nimport {\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBoxed,\n tByteArray,\n tCallback,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\n\ntype RenderDescriptorOptions = {\n argIndexOffset?: number;\n /** GIR parameter index to emitted argument index, for callables that drop parameters. */\n argIndexMap?: Map<number, number> | undefined;\n callerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\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 inline?: 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 refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n inline: 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\n// A callable that drops parameters (varargs, and the closure/destroy slots folded into a callback)\n// shifts every later parameter left, so a GIR length index has to be looked up in the emitted list\n// rather than shifted by the instance offset alone.\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 if (ref === undefined) {\n return true;\n }\n\n const type = library.typeFor(ref);\n\n return type?.kind === \"primitive\" && type.category === \"void\";\n};\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n isVoidRef(library, returnValue.type) || returnValue.skip;\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 { argIndexOffset = 0 } = options;\n const indexOptions: ArgIndexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };\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 // A callback in a slot no `renderCallbackType` covers (a vtable entry, a signal argument, a\n // record field) is still a function pointer occupying a pointer-sized slot. `t.void` would\n // hand the implementation `undefined` where the pointer belongs.\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 tByteArray(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 isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) && isScalarRef(library, parameter.type);\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n callerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n });\n};\n\n// `closure=` on a callback's own parameter states which slot carries the user data, and it is what\n// the TypeScript signature already goes by. The name scan stays as a fallback: 88 callbacks across\n// the installed GIRs carry no `closure=` at all.\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 | undefined => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: 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.length > 0 ? `{ ${options.join(\", \")} }` : undefined;\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 returnRef = callback.returnValue.type;\n\n const returnType = isVoidRef(context.library, returnRef)\n ? tVoid\n : renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);\n\n const optionsArg = callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters));\n\n return tCallback(argTypes, returnType, optionsArg);\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 tUint64;\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, inline } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n inline,\n });\n};\n\n// GIR marks only the root of a fundamental hierarchy with `glib:fundamental` and its ref/unref pair,\n// so a derived type such as GtkPropertyExpression carries neither and has to inherit both.\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\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\n if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib: node.namespace.sharedLibrary ?? \"\",\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): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(\"borrowed\") : renderFundamental({ ...ancestor, ownership: \"borrowed\" });\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);\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\n// A record expresses its acquire/release pair as `copy-function`/`free-function`: no `<record>` in\n// any installed GIR carries `glib:ref-func`, and GVariant's copy function really is\n// `g_variant_ref_sink`.\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: { callerAllocated: boolean; inline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);\n\n return tStruct(ownership, {\n size: size > 0 ? size : undefined,\n wrapperClass,\n callerAllocated: options.callerAllocated,\n inline: options.inline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, refFunc, unrefFunc, ownership, wrapperClass, inline } = options;\n\n return renderFundamental({\n lib: resolved.namespace.sharedLibrary ?? \"\",\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n inline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n callerAllocated: boolean;\n inline: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, callerAllocated, inline, 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 callerAllocated,\n inline,\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 callerAllocated: placement.isCallerAllocated ?? false,\n inline: 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\n if (refFunc !== undefined && unrefFunc !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, record.name)\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n inline: 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\n if (getter === undefined || getter === \"\") {\n return rawEnumDescriptor(isSigned);\n }\n\n const lib = resolved.namespace.sharedLibrary ?? \"\";\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);\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.callerAllocated ?? 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 arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string => {\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);\n const size = inlineElementSize(context, ref.element, ref.elementCType);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, size);\n }\n\n return tArray(element, ownership, size);\n};\n\nconst recordInlineSize = (context: ModuleContext, record: ResolvedRecord): number | undefined => {\n if (record.opaque || record.disguised || record.fields.length === 0) {\n return undefined;\n }\n\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return size > 0 ? size : undefined;\n};\n\nconst inlineElementSize = (\n context: ModuleContext,\n element: TypeId | undefined,\n elementCType: string | undefined,\n): number | undefined => {\n if (element === undefined) {\n return undefined;\n }\n\n if (elementCType?.includes(\"*\")) {\n return undefined;\n }\n\n const type = context.library.typeFor(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 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 { 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 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 } from \"../store/gi/record-layout.js\";\nimport { isValueMarshalable } from \"../store/gi/value-marshalable.js\";\nimport {\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBoxed,\n tByteArray,\n tCallback,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\n\ntype RenderDescriptorOptions = {\n argIndexOffset?: number;\n argIndexMap?: Map<number, number> | undefined;\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\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 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 if (ref === undefined) {\n return true;\n }\n\n const type = library.typeFor(ref);\n\n return type?.kind === \"primitive\" && type.category === \"void\";\n};\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n isVoidRef(library, returnValue.type) || returnValue.skip;\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 { argIndexOffset = 0 } = options;\n const indexOptions: ArgIndexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };\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 tByteArray(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 isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) && isScalarRef(library, parameter.type);\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));\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 | undefined => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: 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.length > 0 ? `{ ${options.join(\", \")} }` : undefined;\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 returnRef = callback.returnValue.type;\n\n const returnType = isVoidRef(context.library, returnRef)\n ? tVoid\n : renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);\n\n const optionsArg = callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters));\n\n return tCallback(argTypes, returnType, optionsArg);\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 tUint64;\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\n if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib: node.namespace.sharedLibrary ?? \"\",\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): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(\"borrowed\") : renderFundamental({ ...ancestor, ownership: \"borrowed\" });\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);\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, 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, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;\n\n return renderFundamental({\n lib: resolved.namespace.sharedLibrary ?? \"\",\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\n if (refFunc !== undefined && unrefFunc !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, record.name)\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\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\n if (getter === undefined || getter === \"\") {\n return rawEnumDescriptor(isSigned);\n }\n\n const lib = resolved.namespace.sharedLibrary ?? \"\";\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 arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string => {\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);\n const size = inlineElementSize(context, ref.element, ref.elementCType);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, size);\n }\n\n return tArray(element, ownership, size);\n};\n\nconst recordInlineSize = (context: ModuleContext, record: ResolvedRecord): number | undefined => {\n if (record.opaque || record.disguised || record.fields.length === 0) {\n return undefined;\n }\n\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return size > 0 ? size : undefined;\n};\n\nconst inlineElementSize = (\n context: ModuleContext,\n element: TypeId | undefined,\n elementCType: string | undefined,\n): number | undefined => {\n if (element === undefined) {\n return undefined;\n }\n\n if (elementCType?.includes(\"*\")) {\n return undefined;\n }\n\n const type = context.library.typeFor(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 shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
|
|
@@ -4,21 +4,21 @@ type BoxedOptions = {
|
|
|
4
4
|
ownership: Ownership;
|
|
5
5
|
sharedLibrary: string | undefined;
|
|
6
6
|
getTypeFnName: string;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
isCallerAllocated: boolean;
|
|
8
|
+
isInline?: boolean;
|
|
9
9
|
size: number | undefined;
|
|
10
10
|
};
|
|
11
11
|
type StructOptions = {
|
|
12
12
|
size: number | string | undefined;
|
|
13
13
|
wrapperClass: string | undefined;
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
isCallerAllocated: boolean;
|
|
15
|
+
isInline?: boolean;
|
|
16
16
|
};
|
|
17
17
|
type FundamentalOptions = {
|
|
18
18
|
ownership: Ownership;
|
|
19
19
|
typeName: string | undefined;
|
|
20
20
|
wrapperClass: string | undefined;
|
|
21
|
-
|
|
21
|
+
isInline?: boolean | undefined;
|
|
22
22
|
};
|
|
23
23
|
type ListDescriptorName = "list" | "slist" | "ptrArray" | "gArray";
|
|
24
24
|
type BindArgs = {
|
|
@@ -56,7 +56,7 @@ declare const tBind: (args: BindArgs) => string;
|
|
|
56
56
|
declare const tFn: (lib: string, cIdentifier: string, spec: {
|
|
57
57
|
args: string;
|
|
58
58
|
returns: string;
|
|
59
|
-
|
|
59
|
+
canThrow: boolean;
|
|
60
60
|
}) => string;
|
|
61
61
|
export { tVoid, tBoolean, tUint8, tUint32, tInt32, tUint64, tGtype, tBuffer, tScalar, tString, tObject, tBoxed, tStruct, tInlineStruct, tFundamental, tRef, tHashTable, tEnum, tFlags, tByteArray, tList, tArray, tSizedArray, tFixedArray, tCallback, tBind, tFn, type Ownership, type ScalarDescriptorName, type BoxedOptions, type StructOptions, type FundamentalOptions, type ListDescriptorName, };
|
|
62
62
|
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AA2CrC,KAAK,oBAAoB,GACnB,SAAS,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,UAAU,GACV,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAEd,KAAK,YAAY,GAAG;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,8 +63,8 @@ const tBoxed = (glibName, options) => call("boxed", [
|
|
|
63
63
|
? undefined
|
|
64
64
|
: `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,
|
|
65
65
|
`getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,
|
|
66
|
-
options.
|
|
67
|
-
options.
|
|
66
|
+
options.isCallerAllocated ? "isCallerAllocated: true" : undefined,
|
|
67
|
+
options.isInline === true ? "isInline: true" : undefined,
|
|
68
68
|
options.size === undefined ? undefined : `size: ${String(options.size)}`,
|
|
69
69
|
]),
|
|
70
70
|
]);
|
|
@@ -73,11 +73,11 @@ const tStruct = (ownership, options) => call("struct", [
|
|
|
73
73
|
optionsObject([
|
|
74
74
|
options.size === undefined ? undefined : `size: ${String(options.size)}`,
|
|
75
75
|
options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
|
|
76
|
-
options.
|
|
77
|
-
options.
|
|
76
|
+
options.isCallerAllocated ? "isCallerAllocated: true" : undefined,
|
|
77
|
+
options.isInline === true ? "isInline: true" : undefined,
|
|
78
78
|
]),
|
|
79
79
|
]);
|
|
80
|
-
const tInlineStruct = () => tStruct("borrowed", { size: undefined, wrapperClass: undefined,
|
|
80
|
+
const tInlineStruct = () => tStruct("borrowed", { size: undefined, wrapperClass: undefined, isCallerAllocated: false });
|
|
81
81
|
const tFundamental = (lib, refFunc, unrefFunc, options) => call("fundamental", [
|
|
82
82
|
sourceStringLiteral(lib),
|
|
83
83
|
sourceStringLiteral(refFunc),
|
|
@@ -86,7 +86,7 @@ const tFundamental = (lib, refFunc, unrefFunc, options) => call("fundamental", [
|
|
|
86
86
|
`ownership: ${sourceStringLiteral(options.ownership)}`,
|
|
87
87
|
options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,
|
|
88
88
|
options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
|
|
89
|
-
options.
|
|
89
|
+
options.isInline === true ? "isInline: true" : undefined,
|
|
90
90
|
]),
|
|
91
91
|
]);
|
|
92
92
|
const tRef = (inner, isInout = false) => call("ref", [inner, isInout ? "true" : undefined]);
|
|
@@ -116,7 +116,7 @@ const tFixedArray = (element, length, ownership, elementSize) => call("fixedArra
|
|
|
116
116
|
const tCallback = (argTypes, returnType, options) => call("callback", [`[${argTypes.join(", ")}]`, returnType, options]);
|
|
117
117
|
const tBind = (args) => call("bind", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);
|
|
118
118
|
const tFn = (lib, cIdentifier, spec) => {
|
|
119
|
-
const throwsEntry = spec.
|
|
119
|
+
const throwsEntry = spec.canThrow ? ", canThrow: true" : "";
|
|
120
120
|
return call("fn", [
|
|
121
121
|
sourceStringLiteral(lib),
|
|
122
122
|
sourceStringLiteral(cIdentifier),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport { joinArgs } from \"../writer/emit.js\";\n\ntype Ownership = \"borrowed\" | \"full\";\n\ntype DescriptorName =\n | \"bind\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"gtype\" |\n \"float32\" |\n \"float64\" |\n \"boolean\" |\n \"void\" |\n \"unichar\" |\n \"buffer\" |\n \"string\" |\n \"object\" |\n \"boxed\" |\n \"struct\" |\n \"fundamental\" |\n \"ref\" |\n \"hashTable\" |\n \"enum\" |\n \"flags\" |\n \"array\" |\n \"list\" |\n \"slist\" |\n \"ptrArray\" |\n \"gArray\" |\n \"byteArray\" |\n \"sizedArray\" |\n \"fixedArray\" |\n \"callback\" |\n \"fn\";\n\ntype DescriptorNames = { [K in DescriptorName]: `t.${K}` };\n\ntype ScalarDescriptorName =\n | \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"float32\" |\n \"float64\" |\n \"unichar\";\n\ntype BoxedOptions = {\n ownership: Ownership;\n sharedLibrary: string | undefined;\n getTypeFnName: string;\n callerAllocated: boolean;\n inline?: boolean;\n size: number | undefined;\n};\n\ntype StructOptions = {\n size: number | string | undefined;\n wrapperClass: string | undefined;\n callerAllocated: boolean;\n inline?: boolean;\n};\n\ntype FundamentalOptions = {\n ownership: Ownership;\n typeName: string | undefined;\n wrapperClass: string | undefined;\n inline?: boolean | undefined;\n};\n\ntype ListDescriptorName = \"list\" | \"slist\" | \"ptrArray\" | \"gArray\";\n\ntype BindArgs = {\n libExpr: string;\n symbolExpr: string;\n argList: string;\n returnType: string;\n};\n\nconst T: DescriptorNames = {\n bind: \"t.bind\",\n int8: \"t.int8\",\n uint8: \"t.uint8\",\n int16: \"t.int16\",\n uint16: \"t.uint16\",\n int32: \"t.int32\",\n uint32: \"t.uint32\",\n int64: \"t.int64\",\n uint64: \"t.uint64\",\n bigint64: \"t.bigint64\",\n biguint64: \"t.biguint64\",\n gtype: \"t.gtype\",\n float32: \"t.float32\",\n float64: \"t.float64\",\n boolean: \"t.boolean\",\n void: \"t.void\",\n unichar: \"t.unichar\",\n buffer: \"t.buffer\",\n string: \"t.string\",\n object: \"t.object\",\n boxed: \"t.boxed\",\n struct: \"t.struct\",\n fundamental: \"t.fundamental\",\n ref: \"t.ref\",\n hashTable: \"t.hashTable\",\n enum: \"t.enum\",\n flags: \"t.flags\",\n array: \"t.array\",\n list: \"t.list\",\n slist: \"t.slist\",\n ptrArray: \"t.ptrArray\",\n gArray: \"t.gArray\",\n byteArray: \"t.byteArray\",\n sizedArray: \"t.sizedArray\",\n fixedArray: \"t.fixedArray\",\n callback: \"t.callback\",\n fn: \"t.fn\",\n};\n\nconst tVoid: string = T.void;\nconst tBoolean: string = T.boolean;\nconst tUint8: string = T.uint8;\nconst tUint32: string = T.uint32;\nconst tInt32: string = T.int32;\nconst tUint64: string = T.uint64;\nconst tGtype: string = T.gtype;\nconst tBuffer: string = T.buffer;\n\nconst call = (name: DescriptorName, args: (string | undefined)[]): string => `${T[name]}(${joinArgs(args)})`;\n\nconst optionsObject = (parts: (string | undefined)[]): string | undefined => {\n const present = parts.filter((part): part is string => part !== undefined);\n\n return present.length === 0 ? undefined : `{ ${present.join(\", \")} }`;\n};\n\nconst tScalar = (name: ScalarDescriptorName): string => T[name];\n\nconst tString = (ownership: Ownership, length?: string): string =>\n call(\"string\", [sourceStringLiteral(ownership), length]);\n\nconst tObject = (ownership: Ownership): string => call(\"object\", [sourceStringLiteral(ownership)]);\n\nconst tBoxed = (glibName: string, options: BoxedOptions): string =>\n call(\"boxed\", [\n sourceStringLiteral(glibName),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.sharedLibrary === undefined\n ? undefined\n : `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,\n `getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,\n options.callerAllocated ? \"callerAllocated: true\" : undefined,\n options.inline === true ? \"inline: true\" : undefined,\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n ]),\n ]);\n\nconst tStruct = (ownership: Ownership, options: StructOptions): string =>\n call(\"struct\", [\n sourceStringLiteral(ownership),\n optionsObject([\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.callerAllocated ? \"callerAllocated: true\" : undefined,\n options.inline === true ? \"inline: true\" : undefined,\n ]),\n ]);\n\nconst tInlineStruct = (): string =>\n tStruct(\"borrowed\", { size: undefined, wrapperClass: undefined, callerAllocated: false });\n\nconst tFundamental = (lib: string, refFunc: string, unrefFunc: string, options: FundamentalOptions): string =>\n call(\"fundamental\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(refFunc),\n sourceStringLiteral(unrefFunc),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.inline === true ? \"inline: true\" : undefined,\n ]),\n ]);\n\nconst tRef = (inner: string, isInout = false): string => call(\"ref\", [inner, isInout ? \"true\" : undefined]);\n\nconst tHashTable = (key: string, value: string, ownership: Ownership): string =>\n call(\"hashTable\", [key, value, sourceStringLiteral(ownership)]);\n\nconst tEnum = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"enum\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tFlags = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"flags\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tByteArray = (ownership: Ownership): string => call(\"byteArray\", [sourceStringLiteral(ownership)]);\n\nconst tList = (name: ListDescriptorName, element: string, ownership: Ownership): string =>\n call(name, [element, sourceStringLiteral(ownership)]);\n\nconst tArray = (element: string, ownership?: Ownership, elementSize?: number): string =>\n call(\"array\", [\n element,\n ownership === undefined ? undefined : sourceStringLiteral(\"array\"),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : `{ elementSize: ${String(elementSize)} }`,\n ]);\n\nconst tSizedArray = (\n element: string,\n lengthIndex: number,\n ownership?: Ownership,\n elementSize?: number,\n): string =>\n call(\"sizedArray\", [\n element,\n String(lengthIndex),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : String(elementSize),\n ]);\n\nconst tFixedArray = (element: string, length: number, ownership?: Ownership, elementSize?: number): string =>\n call(\"fixedArray\", [\n element,\n String(length),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : String(elementSize),\n ]);\n\nconst tCallback = (argTypes: string[], returnType: string, options?: string): string =>\n call(\"callback\", [`[${argTypes.join(\", \")}]`, returnType, options]);\n\nconst tBind = (args: BindArgs): string =>\n call(\"bind\", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);\n\nconst tFn = (\n lib: string,\n cIdentifier: string,\n spec: { args: string; returns: string; throws: boolean },\n): string => {\n const throwsEntry = spec.throws ? \", throws: true\" : \"\";\n\n return call(\"fn\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(cIdentifier),\n `{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,\n ]);\n};\n\nexport {\n tVoid,\n tBoolean,\n tUint8,\n tUint32,\n tInt32,\n tUint64,\n tGtype,\n tBuffer,\n tScalar,\n tString,\n tObject,\n tBoxed,\n tStruct,\n tInlineStruct,\n tFundamental,\n tRef,\n tHashTable,\n tEnum,\n tFlags,\n tByteArray,\n tList,\n tArray,\n tSizedArray,\n tFixedArray,\n tCallback,\n tBind,\n tFn,\n type Ownership,\n type ScalarDescriptorName,\n type BoxedOptions,\n type StructOptions,\n type FundamentalOptions,\n type ListDescriptorName,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport { joinArgs } from \"../writer/emit.js\";\n\ntype Ownership = \"borrowed\" | \"full\";\n\ntype DescriptorName =\n | \"bind\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"gtype\" |\n \"float32\" |\n \"float64\" |\n \"boolean\" |\n \"void\" |\n \"unichar\" |\n \"buffer\" |\n \"string\" |\n \"object\" |\n \"boxed\" |\n \"struct\" |\n \"fundamental\" |\n \"ref\" |\n \"hashTable\" |\n \"enum\" |\n \"flags\" |\n \"array\" |\n \"list\" |\n \"slist\" |\n \"ptrArray\" |\n \"gArray\" |\n \"byteArray\" |\n \"sizedArray\" |\n \"fixedArray\" |\n \"callback\" |\n \"fn\";\n\ntype DescriptorNames = { [K in DescriptorName]: `t.${K}` };\n\ntype ScalarDescriptorName =\n | \"boolean\" |\n \"int8\" |\n \"uint8\" |\n \"int16\" |\n \"uint16\" |\n \"int32\" |\n \"uint32\" |\n \"int64\" |\n \"uint64\" |\n \"bigint64\" |\n \"biguint64\" |\n \"float32\" |\n \"float64\" |\n \"unichar\";\n\ntype BoxedOptions = {\n ownership: Ownership;\n sharedLibrary: string | undefined;\n getTypeFnName: string;\n isCallerAllocated: boolean;\n isInline?: boolean;\n size: number | undefined;\n};\n\ntype StructOptions = {\n size: number | string | undefined;\n wrapperClass: string | undefined;\n isCallerAllocated: boolean;\n isInline?: boolean;\n};\n\ntype FundamentalOptions = {\n ownership: Ownership;\n typeName: string | undefined;\n wrapperClass: string | undefined;\n isInline?: boolean | undefined;\n};\n\ntype ListDescriptorName = \"list\" | \"slist\" | \"ptrArray\" | \"gArray\";\n\ntype BindArgs = {\n libExpr: string;\n symbolExpr: string;\n argList: string;\n returnType: string;\n};\n\nconst T: DescriptorNames = {\n bind: \"t.bind\",\n int8: \"t.int8\",\n uint8: \"t.uint8\",\n int16: \"t.int16\",\n uint16: \"t.uint16\",\n int32: \"t.int32\",\n uint32: \"t.uint32\",\n int64: \"t.int64\",\n uint64: \"t.uint64\",\n bigint64: \"t.bigint64\",\n biguint64: \"t.biguint64\",\n gtype: \"t.gtype\",\n float32: \"t.float32\",\n float64: \"t.float64\",\n boolean: \"t.boolean\",\n void: \"t.void\",\n unichar: \"t.unichar\",\n buffer: \"t.buffer\",\n string: \"t.string\",\n object: \"t.object\",\n boxed: \"t.boxed\",\n struct: \"t.struct\",\n fundamental: \"t.fundamental\",\n ref: \"t.ref\",\n hashTable: \"t.hashTable\",\n enum: \"t.enum\",\n flags: \"t.flags\",\n array: \"t.array\",\n list: \"t.list\",\n slist: \"t.slist\",\n ptrArray: \"t.ptrArray\",\n gArray: \"t.gArray\",\n byteArray: \"t.byteArray\",\n sizedArray: \"t.sizedArray\",\n fixedArray: \"t.fixedArray\",\n callback: \"t.callback\",\n fn: \"t.fn\",\n};\n\nconst tVoid: string = T.void;\nconst tBoolean: string = T.boolean;\nconst tUint8: string = T.uint8;\nconst tUint32: string = T.uint32;\nconst tInt32: string = T.int32;\nconst tUint64: string = T.uint64;\nconst tGtype: string = T.gtype;\nconst tBuffer: string = T.buffer;\n\nconst call = (name: DescriptorName, args: (string | undefined)[]): string => `${T[name]}(${joinArgs(args)})`;\n\nconst optionsObject = (parts: (string | undefined)[]): string | undefined => {\n const present = parts.filter((part): part is string => part !== undefined);\n\n return present.length === 0 ? undefined : `{ ${present.join(\", \")} }`;\n};\n\nconst tScalar = (name: ScalarDescriptorName): string => T[name];\n\nconst tString = (ownership: Ownership, length?: string): string =>\n call(\"string\", [sourceStringLiteral(ownership), length]);\n\nconst tObject = (ownership: Ownership): string => call(\"object\", [sourceStringLiteral(ownership)]);\n\nconst tBoxed = (glibName: string, options: BoxedOptions): string =>\n call(\"boxed\", [\n sourceStringLiteral(glibName),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.sharedLibrary === undefined\n ? undefined\n : `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,\n `getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,\n options.isCallerAllocated ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n ]),\n ]);\n\nconst tStruct = (ownership: Ownership, options: StructOptions): string =>\n call(\"struct\", [\n sourceStringLiteral(ownership),\n optionsObject([\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.isCallerAllocated ? \"isCallerAllocated: true\" : undefined,\n options.isInline === true ? \"isInline: true\" : undefined,\n ]),\n ]);\n\nconst tInlineStruct = (): string =>\n tStruct(\"borrowed\", { size: undefined, wrapperClass: undefined, isCallerAllocated: false });\n\nconst tFundamental = (lib: string, refFunc: string, unrefFunc: string, options: FundamentalOptions): string =>\n call(\"fundamental\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(refFunc),\n sourceStringLiteral(unrefFunc),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.isInline === true ? \"isInline: true\" : undefined,\n ]),\n ]);\n\nconst tRef = (inner: string, isInout = false): string => call(\"ref\", [inner, isInout ? \"true\" : undefined]);\n\nconst tHashTable = (key: string, value: string, ownership: Ownership): string =>\n call(\"hashTable\", [key, value, sourceStringLiteral(ownership)]);\n\nconst tEnum = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"enum\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tFlags = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"flags\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tByteArray = (ownership: Ownership): string => call(\"byteArray\", [sourceStringLiteral(ownership)]);\n\nconst tList = (name: ListDescriptorName, element: string, ownership: Ownership): string =>\n call(name, [element, sourceStringLiteral(ownership)]);\n\nconst tArray = (element: string, ownership?: Ownership, elementSize?: number): string =>\n call(\"array\", [\n element,\n ownership === undefined ? undefined : sourceStringLiteral(\"array\"),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : `{ elementSize: ${String(elementSize)} }`,\n ]);\n\nconst tSizedArray = (\n element: string,\n lengthIndex: number,\n ownership?: Ownership,\n elementSize?: number,\n): string =>\n call(\"sizedArray\", [\n element,\n String(lengthIndex),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : String(elementSize),\n ]);\n\nconst tFixedArray = (element: string, length: number, ownership?: Ownership, elementSize?: number): string =>\n call(\"fixedArray\", [\n element,\n String(length),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : String(elementSize),\n ]);\n\nconst tCallback = (argTypes: string[], returnType: string, options?: string): string =>\n call(\"callback\", [`[${argTypes.join(\", \")}]`, returnType, options]);\n\nconst tBind = (args: BindArgs): string =>\n call(\"bind\", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);\n\nconst tFn = (\n lib: string,\n cIdentifier: string,\n spec: { args: string; returns: string; canThrow: boolean },\n): string => {\n const throwsEntry = spec.canThrow ? \", canThrow: true\" : \"\";\n\n return call(\"fn\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(cIdentifier),\n `{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,\n ]);\n};\n\nexport {\n tVoid,\n tBoolean,\n tUint8,\n tUint32,\n tInt32,\n tUint64,\n tGtype,\n tBuffer,\n tScalar,\n tString,\n tObject,\n tBoxed,\n tStruct,\n tInlineStruct,\n tFundamental,\n tRef,\n tHashTable,\n tEnum,\n tFlags,\n tByteArray,\n tList,\n tArray,\n tSizedArray,\n tFixedArray,\n tCallback,\n tBind,\n tFn,\n type Ownership,\n type ScalarDescriptorName,\n type BoxedOptions,\n type StructOptions,\n type FundamentalOptions,\n type ListDescriptorName,\n};\n"]}
|
|
@@ -10,8 +10,8 @@ type HandlerResultOptions = {
|
|
|
10
10
|
library: Library;
|
|
11
11
|
signal: GirCallable;
|
|
12
12
|
renderType: (ref: TypeId | undefined, isNullable: boolean) => string;
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
shouldIncludeCallerAllocated: boolean;
|
|
14
|
+
isOptOut: boolean;
|
|
15
15
|
};
|
|
16
16
|
declare const inputParameters: (library: Library, fn: GirFunction) => InputParameter[];
|
|
17
17
|
declare const closureAndDestroyIndices: (fn: GirFunction) => Set<number>;
|