@gtkx/codegen 1.0.0-rc.1 → 1.0.0-rc.2
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/dist/analysis/descriptor-render.d.ts +18 -11
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +275 -152
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +37 -34
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +34 -30
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +16 -16
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +139 -84
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/param-structure.d.ts +14 -13
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +104 -53
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +6 -5
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +69 -23
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/compile.d.ts +5 -5
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +70 -63
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +12 -11
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +194 -121
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts +6 -9
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +68 -133
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/pipeline.d.ts +8 -7
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +79 -53
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +21 -19
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +80 -71
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +6 -6
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +126 -84
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +28 -5
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +66 -13
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +13 -0
- package/dist/gi.d.ts.map +1 -0
- package/dist/gi.js +21 -0
- package/dist/gi.js.map +1 -0
- package/dist/gir/ancestry.d.ts +4 -3
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +12 -15
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/callback.d.ts +6 -11
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +6 -7
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +7 -5
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +14 -12
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +3 -3
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +7 -6
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +8 -3
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +30 -7
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +6 -3
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +23 -7
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +2 -1
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +26 -10
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +3 -2
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +39 -27
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +17 -11
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +116 -92
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +10 -10
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +21 -20
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/nullable-overrides.d.ts +3 -0
- package/dist/gir/nullable-overrides.d.ts.map +1 -0
- package/dist/gir/nullable-overrides.js +5 -0
- package/dist/gir/nullable-overrides.js.map +1 -0
- package/dist/gir/parameter.d.ts +14 -12
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +27 -18
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +12 -13
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +50 -40
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +5 -4
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js +4 -3
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +5 -4
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +10 -9
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +5 -4
- package/dist/gir/record.d.ts.map +1 -1
- package/dist/gir/record.js +13 -12
- package/dist/gir/record.js.map +1 -1
- package/dist/gir/size.d.ts +6 -5
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +49 -47
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +17 -15
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +5 -1
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.d.ts +3 -2
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +36 -25
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +3 -2
- package/dist/gir/type.d.ts.map +1 -1
- package/dist/gir/type.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/jsx.d.ts +26 -0
- package/dist/jsx.d.ts.map +1 -0
- package/dist/jsx.js +40 -0
- package/dist/jsx.js.map +1 -0
- package/dist/khronos/args.d.ts +7 -7
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +88 -67
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/jsdoc.d.ts +4 -4
- package/dist/khronos/jsdoc.d.ts.map +1 -1
- package/dist/khronos/jsdoc.js +29 -16
- package/dist/khronos/jsdoc.js.map +1 -1
- package/dist/khronos/model.d.ts +8 -7
- package/dist/khronos/model.d.ts.map +1 -1
- package/dist/khronos/model.js +94 -59
- package/dist/khronos/model.js.map +1 -1
- package/dist/khronos/modules.d.ts +4 -3
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +40 -25
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/param-pair.d.ts +11 -0
- package/dist/khronos/param-pair.d.ts.map +1 -0
- package/dist/khronos/param-pair.js +6 -0
- package/dist/khronos/param-pair.js.map +1 -0
- package/dist/khronos/parse.d.ts +7 -8
- package/dist/khronos/parse.d.ts.map +1 -1
- package/dist/khronos/parse.js +17 -16
- package/dist/khronos/parse.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +4 -4
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +97 -56
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +11 -10
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +109 -45
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts +5 -4
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +106 -59
- package/dist/khronos/render.js.map +1 -1
- package/dist/khronos/select.d.ts +4 -4
- package/dist/khronos/select.d.ts.map +1 -1
- package/dist/khronos/select.js +30 -19
- package/dist/khronos/select.js.map +1 -1
- package/dist/react/element-config.d.ts +17 -0
- package/dist/react/element-config.d.ts.map +1 -0
- package/dist/react/element-config.js +61 -0
- package/dist/react/element-config.js.map +1 -0
- package/dist/runner.d.ts +17 -10
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +45 -43
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +5 -3
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +24 -22
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/async.d.ts +2 -1
- package/dist/store/gi/async.d.ts.map +1 -1
- package/dist/store/gi/async.js +28 -24
- package/dist/store/gi/async.js.map +1 -1
- package/dist/store/gi/callables.d.ts +26 -20
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +162 -100
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts +3 -2
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +6 -3
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class-struct-record.d.ts +4 -3
- package/dist/store/gi/class-struct-record.d.ts.map +1 -1
- package/dist/store/gi/class-struct-record.js +33 -15
- package/dist/store/gi/class-struct-record.js.map +1 -1
- package/dist/store/gi/class.d.ts +2 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +86 -47
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/companion.d.ts +2 -1
- package/dist/store/gi/companion.d.ts.map +1 -1
- package/dist/store/gi/companion.js +8 -5
- package/dist/store/gi/companion.js.map +1 -1
- package/dist/store/gi/constant.d.ts +3 -2
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +25 -8
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts +3 -2
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +17 -10
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/enum.d.ts +3 -2
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +14 -11
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts +5 -4
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +50 -23
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts +4 -4
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +15 -11
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts +2 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +36 -18
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/item-comparators.d.ts +3 -2
- package/dist/store/gi/item-comparators.d.ts.map +1 -1
- package/dist/store/gi/item-comparators.js +33 -21
- package/dist/store/gi/item-comparators.js.map +1 -1
- package/dist/store/gi/method.d.ts +13 -13
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +187 -130
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +7 -6
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +26 -13
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts +2 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +38 -23
- 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 -4
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +11 -10
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +86 -60
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts +3 -2
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +36 -25
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +8 -8
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +171 -99
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts +6 -5
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +75 -39
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts +2 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +19 -13
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +3 -3
- package/dist/store/gi/registration.d.ts.map +1 -1
- package/dist/store/gi/registration.js +3 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.d.ts +2 -2
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +43 -22
- package/dist/store/gi/return-wrap.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 +6 -3
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.d.ts +3 -2
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +113 -66
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +2 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +60 -30
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +5 -4
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +4 -2
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +23 -0
- package/dist/store/jsx/element-components.d.ts.map +1 -0
- package/dist/store/jsx/element-components.js +86 -0
- package/dist/store/jsx/element-components.js.map +1 -0
- package/dist/store/jsx/element-prop-imports.d.ts +17 -0
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
- package/dist/store/jsx/element-prop-imports.js +15 -0
- package/dist/store/jsx/element-prop-imports.js.map +1 -0
- package/dist/store/jsx/element-prop-types.d.ts +10 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
- package/dist/store/jsx/element-prop-types.js +41 -0
- package/dist/store/jsx/element-prop-types.js.map +1 -0
- package/dist/store/jsx/gir-index.d.ts +16 -0
- package/dist/store/jsx/gir-index.d.ts.map +1 -0
- package/dist/store/jsx/gir-index.js +33 -0
- package/dist/store/jsx/gir-index.js.map +1 -0
- package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
- package/dist/store/jsx/intrinsic-elements.js +128 -0
- package/dist/store/jsx/intrinsic-elements.js.map +1 -0
- package/dist/store/{react → jsx}/jsx.d.ts +2 -4
- package/dist/store/jsx/jsx.d.ts.map +1 -0
- package/dist/store/{react → jsx}/jsx.js +110 -71
- package/dist/store/jsx/jsx.js.map +1 -0
- package/dist/store/jsx/metadata.d.ts +4 -0
- package/dist/store/jsx/metadata.d.ts.map +1 -0
- package/dist/store/{react → jsx}/metadata.js +148 -69
- package/dist/store/jsx/metadata.js.map +1 -0
- package/dist/store/jsx/pipeline.d.ts +21 -0
- package/dist/store/jsx/pipeline.d.ts.map +1 -0
- package/dist/store/{react → jsx}/pipeline.js +36 -15
- package/dist/store/jsx/pipeline.js.map +1 -0
- package/dist/store/{react → jsx}/props.d.ts +9 -12
- package/dist/store/jsx/props.d.ts.map +1 -0
- package/dist/store/jsx/props.js +158 -0
- package/dist/store/jsx/props.js.map +1 -0
- package/dist/store/jsx-store.d.ts +5 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +4 -1
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +14 -12
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +9 -7
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts +2 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +12 -6
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/doc.d.ts +2 -1
- package/dist/writer/doc.d.ts.map +1 -1
- package/dist/writer/doc.js +13 -7
- package/dist/writer/doc.js.map +1 -1
- package/dist/writer/emit.d.ts +8 -7
- package/dist/writer/emit.d.ts.map +1 -1
- package/dist/writer/emit.js +13 -10
- package/dist/writer/emit.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts +2 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +29 -18
- package/dist/writer/gtk-doc.js.map +1 -1
- package/dist/writer/imports.d.ts +4 -2
- package/dist/writer/imports.d.ts.map +1 -1
- package/dist/writer/imports.js +35 -24
- package/dist/writer/imports.js.map +1 -1
- package/dist/writer/module.d.ts +3 -2
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +16 -9
- package/dist/writer/module.js.map +1 -1
- package/dist/xml.d.ts +4 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +10 -0
- package/dist/xml.js.map +1 -0
- package/overrides/cairo/context.ts.ejs +7 -7
- package/overrides/cairo/matrix.ts.ejs +2 -2
- package/overrides/cairo/recording-surface.ts.ejs +2 -2
- package/overrides/cairo/region.ts.ejs +1 -1
- package/overrides/cairo/scaled-font.ts.ejs +3 -3
- package/package.json +15 -9
- package/src/analysis/descriptor-render.ts +484 -168
- package/src/analysis/descriptor.ts +162 -125
- package/src/analysis/inheritance.ts +286 -98
- package/src/analysis/param-structure.ts +188 -57
- package/src/analysis/ts-type.ts +112 -26
- package/src/compile.ts +103 -76
- package/src/docs/api-reference.ts +340 -144
- package/src/docs/element-page.ts +137 -146
- package/src/docs/pipeline.ts +132 -73
- package/src/docs/render.ts +151 -87
- package/src/docs/symbol-page.ts +268 -123
- package/src/fingerprint.ts +127 -29
- package/src/gi.ts +26 -0
- package/src/gir/ancestry.ts +26 -14
- package/src/gir/callback.ts +10 -15
- package/src/gir/class.ts +20 -16
- package/src/gir/enum.ts +9 -7
- package/src/gir/field.ts +37 -8
- package/src/gir/function.ts +33 -9
- package/src/gir/gir-path.ts +36 -12
- package/src/gir/libraries.ts +56 -31
- package/src/gir/library.ts +200 -97
- package/src/gir/namespace.ts +42 -26
- package/src/gir/nullable-overrides.ts +5 -0
- package/src/gir/parameter.ts +80 -42
- package/src/gir/parse.ts +102 -47
- package/src/gir/primitives.ts +25 -23
- package/src/gir/property.ts +13 -11
- package/src/gir/record.ts +16 -14
- package/src/gir/size.ts +91 -58
- package/src/gir/type-id.ts +33 -18
- package/src/gir/type-ref.ts +62 -26
- package/src/gir/type.ts +10 -8
- package/src/index.ts +7 -0
- package/src/jsx.ts +70 -0
- package/src/khronos/args.ts +158 -89
- package/src/khronos/jsdoc.ts +67 -29
- package/src/khronos/model.ts +154 -53
- package/src/khronos/modules.ts +67 -27
- package/src/khronos/param-pair.ts +14 -0
- package/src/khronos/parse.ts +37 -17
- package/src/khronos/pipeline.ts +193 -90
- package/src/khronos/plan.ts +235 -86
- package/src/khronos/render.ts +208 -71
- package/src/khronos/select.ts +48 -18
- package/src/react/element-config.ts +91 -0
- package/src/runner.ts +93 -57
- package/src/store/compile-store.ts +32 -26
- package/src/store/gi/async.ts +48 -21
- package/src/store/gi/callables.ts +345 -136
- package/src/store/gi/callback.ts +13 -4
- package/src/store/gi/class-struct-record.ts +49 -17
- package/src/store/gi/class.ts +186 -64
- package/src/store/gi/companion.ts +15 -6
- package/src/store/gi/constant.ts +42 -8
- package/src/store/gi/constructor-props.ts +42 -16
- package/src/store/gi/enum.ts +28 -13
- package/src/store/gi/function.ts +90 -24
- package/src/store/gi/gtype-binding.ts +31 -18
- package/src/store/gi/interface.ts +101 -36
- package/src/store/gi/item-comparators.ts +74 -26
- package/src/store/gi/method.ts +376 -159
- package/src/store/gi/param-marshal.ts +38 -15
- package/src/store/gi/pipeline.ts +72 -22
- package/src/store/gi/properties.ts +16 -5
- package/src/store/gi/property-accessor.ts +192 -84
- package/src/store/gi/record-constructor.ts +62 -30
- package/src/store/gi/record-field-accessor.ts +380 -167
- package/src/store/gi/record-layout.ts +130 -43
- package/src/store/gi/record.ts +37 -14
- package/src/store/gi/registration.ts +15 -9
- package/src/store/gi/return-wrap.ts +71 -23
- package/src/store/gi/runtime-override.ts +13 -3
- package/src/store/gi/signal.ts +244 -104
- package/src/store/gi/vtable.ts +117 -41
- package/src/store/gi-store.ts +26 -13
- package/src/store/jsx/element-components.ts +152 -0
- package/src/store/jsx/element-prop-imports.ts +24 -0
- package/src/store/jsx/element-prop-types.ts +59 -0
- package/src/store/jsx/gir-index.ts +62 -0
- package/src/store/jsx/intrinsic-elements.ts +262 -0
- package/src/store/{react → jsx}/jsx.ts +213 -99
- package/src/store/jsx/metadata.ts +385 -0
- package/src/store/jsx/pipeline.ts +145 -0
- package/src/store/jsx/props.ts +274 -0
- package/src/store/jsx-store.ts +15 -3
- package/src/store/store-fs.ts +36 -20
- package/src/writer/context.ts +25 -6
- package/src/writer/doc.ts +19 -5
- package/src/writer/emit.ts +20 -11
- package/src/writer/gtk-doc.ts +48 -21
- package/src/writer/imports.ts +63 -28
- package/src/writer/module.ts +35 -11
- package/src/xml.ts +12 -0
- package/dist/store/react/built-ins.d.ts +0 -9
- package/dist/store/react/built-ins.d.ts.map +0 -1
- package/dist/store/react/built-ins.js +0 -226
- package/dist/store/react/built-ins.js.map +0 -1
- package/dist/store/react/element-components.d.ts +0 -15
- package/dist/store/react/element-components.d.ts.map +0 -1
- package/dist/store/react/element-components.js +0 -92
- package/dist/store/react/element-components.js.map +0 -1
- package/dist/store/react/element-prop-types.d.ts +0 -19
- package/dist/store/react/element-prop-types.d.ts.map +0 -1
- package/dist/store/react/element-prop-types.js +0 -244
- package/dist/store/react/element-prop-types.js.map +0 -1
- package/dist/store/react/element-props.d.ts +0 -4
- package/dist/store/react/element-props.d.ts.map +0 -1
- package/dist/store/react/element-props.js +0 -178
- package/dist/store/react/element-props.js.map +0 -1
- package/dist/store/react/gir-index.d.ts +0 -25
- package/dist/store/react/gir-index.d.ts.map +0 -1
- package/dist/store/react/gir-index.js +0 -55
- package/dist/store/react/gir-index.js.map +0 -1
- package/dist/store/react/intrinsic-elements.d.ts +0 -26
- package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
- package/dist/store/react/intrinsic-elements.js +0 -107
- package/dist/store/react/intrinsic-elements.js.map +0 -1
- package/dist/store/react/jsx.d.ts.map +0 -1
- package/dist/store/react/jsx.js.map +0 -1
- package/dist/store/react/metadata.d.ts +0 -4
- package/dist/store/react/metadata.d.ts.map +0 -1
- package/dist/store/react/metadata.js.map +0 -1
- package/dist/store/react/pipeline.d.ts +0 -14
- package/dist/store/react/pipeline.d.ts.map +0 -1
- package/dist/store/react/pipeline.js.map +0 -1
- package/dist/store/react/props.d.ts.map +0 -1
- package/dist/store/react/props.js +0 -133
- package/dist/store/react/props.js.map +0 -1
- package/overrides/gtk/constants.ts.ejs +0 -3
- package/overrides/gtk/index.ts.ejs +0 -2
- package/src/store/react/built-ins.ts +0 -260
- package/src/store/react/element-components.ts +0 -138
- package/src/store/react/element-prop-types.ts +0 -280
- package/src/store/react/element-props.ts +0 -204
- package/src/store/react/gir-index.ts +0 -85
- package/src/store/react/intrinsic-elements.ts +0 -161
- package/src/store/react/metadata.ts +0 -197
- package/src/store/react/pipeline.ts +0 -90
- package/src/store/react/props.ts +0 -197
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { sourceStringLiteral } from "@gtkx/utils";
|
|
2
2
|
import type { GirCallback } from "../gir/callback.js";
|
|
3
3
|
import type { Library } from "../gir/library.js";
|
|
4
|
+
import type { PrimitiveCategory } from "../gir/primitives.js";
|
|
5
|
+
import type { EntityType, GirType } from "../gir/type.js";
|
|
6
|
+
import type { ModuleContext } from "../writer/context.js";
|
|
4
7
|
import {
|
|
5
8
|
type GirParameter,
|
|
6
9
|
type GirReturnValue,
|
|
@@ -9,12 +12,15 @@ import {
|
|
|
9
12
|
isOutParameter,
|
|
10
13
|
type ParameterTransfer,
|
|
11
14
|
} from "../gir/parameter.js";
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
import {
|
|
16
|
+
type CArrayType,
|
|
17
|
+
hasUnknownArrayLength,
|
|
18
|
+
type ListFlavor,
|
|
19
|
+
type ListType,
|
|
20
|
+
type TypeId,
|
|
21
|
+
} from "../gir/type-id.js";
|
|
15
22
|
import { isRecordInout } from "../store/gi/param-marshal.js";
|
|
16
23
|
import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
|
|
17
|
-
import type { ModuleContext } from "../writer/context.js";
|
|
18
24
|
import {
|
|
19
25
|
type ListDescriptorName,
|
|
20
26
|
type Ownership,
|
|
@@ -42,246 +48,452 @@ import {
|
|
|
42
48
|
tVoid,
|
|
43
49
|
} from "./descriptor.js";
|
|
44
50
|
|
|
51
|
+
type RenderDescriptorOptions = {
|
|
52
|
+
argIndexOffset?: number;
|
|
53
|
+
/** GIR parameter index to emitted argument index, for callables that drop parameters. */
|
|
54
|
+
argIndexMap?: Map<number, number> | undefined;
|
|
55
|
+
callerAllocated?: boolean;
|
|
56
|
+
isInline?: boolean;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
type ArgIndexOptions = {
|
|
60
|
+
argIndexOffset: number;
|
|
61
|
+
argIndexMap: Map<number, number> | undefined;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
type RecordPlacement = {
|
|
65
|
+
isCallerAllocated?: boolean;
|
|
66
|
+
isInline?: boolean;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
type FundamentalDescriptor = {
|
|
70
|
+
lib: string;
|
|
71
|
+
refFunc: string;
|
|
72
|
+
unrefFunc: string;
|
|
73
|
+
typeName: string | undefined;
|
|
74
|
+
ownership: Ownership;
|
|
75
|
+
wrapperClass?: string | undefined;
|
|
76
|
+
inline?: boolean | undefined;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
type AncestorFundamental = {
|
|
80
|
+
lib: string;
|
|
81
|
+
refFunc: string;
|
|
82
|
+
unrefFunc: string;
|
|
83
|
+
typeName: string | undefined;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
type ResolvedRecord = Extract<EntityType, { kind: "record" }>["value"];
|
|
87
|
+
|
|
88
|
+
type FundamentalRecordOptions = {
|
|
89
|
+
resolved: Extract<EntityType, { kind: "record" }>;
|
|
90
|
+
refFunc: string;
|
|
91
|
+
unrefFunc: string;
|
|
92
|
+
ownership: Ownership;
|
|
93
|
+
wrapperClass: string | undefined;
|
|
94
|
+
inline: boolean;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const LIST_HELPERS: Record<Exclude<ListFlavor, "gbytearray">, ListDescriptorName> = {
|
|
98
|
+
glist: "list",
|
|
99
|
+
gslist: "slist",
|
|
100
|
+
gptrarray: "ptrArray",
|
|
101
|
+
garray: "gArray",
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// A callable that drops parameters (varargs, and the closure/destroy slots folded into a callback)
|
|
105
|
+
// shifts every later parameter left, so a GIR length index has to be looked up in the emitted list
|
|
106
|
+
// rather than shifted by the instance offset alone.
|
|
107
|
+
const mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>
|
|
108
|
+
options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;
|
|
109
|
+
|
|
45
110
|
const transferOwnership = (transfer: ParameterTransfer): Ownership => {
|
|
46
|
-
if (transfer === "full")
|
|
47
|
-
|
|
111
|
+
if (transfer === "full") {
|
|
112
|
+
return "full";
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (transfer === "container") {
|
|
116
|
+
return "full";
|
|
117
|
+
}
|
|
118
|
+
|
|
48
119
|
return "borrowed";
|
|
49
120
|
};
|
|
50
121
|
|
|
51
122
|
const deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>
|
|
52
123
|
transfer === "container" ? "none" : transfer;
|
|
53
124
|
|
|
54
|
-
type RenderDescriptorOptions = {
|
|
55
|
-
argIndexOffset?: number;
|
|
56
|
-
callerAllocated?: boolean;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
125
|
const isVoidRef = (library: Library, ref: TypeId | undefined): boolean => {
|
|
60
|
-
if (ref === undefined)
|
|
61
|
-
|
|
126
|
+
if (ref === undefined) {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const type = library.typeFor(ref);
|
|
131
|
+
|
|
62
132
|
return type?.kind === "primitive" && type.category === "void";
|
|
63
133
|
};
|
|
64
134
|
|
|
65
|
-
|
|
66
|
-
ref !== undefined && library.
|
|
135
|
+
const isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>
|
|
136
|
+
ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
|
|
67
137
|
|
|
68
|
-
|
|
138
|
+
const shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
|
|
69
139
|
isVoidRef(library, returnValue.type) || returnValue.skip;
|
|
70
140
|
|
|
71
|
-
|
|
141
|
+
const renderDescriptor = (
|
|
72
142
|
context: ModuleContext,
|
|
73
143
|
ref: TypeId | undefined,
|
|
74
144
|
transfer: ParameterTransfer = "none",
|
|
75
145
|
options: RenderDescriptorOptions = {},
|
|
76
146
|
): string => {
|
|
77
|
-
if (ref === undefined)
|
|
147
|
+
if (ref === undefined) {
|
|
148
|
+
return tVoid;
|
|
149
|
+
}
|
|
150
|
+
|
|
78
151
|
const { argIndexOffset = 0 } = options;
|
|
152
|
+
const indexOptions: ArgIndexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };
|
|
79
153
|
const ownership = transferOwnership(transfer);
|
|
80
|
-
const type = context.library.
|
|
81
|
-
|
|
154
|
+
const type = context.library.typeFor(ref);
|
|
155
|
+
|
|
156
|
+
if (type === undefined) {
|
|
157
|
+
return tObject(ownership);
|
|
158
|
+
}
|
|
159
|
+
|
|
82
160
|
switch (type.kind) {
|
|
83
|
-
case "primitive":
|
|
161
|
+
case "primitive": {
|
|
84
162
|
return primitiveExpression(type.category, ownership);
|
|
85
|
-
|
|
86
|
-
case "
|
|
163
|
+
}
|
|
164
|
+
case "varargs": {
|
|
87
165
|
return tVoid;
|
|
166
|
+
}
|
|
167
|
+
// A callback in a slot no `renderCallbackType` covers (a vtable entry, a signal argument, a
|
|
168
|
+
// record field) is still a function pointer occupying a pointer-sized slot. `t.void` would
|
|
169
|
+
// hand the implementation `undefined` where the pointer belongs.
|
|
170
|
+
case "callback": {
|
|
171
|
+
return tUint64;
|
|
172
|
+
}
|
|
88
173
|
case "class":
|
|
89
174
|
case "interface":
|
|
90
175
|
case "record":
|
|
91
176
|
case "enum":
|
|
92
|
-
case "alias":
|
|
177
|
+
case "alias": {
|
|
93
178
|
return expressionForResolved(context, type, transfer, options);
|
|
94
|
-
|
|
95
|
-
|
|
179
|
+
}
|
|
180
|
+
case "carray": {
|
|
181
|
+
return arrayExpression(context, type, transfer, indexOptions);
|
|
182
|
+
}
|
|
96
183
|
case "list": {
|
|
97
|
-
|
|
98
|
-
const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), {
|
|
99
|
-
argIndexOffset,
|
|
100
|
-
});
|
|
101
|
-
return tList(LIST_HELPERS[type.flavor], element, ownership);
|
|
184
|
+
return listExpression(context, type, transfer, indexOptions);
|
|
102
185
|
}
|
|
103
186
|
case "hashtable": {
|
|
104
187
|
const elementTransfer = deriveElementTransfer(transfer);
|
|
105
|
-
const key = renderDescriptor(context, type.key, elementTransfer,
|
|
106
|
-
const value = renderDescriptor(context, type.value, elementTransfer,
|
|
188
|
+
const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);
|
|
189
|
+
const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);
|
|
190
|
+
|
|
107
191
|
return tHashTable(key, value, ownership);
|
|
108
192
|
}
|
|
109
193
|
}
|
|
110
194
|
};
|
|
111
195
|
|
|
196
|
+
const listExpression = (
|
|
197
|
+
context: ModuleContext,
|
|
198
|
+
type: ListType,
|
|
199
|
+
transfer: ParameterTransfer,
|
|
200
|
+
indexOptions: ArgIndexOptions,
|
|
201
|
+
): string => {
|
|
202
|
+
const ownership = transferOwnership(transfer);
|
|
203
|
+
|
|
204
|
+
if (type.flavor === "gbytearray") {
|
|
205
|
+
return tByteArray(ownership);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);
|
|
209
|
+
|
|
210
|
+
return tList(LIST_HELPERS[type.flavor], element, ownership);
|
|
211
|
+
};
|
|
212
|
+
|
|
112
213
|
const resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {
|
|
113
|
-
if (ref === undefined)
|
|
114
|
-
|
|
115
|
-
|
|
214
|
+
if (ref === undefined) {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const type = context.library.typeFor(ref);
|
|
219
|
+
|
|
220
|
+
if (type?.kind !== "callback") {
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
|
|
116
224
|
return type.value;
|
|
117
225
|
};
|
|
118
226
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
227
|
+
const isScalarType = (library: Library, type: GirType): boolean => {
|
|
228
|
+
switch (type.kind) {
|
|
229
|
+
case "primitive": {
|
|
230
|
+
return type.category !== "string" && type.category !== "void";
|
|
231
|
+
}
|
|
232
|
+
case "enum": {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
case "alias": {
|
|
236
|
+
return type.value.target !== undefined && isScalarRef(library, type.value.target);
|
|
237
|
+
}
|
|
238
|
+
case "callback":
|
|
239
|
+
case "carray":
|
|
240
|
+
case "class":
|
|
241
|
+
case "hashtable":
|
|
242
|
+
case "interface":
|
|
243
|
+
case "list":
|
|
244
|
+
case "record":
|
|
245
|
+
case "varargs": {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
const isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {
|
|
252
|
+
if (ref === undefined) {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const type = library.typeFor(ref);
|
|
257
|
+
|
|
258
|
+
return type !== undefined && isScalarType(library, type);
|
|
127
259
|
};
|
|
128
260
|
|
|
129
|
-
|
|
261
|
+
const isCellInout = (library: Library, parameter: GirParameter): boolean =>
|
|
130
262
|
isInoutParameter(parameter) && isScalarRef(library, parameter.type);
|
|
131
263
|
|
|
132
|
-
|
|
264
|
+
const renderParamDescriptor = (
|
|
133
265
|
context: ModuleContext,
|
|
134
266
|
parameter: GirParameter,
|
|
135
267
|
ref: TypeId | undefined,
|
|
268
|
+
argIndex: Partial<ArgIndexOptions> = {},
|
|
136
269
|
): string => {
|
|
137
270
|
if (isCellInout(context.library, parameter)) {
|
|
138
|
-
return tRef(renderDescriptor(context, ref, parameter.transferOwnership), true);
|
|
271
|
+
return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);
|
|
139
272
|
}
|
|
273
|
+
|
|
140
274
|
if (isOutParameter(parameter)) {
|
|
141
|
-
return tRef(renderDescriptor(context, ref, parameter.transferOwnership));
|
|
275
|
+
return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));
|
|
142
276
|
}
|
|
277
|
+
|
|
143
278
|
return renderDescriptor(context, ref, parameter.transferOwnership, {
|
|
279
|
+
...argIndex,
|
|
144
280
|
callerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),
|
|
145
281
|
});
|
|
146
282
|
};
|
|
147
283
|
|
|
148
|
-
|
|
284
|
+
// `closure=` on a callback's own parameter states which slot carries the user data, and it is what
|
|
285
|
+
// the TypeScript signature already goes by. The name scan stays as a fallback: 88 callbacks across
|
|
286
|
+
// the installed GIRs carry no `closure=` at all.
|
|
287
|
+
const userDataIndexByName = (parameters: GirParameter[]): number | undefined => {
|
|
288
|
+
let userDataIndex: number | undefined;
|
|
289
|
+
|
|
290
|
+
for (const [index, parameter] of parameters.entries()) {
|
|
291
|
+
if (parameter.name === "user_data" || parameter.name === "data") {
|
|
292
|
+
userDataIndex = index;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return userDataIndex;
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
const findUserDataIndex = (parameters: GirParameter[]): number | undefined => {
|
|
300
|
+
const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);
|
|
301
|
+
|
|
302
|
+
return declared?.closureIndex ?? userDataIndexByName(parameters);
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string | undefined => {
|
|
306
|
+
const options: string[] = [];
|
|
307
|
+
|
|
308
|
+
if (owningParameter.destroyIndex !== undefined) {
|
|
309
|
+
options.push("hasDestroy: true");
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (userDataIndex !== undefined) {
|
|
313
|
+
options.push(`userDataIndex: ${String(userDataIndex)}`);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (owningParameter.scope !== undefined) {
|
|
317
|
+
options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return options.length > 0 ? `{ ${options.join(", ")} }` : undefined;
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
const renderCallbackType = (
|
|
149
324
|
context: ModuleContext,
|
|
150
325
|
ref: TypeId | undefined,
|
|
151
326
|
owningParameter: GirParameter,
|
|
152
327
|
argOverrides?: Map<number, string>,
|
|
153
328
|
): string | undefined => {
|
|
154
329
|
const callback = resolveCallbackType(context, ref);
|
|
155
|
-
|
|
330
|
+
|
|
331
|
+
if (callback === undefined) {
|
|
332
|
+
return undefined;
|
|
333
|
+
}
|
|
334
|
+
|
|
156
335
|
const argTypes = callback.parameters.map(
|
|
157
336
|
(parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),
|
|
158
337
|
);
|
|
159
|
-
|
|
160
|
-
callback.parameters.forEach((parameter, index) => {
|
|
161
|
-
if (parameter.name === "user_data" || parameter.name === "data") userDataIndex = index;
|
|
162
|
-
});
|
|
338
|
+
|
|
163
339
|
const returnRef = callback.returnValue.type;
|
|
340
|
+
|
|
164
341
|
const returnType = isVoidRef(context.library, returnRef)
|
|
165
342
|
? tVoid
|
|
166
343
|
: renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);
|
|
167
|
-
const options: string[] = [];
|
|
168
|
-
if (owningParameter.destroyIndex !== undefined) options.push("hasDestroy: true");
|
|
169
|
-
if (userDataIndex !== undefined) options.push(`userDataIndex: ${userDataIndex}`);
|
|
170
|
-
if (owningParameter.scope !== undefined) options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
|
|
171
|
-
const optionsArg = options.length > 0 ? `{ ${options.join(", ")} }` : undefined;
|
|
172
|
-
return tCallback(argTypes, returnType, optionsArg);
|
|
173
|
-
};
|
|
174
344
|
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
gptrarray: "ptrArray",
|
|
179
|
-
garray: "gArray",
|
|
345
|
+
const optionsArg = callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters));
|
|
346
|
+
|
|
347
|
+
return tCallback(argTypes, returnType, optionsArg);
|
|
180
348
|
};
|
|
181
349
|
|
|
182
350
|
const primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {
|
|
183
|
-
if (category === "void")
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (category === "gtype") return tGtype;
|
|
187
|
-
return tScalar(category satisfies ScalarDescriptorName);
|
|
188
|
-
};
|
|
351
|
+
if (category === "void") {
|
|
352
|
+
return tVoid;
|
|
353
|
+
}
|
|
189
354
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
unrefFunc: string;
|
|
194
|
-
typeName: string | undefined;
|
|
195
|
-
ownership: Ownership;
|
|
196
|
-
wrapperClass?: string | undefined;
|
|
197
|
-
};
|
|
355
|
+
if (category === "string") {
|
|
356
|
+
return tString(ownership);
|
|
357
|
+
}
|
|
198
358
|
|
|
199
|
-
|
|
200
|
-
|
|
359
|
+
if (category === "pointer") {
|
|
360
|
+
return tUint64;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
if (category === "gtype") {
|
|
364
|
+
return tGtype;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
return tScalar(category satisfies ScalarDescriptorName);
|
|
368
|
+
};
|
|
201
369
|
|
|
202
370
|
const renderFundamental = (descriptor: FundamentalDescriptor): string => {
|
|
203
|
-
const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass } = descriptor;
|
|
204
|
-
|
|
371
|
+
const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, inline } = descriptor;
|
|
372
|
+
|
|
373
|
+
return tFundamental(lib, refFunc, unrefFunc, {
|
|
205
374
|
ownership,
|
|
206
375
|
typeName,
|
|
207
376
|
wrapperClass,
|
|
377
|
+
inline,
|
|
208
378
|
});
|
|
209
379
|
};
|
|
210
380
|
|
|
381
|
+
// GIR marks only the root of a fundamental hierarchy with `glib:fundamental` and its ref/unref pair,
|
|
382
|
+
// so a derived type such as GtkPropertyExpression carries neither and has to inherit both.
|
|
211
383
|
const classOrInterfaceExpression = (
|
|
384
|
+
context: ModuleContext,
|
|
212
385
|
resolved: Extract<EntityType, { kind: "class" | "interface" }>,
|
|
213
386
|
ownership: Ownership,
|
|
214
387
|
): string => {
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
388
|
+
const ancestor = fundamentalAncestor(context, resolved);
|
|
389
|
+
|
|
390
|
+
return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
const isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: "class" | "interface" }> =>
|
|
394
|
+
type !== undefined && (type.kind === "class" || type.kind === "interface");
|
|
395
|
+
|
|
396
|
+
const getFundamental = (
|
|
397
|
+
node: Extract<EntityType, { kind: "class" | "interface" }>,
|
|
398
|
+
): AncestorFundamental | undefined => {
|
|
399
|
+
const cls = node.value;
|
|
400
|
+
|
|
401
|
+
if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
|
|
402
|
+
return undefined;
|
|
218
403
|
}
|
|
219
|
-
|
|
220
|
-
|
|
404
|
+
|
|
405
|
+
return {
|
|
406
|
+
lib: node.namespace.sharedLibrary ?? "",
|
|
221
407
|
refFunc: cls.glibRefFunc,
|
|
222
408
|
unrefFunc: cls.glibUnrefFunc,
|
|
223
409
|
typeName: cls.glibTypeName,
|
|
224
|
-
|
|
225
|
-
});
|
|
410
|
+
};
|
|
226
411
|
};
|
|
227
412
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
413
|
+
const walkFundamental = (
|
|
414
|
+
context: ModuleContext,
|
|
415
|
+
current: GirType | undefined,
|
|
416
|
+
seen: Set<string>,
|
|
417
|
+
): AncestorFundamental | undefined => {
|
|
418
|
+
if (!isClassOrInterface(current)) {
|
|
419
|
+
return undefined;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const key = `${current.namespace.name}.${current.value.name}`;
|
|
423
|
+
|
|
424
|
+
if (seen.has(key)) {
|
|
425
|
+
return undefined;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
seen.add(key);
|
|
429
|
+
const fundamental = getFundamental(current);
|
|
430
|
+
|
|
431
|
+
if (fundamental !== undefined) {
|
|
432
|
+
return fundamental;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (current.value.parent === undefined) {
|
|
436
|
+
return undefined;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
const parent = context.library.resolveType(current.namespace.name, current.value.parent);
|
|
440
|
+
|
|
441
|
+
return walkFundamental(context, parent, seen);
|
|
233
442
|
};
|
|
234
443
|
|
|
235
444
|
const fundamentalAncestor = (
|
|
236
445
|
context: ModuleContext,
|
|
237
446
|
start: Extract<EntityType, { kind: "class" | "interface" }>,
|
|
238
|
-
): AncestorFundamental | undefined =>
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return {
|
|
248
|
-
lib: current.namespace.sharedLibrary ?? "",
|
|
249
|
-
refFunc: cls.glibRefFunc,
|
|
250
|
-
unrefFunc: cls.glibUnrefFunc,
|
|
251
|
-
typeName: cls.glibTypeName,
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
if (cls.parent === undefined) return undefined;
|
|
255
|
-
current = context.library.resolveType(current.namespace.name, cls.parent);
|
|
256
|
-
}
|
|
257
|
-
return undefined;
|
|
447
|
+
): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());
|
|
448
|
+
|
|
449
|
+
const classSelfDescriptor = (
|
|
450
|
+
context: ModuleContext,
|
|
451
|
+
type: Extract<EntityType, { kind: "class" | "interface" }>,
|
|
452
|
+
): string => {
|
|
453
|
+
const ancestor = fundamentalAncestor(context, type);
|
|
454
|
+
|
|
455
|
+
return ancestor === undefined ? tObject("borrowed") : renderFundamental({ ...ancestor, ownership: "borrowed" });
|
|
258
456
|
};
|
|
259
457
|
|
|
260
|
-
|
|
458
|
+
const renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {
|
|
261
459
|
const ref = instance.type;
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
460
|
+
|
|
461
|
+
if (ref === undefined) {
|
|
462
|
+
return tObject("borrowed");
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const type = context.library.typeFor(ref);
|
|
466
|
+
|
|
467
|
+
if (type === undefined) {
|
|
468
|
+
return tObject("borrowed");
|
|
268
469
|
}
|
|
470
|
+
|
|
471
|
+
if (isClassOrInterface(type)) {
|
|
472
|
+
return classSelfDescriptor(context, type);
|
|
473
|
+
}
|
|
474
|
+
|
|
269
475
|
if (type.kind === "record") {
|
|
270
476
|
return recordExpression(context, type, transferOwnership(instance.transferOwnership));
|
|
271
477
|
}
|
|
478
|
+
|
|
272
479
|
return tObject("borrowed");
|
|
273
480
|
};
|
|
274
481
|
|
|
275
|
-
|
|
276
|
-
|
|
482
|
+
// A record expresses its acquire/release pair as `copy-function`/`free-function`: no `<record>` in
|
|
483
|
+
// any installed GIR carries `glib:ref-func`, and GVariant's copy function really is
|
|
484
|
+
// `g_variant_ref_sink`.
|
|
277
485
|
const recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({
|
|
278
486
|
refFunc: record.glibRefFunc ?? record.copyFunc,
|
|
279
487
|
unrefFunc: record.glibUnrefFunc ?? record.freeFunc,
|
|
280
488
|
});
|
|
281
489
|
|
|
282
|
-
const
|
|
490
|
+
const requiresFallbackClass = (record: ResolvedRecord): boolean => {
|
|
283
491
|
const { refFunc, unrefFunc } = recordRefPair(record);
|
|
284
|
-
|
|
492
|
+
|
|
493
|
+
if (refFunc !== undefined && unrefFunc !== undefined) {
|
|
494
|
+
return record.glibTypeName === undefined;
|
|
495
|
+
}
|
|
496
|
+
|
|
285
497
|
return record.glibGetType === undefined;
|
|
286
498
|
};
|
|
287
499
|
|
|
@@ -289,51 +501,116 @@ const structExpression = (
|
|
|
289
501
|
context: ModuleContext,
|
|
290
502
|
resolved: Extract<EntityType, { kind: "record" }>,
|
|
291
503
|
ownership: Ownership,
|
|
292
|
-
callerAllocated: boolean,
|
|
504
|
+
options: { callerAllocated: boolean; inline: boolean },
|
|
293
505
|
): string => {
|
|
294
506
|
const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
|
|
295
507
|
const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
|
|
508
|
+
|
|
296
509
|
return tStruct(ownership, {
|
|
297
510
|
size: size > 0 ? size : undefined,
|
|
298
511
|
wrapperClass,
|
|
512
|
+
callerAllocated: options.callerAllocated,
|
|
513
|
+
inline: options.inline,
|
|
514
|
+
});
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
const fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {
|
|
518
|
+
const { resolved, refFunc, unrefFunc, ownership, wrapperClass, inline } = options;
|
|
519
|
+
|
|
520
|
+
return renderFundamental({
|
|
521
|
+
lib: resolved.namespace.sharedLibrary ?? "",
|
|
522
|
+
refFunc,
|
|
523
|
+
unrefFunc,
|
|
524
|
+
typeName: resolved.value.glibTypeName,
|
|
525
|
+
ownership,
|
|
526
|
+
wrapperClass,
|
|
527
|
+
inline,
|
|
528
|
+
});
|
|
529
|
+
};
|
|
530
|
+
|
|
531
|
+
const boxedRecordExpression = (options: {
|
|
532
|
+
context: ModuleContext;
|
|
533
|
+
resolved: Extract<EntityType, { kind: "record" }>;
|
|
534
|
+
ownership: Ownership;
|
|
535
|
+
callerAllocated: boolean;
|
|
536
|
+
inline: boolean;
|
|
537
|
+
typeFnName: string;
|
|
538
|
+
}): string => {
|
|
539
|
+
const { context, resolved, ownership, callerAllocated, inline, typeFnName } = options;
|
|
540
|
+
const record = resolved.value;
|
|
541
|
+
const glibName = record.glibTypeName ?? record.cType ?? record.name;
|
|
542
|
+
const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
|
|
543
|
+
|
|
544
|
+
return tBoxed(glibName, {
|
|
545
|
+
ownership,
|
|
546
|
+
sharedLibrary: resolved.namespace.sharedLibrary,
|
|
547
|
+
getTypeFnName: typeFnName,
|
|
299
548
|
callerAllocated,
|
|
549
|
+
inline,
|
|
550
|
+
size: size > 0 ? size : undefined,
|
|
300
551
|
});
|
|
301
552
|
};
|
|
302
553
|
|
|
554
|
+
const plainRecordExpression = (
|
|
555
|
+
context: ModuleContext,
|
|
556
|
+
resolved: Extract<EntityType, { kind: "record" }>,
|
|
557
|
+
ownership: Ownership,
|
|
558
|
+
placement: RecordPlacement,
|
|
559
|
+
): string => {
|
|
560
|
+
const record = resolved.value;
|
|
561
|
+
|
|
562
|
+
const layout = {
|
|
563
|
+
callerAllocated: placement.isCallerAllocated ?? false,
|
|
564
|
+
inline: placement.isInline ?? false,
|
|
565
|
+
};
|
|
566
|
+
|
|
567
|
+
if (record.glibGetType === undefined) {
|
|
568
|
+
return structExpression(context, resolved, ownership, layout);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });
|
|
572
|
+
};
|
|
573
|
+
|
|
303
574
|
const recordExpression = (
|
|
304
575
|
context: ModuleContext,
|
|
305
576
|
resolved: Extract<EntityType, { kind: "record" }>,
|
|
306
577
|
ownership: Ownership,
|
|
307
|
-
|
|
578
|
+
placement: RecordPlacement = {},
|
|
308
579
|
): string => {
|
|
309
580
|
const record = resolved.value;
|
|
310
581
|
const { refFunc, unrefFunc } = recordRefPair(record);
|
|
311
|
-
|
|
312
|
-
? context.qualify(resolved.namespace.name, record.name)
|
|
313
|
-
: undefined;
|
|
582
|
+
|
|
314
583
|
if (refFunc !== undefined && unrefFunc !== undefined) {
|
|
315
|
-
const
|
|
316
|
-
|
|
317
|
-
|
|
584
|
+
const wrapperClass = requiresFallbackClass(record)
|
|
585
|
+
? context.qualify(resolved.namespace.name, record.name)
|
|
586
|
+
: undefined;
|
|
587
|
+
|
|
588
|
+
return fundamentalRecordExpression({
|
|
589
|
+
resolved,
|
|
318
590
|
refFunc,
|
|
319
591
|
unrefFunc,
|
|
320
|
-
typeName: record.glibTypeName,
|
|
321
592
|
ownership,
|
|
322
593
|
wrapperClass,
|
|
594
|
+
inline: placement.isInline ?? false,
|
|
323
595
|
});
|
|
324
596
|
}
|
|
325
|
-
|
|
326
|
-
|
|
597
|
+
|
|
598
|
+
return plainRecordExpression(context, resolved, ownership, placement);
|
|
599
|
+
};
|
|
600
|
+
|
|
601
|
+
const rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);
|
|
602
|
+
|
|
603
|
+
const enumExpression = (resolved: Extract<EntityType, { kind: "enum" }>): string => {
|
|
604
|
+
const getter = resolved.value.glibGetType;
|
|
605
|
+
const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
|
|
606
|
+
|
|
607
|
+
if (getter === undefined || getter === "") {
|
|
608
|
+
return rawEnumDescriptor(isSigned);
|
|
327
609
|
}
|
|
328
|
-
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
sharedLibrary: resolved.namespace.sharedLibrary,
|
|
333
|
-
getTypeFnName: record.glibGetType,
|
|
334
|
-
callerAllocated,
|
|
335
|
-
size: size > 0 ? size : undefined,
|
|
336
|
-
});
|
|
610
|
+
|
|
611
|
+
const lib = resolved.namespace.sharedLibrary ?? "";
|
|
612
|
+
|
|
613
|
+
return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
|
|
337
614
|
};
|
|
338
615
|
|
|
339
616
|
const expressionForResolved = (
|
|
@@ -343,21 +620,24 @@ const expressionForResolved = (
|
|
|
343
620
|
options: RenderDescriptorOptions,
|
|
344
621
|
): string => {
|
|
345
622
|
const ownership = transferOwnership(transfer);
|
|
623
|
+
|
|
346
624
|
switch (resolved.kind) {
|
|
347
625
|
case "class":
|
|
348
|
-
case "interface":
|
|
349
|
-
return classOrInterfaceExpression(resolved, ownership);
|
|
350
|
-
|
|
351
|
-
|
|
626
|
+
case "interface": {
|
|
627
|
+
return classOrInterfaceExpression(context, resolved, ownership);
|
|
628
|
+
}
|
|
629
|
+
case "record": {
|
|
630
|
+
return recordExpression(context, resolved, ownership, {
|
|
631
|
+
isCallerAllocated: options.callerAllocated ?? false,
|
|
632
|
+
isInline: options.isInline ?? false,
|
|
633
|
+
});
|
|
634
|
+
}
|
|
352
635
|
case "enum": {
|
|
353
|
-
|
|
354
|
-
const signed = resolved.value.members.some((member) => member.value.startsWith("-"));
|
|
355
|
-
if (getter === undefined || getter === "") return signed ? tInt32 : tUint32;
|
|
356
|
-
const lib = resolved.namespace.sharedLibrary ?? "";
|
|
357
|
-
return resolved.value.kind === "bitfield" ? tFlags(lib, getter, signed) : tEnum(lib, getter, signed);
|
|
636
|
+
return enumExpression(resolved);
|
|
358
637
|
}
|
|
359
|
-
case "alias":
|
|
638
|
+
case "alias": {
|
|
360
639
|
return aliasExpression(context, resolved.value.target, transfer, options);
|
|
640
|
+
}
|
|
361
641
|
}
|
|
362
642
|
};
|
|
363
643
|
|
|
@@ -365,33 +645,57 @@ const arrayExpression = (
|
|
|
365
645
|
context: ModuleContext,
|
|
366
646
|
ref: CArrayType,
|
|
367
647
|
transfer: ParameterTransfer,
|
|
368
|
-
|
|
648
|
+
options: ArgIndexOptions,
|
|
369
649
|
): string => {
|
|
650
|
+
if (hasUnknownArrayLength(ref)) {
|
|
651
|
+
return tUint64;
|
|
652
|
+
}
|
|
653
|
+
|
|
370
654
|
const ownership = transferOwnership(transfer);
|
|
371
|
-
const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer),
|
|
655
|
+
const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);
|
|
372
656
|
const size = inlineElementSize(context, ref.element, ref.elementCType);
|
|
657
|
+
|
|
373
658
|
if (ref.lengthParameterIndex !== undefined) {
|
|
374
|
-
return tSizedArray(element, ref.lengthParameterIndex
|
|
659
|
+
return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);
|
|
375
660
|
}
|
|
661
|
+
|
|
376
662
|
if (ref.fixedSize !== undefined) {
|
|
377
663
|
return tFixedArray(element, ref.fixedSize, ownership, size);
|
|
378
664
|
}
|
|
665
|
+
|
|
379
666
|
return tArray(element, ownership, size);
|
|
380
667
|
};
|
|
381
668
|
|
|
669
|
+
const recordInlineSize = (context: ModuleContext, record: ResolvedRecord): number | undefined => {
|
|
670
|
+
if (record.opaque || record.disguised || record.fields.length === 0) {
|
|
671
|
+
return undefined;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
|
|
675
|
+
|
|
676
|
+
return size > 0 ? size : undefined;
|
|
677
|
+
};
|
|
678
|
+
|
|
382
679
|
const inlineElementSize = (
|
|
383
680
|
context: ModuleContext,
|
|
384
681
|
element: TypeId | undefined,
|
|
385
682
|
elementCType: string | undefined,
|
|
386
683
|
): number | undefined => {
|
|
387
|
-
if (element === undefined)
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
684
|
+
if (element === undefined) {
|
|
685
|
+
return undefined;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
if (elementCType?.includes("*")) {
|
|
689
|
+
return undefined;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
const type = context.library.typeFor(element);
|
|
693
|
+
|
|
694
|
+
if (type?.kind !== "record") {
|
|
695
|
+
return undefined;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
return recordInlineSize(context, type.value);
|
|
395
699
|
};
|
|
396
700
|
|
|
397
701
|
const aliasExpression = (
|
|
@@ -403,5 +707,17 @@ const aliasExpression = (
|
|
|
403
707
|
if (target === undefined) {
|
|
404
708
|
return tObject(transferOwnership(transfer));
|
|
405
709
|
}
|
|
710
|
+
|
|
406
711
|
return renderDescriptor(context, target, transfer, options);
|
|
407
712
|
};
|
|
713
|
+
|
|
714
|
+
export {
|
|
715
|
+
isInlineCallbackRef,
|
|
716
|
+
shouldOmitPrimaryReturn,
|
|
717
|
+
renderDescriptor,
|
|
718
|
+
isScalarRef,
|
|
719
|
+
isCellInout,
|
|
720
|
+
renderParamDescriptor,
|
|
721
|
+
renderCallbackType,
|
|
722
|
+
renderSelfDescriptor,
|
|
723
|
+
};
|