@gtkx/codegen 1.0.0-rc.4 → 1.1.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 +5 -5
- package/dist/analysis/descriptor-render.d.ts +13 -9
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +80 -50
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +16 -7
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +15 -3
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +4 -3
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +103 -58
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/interface-conflicts.d.ts +23 -0
- package/dist/analysis/interface-conflicts.d.ts.map +1 -0
- package/dist/analysis/interface-conflicts.js +144 -0
- package/dist/analysis/interface-conflicts.js.map +1 -0
- package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
- package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
- package/dist/analysis/nul-terminated-bytes.js +18 -0
- package/dist/analysis/nul-terminated-bytes.js.map +1 -0
- package/dist/analysis/param-capability.d.ts +5 -0
- package/dist/analysis/param-capability.d.ts.map +1 -0
- package/dist/analysis/param-capability.js +129 -0
- package/dist/analysis/param-capability.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +11 -4
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +42 -16
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +10 -17
- 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 +8 -0
- package/dist/analysis/type-shape.d.ts.map +1 -0
- package/dist/analysis/type-shape.js +12 -0
- package/dist/analysis/type-shape.js.map +1 -0
- package/dist/compile.d.ts +12 -3
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +73 -24
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -2
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +17 -23
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts +4 -4
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +36 -22
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/handwritten-props.d.ts +9 -0
- package/dist/docs/handwritten-props.d.ts.map +1 -0
- package/dist/docs/handwritten-props.js +149 -0
- package/dist/docs/handwritten-props.js.map +1 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +87 -20
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +26 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +88 -25
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +17 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +132 -44
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +12 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +44 -28
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +1 -0
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +8 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +19 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +21 -0
- package/dist/gir/annotations.d.ts.map +1 -0
- package/dist/gir/annotations.js +15 -0
- package/dist/gir/annotations.js.map +1 -0
- package/dist/gir/callback.d.ts +1 -0
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +1 -0
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +32 -1
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +8 -3
- package/dist/gir/class.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/enum.d.ts +21 -1
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +9 -9
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +19 -3
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -8
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +15 -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/libraries.d.ts +1 -3
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +0 -1
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +36 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +35 -1
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +43 -1
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +8 -7
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +52 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +8 -3
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +3 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +9 -9
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +1 -0
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +16 -0
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +3 -3
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +22 -0
- package/dist/gir/record.d.ts.map +1 -1
- package/dist/gir/record.js +3 -2
- package/dist/gir/record.js.map +1 -1
- package/dist/gir/size.d.ts +5 -4
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +35 -0
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -0
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +1 -0
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +20 -0
- package/dist/gir/type.d.ts.map +1 -1
- package/dist/gir/type.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 +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +28 -6
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/doc-context.d.ts +29 -0
- package/dist/khronos/doc-context.d.ts.map +1 -0
- package/dist/khronos/doc-context.js +29 -0
- package/dist/khronos/doc-context.js.map +1 -0
- package/dist/khronos/extensions.d.ts +13 -0
- package/dist/khronos/extensions.d.ts.map +1 -0
- package/dist/khronos/extensions.js +49 -0
- package/dist/khronos/extensions.js.map +1 -0
- package/dist/khronos/jsdoc.d.ts +17 -11
- package/dist/khronos/jsdoc.d.ts.map +1 -1
- package/dist/khronos/jsdoc.js +104 -46
- package/dist/khronos/jsdoc.js.map +1 -1
- package/dist/khronos/model.d.ts +42 -3
- package/dist/khronos/model.d.ts.map +1 -1
- package/dist/khronos/model.js +218 -63
- package/dist/khronos/model.js.map +1 -1
- package/dist/khronos/modules.d.ts +9 -6
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +112 -27
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/notes.d.ts +19 -0
- package/dist/khronos/notes.d.ts.map +1 -0
- package/dist/khronos/notes.js +35 -0
- package/dist/khronos/notes.js.map +1 -0
- package/dist/khronos/param-pair.d.ts +1 -1
- package/dist/khronos/param-pair.d.ts.map +1 -1
- package/dist/khronos/param-pair.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 +4 -2
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +58 -27
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +3 -9
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +3 -3
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts +8 -6
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +35 -26
- package/dist/khronos/render.js.map +1 -1
- package/dist/khronos/select.d.ts +21 -4
- package/dist/khronos/select.d.ts.map +1 -1
- package/dist/khronos/select.js +47 -34
- package/dist/khronos/select.js.map +1 -1
- package/dist/react/element-config.d.ts +2 -2
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +6 -8
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +16 -0
- 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 +1 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +4 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callable-doc.d.ts +11 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -0
- package/dist/store/gi/callable-doc.js +62 -0
- package/dist/store/gi/callable-doc.js.map +1 -0
- package/dist/store/gi/callables.d.ts +9 -2
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +35 -40
- 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 +10 -6
- 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 +63 -40
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/closure-invocation.d.ts +4 -0
- package/dist/store/gi/closure-invocation.d.ts.map +1 -0
- package/dist/store/gi/closure-invocation.js +22 -0
- package/dist/store/gi/closure-invocation.js.map +1 -0
- 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 +12 -3
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +18 -20
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/doc-spec.d.ts +14 -0
- package/dist/store/gi/doc-spec.d.ts.map +1 -0
- package/dist/store/gi/doc-spec.js +23 -0
- package/dist/store/gi/doc-spec.js.map +1 -0
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +52 -19
- 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 +50 -29
- 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 +155 -26
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/item-comparators.d.ts.map +1 -1
- package/dist/store/gi/item-comparators.js +3 -5
- package/dist/store/gi/item-comparators.js.map +1 -1
- package/dist/store/gi/method.d.ts +11 -2
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +80 -45
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +6 -2
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +54 -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 +23 -11
- 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 +7 -4
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +12 -5
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +98 -46
- 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 -11
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +3 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +8 -3
- 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 +9 -2
- 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 +21 -9
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +1 -1
- package/dist/store/gi/registration.js +4 -4
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/runtime-override.d.ts +2 -1
- package/dist/store/gi/runtime-override.d.ts.map +1 -1
- package/dist/store/gi/runtime-override.js +8 -5
- package/dist/store/gi/runtime-override.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 +42 -37
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -2
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +3 -2
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +19 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +257 -51
- 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/element-components.d.ts +1 -1
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -1
- package/dist/store/jsx/element-prop-types.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/intrinsic-elements.d.ts +4 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +10 -9
- 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 +5 -3
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +1 -1
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -7
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +14 -6
- package/dist/store/jsx/props.js.map +1 -1
- 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 +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 -6
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +59 -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 -2
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +11 -3
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/doc-tags.d.ts +21 -0
- package/dist/writer/doc-tags.d.ts.map +1 -0
- package/dist/writer/doc-tags.js +38 -0
- package/dist/writer/doc-tags.js.map +1 -0
- package/dist/writer/doc.d.ts +3 -1
- package/dist/writer/doc.d.ts.map +1 -1
- package/dist/writer/doc.js +19 -6
- package/dist/writer/doc.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +64 -15
- package/dist/writer/gtk-doc.js.map +1 -1
- package/dist/writer/module.d.ts +17 -3
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +72 -3
- package/dist/writer/module.js.map +1 -1
- package/dist/xml.d.ts +7 -1
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +43 -1
- package/dist/xml.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +26 -0
- package/overrides/gobject/object.ts.ejs +48 -3
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +15 -4
- package/src/analysis/descriptor-render.ts +130 -66
- package/src/analysis/descriptor.ts +35 -11
- package/src/analysis/inheritance.ts +166 -75
- package/src/analysis/interface-conflicts.ts +237 -0
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +169 -0
- package/src/analysis/param-structure.ts +85 -25
- package/src/analysis/ts-type.ts +13 -17
- package/src/analysis/type-key.ts +14 -0
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +110 -26
- package/src/docs/api-reference.ts +46 -34
- package/src/docs/element-page.ts +58 -49
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +131 -21
- package/src/docs/render.ts +153 -35
- package/src/docs/symbol-page.ts +230 -80
- package/src/fingerprint.ts +86 -32
- package/src/gi.ts +1 -0
- package/src/gir/ancestry.ts +31 -1
- package/src/gir/annotations.ts +37 -0
- package/src/gir/callback.ts +2 -0
- package/src/gir/class.ts +42 -4
- package/src/gir/cursor-overrides.ts +12 -0
- package/src/gir/emittable.ts +8 -0
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -9
- package/src/gir/function.ts +60 -9
- package/src/gir/libraries.ts +11 -3
- package/src/gir/library.ts +52 -3
- package/src/gir/namespace.ts +49 -7
- package/src/gir/parameter.ts +62 -3
- package/src/gir/parse.ts +13 -9
- package/src/gir/primitives.ts +1 -0
- package/src/gir/property.ts +18 -3
- package/src/gir/record.ts +24 -2
- package/src/gir/size.ts +8 -3
- package/src/gir/type-id.ts +49 -3
- package/src/gir/type-ref.ts +1 -0
- package/src/gir/type.ts +50 -6
- package/src/guards.ts +23 -0
- package/src/internal.ts +2 -0
- package/src/json.ts +11 -0
- package/src/khronos/args.ts +36 -13
- package/src/khronos/doc-context.ts +62 -0
- package/src/khronos/extensions.ts +85 -0
- package/src/khronos/jsdoc.ts +152 -56
- package/src/khronos/model.ts +314 -69
- package/src/khronos/modules.ts +150 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/parse.ts +3 -4
- package/src/khronos/pipeline.ts +95 -42
- package/src/khronos/plan.ts +4 -6
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +2 -2
- package/src/runner.ts +20 -9
- package/src/staging.ts +69 -0
- package/src/store/compile-store.ts +7 -5
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +58 -44
- package/src/store/gi/callback.ts +10 -9
- package/src/store/gi/class.ts +83 -49
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/companion.ts +7 -6
- package/src/store/gi/constant.ts +14 -5
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +75 -26
- package/src/store/gi/function.ts +72 -44
- package/src/store/gi/gtype-binding.ts +7 -2
- package/src/store/gi/interface.ts +244 -37
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +124 -69
- package/src/store/gi/param-marshal.ts +91 -6
- package/src/store/gi/pipeline.ts +28 -13
- package/src/store/gi/properties.ts +10 -5
- package/src/store/gi/property-accessor.ts +163 -75
- package/src/store/gi/record-constructor.ts +56 -19
- package/src/store/gi/record-field-accessor.ts +13 -4
- package/src/store/gi/record-layout.ts +12 -2
- package/src/store/gi/record.ts +24 -10
- package/src/store/gi/registration.ts +5 -5
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +54 -57
- package/src/store/gi/value-marshalable.ts +4 -2
- package/src/store/gi/vtable.ts +439 -61
- package/src/store/gi-store.ts +26 -31
- package/src/store/jsx/element-components.ts +8 -5
- package/src/store/jsx/element-prop-imports.ts +1 -3
- package/src/store/jsx/element-prop-types.ts +10 -1
- package/src/store/jsx/generated-elements.ts +17 -8
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +11 -9
- package/src/store/jsx/metadata.ts +6 -3
- package/src/store/jsx/pipeline.ts +1 -1
- package/src/store/jsx/props.ts +20 -7
- package/src/store/jsx-store.ts +3 -3
- package/src/store/resolve-store.ts +133 -18
- package/src/store/store-fs.ts +87 -34
- package/src/store/store-links.ts +49 -0
- package/src/writer/comparison-context.ts +18 -0
- package/src/writer/context.ts +14 -4
- package/src/writer/doc-tags.ts +70 -0
- package/src/writer/doc.ts +29 -6
- package/src/writer/gtk-doc.ts +82 -15
- package/src/writer/module.ts +114 -4
- package/src/xml.ts +61 -1
|
@@ -1,37 +1,92 @@
|
|
|
1
1
|
import { Point as GeneratedPoint, Rect as GeneratedRect, Size as GeneratedSize } from "../graphene.js";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Allocates a new `Point` and initializes it to the given coordinates.
|
|
5
|
+
*
|
|
6
|
+
* @param x the X coordinate
|
|
7
|
+
* @param y the Y coordinate
|
|
8
|
+
* @returns the initialized point
|
|
9
|
+
*/
|
|
3
10
|
const createPoint = (x: number, y: number): GeneratedPoint => {
|
|
4
11
|
const point = GeneratedPoint.alloc();
|
|
5
12
|
point.init(x, y);
|
|
6
13
|
return point;
|
|
7
14
|
};
|
|
8
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Allocates a new `Rect` and initializes it to the given origin and size.
|
|
18
|
+
*
|
|
19
|
+
* @param x the X coordinate of the origin
|
|
20
|
+
* @param y the Y coordinate of the origin
|
|
21
|
+
* @param width the width of the rectangle
|
|
22
|
+
* @param height the height of the rectangle
|
|
23
|
+
* @returns the initialized rectangle
|
|
24
|
+
*/
|
|
9
25
|
const createRect = (x: number, y: number, width: number, height: number): GeneratedRect => {
|
|
10
26
|
const rect = GeneratedRect.alloc();
|
|
11
27
|
rect.init(x, y, width, height);
|
|
12
28
|
return rect;
|
|
13
29
|
};
|
|
14
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Allocates a new `Size` and initializes it to the given width and height.
|
|
33
|
+
*
|
|
34
|
+
* @param width the width
|
|
35
|
+
* @param height the height
|
|
36
|
+
* @returns the initialized size
|
|
37
|
+
*/
|
|
15
38
|
const createSize = (width: number, height: number): GeneratedSize => {
|
|
16
39
|
const size = GeneratedSize.alloc();
|
|
17
40
|
size.init(width, height);
|
|
18
41
|
return size;
|
|
19
42
|
};
|
|
20
43
|
|
|
44
|
+
/** A point with two coordinates. */
|
|
21
45
|
export const Point: typeof GeneratedPoint & { create: typeof createPoint } = Object.assign(GeneratedPoint, {
|
|
22
46
|
create: createPoint,
|
|
23
47
|
});
|
|
24
48
|
|
|
49
|
+
/** A point with two coordinates. */
|
|
25
50
|
export type Point = GeneratedPoint;
|
|
26
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The location and size of a rectangle region.
|
|
54
|
+
*
|
|
55
|
+
* The width and height of a `graphene_rect_t` can be negative; for instance,
|
|
56
|
+
* a `graphene_rect_t` with an origin of [ 0, 0 ] and a size of [ 10, 10 ] is
|
|
57
|
+
* equivalent to a `graphene_rect_t` with an origin of [ 10, 10 ] and a size
|
|
58
|
+
* of [ -10, -10 ].
|
|
59
|
+
*
|
|
60
|
+
* Application code can normalize rectangles using `graphene_rect_normalize()`;
|
|
61
|
+
* this function will ensure that the width and height of a rectangle are
|
|
62
|
+
* positive values. All functions taking a `graphene_rect_t` as an argument
|
|
63
|
+
* will internally operate on a normalized copy; all functions returning a
|
|
64
|
+
* `graphene_rect_t` will always return a normalized rectangle.
|
|
65
|
+
*/
|
|
27
66
|
export const Rect: typeof GeneratedRect & { create: typeof createRect } = Object.assign(GeneratedRect, {
|
|
28
67
|
create: createRect,
|
|
29
68
|
});
|
|
30
69
|
|
|
70
|
+
/**
|
|
71
|
+
* The location and size of a rectangle region.
|
|
72
|
+
*
|
|
73
|
+
* The width and height of a `graphene_rect_t` can be negative; for instance,
|
|
74
|
+
* a `graphene_rect_t` with an origin of [ 0, 0 ] and a size of [ 10, 10 ] is
|
|
75
|
+
* equivalent to a `graphene_rect_t` with an origin of [ 10, 10 ] and a size
|
|
76
|
+
* of [ -10, -10 ].
|
|
77
|
+
*
|
|
78
|
+
* Application code can normalize rectangles using `graphene_rect_normalize()`;
|
|
79
|
+
* this function will ensure that the width and height of a rectangle are
|
|
80
|
+
* positive values. All functions taking a `graphene_rect_t` as an argument
|
|
81
|
+
* will internally operate on a normalized copy; all functions returning a
|
|
82
|
+
* `graphene_rect_t` will always return a normalized rectangle.
|
|
83
|
+
*/
|
|
31
84
|
export type Rect = GeneratedRect;
|
|
32
85
|
|
|
86
|
+
/** A size. */
|
|
33
87
|
export const Size: typeof GeneratedSize & { create: typeof createSize } = Object.assign(GeneratedSize, {
|
|
34
88
|
create: createSize,
|
|
35
89
|
});
|
|
36
90
|
|
|
91
|
+
/** A size. */
|
|
37
92
|
export type Size = GeneratedSize;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/codegen",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Generates the typed GTKX bindings and API reference from GIR and OpenGL registry data",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
@@ -40,15 +40,26 @@
|
|
|
40
40
|
"overrides",
|
|
41
41
|
"src"
|
|
42
42
|
],
|
|
43
|
+
"nx": {
|
|
44
|
+
"targets": {
|
|
45
|
+
"lint": {
|
|
46
|
+
"options": {
|
|
47
|
+
"cwd": ".",
|
|
48
|
+
"command": "eslint {projectRoot}"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
43
53
|
"engines": {
|
|
44
54
|
"node": ">=24"
|
|
45
55
|
},
|
|
46
56
|
"dependencies": {
|
|
47
|
-
"@types/node": "^26.
|
|
57
|
+
"@types/node": "^26.2.0",
|
|
48
58
|
"fast-xml-parser": "^5.10.1",
|
|
59
|
+
"fast-xml-validator": "^1.4.1",
|
|
49
60
|
"typescript": "^6.0.3",
|
|
50
|
-
"@gtkx/react": "1.
|
|
51
|
-
"@gtkx/utils": "1.
|
|
61
|
+
"@gtkx/react": "1.1.0",
|
|
62
|
+
"@gtkx/utils": "1.1.0"
|
|
52
63
|
},
|
|
53
64
|
"scripts": {
|
|
54
65
|
"release": "tsx ../../scripts/release-package.ts"
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { sourceStringLiteral } from "@gtkx/utils";
|
|
1
|
+
import { sanitizeTypeIdentifier, sourceStringLiteral } from "@gtkx/utils";
|
|
2
2
|
import type { GirCallback } from "../gir/callback.js";
|
|
3
3
|
import type { Library } from "../gir/library.js";
|
|
4
4
|
import type { PrimitiveCategory } from "../gir/primitives.js";
|
|
5
5
|
import type { EntityType, GirType } from "../gir/type.js";
|
|
6
6
|
import type { ModuleContext } from "../writer/context.js";
|
|
7
7
|
import {
|
|
8
|
+
type GirCursorBounds,
|
|
8
9
|
type GirParameter,
|
|
9
10
|
type GirReturnValue,
|
|
10
11
|
isCallerAllocatedOut,
|
|
@@ -20,7 +21,7 @@ import {
|
|
|
20
21
|
type TypeId,
|
|
21
22
|
} from "../gir/type-id.js";
|
|
22
23
|
import { isRecordInout } from "../store/gi/param-marshal.js";
|
|
23
|
-
import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
|
|
24
|
+
import { computeRecordFieldSlots, recordInlineSize } from "../store/gi/record-layout.js";
|
|
24
25
|
import { isValueMarshalable } from "../store/gi/value-marshalable.js";
|
|
25
26
|
import {
|
|
26
27
|
type ListDescriptorName,
|
|
@@ -30,6 +31,7 @@ import {
|
|
|
30
31
|
tBoxed,
|
|
31
32
|
tByteArray,
|
|
32
33
|
tCallback,
|
|
34
|
+
tCursorArray,
|
|
33
35
|
tEnum,
|
|
34
36
|
tFixedArray,
|
|
35
37
|
tFlags,
|
|
@@ -48,18 +50,23 @@ import {
|
|
|
48
50
|
tUint64,
|
|
49
51
|
tVoid,
|
|
50
52
|
} from "./descriptor.js";
|
|
53
|
+
import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
|
|
51
54
|
|
|
52
|
-
type
|
|
53
|
-
argIndexOffset?: number;
|
|
54
|
-
argIndexMap?: Map<number, number> | undefined;
|
|
55
|
-
isCallerAllocated?: boolean;
|
|
56
|
-
isInline?: boolean;
|
|
57
|
-
isNewlyCreated?: boolean;
|
|
58
|
-
};
|
|
55
|
+
type PrimaryReturnKind = "surfaced" | "void" | "skipped";
|
|
59
56
|
|
|
60
57
|
type ArgIndexOptions = {
|
|
61
58
|
argIndexOffset: number;
|
|
62
59
|
argIndexMap: Map<number, number> | undefined;
|
|
60
|
+
cursor: GirCursorBounds | undefined;
|
|
61
|
+
hasOutIndirection: boolean;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
type CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };
|
|
65
|
+
|
|
66
|
+
type RenderDescriptorOptions = Partial<ArgIndexOptions> & {
|
|
67
|
+
isCallerAllocated?: boolean;
|
|
68
|
+
isInline?: boolean;
|
|
69
|
+
isNewlyCreated?: boolean;
|
|
63
70
|
};
|
|
64
71
|
|
|
65
72
|
type RecordPlacement = {
|
|
@@ -88,6 +95,7 @@ type ResolvedRecord = Extract<EntityType, { kind: "record" }>["value"];
|
|
|
88
95
|
|
|
89
96
|
type FundamentalRecordOptions = {
|
|
90
97
|
resolved: Extract<EntityType, { kind: "record" }>;
|
|
98
|
+
lib: string;
|
|
91
99
|
refFunc: string;
|
|
92
100
|
unrefFunc: string;
|
|
93
101
|
ownership: Ownership;
|
|
@@ -122,21 +130,35 @@ const transferOwnership = (transfer: ParameterTransfer): Ownership => {
|
|
|
122
130
|
const deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>
|
|
123
131
|
transfer === "container" ? "none" : transfer;
|
|
124
132
|
|
|
125
|
-
const isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>
|
|
126
|
-
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const type = library.typeFor(ref);
|
|
131
|
-
|
|
132
|
-
return type?.kind === "primitive" && type.category === "void";
|
|
133
|
-
};
|
|
133
|
+
const isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>
|
|
134
|
+
ref === undefined || primitiveCategoryFor(library, ref) === "void";
|
|
134
135
|
|
|
135
136
|
const isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>
|
|
136
137
|
ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
|
|
137
138
|
|
|
139
|
+
const primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {
|
|
140
|
+
if (isVoidRef(library, returnValue.type)) {
|
|
141
|
+
return "void";
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return returnValue.skip ? "skipped" : "surfaced";
|
|
145
|
+
};
|
|
146
|
+
|
|
138
147
|
const shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
|
|
139
|
-
|
|
148
|
+
primaryReturnKind(library, returnValue) !== "surfaced";
|
|
149
|
+
|
|
150
|
+
const isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
|
|
151
|
+
primaryReturnKind(library, returnValue) === "skipped";
|
|
152
|
+
|
|
153
|
+
const isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
|
|
154
|
+
primaryReturnKind(library, returnValue) === "void";
|
|
155
|
+
|
|
156
|
+
const argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({
|
|
157
|
+
argIndexOffset: options.argIndexOffset ?? 0,
|
|
158
|
+
argIndexMap: options.argIndexMap,
|
|
159
|
+
cursor: options.cursor,
|
|
160
|
+
hasOutIndirection: options.hasOutIndirection === true,
|
|
161
|
+
});
|
|
140
162
|
|
|
141
163
|
const renderDescriptor = (
|
|
142
164
|
context: ModuleContext,
|
|
@@ -148,8 +170,7 @@ const renderDescriptor = (
|
|
|
148
170
|
return tVoid;
|
|
149
171
|
}
|
|
150
172
|
|
|
151
|
-
const
|
|
152
|
-
const indexOptions: ArgIndexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };
|
|
173
|
+
const indexOptions = argIndexOptions(options);
|
|
153
174
|
const ownership = transferOwnership(transfer);
|
|
154
175
|
const type = context.library.typeFor(ref);
|
|
155
176
|
|
|
@@ -255,8 +276,19 @@ const isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {
|
|
|
255
276
|
return type !== undefined && isScalarType(library, type);
|
|
256
277
|
};
|
|
257
278
|
|
|
279
|
+
const isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {
|
|
280
|
+
const type = carrayFor(library, ref);
|
|
281
|
+
|
|
282
|
+
if (type === undefined) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === "string";
|
|
287
|
+
};
|
|
288
|
+
|
|
258
289
|
const isCellInout = (library: Library, parameter: GirParameter): boolean =>
|
|
259
|
-
isInoutParameter(parameter) &&
|
|
290
|
+
isInoutParameter(parameter) &&
|
|
291
|
+
(isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));
|
|
260
292
|
|
|
261
293
|
const renderParamDescriptor = (
|
|
262
294
|
context: ModuleContext,
|
|
@@ -264,12 +296,14 @@ const renderParamDescriptor = (
|
|
|
264
296
|
ref: TypeId | undefined,
|
|
265
297
|
argIndex: Partial<ArgIndexOptions> = {},
|
|
266
298
|
): string => {
|
|
299
|
+
const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };
|
|
300
|
+
|
|
267
301
|
if (isCellInout(context.library, parameter)) {
|
|
268
|
-
return tRef(renderDescriptor(context, ref, parameter.transferOwnership,
|
|
302
|
+
return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);
|
|
269
303
|
}
|
|
270
304
|
|
|
271
305
|
if (isOutParameter(parameter)) {
|
|
272
|
-
return tRef(renderDescriptor(context, ref, parameter.transferOwnership,
|
|
306
|
+
return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));
|
|
273
307
|
}
|
|
274
308
|
|
|
275
309
|
return renderDescriptor(context, ref, parameter.transferOwnership, {
|
|
@@ -296,13 +330,17 @@ const findUserDataIndex = (parameters: GirParameter[]): number | undefined => {
|
|
|
296
330
|
return declared?.closureIndex ?? userDataIndexByName(parameters);
|
|
297
331
|
};
|
|
298
332
|
|
|
299
|
-
const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string
|
|
333
|
+
const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string[] => {
|
|
300
334
|
const options: string[] = [];
|
|
301
335
|
|
|
302
336
|
if (owningParameter.destroyIndex !== undefined) {
|
|
303
337
|
options.push("hasDestroy: true");
|
|
304
338
|
}
|
|
305
339
|
|
|
340
|
+
if (owningParameter.closureIndex !== undefined) {
|
|
341
|
+
options.push("hasUserData: true");
|
|
342
|
+
}
|
|
343
|
+
|
|
306
344
|
if (userDataIndex !== undefined) {
|
|
307
345
|
options.push(`userDataIndex: ${String(userDataIndex)}`);
|
|
308
346
|
}
|
|
@@ -311,7 +349,7 @@ const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number
|
|
|
311
349
|
options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
|
|
312
350
|
}
|
|
313
351
|
|
|
314
|
-
return options
|
|
352
|
+
return options;
|
|
315
353
|
};
|
|
316
354
|
|
|
317
355
|
const renderCallbackType = (
|
|
@@ -330,15 +368,13 @@ const renderCallbackType = (
|
|
|
330
368
|
(parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),
|
|
331
369
|
);
|
|
332
370
|
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
const returnType = isVoidRef(context.library, returnRef)
|
|
336
|
-
? tVoid
|
|
337
|
-
: renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);
|
|
371
|
+
const { returnValue } = callback;
|
|
338
372
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
373
|
+
return tCallback({
|
|
374
|
+
argTypes,
|
|
375
|
+
returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),
|
|
376
|
+
options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters)),
|
|
377
|
+
});
|
|
342
378
|
};
|
|
343
379
|
|
|
344
380
|
const primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {
|
|
@@ -406,13 +442,14 @@ const getFundamental = (
|
|
|
406
442
|
node: Extract<EntityType, { kind: "class" | "interface" }>,
|
|
407
443
|
): AncestorFundamental | undefined => {
|
|
408
444
|
const cls = node.value;
|
|
445
|
+
const lib = node.namespace.sharedLibrary;
|
|
409
446
|
|
|
410
|
-
if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
|
|
447
|
+
if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
|
|
411
448
|
return undefined;
|
|
412
449
|
}
|
|
413
450
|
|
|
414
451
|
return {
|
|
415
|
-
lib
|
|
452
|
+
lib,
|
|
416
453
|
refFunc: cls.glibRefFunc,
|
|
417
454
|
unrefFunc: cls.glibUnrefFunc,
|
|
418
455
|
typeName: cls.glibTypeName,
|
|
@@ -458,10 +495,11 @@ const fundamentalAncestor = (
|
|
|
458
495
|
const classSelfDescriptor = (
|
|
459
496
|
context: ModuleContext,
|
|
460
497
|
type: Extract<EntityType, { kind: "class" | "interface" }>,
|
|
498
|
+
ownership: Ownership,
|
|
461
499
|
): string => {
|
|
462
500
|
const ancestor = fundamentalAncestor(context, type);
|
|
463
501
|
|
|
464
|
-
return ancestor === undefined ? tObject(
|
|
502
|
+
return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });
|
|
465
503
|
};
|
|
466
504
|
|
|
467
505
|
const renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {
|
|
@@ -478,7 +516,7 @@ const renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): s
|
|
|
478
516
|
}
|
|
479
517
|
|
|
480
518
|
if (isClassOrInterface(type)) {
|
|
481
|
-
return classSelfDescriptor(context, type);
|
|
519
|
+
return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));
|
|
482
520
|
}
|
|
483
521
|
|
|
484
522
|
if (type.kind === "record") {
|
|
@@ -510,7 +548,7 @@ const structExpression = (
|
|
|
510
548
|
options: { isCallerAllocated: boolean; isInline: boolean },
|
|
511
549
|
): string => {
|
|
512
550
|
const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
|
|
513
|
-
const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
|
|
551
|
+
const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));
|
|
514
552
|
const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);
|
|
515
553
|
|
|
516
554
|
return tStruct(ownership, {
|
|
@@ -522,10 +560,10 @@ const structExpression = (
|
|
|
522
560
|
};
|
|
523
561
|
|
|
524
562
|
const fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {
|
|
525
|
-
const { resolved, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
|
|
563
|
+
const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
|
|
526
564
|
|
|
527
565
|
return renderFundamental({
|
|
528
|
-
lib
|
|
566
|
+
lib,
|
|
529
567
|
refFunc,
|
|
530
568
|
unrefFunc,
|
|
531
569
|
typeName: resolved.value.glibTypeName,
|
|
@@ -586,14 +624,16 @@ const recordExpression = (
|
|
|
586
624
|
): string => {
|
|
587
625
|
const record = resolved.value;
|
|
588
626
|
const { refFunc, unrefFunc } = recordRefPair(record);
|
|
627
|
+
const lib = resolved.namespace.sharedLibrary;
|
|
589
628
|
|
|
590
|
-
if (refFunc !== undefined && unrefFunc !== undefined) {
|
|
629
|
+
if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {
|
|
591
630
|
const wrapperClass = requiresFallbackClass(record)
|
|
592
|
-
? context.qualify(resolved.namespace.name, record.name)
|
|
631
|
+
? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))
|
|
593
632
|
: undefined;
|
|
594
633
|
|
|
595
634
|
return fundamentalRecordExpression({
|
|
596
635
|
resolved,
|
|
636
|
+
lib,
|
|
597
637
|
refFunc,
|
|
598
638
|
unrefFunc,
|
|
599
639
|
ownership,
|
|
@@ -610,13 +650,12 @@ const rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tU
|
|
|
610
650
|
const enumExpression = (resolved: Extract<EntityType, { kind: "enum" }>): string => {
|
|
611
651
|
const getter = resolved.value.glibGetType;
|
|
612
652
|
const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
|
|
653
|
+
const lib = resolved.namespace.sharedLibrary;
|
|
613
654
|
|
|
614
|
-
if (getter === undefined || getter === "") {
|
|
655
|
+
if (getter === undefined || getter === "" || lib === undefined) {
|
|
615
656
|
return rawEnumDescriptor(isSigned);
|
|
616
657
|
}
|
|
617
658
|
|
|
618
|
-
const lib = resolved.namespace.sharedLibrary ?? "";
|
|
619
|
-
|
|
620
659
|
return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
|
|
621
660
|
};
|
|
622
661
|
|
|
@@ -648,19 +687,53 @@ const expressionForResolved = (
|
|
|
648
687
|
}
|
|
649
688
|
};
|
|
650
689
|
|
|
690
|
+
const elementExpression = (
|
|
691
|
+
context: ModuleContext,
|
|
692
|
+
ref: CArrayType,
|
|
693
|
+
transfer: ParameterTransfer,
|
|
694
|
+
options: ArgIndexOptions,
|
|
695
|
+
): string =>
|
|
696
|
+
renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {
|
|
697
|
+
...options,
|
|
698
|
+
cursor: undefined,
|
|
699
|
+
hasOutIndirection: false,
|
|
700
|
+
});
|
|
701
|
+
|
|
702
|
+
const cursorArrayExpression = (
|
|
703
|
+
context: ModuleContext,
|
|
704
|
+
ref: CArrayType,
|
|
705
|
+
transfer: ParameterTransfer,
|
|
706
|
+
options: CursorArgIndexOptions,
|
|
707
|
+
): string =>
|
|
708
|
+
tCursorArray(
|
|
709
|
+
elementExpression(context, ref, transfer, options),
|
|
710
|
+
{
|
|
711
|
+
baseIndex: mapArgIndex(options, options.cursor.baseIndex),
|
|
712
|
+
lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),
|
|
713
|
+
},
|
|
714
|
+
transferOwnership(transfer),
|
|
715
|
+
inlineElementSize(context, ref, options.hasOutIndirection),
|
|
716
|
+
);
|
|
717
|
+
|
|
651
718
|
const arrayExpression = (
|
|
652
719
|
context: ModuleContext,
|
|
653
720
|
ref: CArrayType,
|
|
654
721
|
transfer: ParameterTransfer,
|
|
655
722
|
options: ArgIndexOptions,
|
|
656
723
|
): string => {
|
|
724
|
+
const { cursor } = options;
|
|
725
|
+
|
|
726
|
+
if (cursor !== undefined) {
|
|
727
|
+
return cursorArrayExpression(context, ref, transfer, { ...options, cursor });
|
|
728
|
+
}
|
|
729
|
+
|
|
657
730
|
if (hasUnknownArrayLength(ref)) {
|
|
658
731
|
return tUint64;
|
|
659
732
|
}
|
|
660
733
|
|
|
661
734
|
const ownership = transferOwnership(transfer);
|
|
662
|
-
const element =
|
|
663
|
-
const size = inlineElementSize(context, ref
|
|
735
|
+
const element = elementExpression(context, ref, transfer, options);
|
|
736
|
+
const size = inlineElementSize(context, ref, options.hasOutIndirection);
|
|
664
737
|
|
|
665
738
|
if (ref.lengthParameterIndex !== undefined) {
|
|
666
739
|
return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);
|
|
@@ -673,30 +746,18 @@ const arrayExpression = (
|
|
|
673
746
|
return tArray(element, ownership, size);
|
|
674
747
|
};
|
|
675
748
|
|
|
676
|
-
const
|
|
677
|
-
|
|
678
|
-
return undefined;
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
|
|
749
|
+
const elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {
|
|
750
|
+
const declared = elementCType === undefined ? 0 : elementCType.split("*").length - 1;
|
|
682
751
|
|
|
683
|
-
return
|
|
752
|
+
return hasOutIndirection ? declared - 1 : declared;
|
|
684
753
|
};
|
|
685
754
|
|
|
686
|
-
const inlineElementSize = (
|
|
687
|
-
|
|
688
|
-
element: TypeId | undefined,
|
|
689
|
-
elementCType: string | undefined,
|
|
690
|
-
): number | undefined => {
|
|
691
|
-
if (element === undefined) {
|
|
692
|
-
return undefined;
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
if (elementCType?.includes("*")) {
|
|
755
|
+
const inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {
|
|
756
|
+
if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {
|
|
696
757
|
return undefined;
|
|
697
758
|
}
|
|
698
759
|
|
|
699
|
-
const type = context.library.typeFor(element);
|
|
760
|
+
const type = context.library.typeFor(ref.element);
|
|
700
761
|
|
|
701
762
|
if (type?.kind !== "record") {
|
|
702
763
|
return undefined;
|
|
@@ -720,6 +781,9 @@ const aliasExpression = (
|
|
|
720
781
|
|
|
721
782
|
export {
|
|
722
783
|
isInlineCallbackRef,
|
|
784
|
+
isSkippedPrimaryReturn,
|
|
785
|
+
isVoidPrimaryReturn,
|
|
786
|
+
primaryReturnKind,
|
|
723
787
|
shouldOmitPrimaryReturn,
|
|
724
788
|
renderDescriptor,
|
|
725
789
|
isScalarRef,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { sourceStringLiteral } from "@gtkx/utils";
|
|
2
|
+
import type { GirCursorBounds } from "../gir/parameter.js";
|
|
2
3
|
import { joinArgs } from "../writer/emit.js";
|
|
3
4
|
|
|
4
5
|
type Ownership = "borrowed" | "full";
|
|
@@ -39,6 +40,7 @@ type DescriptorName =
|
|
|
39
40
|
"byteArray" |
|
|
40
41
|
"sizedArray" |
|
|
41
42
|
"fixedArray" |
|
|
43
|
+
"cursorArray" |
|
|
42
44
|
"callback" |
|
|
43
45
|
"fn";
|
|
44
46
|
|
|
@@ -92,6 +94,21 @@ type BindArgs = {
|
|
|
92
94
|
returnType: string;
|
|
93
95
|
};
|
|
94
96
|
|
|
97
|
+
type FnSpecParts = {
|
|
98
|
+
args: string;
|
|
99
|
+
returns: string;
|
|
100
|
+
isReturnSkipped: boolean;
|
|
101
|
+
canThrow: boolean;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
type CallbackSpecParts = {
|
|
105
|
+
argTypes: string[];
|
|
106
|
+
returns: string;
|
|
107
|
+
options: string[];
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const SKIPPED_RETURN_ENTRY = "isReturnSkipped: true";
|
|
111
|
+
|
|
95
112
|
const T: DescriptorNames = {
|
|
96
113
|
bind: "t.bind",
|
|
97
114
|
int8: "t.int8",
|
|
@@ -128,6 +145,7 @@ const T: DescriptorNames = {
|
|
|
128
145
|
byteArray: "t.byteArray",
|
|
129
146
|
sizedArray: "t.sizedArray",
|
|
130
147
|
fixedArray: "t.fixedArray",
|
|
148
|
+
cursorArray: "t.cursorArray",
|
|
131
149
|
callback: "t.callback",
|
|
132
150
|
fn: "t.fn",
|
|
133
151
|
};
|
|
@@ -235,6 +253,14 @@ const tSizedArray = (
|
|
|
235
253
|
elementSize === undefined ? undefined : String(elementSize),
|
|
236
254
|
]);
|
|
237
255
|
|
|
256
|
+
const tCursorArray = (element: string, bounds: GirCursorBounds, ownership?: Ownership, elementSize?: number): string =>
|
|
257
|
+
call("cursorArray", [
|
|
258
|
+
element,
|
|
259
|
+
`{ baseParamIndex: ${String(bounds.baseIndex)}, sizeParamIndex: ${String(bounds.lengthIndex)} }`,
|
|
260
|
+
ownership === undefined ? undefined : sourceStringLiteral(ownership),
|
|
261
|
+
elementSize === undefined ? undefined : String(elementSize),
|
|
262
|
+
]);
|
|
263
|
+
|
|
238
264
|
const tFixedArray = (element: string, length: number, ownership?: Ownership, elementSize?: number): string =>
|
|
239
265
|
call("fixedArray", [
|
|
240
266
|
element,
|
|
@@ -243,23 +269,23 @@ const tFixedArray = (element: string, length: number, ownership?: Ownership, ele
|
|
|
243
269
|
elementSize === undefined ? undefined : String(elementSize),
|
|
244
270
|
]);
|
|
245
271
|
|
|
246
|
-
const tCallback = (
|
|
247
|
-
|
|
272
|
+
const tCallback = (spec: CallbackSpecParts): string => {
|
|
273
|
+
const optionsArg = spec.options.length > 0 ? `{ ${spec.options.join(", ")} }` : undefined;
|
|
274
|
+
|
|
275
|
+
return call("callback", [`[${spec.argTypes.join(", ")}]`, spec.returns, optionsArg]);
|
|
276
|
+
};
|
|
248
277
|
|
|
249
278
|
const tBind = (args: BindArgs): string =>
|
|
250
279
|
call("bind", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);
|
|
251
280
|
|
|
252
|
-
const tFn = (
|
|
253
|
-
|
|
254
|
-
cIdentifier: string,
|
|
255
|
-
spec: { args: string; returns: string; canThrow: boolean },
|
|
256
|
-
): string => {
|
|
281
|
+
const tFn = (lib: string, cIdentifier: string, spec: FnSpecParts): string => {
|
|
282
|
+
const skipEntry = spec.isReturnSkipped ? `, ${SKIPPED_RETURN_ENTRY}` : "";
|
|
257
283
|
const throwsEntry = spec.canThrow ? ", canThrow: true" : "";
|
|
258
284
|
|
|
259
285
|
return call("fn", [
|
|
260
286
|
sourceStringLiteral(lib),
|
|
261
287
|
sourceStringLiteral(cIdentifier),
|
|
262
|
-
`{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,
|
|
288
|
+
`{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${throwsEntry} }`,
|
|
263
289
|
]);
|
|
264
290
|
};
|
|
265
291
|
|
|
@@ -288,13 +314,11 @@ export {
|
|
|
288
314
|
tArray,
|
|
289
315
|
tSizedArray,
|
|
290
316
|
tFixedArray,
|
|
317
|
+
tCursorArray,
|
|
291
318
|
tCallback,
|
|
292
319
|
tBind,
|
|
293
320
|
tFn,
|
|
294
321
|
type Ownership,
|
|
295
322
|
type ScalarDescriptorName,
|
|
296
|
-
type BoxedOptions,
|
|
297
|
-
type StructOptions,
|
|
298
|
-
type FundamentalOptions,
|
|
299
323
|
type ListDescriptorName,
|
|
300
324
|
};
|