@gtkx/codegen 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/analysis/descriptor-render.d.ts +12 -15
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +59 -38
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +25 -10
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +37 -9
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +4 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +80 -38
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/interface-conflicts.d.ts +25 -0
- package/dist/analysis/interface-conflicts.d.ts.map +1 -0
- package/dist/analysis/interface-conflicts.js +139 -0
- package/dist/analysis/interface-conflicts.js.map +1 -0
- package/dist/analysis/param-capability.d.ts.map +1 -1
- package/dist/analysis/param-capability.js +3 -4
- package/dist/analysis/param-capability.js.map +1 -1
- package/dist/analysis/param-structure.js +2 -2
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +3 -2
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +26 -26
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-key.d.ts +5 -0
- package/dist/analysis/type-key.d.ts.map +1 -0
- package/dist/analysis/type-key.js +9 -0
- package/dist/analysis/type-key.js.map +1 -0
- package/dist/analysis/type-shape.d.ts +3 -2
- package/dist/analysis/type-shape.d.ts.map +1 -1
- package/dist/analysis/type-shape.js +2 -1
- package/dist/analysis/type-shape.js.map +1 -1
- package/dist/compile.d.ts +14 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +125 -24
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +11 -10
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +5 -3
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/pipeline.d.ts +1 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +93 -19
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +2 -1
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +5 -4
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +10 -9
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +20 -3
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +56 -37
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +1 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +8 -2
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +7 -1
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +9 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +1 -2
- package/dist/gir/annotations.d.ts.map +1 -1
- package/dist/gir/annotations.js +1 -1
- package/dist/gir/annotations.js.map +1 -1
- package/dist/gir/cursor-overrides.d.ts +8 -0
- package/dist/gir/cursor-overrides.d.ts.map +1 -0
- package/dist/gir/cursor-overrides.js +6 -0
- package/dist/gir/cursor-overrides.js.map +1 -0
- package/dist/gir/emittable.d.ts +7 -0
- package/dist/gir/emittable.d.ts.map +1 -0
- package/dist/gir/emittable.js +3 -0
- package/dist/gir/emittable.js.map +1 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +28 -2
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +1 -1
- package/dist/gir/gir-path.js +1 -1
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/library.d.ts +5 -1
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +9 -2
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +5 -1
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -2
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +13 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +1 -0
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -6
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.js +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/guards.d.ts +16 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +11 -0
- package/dist/guards.js.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +11 -0
- package/dist/json.js.map +1 -0
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +8 -6
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +22 -7
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/parse.d.ts.map +1 -1
- package/dist/khronos/parse.js +3 -4
- package/dist/khronos/parse.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +1 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +1 -7
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +1 -1
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +8 -4
- package/dist/khronos/render.js.map +1 -1
- package/dist/runner.d.ts +7 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +21 -3
- package/dist/runner.js.map +1 -1
- package/dist/staging.d.ts +5 -0
- package/dist/staging.d.ts.map +1 -0
- package/dist/staging.js +57 -0
- package/dist/staging.js.map +1 -0
- package/dist/store/compile-store.d.ts +0 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +7 -32
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.d.ts +6 -3
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +40 -30
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +9 -5
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +104 -44
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/companion.d.ts.map +1 -1
- package/dist/store/gi/companion.js +6 -6
- package/dist/store/gi/companion.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +11 -3
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.js +1 -1
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -12
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts +1 -3
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +24 -18
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +4 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +34 -19
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/method.d.ts +7 -6
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +13 -24
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +3 -2
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +50 -5
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +21 -10
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts +2 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +6 -3
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +10 -8
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +49 -91
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts +8 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +34 -13
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +20 -4
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts +6 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +8 -1
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +19 -8
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.js +1 -1
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts +2 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +55 -28
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +2 -1
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +4 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +60 -17
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +1 -0
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +15 -20
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +2 -1
- package/dist/store/jsx/generated-elements.d.ts.map +1 -1
- package/dist/store/jsx/generated-elements.js +13 -7
- package/dist/store/jsx/generated-elements.js.map +1 -1
- package/dist/store/jsx/jsx.js +3 -3
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +3 -1
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -4
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +14 -3
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +98 -15
- package/dist/store/resolve-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +9 -7
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +54 -25
- package/dist/store/store-fs.js.map +1 -1
- package/dist/store/store-links.d.ts +3 -0
- package/dist/store/store-links.d.ts.map +1 -0
- package/dist/store/store-links.js +39 -0
- package/dist/store/store-links.js.map +1 -0
- package/dist/writer/comparison-context.d.ts +4 -0
- package/dist/writer/comparison-context.d.ts.map +1 -0
- package/dist/writer/comparison-context.js +13 -0
- package/dist/writer/comparison-context.js.map +1 -0
- package/dist/writer/context.d.ts +3 -3
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +11 -6
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/module.d.ts +13 -5
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +68 -11
- package/dist/writer/module.js.map +1 -1
- package/dist/xml.d.ts +8 -1
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +70 -1
- package/dist/xml.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +2 -0
- package/package.json +14 -3
- package/src/analysis/descriptor-render.ts +106 -52
- package/src/analysis/descriptor.ts +76 -15
- package/src/analysis/inheritance.ts +134 -44
- package/src/analysis/interface-conflicts.ts +235 -0
- package/src/analysis/param-capability.ts +3 -6
- package/src/analysis/param-structure.ts +2 -2
- package/src/analysis/ts-type.ts +43 -28
- package/src/analysis/type-key.ts +14 -0
- package/src/analysis/type-shape.ts +5 -2
- package/src/compile.ts +192 -27
- package/src/docs/api-reference.ts +13 -10
- package/src/docs/element-page.ts +5 -2
- package/src/docs/pipeline.ts +140 -24
- package/src/docs/render.ts +7 -3
- package/src/docs/symbol-page.ts +12 -11
- package/src/fingerprint.ts +95 -47
- package/src/gi.ts +10 -2
- package/src/gir/ancestry.ts +17 -1
- package/src/gir/annotations.ts +1 -1
- package/src/gir/cursor-overrides.ts +12 -0
- package/src/gir/emittable.ts +8 -0
- package/src/gir/function.ts +45 -9
- package/src/gir/gir-path.ts +1 -1
- package/src/gir/library.ts +10 -2
- package/src/gir/namespace.ts +8 -2
- package/src/gir/parameter.ts +15 -0
- package/src/gir/parse.ts +10 -7
- package/src/gir/primitives.ts +1 -1
- package/src/guards.ts +23 -0
- package/src/internal.ts +2 -0
- package/src/json.ts +11 -0
- package/src/khronos/args.ts +9 -6
- package/src/khronos/modules.ts +25 -9
- package/src/khronos/parse.ts +3 -4
- package/src/khronos/pipeline.ts +1 -1
- package/src/khronos/plan.ts +0 -1
- package/src/khronos/render.ts +8 -6
- package/src/runner.ts +26 -4
- package/src/staging.ts +67 -0
- package/src/store/compile-store.ts +7 -38
- package/src/store/gi/callables.ts +60 -33
- package/src/store/gi/callback.ts +9 -9
- package/src/store/gi/class.ts +140 -53
- package/src/store/gi/companion.ts +7 -6
- package/src/store/gi/constant.ts +13 -3
- package/src/store/gi/constructor-props.ts +1 -1
- package/src/store/gi/enum.ts +36 -26
- package/src/store/gi/function.ts +30 -24
- package/src/store/gi/gtype-binding.ts +7 -2
- package/src/store/gi/interface.ts +39 -20
- package/src/store/gi/method.ts +26 -32
- package/src/store/gi/param-marshal.ts +77 -6
- package/src/store/gi/pipeline.ts +25 -15
- package/src/store/gi/properties.ts +8 -4
- package/src/store/gi/property-accessor.ts +73 -161
- package/src/store/gi/record-constructor.ts +53 -21
- package/src/store/gi/record-field-accessor.ts +26 -4
- package/src/store/gi/record-layout.ts +11 -1
- package/src/store/gi/record.ts +20 -12
- package/src/store/gi/registration.ts +2 -2
- package/src/store/gi/return-wrap.ts +1 -1
- package/src/store/gi/signal.ts +66 -42
- package/src/store/gi/value-marshalable.ts +3 -1
- package/src/store/gi/vtable.ts +97 -20
- package/src/store/gi-store.ts +26 -31
- package/src/store/jsx/generated-elements.ts +17 -8
- package/src/store/jsx/jsx.ts +3 -3
- package/src/store/jsx/metadata.ts +4 -1
- package/src/store/jsx-store.ts +3 -4
- package/src/store/resolve-store.ts +133 -18
- package/src/store/store-fs.ts +82 -35
- package/src/store/store-links.ts +49 -0
- package/src/writer/comparison-context.ts +18 -0
- package/src/writer/context.ts +12 -6
- package/src/writer/module.ts +101 -14
- package/src/xml.ts +103 -1
package/dist/xml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"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","sourcesContent":["import { errorMessage, isRecord } from \"@gtkx/utils\";\nimport { type X2jOptions, XMLParser } from \"fast-xml-parser\";\nimport { SyntaxValidator } from \"fast-xml-validator\";\nimport { readFileSync } from \"node:fs\";\n\ntype XmlFileInput = {\n parser: XMLParser;\n label: string;\n path: string;\n malformedRemedy?: string;\n};\n\nconst HIGHEST_CONTROL_CODE = 0x1F;\nconst LEGAL_CONTROL_CODES: Set<number> = new Set([0x09, 0x0A, 0x0D]);\n\nconst createXmlParser = (options: Partial<X2jOptions>): XMLParser =>\n new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: \"@_\",\n parseAttributeValue: false,\n parseTagValue: false,\n ...options,\n });\n\nconst xmlFileError = (input: XmlFileInput, action: string, error: unknown): Error =>\n new Error(`Cannot ${action} the ${input.label} at ${input.path}: ${errorMessage(error)}`, { cause: error });\n\nconst readXmlFile = (input: XmlFileInput): string => {\n try {\n return readFileSync(input.path, \"utf8\");\n } catch (error) {\n throw xmlFileError(input, \"read\", error);\n }\n};\n\nconst isLocated = (line: unknown, col: unknown): boolean =>\n typeof line === \"number\" && typeof col === \"number\" && (line > 1 || col > 1);\n\nconst positionSuffix = (error: unknown): string => {\n if (!isRecord(error)) {\n return \"\";\n }\n\n const { line, col } = error;\n\n if (!isLocated(line, col)) {\n return \"\";\n }\n\n return ` (line ${String(line)}, column ${String(col)})`;\n};\n\nconst isIllegalControlCode = (code: number): boolean =>\n code <= HIGHEST_CONTROL_CODE && !LEGAL_CONTROL_CODES.has(code);\n\nconst escapedCode = (code: number): string => `[U+${code.toString(16).toUpperCase().padStart(4, \"0\")}]`;\n\nconst escapeControlCodes = (text: string): string => {\n let escaped = \"\";\n\n for (const character of text) {\n const code = character.codePointAt(0) ?? 0;\n escaped += isIllegalControlCode(code) ? escapedCode(code) : character;\n }\n\n return escaped;\n};\n\nconst offendingLine = (xml: string, error: unknown): string => {\n const line = isRecord(error) ? error.line : undefined;\n\n if (typeof line !== \"number\") {\n return \"\";\n }\n\n const text = xml.split(\"\\n\")[line - 1];\n\n if (text === undefined) {\n return \"\";\n }\n\n return `\\n ${escapeControlCodes(text.replace(/^[ \\t]+/, \"\").replace(/\\r$/, \"\"))}`;\n};\n\nconst remedySuffix = (input: XmlFileInput, xml: string, error: unknown): string => {\n const remedy = input.malformedRemedy;\n\n return remedy === undefined ? \"\" : `${offendingLine(xml, error)}\\n${remedy}`;\n};\n\nconst assertWellFormed = (input: XmlFileInput, xml: string): void => {\n try {\n SyntaxValidator.validate(xml);\n } catch (error) {\n throw new Error(\n `The ${input.label} at ${input.path} is not well-formed XML: ` +\n `${errorMessage(error)}${positionSuffix(error)}${remedySuffix(input, xml, error)}`,\n { cause: error },\n );\n }\n};\n\nconst parseXmlFile = (input: XmlFileInput): unknown => {\n const xml = readXmlFile(input);\n assertWellFormed(input, xml);\n\n try {\n return input.parser.parse(xml);\n } catch (error) {\n throw xmlFileError(input, \"parse\", error);\n }\n};\n\nexport { createXmlParser, parseXmlFile };\n"]}
|
|
@@ -52,6 +52,7 @@ declare module "../gobject.js" {
|
|
|
52
52
|
* @param callback Handler invoked on each emission.
|
|
53
53
|
* @param isAfter Run the handler after the default handler rather than before it.
|
|
54
54
|
* @returns The same object, so calls chain.
|
|
55
|
+
* @deprecated Since 1.2. Use `on` instead. Removed in v2.
|
|
55
56
|
*/
|
|
56
57
|
addEventListener(sigName: string, callback: (...args: unknown[]) => unknown, isAfter?: boolean): Object;
|
|
57
58
|
|
|
@@ -61,6 +62,7 @@ declare module "../gobject.js" {
|
|
|
61
62
|
* @param sigName Signal the handler was connected to.
|
|
62
63
|
* @param callback The handler that was connected.
|
|
63
64
|
* @returns The same object, so calls chain.
|
|
65
|
+
* @deprecated Since 1.2. Use `off` instead. Removed in v2.
|
|
64
66
|
*/
|
|
65
67
|
removeEventListener(sigName: string, callback: (...args: unknown[]) => unknown): Object;
|
|
66
68
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/codegen",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.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
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/
|
|
51
|
-
"@gtkx/
|
|
61
|
+
"@gtkx/react": "1.2.0",
|
|
62
|
+
"@gtkx/utils": "1.2.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,16 +21,19 @@ 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 {
|
|
27
|
+
type ArrayLayout,
|
|
26
28
|
type ListDescriptorName,
|
|
27
29
|
type Ownership,
|
|
28
30
|
type ScalarDescriptorName,
|
|
29
31
|
tArray,
|
|
32
|
+
tBiguint64,
|
|
30
33
|
tBoxed,
|
|
31
34
|
tByteArray,
|
|
32
35
|
tCallback,
|
|
36
|
+
tCursorArray,
|
|
33
37
|
tEnum,
|
|
34
38
|
tFixedArray,
|
|
35
39
|
tFlags,
|
|
@@ -38,6 +42,7 @@ import {
|
|
|
38
42
|
tHashTable,
|
|
39
43
|
tInt32,
|
|
40
44
|
tList,
|
|
45
|
+
tNumericByteArray,
|
|
41
46
|
tObject,
|
|
42
47
|
tRef,
|
|
43
48
|
tScalar,
|
|
@@ -48,23 +53,25 @@ import {
|
|
|
48
53
|
tUint64,
|
|
49
54
|
tVoid,
|
|
50
55
|
} from "./descriptor.js";
|
|
51
|
-
import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
|
|
56
|
+
import { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
|
|
52
57
|
|
|
53
|
-
type
|
|
54
|
-
argIndexOffset?: number;
|
|
55
|
-
argIndexMap?: Map<number, number> | undefined;
|
|
56
|
-
hasOutIndirection?: boolean;
|
|
57
|
-
isCallerAllocated?: boolean;
|
|
58
|
-
isInline?: boolean;
|
|
59
|
-
isNewlyCreated?: boolean;
|
|
60
|
-
};
|
|
58
|
+
type PrimaryReturnKind = "surfaced" | "void" | "skipped";
|
|
61
59
|
|
|
62
60
|
type ArgIndexOptions = {
|
|
63
61
|
argIndexOffset: number;
|
|
64
62
|
argIndexMap: Map<number, number> | undefined;
|
|
63
|
+
cursor: GirCursorBounds | undefined;
|
|
65
64
|
hasOutIndirection: boolean;
|
|
66
65
|
};
|
|
67
66
|
|
|
67
|
+
type CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };
|
|
68
|
+
|
|
69
|
+
type RenderDescriptorOptions = Partial<ArgIndexOptions> & {
|
|
70
|
+
isCallerAllocated?: boolean;
|
|
71
|
+
isInline?: boolean;
|
|
72
|
+
isNewlyCreated?: boolean;
|
|
73
|
+
};
|
|
74
|
+
|
|
68
75
|
type RecordPlacement = {
|
|
69
76
|
isCallerAllocated?: boolean;
|
|
70
77
|
isInline?: boolean;
|
|
@@ -91,6 +98,7 @@ type ResolvedRecord = Extract<EntityType, { kind: "record" }>["value"];
|
|
|
91
98
|
|
|
92
99
|
type FundamentalRecordOptions = {
|
|
93
100
|
resolved: Extract<EntityType, { kind: "record" }>;
|
|
101
|
+
lib: string;
|
|
94
102
|
refFunc: string;
|
|
95
103
|
unrefFunc: string;
|
|
96
104
|
ownership: Ownership;
|
|
@@ -131,12 +139,27 @@ const isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>
|
|
|
131
139
|
const isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>
|
|
132
140
|
ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
|
|
133
141
|
|
|
142
|
+
const primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {
|
|
143
|
+
if (isVoidRef(library, returnValue.type)) {
|
|
144
|
+
return "void";
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return returnValue.skip ? "skipped" : "surfaced";
|
|
148
|
+
};
|
|
149
|
+
|
|
134
150
|
const shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
|
|
135
|
-
|
|
151
|
+
primaryReturnKind(library, returnValue) !== "surfaced";
|
|
152
|
+
|
|
153
|
+
const isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
|
|
154
|
+
primaryReturnKind(library, returnValue) === "skipped";
|
|
155
|
+
|
|
156
|
+
const isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
|
|
157
|
+
primaryReturnKind(library, returnValue) === "void";
|
|
136
158
|
|
|
137
159
|
const argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({
|
|
138
160
|
argIndexOffset: options.argIndexOffset ?? 0,
|
|
139
161
|
argIndexMap: options.argIndexMap,
|
|
162
|
+
cursor: options.cursor,
|
|
140
163
|
hasOutIndirection: options.hasOutIndirection === true,
|
|
141
164
|
});
|
|
142
165
|
|
|
@@ -200,7 +223,7 @@ const listExpression = (
|
|
|
200
223
|
const ownership = transferOwnership(transfer);
|
|
201
224
|
|
|
202
225
|
if (type.flavor === "gbytearray") {
|
|
203
|
-
return tByteArray(ownership);
|
|
226
|
+
return context.library.isByteArrayTyped ? tByteArray(ownership) : tNumericByteArray(ownership);
|
|
204
227
|
}
|
|
205
228
|
|
|
206
229
|
const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);
|
|
@@ -276,7 +299,7 @@ const renderParamDescriptor = (
|
|
|
276
299
|
ref: TypeId | undefined,
|
|
277
300
|
argIndex: Partial<ArgIndexOptions> = {},
|
|
278
301
|
): string => {
|
|
279
|
-
const behindRef: RenderDescriptorOptions = { ...argIndex, hasOutIndirection: true };
|
|
302
|
+
const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };
|
|
280
303
|
|
|
281
304
|
if (isCellInout(context.library, parameter)) {
|
|
282
305
|
return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);
|
|
@@ -310,7 +333,7 @@ const findUserDataIndex = (parameters: GirParameter[]): number | undefined => {
|
|
|
310
333
|
return declared?.closureIndex ?? userDataIndexByName(parameters);
|
|
311
334
|
};
|
|
312
335
|
|
|
313
|
-
const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string
|
|
336
|
+
const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string[] => {
|
|
314
337
|
const options: string[] = [];
|
|
315
338
|
|
|
316
339
|
if (owningParameter.destroyIndex !== undefined) {
|
|
@@ -329,7 +352,7 @@ const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number
|
|
|
329
352
|
options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
|
|
330
353
|
}
|
|
331
354
|
|
|
332
|
-
return options
|
|
355
|
+
return options;
|
|
333
356
|
};
|
|
334
357
|
|
|
335
358
|
const renderCallbackType = (
|
|
@@ -348,15 +371,13 @@ const renderCallbackType = (
|
|
|
348
371
|
(parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),
|
|
349
372
|
);
|
|
350
373
|
|
|
351
|
-
const
|
|
352
|
-
|
|
353
|
-
const returnType = isVoidRef(context.library, returnRef)
|
|
354
|
-
? tVoid
|
|
355
|
-
: renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);
|
|
374
|
+
const { returnValue } = callback;
|
|
356
375
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
376
|
+
return tCallback({
|
|
377
|
+
argTypes,
|
|
378
|
+
returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),
|
|
379
|
+
options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters)),
|
|
380
|
+
});
|
|
360
381
|
};
|
|
361
382
|
|
|
362
383
|
const primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {
|
|
@@ -369,7 +390,7 @@ const primitiveExpression = (category: PrimitiveCategory, ownership: Ownership):
|
|
|
369
390
|
}
|
|
370
391
|
|
|
371
392
|
if (category === "pointer") {
|
|
372
|
-
return
|
|
393
|
+
return tBiguint64;
|
|
373
394
|
}
|
|
374
395
|
|
|
375
396
|
if (category === "gtype") {
|
|
@@ -424,13 +445,14 @@ const getFundamental = (
|
|
|
424
445
|
node: Extract<EntityType, { kind: "class" | "interface" }>,
|
|
425
446
|
): AncestorFundamental | undefined => {
|
|
426
447
|
const cls = node.value;
|
|
448
|
+
const lib = node.namespace.sharedLibrary;
|
|
427
449
|
|
|
428
|
-
if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
|
|
450
|
+
if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
|
|
429
451
|
return undefined;
|
|
430
452
|
}
|
|
431
453
|
|
|
432
454
|
return {
|
|
433
|
-
lib
|
|
455
|
+
lib,
|
|
434
456
|
refFunc: cls.glibRefFunc,
|
|
435
457
|
unrefFunc: cls.glibUnrefFunc,
|
|
436
458
|
typeName: cls.glibTypeName,
|
|
@@ -529,7 +551,7 @@ const structExpression = (
|
|
|
529
551
|
options: { isCallerAllocated: boolean; isInline: boolean },
|
|
530
552
|
): string => {
|
|
531
553
|
const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
|
|
532
|
-
const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
|
|
554
|
+
const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));
|
|
533
555
|
const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);
|
|
534
556
|
|
|
535
557
|
return tStruct(ownership, {
|
|
@@ -541,10 +563,10 @@ const structExpression = (
|
|
|
541
563
|
};
|
|
542
564
|
|
|
543
565
|
const fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {
|
|
544
|
-
const { resolved, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
|
|
566
|
+
const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
|
|
545
567
|
|
|
546
568
|
return renderFundamental({
|
|
547
|
-
lib
|
|
569
|
+
lib,
|
|
548
570
|
refFunc,
|
|
549
571
|
unrefFunc,
|
|
550
572
|
typeName: resolved.value.glibTypeName,
|
|
@@ -605,14 +627,16 @@ const recordExpression = (
|
|
|
605
627
|
): string => {
|
|
606
628
|
const record = resolved.value;
|
|
607
629
|
const { refFunc, unrefFunc } = recordRefPair(record);
|
|
630
|
+
const lib = resolved.namespace.sharedLibrary;
|
|
608
631
|
|
|
609
|
-
if (refFunc !== undefined && unrefFunc !== undefined) {
|
|
632
|
+
if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {
|
|
610
633
|
const wrapperClass = requiresFallbackClass(record)
|
|
611
|
-
? context.qualify(resolved.namespace.name, record.name)
|
|
634
|
+
? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))
|
|
612
635
|
: undefined;
|
|
613
636
|
|
|
614
637
|
return fundamentalRecordExpression({
|
|
615
638
|
resolved,
|
|
639
|
+
lib,
|
|
616
640
|
refFunc,
|
|
617
641
|
unrefFunc,
|
|
618
642
|
ownership,
|
|
@@ -629,13 +653,12 @@ const rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tU
|
|
|
629
653
|
const enumExpression = (resolved: Extract<EntityType, { kind: "enum" }>): string => {
|
|
630
654
|
const getter = resolved.value.glibGetType;
|
|
631
655
|
const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
|
|
656
|
+
const lib = resolved.namespace.sharedLibrary;
|
|
632
657
|
|
|
633
|
-
if (getter === undefined || getter === "") {
|
|
658
|
+
if (getter === undefined || getter === "" || lib === undefined) {
|
|
634
659
|
return rawEnumDescriptor(isSigned);
|
|
635
660
|
}
|
|
636
661
|
|
|
637
|
-
const lib = resolved.namespace.sharedLibrary ?? "";
|
|
638
|
-
|
|
639
662
|
return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
|
|
640
663
|
};
|
|
641
664
|
|
|
@@ -667,40 +690,69 @@ const expressionForResolved = (
|
|
|
667
690
|
}
|
|
668
691
|
};
|
|
669
692
|
|
|
693
|
+
const elementExpression = (
|
|
694
|
+
context: ModuleContext,
|
|
695
|
+
ref: CArrayType,
|
|
696
|
+
transfer: ParameterTransfer,
|
|
697
|
+
options: ArgIndexOptions,
|
|
698
|
+
): string =>
|
|
699
|
+
renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {
|
|
700
|
+
...options,
|
|
701
|
+
cursor: undefined,
|
|
702
|
+
hasOutIndirection: false,
|
|
703
|
+
});
|
|
704
|
+
|
|
705
|
+
const cursorArrayExpression = (
|
|
706
|
+
context: ModuleContext,
|
|
707
|
+
ref: CArrayType,
|
|
708
|
+
transfer: ParameterTransfer,
|
|
709
|
+
options: CursorArgIndexOptions & { layout: ArrayLayout },
|
|
710
|
+
): string =>
|
|
711
|
+
tCursorArray(
|
|
712
|
+
elementExpression(context, ref, transfer, options),
|
|
713
|
+
{
|
|
714
|
+
baseIndex: mapArgIndex(options, options.cursor.baseIndex),
|
|
715
|
+
lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),
|
|
716
|
+
},
|
|
717
|
+
transferOwnership(transfer),
|
|
718
|
+
options.layout,
|
|
719
|
+
);
|
|
720
|
+
|
|
721
|
+
const arrayLayout = (context: ModuleContext, ref: CArrayType, options: ArgIndexOptions): ArrayLayout => ({
|
|
722
|
+
elementSize: inlineElementSize(context, ref, options.hasOutIndirection),
|
|
723
|
+
isBytes:
|
|
724
|
+
context.library.isByteArrayTyped && !hasUnknownArrayLength(ref) && isByteSequence(context.library, ref),
|
|
725
|
+
});
|
|
726
|
+
|
|
670
727
|
const arrayExpression = (
|
|
671
728
|
context: ModuleContext,
|
|
672
729
|
ref: CArrayType,
|
|
673
730
|
transfer: ParameterTransfer,
|
|
674
731
|
options: ArgIndexOptions,
|
|
675
732
|
): string => {
|
|
733
|
+
const { cursor } = options;
|
|
734
|
+
const layout = arrayLayout(context, ref, options);
|
|
735
|
+
|
|
736
|
+
if (cursor !== undefined) {
|
|
737
|
+
return cursorArrayExpression(context, ref, transfer, { ...options, cursor, layout });
|
|
738
|
+
}
|
|
739
|
+
|
|
676
740
|
if (hasUnknownArrayLength(ref)) {
|
|
677
741
|
return tUint64;
|
|
678
742
|
}
|
|
679
743
|
|
|
680
744
|
const ownership = transferOwnership(transfer);
|
|
681
|
-
const
|
|
682
|
-
const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), elementOptions);
|
|
683
|
-
const size = inlineElementSize(context, ref, options.hasOutIndirection);
|
|
745
|
+
const element = elementExpression(context, ref, transfer, options);
|
|
684
746
|
|
|
685
747
|
if (ref.lengthParameterIndex !== undefined) {
|
|
686
|
-
return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership,
|
|
748
|
+
return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, layout);
|
|
687
749
|
}
|
|
688
750
|
|
|
689
751
|
if (ref.fixedSize !== undefined) {
|
|
690
|
-
return tFixedArray(element, ref.fixedSize, ownership,
|
|
752
|
+
return tFixedArray(element, ref.fixedSize, ownership, layout);
|
|
691
753
|
}
|
|
692
754
|
|
|
693
|
-
return tArray(element, ownership,
|
|
694
|
-
};
|
|
695
|
-
|
|
696
|
-
const recordInlineSize = (context: ModuleContext, record: ResolvedRecord): number | undefined => {
|
|
697
|
-
if (record.opaque || record.disguised || record.fields.length === 0) {
|
|
698
|
-
return undefined;
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
|
|
702
|
-
|
|
703
|
-
return size > 0 ? size : undefined;
|
|
755
|
+
return tArray(element, ownership, layout);
|
|
704
756
|
};
|
|
705
757
|
|
|
706
758
|
const elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {
|
|
@@ -738,11 +790,13 @@ const aliasExpression = (
|
|
|
738
790
|
|
|
739
791
|
export {
|
|
740
792
|
isInlineCallbackRef,
|
|
793
|
+
isSkippedPrimaryReturn,
|
|
794
|
+
isVoidPrimaryReturn,
|
|
795
|
+
primaryReturnKind,
|
|
741
796
|
shouldOmitPrimaryReturn,
|
|
742
797
|
renderDescriptor,
|
|
743
798
|
isScalarRef,
|
|
744
799
|
isCellInout,
|
|
745
|
-
recordInlineSize,
|
|
746
800
|
renderParamDescriptor,
|
|
747
801
|
renderCallbackType,
|
|
748
802
|
renderSelfDescriptor,
|
|
@@ -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
|
|
|
@@ -85,6 +87,11 @@ type FundamentalOptions = {
|
|
|
85
87
|
|
|
86
88
|
type ListDescriptorName = "list" | "slist" | "ptrArray" | "gArray";
|
|
87
89
|
|
|
90
|
+
type ArrayLayout = {
|
|
91
|
+
elementSize?: number | undefined;
|
|
92
|
+
isBytes: boolean;
|
|
93
|
+
};
|
|
94
|
+
|
|
88
95
|
type BindArgs = {
|
|
89
96
|
libExpr: string;
|
|
90
97
|
symbolExpr: string;
|
|
@@ -92,6 +99,21 @@ type BindArgs = {
|
|
|
92
99
|
returnType: string;
|
|
93
100
|
};
|
|
94
101
|
|
|
102
|
+
type FnSpecParts = {
|
|
103
|
+
args: string;
|
|
104
|
+
returns: string;
|
|
105
|
+
isReturnSkipped: boolean;
|
|
106
|
+
canThrow: boolean;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
type CallbackSpecParts = {
|
|
110
|
+
argTypes: string[];
|
|
111
|
+
returns: string;
|
|
112
|
+
options: string[];
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const SKIPPED_RETURN_ENTRY = "isReturnSkipped: true";
|
|
116
|
+
|
|
95
117
|
const T: DescriptorNames = {
|
|
96
118
|
bind: "t.bind",
|
|
97
119
|
int8: "t.int8",
|
|
@@ -128,6 +150,7 @@ const T: DescriptorNames = {
|
|
|
128
150
|
byteArray: "t.byteArray",
|
|
129
151
|
sizedArray: "t.sizedArray",
|
|
130
152
|
fixedArray: "t.fixedArray",
|
|
153
|
+
cursorArray: "t.cursorArray",
|
|
131
154
|
callback: "t.callback",
|
|
132
155
|
fn: "t.fn",
|
|
133
156
|
};
|
|
@@ -138,6 +161,7 @@ const tUint8: string = T.uint8;
|
|
|
138
161
|
const tUint32: string = T.uint32;
|
|
139
162
|
const tInt32: string = T.int32;
|
|
140
163
|
const tUint64: string = T.uint64;
|
|
164
|
+
const tBiguint64: string = T.biguint64;
|
|
141
165
|
const tGtype: string = T.gtype;
|
|
142
166
|
const tBuffer: string = T.buffer;
|
|
143
167
|
|
|
@@ -211,55 +235,88 @@ const tFlags = (lib: string, typeFnName: string, isSigned: boolean): string =>
|
|
|
211
235
|
|
|
212
236
|
const tByteArray = (ownership: Ownership): string => call("byteArray", [sourceStringLiteral(ownership)]);
|
|
213
237
|
|
|
238
|
+
const tNumericByteArray = (ownership: Ownership): string =>
|
|
239
|
+
call("array", [
|
|
240
|
+
tUint8,
|
|
241
|
+
sourceStringLiteral("gbytearray"),
|
|
242
|
+
sourceStringLiteral(ownership),
|
|
243
|
+
]);
|
|
244
|
+
|
|
214
245
|
const tList = (name: ListDescriptorName, element: string, ownership: Ownership): string =>
|
|
215
246
|
call(name, [element, sourceStringLiteral(ownership)]);
|
|
216
247
|
|
|
217
|
-
const
|
|
248
|
+
const arrayLayoutArg = (ownership: Ownership | undefined, layout: ArrayLayout): string | undefined => {
|
|
249
|
+
if (ownership === undefined) {
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const entries = [
|
|
254
|
+
layout.elementSize === undefined ? undefined : `elementSize: ${String(layout.elementSize)}`,
|
|
255
|
+
layout.isBytes ? "isBytes: true" : undefined,
|
|
256
|
+
].filter((entry): entry is string => entry !== undefined);
|
|
257
|
+
|
|
258
|
+
return entries.length === 0 ? undefined : `{ ${entries.join(", ")} }`;
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
const tArray = (element: string, ownership: Ownership | undefined, layout: ArrayLayout): string =>
|
|
218
262
|
call("array", [
|
|
219
263
|
element,
|
|
220
264
|
ownership === undefined ? undefined : sourceStringLiteral("array"),
|
|
221
265
|
ownership === undefined ? undefined : sourceStringLiteral(ownership),
|
|
222
|
-
|
|
266
|
+
arrayLayoutArg(ownership, layout),
|
|
223
267
|
]);
|
|
224
268
|
|
|
225
269
|
const tSizedArray = (
|
|
226
270
|
element: string,
|
|
227
271
|
lengthIndex: number,
|
|
228
|
-
ownership
|
|
229
|
-
|
|
272
|
+
ownership: Ownership | undefined,
|
|
273
|
+
layout: ArrayLayout,
|
|
230
274
|
): string =>
|
|
231
275
|
call("sizedArray", [
|
|
232
276
|
element,
|
|
233
277
|
String(lengthIndex),
|
|
234
278
|
ownership === undefined ? undefined : sourceStringLiteral(ownership),
|
|
235
|
-
|
|
279
|
+
arrayLayoutArg(ownership, layout),
|
|
236
280
|
]);
|
|
237
281
|
|
|
238
|
-
const
|
|
282
|
+
const tCursorArray = (
|
|
283
|
+
element: string,
|
|
284
|
+
bounds: GirCursorBounds,
|
|
285
|
+
ownership: Ownership | undefined,
|
|
286
|
+
layout: ArrayLayout,
|
|
287
|
+
): string =>
|
|
288
|
+
call("cursorArray", [
|
|
289
|
+
element,
|
|
290
|
+
`{ baseParamIndex: ${String(bounds.baseIndex)}, sizeParamIndex: ${String(bounds.lengthIndex)} }`,
|
|
291
|
+
ownership === undefined ? undefined : sourceStringLiteral(ownership),
|
|
292
|
+
arrayLayoutArg(ownership, layout),
|
|
293
|
+
]);
|
|
294
|
+
|
|
295
|
+
const tFixedArray = (element: string, length: number, ownership: Ownership | undefined, layout: ArrayLayout): string =>
|
|
239
296
|
call("fixedArray", [
|
|
240
297
|
element,
|
|
241
298
|
String(length),
|
|
242
299
|
ownership === undefined ? undefined : sourceStringLiteral(ownership),
|
|
243
|
-
|
|
300
|
+
arrayLayoutArg(ownership, layout),
|
|
244
301
|
]);
|
|
245
302
|
|
|
246
|
-
const tCallback = (
|
|
247
|
-
|
|
303
|
+
const tCallback = (spec: CallbackSpecParts): string => {
|
|
304
|
+
const optionsArg = spec.options.length > 0 ? `{ ${spec.options.join(", ")} }` : undefined;
|
|
305
|
+
|
|
306
|
+
return call("callback", [`[${spec.argTypes.join(", ")}]`, spec.returns, optionsArg]);
|
|
307
|
+
};
|
|
248
308
|
|
|
249
309
|
const tBind = (args: BindArgs): string =>
|
|
250
310
|
call("bind", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);
|
|
251
311
|
|
|
252
|
-
const tFn = (
|
|
253
|
-
|
|
254
|
-
cIdentifier: string,
|
|
255
|
-
spec: { args: string; returns: string; canThrow: boolean },
|
|
256
|
-
): string => {
|
|
312
|
+
const tFn = (lib: string, cIdentifier: string, spec: FnSpecParts): string => {
|
|
313
|
+
const skipEntry = spec.isReturnSkipped ? `, ${SKIPPED_RETURN_ENTRY}` : "";
|
|
257
314
|
const throwsEntry = spec.canThrow ? ", canThrow: true" : "";
|
|
258
315
|
|
|
259
316
|
return call("fn", [
|
|
260
317
|
sourceStringLiteral(lib),
|
|
261
318
|
sourceStringLiteral(cIdentifier),
|
|
262
|
-
`{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,
|
|
319
|
+
`{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${throwsEntry} }`,
|
|
263
320
|
]);
|
|
264
321
|
};
|
|
265
322
|
|
|
@@ -270,6 +327,7 @@ export {
|
|
|
270
327
|
tUint32,
|
|
271
328
|
tInt32,
|
|
272
329
|
tUint64,
|
|
330
|
+
tBiguint64,
|
|
273
331
|
tGtype,
|
|
274
332
|
tBuffer,
|
|
275
333
|
tScalar,
|
|
@@ -284,13 +342,16 @@ export {
|
|
|
284
342
|
tEnum,
|
|
285
343
|
tFlags,
|
|
286
344
|
tByteArray,
|
|
345
|
+
tNumericByteArray,
|
|
287
346
|
tList,
|
|
288
347
|
tArray,
|
|
289
348
|
tSizedArray,
|
|
290
349
|
tFixedArray,
|
|
350
|
+
tCursorArray,
|
|
291
351
|
tCallback,
|
|
292
352
|
tBind,
|
|
293
353
|
tFn,
|
|
354
|
+
type ArrayLayout,
|
|
294
355
|
type Ownership,
|
|
295
356
|
type ScalarDescriptorName,
|
|
296
357
|
type ListDescriptorName,
|