@gtkx/codegen 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/analysis/descriptor-render.d.ts +12 -15
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +59 -38
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +25 -10
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +37 -9
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +4 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +80 -38
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/interface-conflicts.d.ts +25 -0
- package/dist/analysis/interface-conflicts.d.ts.map +1 -0
- package/dist/analysis/interface-conflicts.js +139 -0
- package/dist/analysis/interface-conflicts.js.map +1 -0
- package/dist/analysis/param-capability.d.ts.map +1 -1
- package/dist/analysis/param-capability.js +3 -4
- package/dist/analysis/param-capability.js.map +1 -1
- package/dist/analysis/param-structure.js +2 -2
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +3 -2
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +26 -26
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-key.d.ts +5 -0
- package/dist/analysis/type-key.d.ts.map +1 -0
- package/dist/analysis/type-key.js +9 -0
- package/dist/analysis/type-key.js.map +1 -0
- package/dist/analysis/type-shape.d.ts +3 -2
- package/dist/analysis/type-shape.d.ts.map +1 -1
- package/dist/analysis/type-shape.js +2 -1
- package/dist/analysis/type-shape.js.map +1 -1
- package/dist/compile.d.ts +14 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +125 -24
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +11 -10
- 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 -3
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/pipeline.d.ts +1 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +93 -19
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +2 -1
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +5 -4
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +10 -9
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +20 -3
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +56 -37
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +1 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +8 -2
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +7 -1
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +9 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +1 -2
- package/dist/gir/annotations.d.ts.map +1 -1
- package/dist/gir/annotations.js +1 -1
- package/dist/gir/annotations.js.map +1 -1
- package/dist/gir/cursor-overrides.d.ts +8 -0
- package/dist/gir/cursor-overrides.d.ts.map +1 -0
- package/dist/gir/cursor-overrides.js +6 -0
- package/dist/gir/cursor-overrides.js.map +1 -0
- package/dist/gir/emittable.d.ts +7 -0
- package/dist/gir/emittable.d.ts.map +1 -0
- package/dist/gir/emittable.js +3 -0
- package/dist/gir/emittable.js.map +1 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +28 -2
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +1 -1
- package/dist/gir/gir-path.js +1 -1
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/library.d.ts +5 -1
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +9 -2
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +5 -1
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -2
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +13 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +1 -0
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -6
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.js +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/guards.d.ts +16 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +11 -0
- package/dist/guards.js.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +11 -0
- package/dist/json.js.map +1 -0
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +8 -6
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +22 -7
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/parse.d.ts.map +1 -1
- package/dist/khronos/parse.js +3 -4
- package/dist/khronos/parse.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +1 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +1 -7
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +1 -1
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +8 -4
- package/dist/khronos/render.js.map +1 -1
- package/dist/runner.d.ts +7 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +21 -3
- package/dist/runner.js.map +1 -1
- package/dist/staging.d.ts +5 -0
- package/dist/staging.d.ts.map +1 -0
- package/dist/staging.js +57 -0
- package/dist/staging.js.map +1 -0
- package/dist/store/compile-store.d.ts +0 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +7 -32
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.d.ts +6 -3
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +40 -30
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +9 -5
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +104 -44
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/companion.d.ts.map +1 -1
- package/dist/store/gi/companion.js +6 -6
- package/dist/store/gi/companion.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +11 -3
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.js +1 -1
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -12
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts +1 -3
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +24 -18
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +4 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +34 -19
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/method.d.ts +7 -6
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +13 -24
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +3 -2
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +50 -5
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +21 -10
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts +2 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +6 -3
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +10 -8
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +49 -91
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts +8 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +34 -13
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +20 -4
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts +6 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +8 -1
- 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 +19 -8
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.js +1 -1
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts +2 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +55 -28
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +2 -1
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +4 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +60 -17
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +1 -0
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +15 -20
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +2 -1
- package/dist/store/jsx/generated-elements.d.ts.map +1 -1
- package/dist/store/jsx/generated-elements.js +13 -7
- package/dist/store/jsx/generated-elements.js.map +1 -1
- package/dist/store/jsx/jsx.js +3 -3
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +3 -1
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -4
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +14 -3
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +98 -15
- package/dist/store/resolve-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +9 -7
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +54 -25
- package/dist/store/store-fs.js.map +1 -1
- package/dist/store/store-links.d.ts +3 -0
- package/dist/store/store-links.d.ts.map +1 -0
- package/dist/store/store-links.js +39 -0
- package/dist/store/store-links.js.map +1 -0
- package/dist/writer/comparison-context.d.ts +4 -0
- package/dist/writer/comparison-context.d.ts.map +1 -0
- package/dist/writer/comparison-context.js +13 -0
- package/dist/writer/comparison-context.js.map +1 -0
- package/dist/writer/context.d.ts +3 -3
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +11 -6
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/module.d.ts +13 -5
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +68 -11
- package/dist/writer/module.js.map +1 -1
- package/dist/xml.d.ts +8 -1
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +70 -1
- package/dist/xml.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +2 -0
- package/package.json +14 -3
- package/src/analysis/descriptor-render.ts +106 -52
- package/src/analysis/descriptor.ts +76 -15
- package/src/analysis/inheritance.ts +134 -44
- package/src/analysis/interface-conflicts.ts +235 -0
- package/src/analysis/param-capability.ts +3 -6
- package/src/analysis/param-structure.ts +2 -2
- package/src/analysis/ts-type.ts +43 -28
- package/src/analysis/type-key.ts +14 -0
- package/src/analysis/type-shape.ts +5 -2
- package/src/compile.ts +192 -27
- package/src/docs/api-reference.ts +13 -10
- package/src/docs/element-page.ts +5 -2
- package/src/docs/pipeline.ts +140 -24
- package/src/docs/render.ts +7 -3
- package/src/docs/symbol-page.ts +12 -11
- package/src/fingerprint.ts +95 -47
- package/src/gi.ts +10 -2
- package/src/gir/ancestry.ts +17 -1
- package/src/gir/annotations.ts +1 -1
- package/src/gir/cursor-overrides.ts +12 -0
- package/src/gir/emittable.ts +8 -0
- package/src/gir/function.ts +45 -9
- package/src/gir/gir-path.ts +1 -1
- package/src/gir/library.ts +10 -2
- package/src/gir/namespace.ts +8 -2
- package/src/gir/parameter.ts +15 -0
- package/src/gir/parse.ts +10 -7
- package/src/gir/primitives.ts +1 -1
- package/src/guards.ts +23 -0
- package/src/internal.ts +2 -0
- package/src/json.ts +11 -0
- package/src/khronos/args.ts +9 -6
- package/src/khronos/modules.ts +25 -9
- package/src/khronos/parse.ts +3 -4
- package/src/khronos/pipeline.ts +1 -1
- package/src/khronos/plan.ts +0 -1
- package/src/khronos/render.ts +8 -6
- package/src/runner.ts +26 -4
- package/src/staging.ts +67 -0
- package/src/store/compile-store.ts +7 -38
- package/src/store/gi/callables.ts +60 -33
- package/src/store/gi/callback.ts +9 -9
- package/src/store/gi/class.ts +140 -53
- package/src/store/gi/companion.ts +7 -6
- package/src/store/gi/constant.ts +13 -3
- package/src/store/gi/constructor-props.ts +1 -1
- package/src/store/gi/enum.ts +36 -26
- package/src/store/gi/function.ts +30 -24
- package/src/store/gi/gtype-binding.ts +7 -2
- package/src/store/gi/interface.ts +39 -20
- package/src/store/gi/method.ts +26 -32
- package/src/store/gi/param-marshal.ts +77 -6
- package/src/store/gi/pipeline.ts +25 -15
- package/src/store/gi/properties.ts +8 -4
- package/src/store/gi/property-accessor.ts +73 -161
- package/src/store/gi/record-constructor.ts +53 -21
- package/src/store/gi/record-field-accessor.ts +26 -4
- package/src/store/gi/record-layout.ts +11 -1
- package/src/store/gi/record.ts +20 -12
- package/src/store/gi/registration.ts +2 -2
- package/src/store/gi/return-wrap.ts +1 -1
- package/src/store/gi/signal.ts +66 -42
- package/src/store/gi/value-marshalable.ts +3 -1
- package/src/store/gi/vtable.ts +97 -20
- package/src/store/gi-store.ts +26 -31
- package/src/store/jsx/generated-elements.ts +17 -8
- package/src/store/jsx/jsx.ts +3 -3
- package/src/store/jsx/metadata.ts +4 -1
- package/src/store/jsx-store.ts +3 -4
- package/src/store/resolve-store.ts +133 -18
- package/src/store/store-fs.ts +82 -35
- package/src/store/store-links.ts +49 -0
- package/src/writer/comparison-context.ts +18 -0
- package/src/writer/context.ts +12 -6
- package/src/writer/module.ts +101 -14
- package/src/xml.ts +103 -1
package/README.md
CHANGED
|
@@ -1,32 +1,29 @@
|
|
|
1
1
|
import type { Library } from "../gir/library.js";
|
|
2
|
-
import type { EntityType } from "../gir/type.js";
|
|
3
2
|
import type { ModuleContext } from "../writer/context.js";
|
|
4
|
-
import { type GirParameter, type GirReturnValue, type ParameterTransfer } from "../gir/parameter.js";
|
|
3
|
+
import { type GirCursorBounds, type GirParameter, type GirReturnValue, type ParameterTransfer } from "../gir/parameter.js";
|
|
5
4
|
import { type TypeId } from "../gir/type-id.js";
|
|
6
|
-
type
|
|
7
|
-
argIndexOffset?: number;
|
|
8
|
-
argIndexMap?: Map<number, number> | undefined;
|
|
9
|
-
hasOutIndirection?: boolean;
|
|
10
|
-
isCallerAllocated?: boolean;
|
|
11
|
-
isInline?: boolean;
|
|
12
|
-
isNewlyCreated?: boolean;
|
|
13
|
-
};
|
|
5
|
+
type PrimaryReturnKind = "surfaced" | "void" | "skipped";
|
|
14
6
|
type ArgIndexOptions = {
|
|
15
7
|
argIndexOffset: number;
|
|
16
8
|
argIndexMap: Map<number, number> | undefined;
|
|
9
|
+
cursor: GirCursorBounds | undefined;
|
|
17
10
|
hasOutIndirection: boolean;
|
|
18
11
|
};
|
|
19
|
-
type
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
type RenderDescriptorOptions = Partial<ArgIndexOptions> & {
|
|
13
|
+
isCallerAllocated?: boolean;
|
|
14
|
+
isInline?: boolean;
|
|
15
|
+
isNewlyCreated?: boolean;
|
|
16
|
+
};
|
|
22
17
|
declare const isInlineCallbackRef: (library: Library, ref: TypeId | undefined) => boolean;
|
|
18
|
+
declare const primaryReturnKind: (library: Library, returnValue: GirReturnValue) => PrimaryReturnKind;
|
|
23
19
|
declare const shouldOmitPrimaryReturn: (library: Library, returnValue: GirReturnValue) => boolean;
|
|
20
|
+
declare const isSkippedPrimaryReturn: (library: Library, returnValue: GirReturnValue) => boolean;
|
|
21
|
+
declare const isVoidPrimaryReturn: (library: Library, returnValue: GirReturnValue) => boolean;
|
|
24
22
|
declare const renderDescriptor: (context: ModuleContext, ref: TypeId | undefined, transfer?: ParameterTransfer, options?: RenderDescriptorOptions) => string;
|
|
25
23
|
declare const isScalarRef: (library: Library, ref: TypeId | undefined) => boolean;
|
|
26
24
|
declare const isCellInout: (library: Library, parameter: GirParameter) => boolean;
|
|
27
25
|
declare const renderParamDescriptor: (context: ModuleContext, parameter: GirParameter, ref: TypeId | undefined, argIndex?: Partial<ArgIndexOptions>) => string;
|
|
28
26
|
declare const renderCallbackType: (context: ModuleContext, ref: TypeId | undefined, owningParameter: GirParameter, argOverrides?: Map<number, string>) => string | undefined;
|
|
29
27
|
declare const renderSelfDescriptor: (context: ModuleContext, instance: GirParameter) => string;
|
|
30
|
-
|
|
31
|
-
export { isInlineCallbackRef, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, recordInlineSize, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
|
|
28
|
+
export { isInlineCallbackRef, isSkippedPrimaryReturn, isVoidPrimaryReturn, primaryReturnKind, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
|
|
32
29
|
//# 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;
|
|
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,11 +1,11 @@
|
|
|
1
|
-
import { sourceStringLiteral } from "@gtkx/utils";
|
|
1
|
+
import { sanitizeTypeIdentifier, sourceStringLiteral } from "@gtkx/utils";
|
|
2
2
|
import { isCallerAllocatedOut, isInoutParameter, isOutParameter, } from "../gir/parameter.js";
|
|
3
3
|
import { hasUnknownArrayLength, } from "../gir/type-id.js";
|
|
4
4
|
import { isRecordInout } from "../store/gi/param-marshal.js";
|
|
5
|
-
import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
|
|
5
|
+
import { computeRecordFieldSlots, recordInlineSize } from "../store/gi/record-layout.js";
|
|
6
6
|
import { isValueMarshalable } from "../store/gi/value-marshalable.js";
|
|
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";
|
|
8
|
-
import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
|
|
7
|
+
import { tArray, tBiguint64, tBoxed, tByteArray, tCallback, tCursorArray, tEnum, tFixedArray, tFlags, tFundamental, tGtype, tHashTable, tInt32, tList, tNumericByteArray, tObject, tRef, tScalar, tSizedArray, tString, tStruct, tUint32, tUint64, tVoid, } from "./descriptor.js";
|
|
8
|
+
import { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
|
|
9
9
|
const LIST_HELPERS = {
|
|
10
10
|
glist: "list",
|
|
11
11
|
gslist: "slist",
|
|
@@ -26,10 +26,19 @@ const transferOwnership = (transfer) => {
|
|
|
26
26
|
const deriveElementTransfer = (transfer) => transfer === "container" ? "none" : transfer;
|
|
27
27
|
const isVoidRef = (library, ref) => ref === undefined || primitiveCategoryFor(library, ref) === "void";
|
|
28
28
|
const isInlineCallbackRef = (library, ref) => ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
|
|
29
|
-
const
|
|
29
|
+
const primaryReturnKind = (library, returnValue) => {
|
|
30
|
+
if (isVoidRef(library, returnValue.type)) {
|
|
31
|
+
return "void";
|
|
32
|
+
}
|
|
33
|
+
return returnValue.skip ? "skipped" : "surfaced";
|
|
34
|
+
};
|
|
35
|
+
const shouldOmitPrimaryReturn = (library, returnValue) => primaryReturnKind(library, returnValue) !== "surfaced";
|
|
36
|
+
const isSkippedPrimaryReturn = (library, returnValue) => primaryReturnKind(library, returnValue) === "skipped";
|
|
37
|
+
const isVoidPrimaryReturn = (library, returnValue) => primaryReturnKind(library, returnValue) === "void";
|
|
30
38
|
const argIndexOptions = (options) => ({
|
|
31
39
|
argIndexOffset: options.argIndexOffset ?? 0,
|
|
32
40
|
argIndexMap: options.argIndexMap,
|
|
41
|
+
cursor: options.cursor,
|
|
33
42
|
hasOutIndirection: options.hasOutIndirection === true,
|
|
34
43
|
});
|
|
35
44
|
const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
|
|
@@ -76,7 +85,7 @@ const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
|
|
|
76
85
|
const listExpression = (context, type, transfer, indexOptions) => {
|
|
77
86
|
const ownership = transferOwnership(transfer);
|
|
78
87
|
if (type.flavor === "gbytearray") {
|
|
79
|
-
return tByteArray(ownership);
|
|
88
|
+
return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);
|
|
80
89
|
}
|
|
81
90
|
const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);
|
|
82
91
|
return tList(LIST_HELPERS[type.flavor], element, ownership);
|
|
@@ -131,7 +140,7 @@ const isStrvRef = (library, ref) => {
|
|
|
131
140
|
const isCellInout = (library, parameter) => isInoutParameter(parameter) &&
|
|
132
141
|
(isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));
|
|
133
142
|
const renderParamDescriptor = (context, parameter, ref, argIndex = {}) => {
|
|
134
|
-
const behindRef = { ...argIndex, hasOutIndirection: true };
|
|
143
|
+
const behindRef = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };
|
|
135
144
|
if (isCellInout(context.library, parameter)) {
|
|
136
145
|
return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);
|
|
137
146
|
}
|
|
@@ -170,7 +179,7 @@ const callbackOptionsArg = (owningParameter, userDataIndex) => {
|
|
|
170
179
|
if (owningParameter.scope !== undefined) {
|
|
171
180
|
options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
|
|
172
181
|
}
|
|
173
|
-
return options
|
|
182
|
+
return options;
|
|
174
183
|
};
|
|
175
184
|
const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
|
|
176
185
|
const callback = resolveCallbackType(context, ref);
|
|
@@ -178,12 +187,12 @@ const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
|
|
|
178
187
|
return undefined;
|
|
179
188
|
}
|
|
180
189
|
const argTypes = callback.parameters.map((parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type));
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
: renderDescriptor(context,
|
|
185
|
-
|
|
186
|
-
|
|
190
|
+
const { returnValue } = callback;
|
|
191
|
+
return tCallback({
|
|
192
|
+
argTypes,
|
|
193
|
+
returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),
|
|
194
|
+
options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters)),
|
|
195
|
+
});
|
|
187
196
|
};
|
|
188
197
|
const primitiveExpression = (category, ownership) => {
|
|
189
198
|
if (category === "void") {
|
|
@@ -193,7 +202,7 @@ const primitiveExpression = (category, ownership) => {
|
|
|
193
202
|
return tString(ownership);
|
|
194
203
|
}
|
|
195
204
|
if (category === "pointer") {
|
|
196
|
-
return
|
|
205
|
+
return tBiguint64;
|
|
197
206
|
}
|
|
198
207
|
if (category === "gtype") {
|
|
199
208
|
return tGtype;
|
|
@@ -225,11 +234,12 @@ const classOrInterfaceExpression = (context, resolved, ownership, isNewlyCreated
|
|
|
225
234
|
const isClassOrInterface = (type) => type !== undefined && (type.kind === "class" || type.kind === "interface");
|
|
226
235
|
const getFundamental = (node) => {
|
|
227
236
|
const cls = node.value;
|
|
228
|
-
|
|
237
|
+
const lib = node.namespace.sharedLibrary;
|
|
238
|
+
if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
|
|
229
239
|
return undefined;
|
|
230
240
|
}
|
|
231
241
|
return {
|
|
232
|
-
lib
|
|
242
|
+
lib,
|
|
233
243
|
refFunc: cls.glibRefFunc,
|
|
234
244
|
unrefFunc: cls.glibUnrefFunc,
|
|
235
245
|
typeName: cls.glibTypeName,
|
|
@@ -289,7 +299,7 @@ const requiresFallbackClass = (record) => {
|
|
|
289
299
|
};
|
|
290
300
|
const structExpression = (context, resolved, ownership, options) => {
|
|
291
301
|
const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
|
|
292
|
-
const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
|
|
302
|
+
const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));
|
|
293
303
|
const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);
|
|
294
304
|
return tStruct(ownership, {
|
|
295
305
|
size: isCopyable && size > 0 ? size : undefined,
|
|
@@ -299,9 +309,9 @@ const structExpression = (context, resolved, ownership, options) => {
|
|
|
299
309
|
});
|
|
300
310
|
};
|
|
301
311
|
const fundamentalRecordExpression = (options) => {
|
|
302
|
-
const { resolved, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
|
|
312
|
+
const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
|
|
303
313
|
return renderFundamental({
|
|
304
|
-
lib
|
|
314
|
+
lib,
|
|
305
315
|
refFunc,
|
|
306
316
|
unrefFunc,
|
|
307
317
|
typeName: resolved.value.glibTypeName,
|
|
@@ -338,12 +348,14 @@ const plainRecordExpression = (context, resolved, ownership, placement) => {
|
|
|
338
348
|
const recordExpression = (context, resolved, ownership, placement = {}) => {
|
|
339
349
|
const record = resolved.value;
|
|
340
350
|
const { refFunc, unrefFunc } = recordRefPair(record);
|
|
341
|
-
|
|
351
|
+
const lib = resolved.namespace.sharedLibrary;
|
|
352
|
+
if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {
|
|
342
353
|
const wrapperClass = requiresFallbackClass(record)
|
|
343
|
-
? context.qualify(resolved.namespace.name, record.name)
|
|
354
|
+
? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))
|
|
344
355
|
: undefined;
|
|
345
356
|
return fundamentalRecordExpression({
|
|
346
357
|
resolved,
|
|
358
|
+
lib,
|
|
347
359
|
refFunc,
|
|
348
360
|
unrefFunc,
|
|
349
361
|
ownership,
|
|
@@ -357,10 +369,10 @@ const rawEnumDescriptor = (isSigned) => (isSigned ? tInt32 : tUint32);
|
|
|
357
369
|
const enumExpression = (resolved) => {
|
|
358
370
|
const getter = resolved.value.glibGetType;
|
|
359
371
|
const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
|
|
360
|
-
|
|
372
|
+
const lib = resolved.namespace.sharedLibrary;
|
|
373
|
+
if (getter === undefined || getter === "" || lib === undefined) {
|
|
361
374
|
return rawEnumDescriptor(isSigned);
|
|
362
375
|
}
|
|
363
|
-
const lib = resolved.namespace.sharedLibrary ?? "";
|
|
364
376
|
return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
|
|
365
377
|
};
|
|
366
378
|
const expressionForResolved = (context, resolved, transfer, options) => {
|
|
@@ -384,28 +396,37 @@ const expressionForResolved = (context, resolved, transfer, options) => {
|
|
|
384
396
|
}
|
|
385
397
|
}
|
|
386
398
|
};
|
|
399
|
+
const elementExpression = (context, ref, transfer, options) => renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {
|
|
400
|
+
...options,
|
|
401
|
+
cursor: undefined,
|
|
402
|
+
hasOutIndirection: false,
|
|
403
|
+
});
|
|
404
|
+
const cursorArrayExpression = (context, ref, transfer, options) => tCursorArray(elementExpression(context, ref, transfer, options), {
|
|
405
|
+
baseIndex: mapArgIndex(options, options.cursor.baseIndex),
|
|
406
|
+
lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),
|
|
407
|
+
}, transferOwnership(transfer), options.layout);
|
|
408
|
+
const arrayLayout = (context, ref, options) => ({
|
|
409
|
+
elementSize: inlineElementSize(context, ref, options.hasOutIndirection),
|
|
410
|
+
isBytes: context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),
|
|
411
|
+
});
|
|
387
412
|
const arrayExpression = (context, ref, transfer, options) => {
|
|
413
|
+
const { cursor } = options;
|
|
414
|
+
const layout = arrayLayout(context, ref, options);
|
|
415
|
+
if (cursor !== undefined) {
|
|
416
|
+
return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });
|
|
417
|
+
}
|
|
388
418
|
if (hasUnknownArrayLength(ref)) {
|
|
389
419
|
return tUint64;
|
|
390
420
|
}
|
|
391
421
|
const ownership = transferOwnership(transfer);
|
|
392
|
-
const
|
|
393
|
-
const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), elementOptions);
|
|
394
|
-
const size = inlineElementSize(context, ref, options.hasOutIndirection);
|
|
422
|
+
const element = elementExpression(context, ref, transfer, options);
|
|
395
423
|
if (ref.lengthParameterIndex !== undefined) {
|
|
396
|
-
return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership,
|
|
424
|
+
return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);
|
|
397
425
|
}
|
|
398
426
|
if (ref.fixedSize !== undefined) {
|
|
399
|
-
return tFixedArray(element, ref.fixedSize, ownership,
|
|
400
|
-
}
|
|
401
|
-
return tArray(element, ownership, size);
|
|
402
|
-
};
|
|
403
|
-
const recordInlineSize = (context, record) => {
|
|
404
|
-
if (record.opaque || record.disguised || record.fields.length === 0) {
|
|
405
|
-
return undefined;
|
|
427
|
+
return tFixedArray(element, ref.fixedSize, ownership, layout);
|
|
406
428
|
}
|
|
407
|
-
|
|
408
|
-
return size > 0 ? size : undefined;
|
|
429
|
+
return tArray(element, ownership, layout);
|
|
409
430
|
};
|
|
410
431
|
const elementPointerDepth = (elementCType, hasOutIndirection) => {
|
|
411
432
|
const declared = elementCType === undefined ? 0 : elementCType.split("*").length - 1;
|
|
@@ -427,5 +448,5 @@ const aliasExpression = (context, target, transfer, options) => {
|
|
|
427
448
|
}
|
|
428
449
|
return renderDescriptor(context, target, transfer, options);
|
|
429
450
|
};
|
|
430
|
-
export { isInlineCallbackRef, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout,
|
|
451
|
+
export { isInlineCallbackRef, isSkippedPrimaryReturn, isVoidPrimaryReturn, primaryReturnKind, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
|
|
431
452
|
//# sourceMappingURL=descriptor-render.js.map
|
|
@@ -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 { 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\";\nimport { carrayFor, isUnboundedArray, primitiveCategoryFor } from \"./type-shape.js\";\n\ntype RenderDescriptorOptions = {\n argIndexOffset?: number;\n argIndexMap?: Map<number, number> | undefined;\n hasOutIndirection?: boolean;\n isCallerAllocated?: boolean;\n isInline?: boolean;\n isNewlyCreated?: boolean;\n};\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n hasOutIndirection: 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 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 shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n isVoidRef(library, returnValue.type) || returnValue.skip;\n\nconst argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({\n argIndexOffset: options.argIndexOffset ?? 0,\n argIndexMap: options.argIndexMap,\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 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 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, 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 | undefined => {\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.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 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, 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 elementOptions: ArgIndexOptions = { ...options, hasOutIndirection: false };\n const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), elementOptions);\n const size = inlineElementSize(context, ref, options.hasOutIndirection);\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 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 shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n recordInlineSize,\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 };\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,3 +1,4 @@
|
|
|
1
|
+
import type { GirCursorBounds } from "../gir/parameter.js";
|
|
1
2
|
type Ownership = "borrowed" | "full";
|
|
2
3
|
type ScalarDescriptorName = "boolean" | "int8" | "uint8" | "int16" | "uint16" | "int32" | "uint32" | "int64" | "uint64" | "bigint64" | "biguint64" | "float32" | "float64" | "unichar";
|
|
3
4
|
type BoxedOptions = {
|
|
@@ -21,18 +22,34 @@ type FundamentalOptions = {
|
|
|
21
22
|
isInline?: boolean | undefined;
|
|
22
23
|
};
|
|
23
24
|
type ListDescriptorName = "list" | "slist" | "ptrArray" | "gArray";
|
|
25
|
+
type ArrayLayout = {
|
|
26
|
+
elementSize?: number | undefined;
|
|
27
|
+
isBytes: boolean;
|
|
28
|
+
};
|
|
24
29
|
type BindArgs = {
|
|
25
30
|
libExpr: string;
|
|
26
31
|
symbolExpr: string;
|
|
27
32
|
argList: string;
|
|
28
33
|
returnType: string;
|
|
29
34
|
};
|
|
35
|
+
type FnSpecParts = {
|
|
36
|
+
args: string;
|
|
37
|
+
returns: string;
|
|
38
|
+
isReturnSkipped: boolean;
|
|
39
|
+
canThrow: boolean;
|
|
40
|
+
};
|
|
41
|
+
type CallbackSpecParts = {
|
|
42
|
+
argTypes: string[];
|
|
43
|
+
returns: string;
|
|
44
|
+
options: string[];
|
|
45
|
+
};
|
|
30
46
|
declare const tVoid: string;
|
|
31
47
|
declare const tBoolean: string;
|
|
32
48
|
declare const tUint8: string;
|
|
33
49
|
declare const tUint32: string;
|
|
34
50
|
declare const tInt32: string;
|
|
35
51
|
declare const tUint64: string;
|
|
52
|
+
declare const tBiguint64: string;
|
|
36
53
|
declare const tGtype: string;
|
|
37
54
|
declare const tBuffer: string;
|
|
38
55
|
declare const tScalar: (name: ScalarDescriptorName) => string;
|
|
@@ -47,16 +64,14 @@ declare const tHashTable: (key: string, value: string, ownership: Ownership) =>
|
|
|
47
64
|
declare const tEnum: (lib: string, typeFnName: string, isSigned: boolean) => string;
|
|
48
65
|
declare const tFlags: (lib: string, typeFnName: string, isSigned: boolean) => string;
|
|
49
66
|
declare const tByteArray: (ownership: Ownership) => string;
|
|
67
|
+
declare const tNumericByteArray: (ownership: Ownership) => string;
|
|
50
68
|
declare const tList: (name: ListDescriptorName, element: string, ownership: Ownership) => string;
|
|
51
|
-
declare const tArray: (element: string, ownership
|
|
52
|
-
declare const tSizedArray: (element: string, lengthIndex: number, ownership
|
|
53
|
-
declare const
|
|
54
|
-
declare const
|
|
69
|
+
declare const tArray: (element: string, ownership: Ownership | undefined, layout: ArrayLayout) => string;
|
|
70
|
+
declare const tSizedArray: (element: string, lengthIndex: number, ownership: Ownership | undefined, layout: ArrayLayout) => string;
|
|
71
|
+
declare const tCursorArray: (element: string, bounds: GirCursorBounds, ownership: Ownership | undefined, layout: ArrayLayout) => string;
|
|
72
|
+
declare const tFixedArray: (element: string, length: number, ownership: Ownership | undefined, layout: ArrayLayout) => string;
|
|
73
|
+
declare const tCallback: (spec: CallbackSpecParts) => string;
|
|
55
74
|
declare const tBind: (args: BindArgs) => string;
|
|
56
|
-
declare const tFn: (lib: string, cIdentifier: string, spec:
|
|
57
|
-
|
|
58
|
-
returns: string;
|
|
59
|
-
canThrow: boolean;
|
|
60
|
-
}) => string;
|
|
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 ListDescriptorName, };
|
|
75
|
+
declare const tFn: (lib: string, cIdentifier: string, spec: FnSpecParts) => string;
|
|
76
|
+
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, type ArrayLayout, type Ownership, type ScalarDescriptorName, type ListDescriptorName, };
|
|
62
77
|
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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"}
|