@gtkx/codegen 1.0.0-rc.2 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -5
- package/dist/analysis/descriptor-render.d.ts +2 -2
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +30 -32
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +6 -6
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +7 -7
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/param-structure.d.ts +2 -2
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +5 -7
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +7 -13
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +77 -1
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +66 -8
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +5 -4
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/pipeline.d.ts +5 -3
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +5 -3
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.js +6 -6
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +5 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +2 -2
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +2 -4
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +7 -6
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +7 -10
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +4 -9
- package/dist/gi.js.map +1 -1
- package/dist/gir/field.d.ts +0 -1
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +0 -3
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/gir-path.d.ts +7 -0
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +7 -0
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +17 -3
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +14 -1
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +0 -4
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -3
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +1 -1
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -3
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.js +1 -1
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/index.d.ts +18 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/jsx.d.ts +8 -11
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +18 -15
- package/dist/jsx.js.map +1 -1
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +1 -1
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/pipeline.js +1 -1
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +2 -2
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +6 -6
- package/dist/khronos/plan.js.map +1 -1
- package/dist/react/element-config.d.ts +18 -9
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js +23 -13
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +36 -16
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +22 -20
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +1 -2
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +2 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +4 -9
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +0 -2
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +1 -7
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +26 -23
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +1 -1
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +5 -7
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +5 -4
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +3 -2
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +21 -11
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +0 -4
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +0 -7
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/return-wrap.d.ts +1 -1
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +4 -4
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +13 -16
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +7 -0
- package/dist/store/gi/value-marshalable.d.ts.map +1 -0
- package/dist/store/gi/value-marshalable.js +57 -0
- package/dist/store/gi/value-marshalable.js.map +1 -0
- package/dist/store/gi-store.d.ts +2 -3
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +0 -2
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +0 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +2 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js +0 -2
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +0 -1
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +0 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +29 -0
- package/dist/store/jsx/generated-elements.d.ts.map +1 -0
- package/dist/store/jsx/generated-elements.js +30 -0
- package/dist/store/jsx/generated-elements.js.map +1 -0
- package/dist/store/jsx/intrinsic-elements.d.ts +1 -2
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js +1 -2
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.js +6 -6
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +7 -7
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/omitted-props.d.ts +8 -0
- package/dist/store/jsx/omitted-props.d.ts.map +1 -0
- package/dist/store/jsx/omitted-props.js +20 -0
- package/dist/store/jsx/omitted-props.js.map +1 -0
- package/dist/store/jsx/pipeline.d.ts +4 -0
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js +4 -1
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -1
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +8 -13
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/store/jsx-store.d.ts +2 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -3
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +28 -0
- package/dist/store/resolve-store.d.ts.map +1 -0
- package/dist/store/resolve-store.js +65 -0
- package/dist/store/resolve-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +5 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +6 -4
- package/dist/store/store-fs.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +8 -8
- package/package.json +6 -11
- package/src/analysis/descriptor-render.ts +45 -38
- package/src/analysis/descriptor.ts +13 -13
- package/src/analysis/param-structure.ts +8 -10
- package/src/analysis/ts-type.ts +8 -17
- package/src/compile.ts +2 -1
- package/src/docs/api-reference.ts +131 -13
- package/src/docs/element-page.ts +5 -9
- package/src/docs/pipeline.ts +9 -6
- package/src/docs/render.ts +7 -7
- package/src/docs/symbol-page.ts +7 -2
- package/src/fingerprint.ts +21 -12
- package/src/gi.ts +13 -11
- package/src/gir/field.ts +0 -4
- package/src/gir/gir-path.ts +7 -0
- package/src/gir/libraries.ts +18 -4
- package/src/gir/parameter.ts +0 -4
- package/src/gir/size.ts +0 -3
- package/src/gir/type-id.ts +2 -4
- package/src/gir/type-ref.ts +1 -1
- package/src/index.ts +18 -15
- package/src/internal.ts +2 -0
- package/src/jsx.ts +26 -21
- package/src/khronos/args.ts +1 -1
- package/src/khronos/pipeline.ts +1 -1
- package/src/khronos/plan.ts +8 -8
- package/src/react/element-config.ts +25 -16
- package/src/runner.ts +62 -37
- package/src/store/compile-store.ts +3 -4
- package/src/store/gi/callables.ts +5 -11
- package/src/store/gi/constant.ts +0 -2
- package/src/store/gi/function.ts +1 -7
- package/src/store/gi/method.ts +31 -28
- package/src/store/gi/property-accessor.ts +6 -8
- package/src/store/gi/record-constructor.ts +9 -4
- package/src/store/gi/record-field-accessor.ts +41 -12
- package/src/store/gi/record-layout.ts +0 -4
- package/src/store/gi/record.ts +0 -9
- package/src/store/gi/return-wrap.ts +5 -5
- package/src/store/gi/signal.ts +17 -17
- package/src/store/gi/value-marshalable.ts +87 -0
- package/src/store/gi-store.ts +2 -4
- package/src/store/jsx/element-components.ts +0 -6
- package/src/store/jsx/element-prop-imports.ts +7 -4
- package/src/store/jsx/element-prop-types.ts +0 -1
- package/src/store/jsx/generated-elements.ts +60 -0
- package/src/store/jsx/intrinsic-elements.ts +0 -9
- package/src/store/jsx/jsx.ts +7 -7
- package/src/store/jsx/metadata.ts +8 -8
- package/src/store/jsx/omitted-props.ts +30 -0
- package/src/store/jsx/pipeline.ts +6 -1
- package/src/store/jsx/props.ts +8 -20
- package/src/store/jsx-store.ts +5 -7
- package/src/store/resolve-store.ts +100 -0
- package/src/store/store-fs.ts +12 -5
- package/dist/store/gi/class-struct-record.d.ts +0 -10
- package/dist/store/gi/class-struct-record.d.ts.map +0 -1
- package/dist/store/gi/class-struct-record.js +0 -52
- package/dist/store/gi/class-struct-record.js.map +0 -1
- package/src/store/gi/class-struct-record.ts +0 -72
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"property-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/property-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { isEmittableCallable } from \"./callables.js\";\nimport { methodExportName, renderMethodReturnType } from \"./method.js\";\n\ntype ResolvedAccessor = {\n jsName: string;\n tsType: string;\n hasGetter: boolean;\n writable: boolean;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n setterMember: string | undefined;\n};\n\ntype PropertyAccessorArgs = {\n context: ModuleContext;\n property: GirProperty;\n claimedNames: Set<string>;\n methodByName: Map<string, GirFunction>;\n inheritedType?: string | undefined;\n};\n\ntype AccessorDelegate = { member: string | undefined; method: GirFunction | undefined };\n\ntype GetterBodyOptions = {\n context: ModuleContext;\n property: GirProperty;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n tsType: string;\n};\n\nconst isNullablePropertyType = (context: ModuleContext, type: TypeId | undefined): boolean => {\n if (type === undefined) {\n return false;\n }\n\n const resolved = context.library.typeFor(type);\n\n if (resolved === undefined) {\n return true;\n }\n\n if (resolved.kind === \"primitive\") {\n return false;\n }\n\n if (resolved.kind === \"enum\") {\n return false;\n }\n\n if (resolved.kind === \"alias\") {\n return isNullablePropertyType(context, resolved.value.target);\n }\n\n return true;\n};\n\nconst resolveDelegate = (\n args: PropertyAccessorArgs,\n attribute: string | undefined,\n member: string | undefined,\n isDelegatable: (method: GirFunction) => boolean,\n): AccessorDelegate => {\n const method = member !== undefined && attribute !== undefined ? args.methodByName.get(attribute) : undefined;\n const canDelegate = method === undefined || isDelegatable(method);\n\n return canDelegate ? { member, method } : { member: undefined, method: undefined };\n};\n\nconst resolveGetterDelegate = (args: PropertyAccessorArgs, jsName: string): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = delegateMember(property.getter, jsName, claimedNames);\n\n return resolveDelegate(\n args,\n property.getter,\n member,\n (method) =>\n inputParameters(context.library, method).length === 0 &&\n !renderMethodReturnType(context, method).startsWith(\"[\"),\n );\n};\n\nconst resolveSetterDelegate = (args: PropertyAccessorArgs, jsName: string, isWritable: boolean): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = isWritable ? delegateMember(property.setter, jsName, claimedNames) : undefined;\n\n return resolveDelegate(\n args,\n property.setter,\n member,\n (method) => inputParameters(context.library, method).length === 1,\n );\n};\n\nconst resolveOwnType = (\n context: ModuleContext,\n property: GirProperty,\n getterMethod: GirFunction | undefined,\n setterMethod: GirFunction | undefined,\n): string => {\n const setterParam = setterMethod?.parameters[0];\n\n if (setterParam !== undefined) {\n return renderTsType(context, setterParam.type, setterParam.nullable || setterParam.optional);\n }\n\n if (getterMethod !== undefined) {\n return renderMethodReturnType(context, getterMethod);\n }\n\n return renderTsType(context, property.type, isNullablePropertyType(context, property.type));\n};\n\nconst isSkippedAccessor = (property: GirProperty, jsName: string, claimedNames: Set<string>): boolean =>\n !property.introspectable || claimedNames.has(jsName) || jsName === \"constructor\";\n\nconst resolveTsType = (inheritedType: string | undefined, ownType: string): string =>\n inheritedType !== undefined && inheritedType !== ownType ? inheritedType : ownType;\n\nconst resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefined => {\n const { context, property, claimedNames } = args;\n const jsName = toCamelIdentifier(property.name);\n\n if (isSkippedAccessor(property, jsName, claimedNames)) {\n return undefined;\n }\n\n // `g_object_set_property` rejects a construct-only pspec with a critical and drops the write, so\n // the property is settable at construction time only and must not advertise a setter.\n const isWritable = isConstructableProperty(property) && !property.constructOnly;\n const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);\n const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);\n const hasGetter = property.readable || getterMember !== undefined;\n\n if (!hasGetter && !isWritable) {\n return undefined;\n }\n\n const ownType = resolveOwnType(context, property, getterMethod, setterMethod);\n const tsType = resolveTsType(args.inheritedType, ownType);\n\n return { jsName, tsType, hasGetter, writable: isWritable, getterMember, getterMethod, setterMember };\n};\n\nconst resolveOwnerAccessor = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): ResolvedAccessor | undefined => {\n const methodByName: Map<string, GirFunction> = new Map();\n const claimedNames: Set<string> = new Set();\n\n for (const method of methods) {\n if (!isEmittableCallable(context, method)) {\n continue;\n }\n\n methodByName.set(method.name, method);\n claimedNames.add(methodExportName(method));\n }\n\n return resolveAccessor({ context, property, claimedNames, methodByName });\n};\n\nconst resolveAccessorType = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): string | undefined => resolveOwnerAccessor(context, property, methods)?.tsType;\n\nconst withAccessor = (\n args: PropertyAccessorArgs,\n render: (accessor: ResolvedAccessor) => string,\n): string | undefined => {\n const accessor = resolveAccessor(args);\n\n if (accessor === undefined) {\n return undefined;\n }\n\n return render(accessor);\n};\n\nconst renderResolvedPropertyAccessor = (\n context: ModuleContext,\n property: GirProperty,\n accessor: ResolvedAccessor,\n): string => {\n const { jsName, tsType, hasGetter, writable, getterMember, getterMethod, setterMember } = accessor;\n const blocks: string[] = [];\n\n if (hasGetter) {\n const getterBody = renderGetterBody({ context, property, getterMember, getterMethod, tsType });\n blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));\n }\n\n if (writable) {\n const setterBody =\n setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;\n\n blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));\n }\n\n return `${renderJsDoc(property.doc)}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));\n\nconst renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, ({ jsName, tsType, hasGetter, writable }) => {\n const doc = renderJsDoc(args.property.doc);\n\n if (hasGetter && writable) {\n return `${doc}${jsName}: ${tsType};`;\n }\n\n if (hasGetter) {\n return `${doc}get ${jsName}(): ${tsType};`;\n }\n\n return `${doc}set ${jsName}(value: ${tsType});`;\n });\n\nconst renderPropertyDescriptor = (context: ModuleContext, property: GirProperty): string =>\n renderDescriptor(context, property.type, property.transferOwnership);\n\nconst renderGenericGetBody = (context: ModuleContext, property: GirProperty, tsType: string): string => {\n context.addRuntimeImport(\"getObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `return getObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}) as ${tsType};`;\n};\n\nconst renderGenericSetBody = (context: ModuleContext, property: GirProperty): string => {\n context.addRuntimeImport(\"setObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `setObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}, value);`;\n};\n\nconst renderGetterBody = (options: GetterBodyOptions): string => {\n const { context, property, getterMember, getterMethod, tsType } = options;\n\n if (getterMember === undefined) {\n return renderGenericGetBody(context, property, tsType);\n }\n\n if (getterMethod === undefined) {\n return `return this.${getterMember}() as ${tsType};`;\n }\n\n const getterType = renderMethodReturnType(context, getterMethod);\n\n return getterType === tsType ? `return this.${getterMember}();` : `return this.${getterMember}() as ${tsType};`;\n};\n\nconst delegateMember = (\n attribute: string | undefined,\n accessorName: string,\n claimedNames: Set<string>,\n): string | undefined => {\n if (attribute === undefined) {\n return undefined;\n }\n\n const member = camelCase(attribute);\n\n if (member === accessorName) {\n return undefined;\n }\n\n if (!claimedNames.has(member)) {\n return undefined;\n }\n\n return member;\n};\n\nexport {\n resolveAccessor,\n resolveOwnerAccessor,\n resolveAccessorType,\n renderResolvedPropertyAccessor,\n renderPropertyAccessor,\n renderPropertyAccessorSignature,\n type ResolvedAccessor,\n type PropertyAccessorArgs,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"property-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/property-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { isEmittableCallable } from \"./callables.js\";\nimport { methodExportName, renderMethodReturnType } from \"./method.js\";\n\ntype ResolvedAccessor = {\n jsName: string;\n tsType: string;\n hasGetter: boolean;\n isWritable: boolean;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n setterMember: string | undefined;\n};\n\ntype PropertyAccessorArgs = {\n context: ModuleContext;\n property: GirProperty;\n claimedNames: Set<string>;\n methodByName: Map<string, GirFunction>;\n inheritedType?: string | undefined;\n};\n\ntype AccessorDelegate = { member: string | undefined; method: GirFunction | undefined };\n\ntype GetterBodyOptions = {\n context: ModuleContext;\n property: GirProperty;\n getterMember: string | undefined;\n getterMethod: GirFunction | undefined;\n tsType: string;\n};\n\nconst isNullablePropertyType = (context: ModuleContext, type: TypeId | undefined): boolean => {\n if (type === undefined) {\n return false;\n }\n\n const resolved = context.library.typeFor(type);\n\n if (resolved === undefined) {\n return true;\n }\n\n if (resolved.kind === \"primitive\") {\n return false;\n }\n\n if (resolved.kind === \"enum\") {\n return false;\n }\n\n if (resolved.kind === \"alias\") {\n return isNullablePropertyType(context, resolved.value.target);\n }\n\n return true;\n};\n\nconst resolveDelegate = (\n args: PropertyAccessorArgs,\n attribute: string | undefined,\n member: string | undefined,\n isDelegatable: (method: GirFunction) => boolean,\n): AccessorDelegate => {\n const method = member !== undefined && attribute !== undefined ? args.methodByName.get(attribute) : undefined;\n const canDelegate = method === undefined || isDelegatable(method);\n\n return canDelegate ? { member, method } : { member: undefined, method: undefined };\n};\n\nconst resolveGetterDelegate = (args: PropertyAccessorArgs, jsName: string): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = delegateMember(property.getter, jsName, claimedNames);\n\n return resolveDelegate(\n args,\n property.getter,\n member,\n (method) =>\n inputParameters(context.library, method).length === 0 &&\n !renderMethodReturnType(context, method).startsWith(\"[\"),\n );\n};\n\nconst resolveSetterDelegate = (args: PropertyAccessorArgs, jsName: string, isWritable: boolean): AccessorDelegate => {\n const { context, property, claimedNames } = args;\n const member = isWritable ? delegateMember(property.setter, jsName, claimedNames) : undefined;\n\n return resolveDelegate(\n args,\n property.setter,\n member,\n (method) => inputParameters(context.library, method).length === 1,\n );\n};\n\nconst resolveOwnType = (\n context: ModuleContext,\n property: GirProperty,\n getterMethod: GirFunction | undefined,\n setterMethod: GirFunction | undefined,\n): string => {\n const setterParam = setterMethod?.parameters[0];\n\n if (setterParam !== undefined) {\n return renderTsType(context, setterParam.type, setterParam.nullable || setterParam.optional);\n }\n\n if (getterMethod !== undefined) {\n return renderMethodReturnType(context, getterMethod);\n }\n\n return renderTsType(context, property.type, isNullablePropertyType(context, property.type));\n};\n\nconst isSkippedAccessor = (property: GirProperty, jsName: string, claimedNames: Set<string>): boolean =>\n !property.introspectable || claimedNames.has(jsName) || jsName === \"constructor\";\n\nconst resolveTsType = (inheritedType: string | undefined, ownType: string): string =>\n inheritedType !== undefined && inheritedType !== ownType ? inheritedType : ownType;\n\nconst resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefined => {\n const { context, property, claimedNames } = args;\n const jsName = toCamelIdentifier(property.name);\n\n if (isSkippedAccessor(property, jsName, claimedNames)) {\n return undefined;\n }\n\n const isWritable = isConstructableProperty(property) && !property.constructOnly;\n const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);\n const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);\n const hasGetter = property.readable || getterMember !== undefined;\n\n if (!hasGetter && !isWritable) {\n return undefined;\n }\n\n const ownType = resolveOwnType(context, property, getterMethod, setterMethod);\n const tsType = resolveTsType(args.inheritedType, ownType);\n\n return { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };\n};\n\nconst resolveOwnerAccessor = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): ResolvedAccessor | undefined => {\n const methodByName: Map<string, GirFunction> = new Map();\n const claimedNames: Set<string> = new Set();\n\n for (const method of methods) {\n if (!isEmittableCallable(context, method)) {\n continue;\n }\n\n methodByName.set(method.name, method);\n claimedNames.add(methodExportName(method));\n }\n\n return resolveAccessor({ context, property, claimedNames, methodByName });\n};\n\nconst resolveAccessorType = (\n context: ModuleContext,\n property: GirProperty,\n methods: GirFunction[],\n): string | undefined => resolveOwnerAccessor(context, property, methods)?.tsType;\n\nconst withAccessor = (\n args: PropertyAccessorArgs,\n render: (accessor: ResolvedAccessor) => string,\n): string | undefined => {\n const accessor = resolveAccessor(args);\n\n if (accessor === undefined) {\n return undefined;\n }\n\n return render(accessor);\n};\n\nconst renderResolvedPropertyAccessor = (\n context: ModuleContext,\n property: GirProperty,\n accessor: ResolvedAccessor,\n): string => {\n const { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember } = accessor;\n const blocks: string[] = [];\n\n if (hasGetter) {\n const getterBody = renderGetterBody({ context, property, getterMember, getterMethod, tsType });\n blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));\n }\n\n if (isWritable) {\n const setterBody =\n setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;\n\n blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));\n }\n\n return `${renderJsDoc(property.doc)}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));\n\nconst renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>\n withAccessor(args, ({ jsName, tsType, hasGetter, isWritable }) => {\n const doc = renderJsDoc(args.property.doc);\n\n if (hasGetter && isWritable) {\n return `${doc}${jsName}: ${tsType};`;\n }\n\n if (hasGetter) {\n return `${doc}get ${jsName}(): ${tsType};`;\n }\n\n return `${doc}set ${jsName}(value: ${tsType});`;\n });\n\nconst renderPropertyDescriptor = (context: ModuleContext, property: GirProperty): string =>\n renderDescriptor(context, property.type, property.transferOwnership);\n\nconst renderGenericGetBody = (context: ModuleContext, property: GirProperty, tsType: string): string => {\n context.addRuntimeImport(\"getObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `return getObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}) as ${tsType};`;\n};\n\nconst renderGenericSetBody = (context: ModuleContext, property: GirProperty): string => {\n context.addRuntimeImport(\"setObjectProperty\");\n context.addRuntimeImport(\"t\");\n const descriptor = renderPropertyDescriptor(context, property);\n\n return `setObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}, value);`;\n};\n\nconst renderGetterBody = (options: GetterBodyOptions): string => {\n const { context, property, getterMember, getterMethod, tsType } = options;\n\n if (getterMember === undefined) {\n return renderGenericGetBody(context, property, tsType);\n }\n\n if (getterMethod === undefined) {\n return `return this.${getterMember}() as ${tsType};`;\n }\n\n const getterType = renderMethodReturnType(context, getterMethod);\n\n return getterType === tsType ? `return this.${getterMember}();` : `return this.${getterMember}() as ${tsType};`;\n};\n\nconst delegateMember = (\n attribute: string | undefined,\n accessorName: string,\n claimedNames: Set<string>,\n): string | undefined => {\n if (attribute === undefined) {\n return undefined;\n }\n\n const member = camelCase(attribute);\n\n if (member === accessorName) {\n return undefined;\n }\n\n if (!claimedNames.has(member)) {\n return undefined;\n }\n\n return member;\n};\n\nexport {\n resolveAccessor,\n resolveOwnerAccessor,\n resolveAccessorType,\n renderResolvedPropertyAccessor,\n renderPropertyAccessor,\n renderPropertyAccessorSignature,\n type ResolvedAccessor,\n type PropertyAccessorArgs,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-constructor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"record-constructor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAgB7D,QAAA,MAAM,qCAAqC,GACvC,SAAS,aAAa,EACtB,QAAQ,SAAS,EACjB,WAAW,MAAM,KAClB,MAcF,CAAC;AAyBF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,QAAQ,SAAS,EACjB,WAAW,MAAM,EACjB,yBAAuB,KACxB,MAwBF,CAAC;AA+BF,OAAO,EAAE,qCAAqC,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -3,13 +3,14 @@ import { renderDescriptor } from "../../analysis/descriptor-render.js";
|
|
|
3
3
|
import { renderTsType } from "../../analysis/ts-type.js";
|
|
4
4
|
import { renderBlock, renderBracedOrEmpty } from "../../writer/emit.js";
|
|
5
5
|
import { renderSourceGtype } from "./gtype-binding.js";
|
|
6
|
-
import { emitFieldWrite, isEmittableField } from "./record-field-accessor.js";
|
|
6
|
+
import { emitFieldWrite, isEmittableField, isInlineField } from "./record-field-accessor.js";
|
|
7
7
|
import { computeRecordFieldSlots } from "./record-layout.js";
|
|
8
|
+
import { isConstructibleRecord } from "./value-marshalable.js";
|
|
8
9
|
const isWritableFieldSlot = (context, entry) => entry.field.writable && isEmittableField(context, entry.field);
|
|
9
10
|
const isOpaque = (record) => record.opaque || record.disguised;
|
|
10
11
|
const renderRecordConstructorPropsInterface = (context, record, className) => {
|
|
11
12
|
const head = `export interface ${className}ConstructorProps`;
|
|
12
|
-
if (isOpaque(record)) {
|
|
13
|
+
if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {
|
|
13
14
|
return renderBracedOrEmpty(head, "");
|
|
14
15
|
}
|
|
15
16
|
const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);
|
|
@@ -36,7 +37,7 @@ const renderFieldWrites = (context, slots) => {
|
|
|
36
37
|
};
|
|
37
38
|
const renderRecordConstructor = (context, record, className, isErrorSubclass = false) => {
|
|
38
39
|
const superCall = isErrorSubclass ? ["super();"] : [];
|
|
39
|
-
if (isOpaque(record)) {
|
|
40
|
+
if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {
|
|
40
41
|
return renderOpaqueConstructor(className, superCall);
|
|
41
42
|
}
|
|
42
43
|
const { slots, size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
|
|
@@ -62,7 +63,7 @@ const allocArgs = (context, record, size) => {
|
|
|
62
63
|
};
|
|
63
64
|
const renderFieldWrite = (context, entry) => {
|
|
64
65
|
context.addRuntimeImport("t");
|
|
65
|
-
const descriptor = context.hoistDescriptor(renderDescriptor(context, entry.field.type, "none"));
|
|
66
|
+
const descriptor = context.hoistDescriptor(renderDescriptor(context, entry.field.type, "none", { isInline: isInlineField(context, entry.field) }));
|
|
66
67
|
const name = toCamelIdentifier(entry.field.name);
|
|
67
68
|
const write = emitFieldWrite(context, {
|
|
68
69
|
descriptor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-constructor.js","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"record-constructor.js","sourceRoot":"","sources":["../../../src/store/gi/record-constructor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { GirRecord } from \"../../gir/record.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { renderBlock, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { renderSourceGtype } from \"./gtype-binding.js\";\nimport { emitFieldWrite, isEmittableField, isInlineField } from \"./record-field-accessor.js\";\nimport { computeRecordFieldSlots, type RecordFieldSlot } from \"./record-layout.js\";\nimport { isConstructibleRecord } from \"./value-marshalable.js\";\n\ntype WritableFieldSlot = RecordFieldSlot & { field: GirField & { type: TypeId } };\n\nconst isWritableFieldSlot = (context: ModuleContext, entry: RecordFieldSlot): entry is WritableFieldSlot =>\n entry.field.writable && isEmittableField(context, entry.field);\n\nconst isOpaque = (record: GirRecord): boolean => record.opaque || record.disguised;\n\nconst renderRecordConstructorPropsInterface = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n): string => {\n const head = `export interface ${className}ConstructorProps`;\n\n if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {\n return renderBracedOrEmpty(head, \"\");\n }\n\n const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n const lines = slots\n .filter((entry): entry is WritableFieldSlot => isWritableFieldSlot(context, entry))\n .map((entry) => `${toCamelIdentifier(entry.field.name)}?: ${renderTsType(context, entry.field.type, true)};`);\n\n return renderBracedOrEmpty(head, lines.join(\"\\n\"));\n};\n\nconst renderOpaqueConstructor = (className: string, superCall: string[]): string => {\n const message = sourceStringLiteral(`Cannot construct ${className}: opaque boxed type with no known layout`);\n\n return renderBlock(\"constructor()\", [...superCall, `throw new globalThis.Error(${message});`].join(\"\\n\"));\n};\n\nconst renderEmptyConstructor = (className: string, isErrorSubclass: boolean): string =>\n isErrorSubclass\n ? renderBlock(`constructor(props: ${className}ConstructorProps = {})`, \"super();\")\n : `constructor(props: ${className}ConstructorProps = {}) {}`;\n\nconst renderFieldWrites = (context: ModuleContext, slots: RecordFieldSlot[]): string[] => {\n const statements: string[] = [];\n\n for (const entry of slots) {\n if (isWritableFieldSlot(context, entry)) {\n statements.push(renderFieldWrite(context, entry));\n }\n }\n\n return statements;\n};\n\nconst renderRecordConstructor = (\n context: ModuleContext,\n record: GirRecord,\n className: string,\n isErrorSubclass = false,\n): string => {\n const superCall = isErrorSubclass ? [\"super();\"] : [];\n\n if (isOpaque(record) || !isConstructibleRecord(context, context.namespace.name, record)) {\n return renderOpaqueConstructor(className, superCall);\n }\n\n const { slots, size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n if (size === 0) {\n return renderEmptyConstructor(className, isErrorSubclass);\n }\n\n context.addRuntimeImport(\"alloc\");\n context.addRuntimeImport(\"setHandle\");\n\n const statements = [\n ...superCall,\n `const handle = alloc(${allocArgs(context, record, size).join(\", \")});`,\n ...renderFieldWrites(context, slots),\n \"setHandle(this, handle);\",\n ];\n\n return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, statements.join(\"\\n\"));\n};\n\nconst allocArgs = (context: ModuleContext, record: GirRecord, size: number): string[] => {\n const args = [String(size)];\n\n if (renderSourceGtype(context, record) !== undefined) {\n args.push(\"this.__type__\");\n }\n\n return args;\n};\n\nconst renderFieldWrite = (context: ModuleContext, entry: WritableFieldSlot): string => {\n context.addRuntimeImport(\"t\");\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, entry.field.type, \"none\", { isInline: isInlineField(context, entry.field) }),\n );\n\n const name = toCamelIdentifier(entry.field.name);\n\n const write = emitFieldWrite(context, {\n descriptor,\n slot: entry.slot,\n targetExpr: \"handle\",\n valueExpr: `props.${name}`,\n });\n\n return `if (props.${name} !== undefined) ${write}`;\n};\n\nexport { renderRecordConstructorPropsInterface, renderRecordConstructor };\n"]}
|
|
@@ -12,7 +12,7 @@ type FieldWriteSpec = {
|
|
|
12
12
|
type RecordFieldEntry = {
|
|
13
13
|
jsName: string;
|
|
14
14
|
tsType: string;
|
|
15
|
-
|
|
15
|
+
isWritable: boolean;
|
|
16
16
|
doc: string | undefined;
|
|
17
17
|
};
|
|
18
18
|
declare const isEmittableField: (context: ModuleContext, field: GirField) => field is GirField & {
|
|
@@ -21,5 +21,6 @@ declare const isEmittableField: (context: ModuleContext, field: GirField) => fie
|
|
|
21
21
|
declare const emitFieldWrite: (context: ModuleContext, spec: FieldWriteSpec) => string;
|
|
22
22
|
declare const resolveRecordFieldEntry: (context: ModuleContext, slot: RecordFieldSlot, claimedNames: Set<string>) => RecordFieldEntry | undefined;
|
|
23
23
|
declare const renderRecordFieldAccessor: (context: ModuleContext, slot: RecordFieldSlot, claimedNames: Set<string>, siblingFields: GirField[]) => string | undefined;
|
|
24
|
-
|
|
24
|
+
declare const isInlineField: (context: ModuleContext, field: GirField) => boolean;
|
|
25
|
+
export { isEmittableField, isInlineField, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, type RecordFieldEntry, };
|
|
25
26
|
//# sourceMappingURL=record-field-accessor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-field-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"record-field-accessor.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,EAAmD,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI3G,KAAK,cAAc,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAOF,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AA2EF,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,KAAK,IAAI,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAIhE,CAAC;AAEvC,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,MAAM,cAAc,KAAG,MAuBtE,CAAC;AA8BF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,KAC1B,gBAAgB,GAAG,SAarB,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAC3B,SAAS,aAAa,EACtB,MAAM,eAAe,EACrB,cAAc,GAAG,CAAC,MAAM,CAAC,EACzB,eAAe,QAAQ,EAAE,KAC1B,MAAM,GAAG,SA2CX,CAAC;AAkCF,QAAA,MAAM,aAAa,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,OACwC,CAAC;AAwW1G,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,gBAAgB,GACxB,CAAC"}
|
|
@@ -4,18 +4,30 @@ import { tStruct } from "../../analysis/descriptor.js";
|
|
|
4
4
|
import { renderTsType } from "../../analysis/ts-type.js";
|
|
5
5
|
import { renderJsDoc } from "../../writer/doc.js";
|
|
6
6
|
import { indent, renderBlock } from "../../writer/emit.js";
|
|
7
|
-
import { isClassStructRef } from "./class-struct-record.js";
|
|
8
7
|
import { bitMask, computeRecordFieldSlots, mergeBitfield } from "./record-layout.js";
|
|
9
8
|
import { wrapReturnValue } from "./return-wrap.js";
|
|
9
|
+
import { isValueMarshalable } from "./value-marshalable.js";
|
|
10
|
+
const isMarshalableField = (context, field) => {
|
|
11
|
+
if (field.cType?.endsWith("*") === true) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
const type = field.type === undefined ? undefined : context.library.typeFor(field.type);
|
|
15
|
+
if (type?.kind !== "record") {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
return isValueMarshalable(context, type.namespace.name, type.value);
|
|
19
|
+
};
|
|
10
20
|
const isEmittableField = (context, field) => !field.private &&
|
|
11
21
|
field.type !== undefined &&
|
|
12
22
|
!isInlineCallbackRef(context.library, field.type) &&
|
|
13
|
-
|
|
23
|
+
isMarshalableField(context, field);
|
|
14
24
|
const emitFieldWrite = (context, spec) => {
|
|
15
25
|
const { descriptor, slot, targetExpr, valueExpr } = spec;
|
|
16
26
|
context.addRuntimeImport("write");
|
|
17
27
|
if (slot.bitWidth === undefined) {
|
|
18
|
-
|
|
28
|
+
context.addRuntimeImport("toNative");
|
|
29
|
+
return (`write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +
|
|
30
|
+
`toNative(${descriptor}, ${valueExpr}));`);
|
|
19
31
|
}
|
|
20
32
|
context.addRuntimeImport("read");
|
|
21
33
|
const merged = mergeBitfield(`(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`, valueExpr, bitMask(slot.bitWidth), slot.bitOffset ?? 0);
|
|
@@ -46,7 +58,7 @@ const resolveRecordFieldEntry = (context, slot, claimedNames) => {
|
|
|
46
58
|
return {
|
|
47
59
|
jsName: admitted.jsName,
|
|
48
60
|
tsType: renderTsType(context, admitted.field.type, false),
|
|
49
|
-
|
|
61
|
+
isWritable: admitted.field.writable,
|
|
50
62
|
doc: admitted.field.doc,
|
|
51
63
|
};
|
|
52
64
|
};
|
|
@@ -65,10 +77,7 @@ const renderRecordFieldAccessor = (context, slot, claimedNames, siblingFields) =
|
|
|
65
77
|
const tsType = renderTsType(context, field.type, false);
|
|
66
78
|
return `${doc}declare ${jsName}: ${tsType};`;
|
|
67
79
|
}
|
|
68
|
-
|
|
69
|
-
// in place, so its own address is the value and no word may be loaded out of it.
|
|
70
|
-
const isInline = resolveInlineStructFields(context, field.type, field.cType) !== undefined;
|
|
71
|
-
const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, "none", { isInline }));
|
|
80
|
+
const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, "none", { isInline: isInlineField(context, field) }));
|
|
72
81
|
const tsType = renderTsType(context, field.type, false);
|
|
73
82
|
const accessorOptions = {
|
|
74
83
|
context,
|
|
@@ -113,6 +122,7 @@ const isAccessorEligibleType = (context, ref) => {
|
|
|
113
122
|
}
|
|
114
123
|
}
|
|
115
124
|
};
|
|
125
|
+
const isInlineField = (context, field) => field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;
|
|
116
126
|
const resolveInlineStructFields = (context, ref, occurrenceCType) => {
|
|
117
127
|
if (ref === undefined) {
|
|
118
128
|
return undefined;
|
|
@@ -314,7 +324,7 @@ const renderStructArrayAccessor = (context, target) => {
|
|
|
314
324
|
elementDescriptor: tStruct("borrowed", {
|
|
315
325
|
size: `${lengthExpr} * ${String(elementSize)}`,
|
|
316
326
|
wrapperClass: undefined,
|
|
317
|
-
|
|
327
|
+
isCallerAllocated: false,
|
|
318
328
|
}),
|
|
319
329
|
offset: slot.byteOffset,
|
|
320
330
|
lengthExpr,
|
|
@@ -339,7 +349,7 @@ const getterBlock = (options) => {
|
|
|
339
349
|
const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;
|
|
340
350
|
const wrapped = wrapReturnValue(context, {
|
|
341
351
|
ref: fieldType,
|
|
342
|
-
|
|
352
|
+
isNullable: false,
|
|
343
353
|
valueExpression,
|
|
344
354
|
});
|
|
345
355
|
const body = `return ${wrapped};`;
|
|
@@ -356,5 +366,5 @@ const setterBody = (context, descriptor, slot) => {
|
|
|
356
366
|
return emitFieldWrite(context, { descriptor, slot, targetExpr: "getHandle(this)", valueExpr: "value" });
|
|
357
367
|
};
|
|
358
368
|
const setterBlock = (options) => renderBlock(`set ${options.jsName}(value: ${options.tsType})`, setterBody(options.context, options.descriptor, options.slot));
|
|
359
|
-
export { isEmittableField, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor };
|
|
369
|
+
export { isEmittableField, isInlineField, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, };
|
|
360
370
|
//# sourceMappingURL=record-field-accessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { isClassStructRef } from \"./class-struct-record.js\";\nimport { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n writable: boolean;\n doc: string | undefined;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n !isClassStructRef(context, field.type);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${valueExpr});`;\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): RecordFieldEntry | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: renderTsType(context, admitted.field.type, false),\n writable: admitted.field.writable,\n doc: admitted.field.doc,\n };\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = renderJsDoc(field.doc);\n const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });\n\n if (structArray !== undefined) {\n return `${doc}${structArray}`;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n const tsType = renderTsType(context, field.type, false);\n\n return `${doc}declare ${jsName}: ${tsType};`;\n }\n\n // A record field whose C type is the record itself rather than a pointer to it holds the value\n // in place, so its own address is the value and no word may be loaded out of it.\n const isInline = resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\", { isInline }));\n const tsType = renderTsType(context, field.type, false);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (field.writable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined) {\n return String(arrayRef.fixedSize);\n }\n\n if (arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(loop, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && elementType.value.glibGetType !== undefined) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n callerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n nullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport { isEmittableField, emitFieldWrite, resolveRecordFieldEntry, renderRecordFieldAccessor, type RecordFieldEntry };\n"]}
|
|
1
|
+
{"version":3,"file":"record-field-accessor.js","sourceRoot":"","sources":["../../../src/store/gi/record-field-accessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirField } from \"../../gir/field.js\";\nimport type { FieldSlot } from \"../../gir/size.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { isInlineCallbackRef, renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { tStruct } from \"../../analysis/descriptor.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { indent, renderBlock } from \"../../writer/emit.js\";\nimport { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from \"./record-layout.js\";\nimport { wrapReturnValue } from \"./return-wrap.js\";\nimport { isValueMarshalable } from \"./value-marshalable.js\";\n\ntype FieldWriteSpec = {\n descriptor: string;\n slot: FieldSlot;\n targetExpr: string;\n valueExpr: string;\n};\n\ntype AdmittedField = {\n field: GirField & { type: TypeId };\n jsName: string;\n};\n\ntype RecordFieldEntry = {\n jsName: string;\n tsType: string;\n isWritable: boolean;\n doc: string | undefined;\n};\n\ntype InlineFieldVisit = {\n jsName: string;\n descriptor: string;\n offset: number;\n slot: FieldSlot;\n type: TypeId;\n};\n\ntype InlineFieldVisitors = {\n leaf: (visit: InlineFieldVisit) => void;\n nested: (jsName: string, nested: GirField[], offset: number) => void;\n};\n\ntype ElementWriteOptions = {\n fields: GirField[];\n baseOffset: number;\n valuePath: string;\n out: string[];\n};\n\ntype StructArrayTarget = {\n field: GirField;\n jsName: string;\n slot: FieldSlot;\n siblingFields: GirField[];\n};\n\ntype StructArrayAccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n elementDescriptor: string;\n offset: number;\n lengthExpr: string;\n elementSize: number;\n elementFields: GirField[];\n};\n\ntype StructArrayResolution = {\n fieldType: TypeId;\n elementFields: GirField[];\n lengthExpr: string;\n elementSize: number;\n};\n\ntype StructArrayElements = {\n arrayType: Extract<GirType, { kind: \"carray\" }>;\n elementFields: GirField[];\n};\n\ntype AccessorOptions = {\n context: ModuleContext;\n jsName: string;\n tsType: string;\n descriptor: string;\n slot: FieldSlot;\n fieldType: TypeId;\n};\n\nconst isMarshalableField = (context: ModuleContext, field: GirField): boolean => {\n if (field.cType?.endsWith(\"*\") === true) {\n return true;\n }\n\n const type = field.type === undefined ? undefined : context.library.typeFor(field.type);\n\n if (type?.kind !== \"record\") {\n return true;\n }\n\n return isValueMarshalable(context, type.namespace.name, type.value);\n};\n\nconst isEmittableField = (context: ModuleContext, field: GirField): field is GirField & { type: TypeId } =>\n !field.private &&\n field.type !== undefined &&\n !isInlineCallbackRef(context.library, field.type) &&\n isMarshalableField(context, field);\n\nconst emitFieldWrite = (context: ModuleContext, spec: FieldWriteSpec): string => {\n const { descriptor, slot, targetExpr, valueExpr } = spec;\n context.addRuntimeImport(\"write\");\n\n if (slot.bitWidth === undefined) {\n context.addRuntimeImport(\"toNative\");\n\n return (\n `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ` +\n `toNative(${descriptor}, ${valueExpr}));`\n );\n }\n\n context.addRuntimeImport(\"read\");\n\n const merged = mergeBitfield(\n `(read(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}) as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(${targetExpr}, ${descriptor}, ${String(slot.byteOffset)}, ${merged});`;\n};\n\nconst admitField = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): AdmittedField | undefined => {\n const { field } = slot;\n\n if (!field.readable && !field.writable) {\n return undefined;\n }\n\n if (!isEmittableField(context, field)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(field.name);\n\n if (claimedNames.has(jsName)) {\n return undefined;\n }\n\n if (jsName === \"constructor\") {\n return undefined;\n }\n\n return { field, jsName };\n};\n\nconst resolveRecordFieldEntry = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n): RecordFieldEntry | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n return {\n jsName: admitted.jsName,\n tsType: renderTsType(context, admitted.field.type, false),\n isWritable: admitted.field.writable,\n doc: admitted.field.doc,\n };\n};\n\nconst renderRecordFieldAccessor = (\n context: ModuleContext,\n slot: RecordFieldSlot,\n claimedNames: Set<string>,\n siblingFields: GirField[],\n): string | undefined => {\n const admitted = admitField(context, slot, claimedNames);\n\n if (admitted === undefined) {\n return undefined;\n }\n\n const { field, jsName } = admitted;\n const doc = renderJsDoc(field.doc);\n const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });\n\n if (structArray !== undefined) {\n return `${doc}${structArray}`;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n const tsType = renderTsType(context, field.type, false);\n\n return `${doc}declare ${jsName}: ${tsType};`;\n }\n\n const descriptor = context.hoistDescriptor(\n renderDescriptor(context, field.type, \"none\", { isInline: isInlineField(context, field) }),\n );\n\n const tsType = renderTsType(context, field.type, false);\n\n const accessorOptions: AccessorOptions = {\n context,\n jsName,\n tsType,\n descriptor,\n slot: slot.slot,\n fieldType: field.type,\n };\n\n const blocks: string[] = [getterBlock(accessorOptions)];\n\n if (field.writable) {\n blocks.push(setterBlock(accessorOptions));\n }\n\n return `${doc}${blocks.join(\"\\n\\n\")}`;\n};\n\nconst isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return true;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"void\" && type.category !== \"unichar\";\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return true;\n }\n case \"callback\": {\n return context.library.nameFor(ref) !== undefined;\n }\n case \"carray\": {\n return type.fixedSize !== undefined;\n }\n case \"list\":\n case \"hashtable\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isInlineField = (context: ModuleContext, field: GirField): boolean =>\n field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;\n\nconst resolveInlineStructFields = (\n context: ModuleContext,\n ref: TypeId | undefined,\n occurrenceCType: string | undefined,\n): GirField[] | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n if (occurrenceCType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n if (type.value.cType?.endsWith(\"*\") === true) {\n return undefined;\n }\n\n if (type.value.fields.length === 0) {\n return undefined;\n }\n\n return type.value.fields;\n};\n\nconst arrayLengthExpression = (\n arrayRef: Extract<GirType, { kind: \"carray\" }>,\n siblingFields: GirField[],\n): string | undefined => {\n if (arrayRef.fixedSize !== undefined) {\n return String(arrayRef.fixedSize);\n }\n\n if (arrayRef.lengthParameterIndex === undefined) {\n return undefined;\n }\n\n const lengthField = siblingFields.filter((field) => !field.private)[arrayRef.lengthParameterIndex];\n\n if (lengthField === undefined) {\n return undefined;\n }\n\n return `this.${toCamelIdentifier(lengthField.name)}`;\n};\n\nconst visitInlineStructSlot = (\n context: ModuleContext,\n entry: RecordFieldSlot,\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { field, slot } = entry;\n\n if (field.private || field.type === undefined || isInlineCallbackRef(context.library, field.type)) {\n return;\n }\n\n const jsName = toCamelIdentifier(field.name);\n const offset = baseOffset + slot.byteOffset;\n const nested = resolveInlineStructFields(context, field.type, field.cType);\n\n if (nested !== undefined) {\n visitors.nested(jsName, nested, offset);\n\n return;\n }\n\n if (!isAccessorEligibleType(context, field.type)) {\n return;\n }\n\n const descriptor = context.hoistDescriptor(renderDescriptor(context, field.type, \"none\"));\n visitors.leaf({ jsName, descriptor, offset, slot, type: field.type });\n};\n\nconst visitInlineStructFields = (\n context: ModuleContext,\n fields: GirField[],\n baseOffset: number,\n visitors: InlineFieldVisitors,\n): void => {\n const { slots } = computeRecordFieldSlots(context, fields);\n\n for (const entry of slots) {\n visitInlineStructSlot(context, entry, baseOffset, visitors);\n }\n};\n\nconst elementAccessExpr = (descriptor: string, offset: number): string =>\n `read(__array, ${descriptor}, __base + ${String(offset)})`;\n\nconst renderElementReadEntry = (context: ModuleContext, visit: InlineFieldVisit): string => {\n const { jsName, descriptor, offset, slot, type } = visit;\n const access = elementAccessExpr(descriptor, offset);\n\n if (slot.bitWidth === undefined) {\n return `${jsName}: ${access} as ${renderTsType(context, type, false)}`;\n }\n\n const shift = slot.bitOffset ?? 0;\n\n return `${jsName}: (((${access} as number) >>> ${String(shift)}) & ${String(bitMask(slot.bitWidth))})`;\n};\n\nconst renderElementReadObject = (context: ModuleContext, fields: GirField[], baseOffset: number): string => {\n const entries: string[] = [];\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n entries.push(renderElementReadEntry(context, visit));\n },\n nested: (jsName, nested, offset) => {\n entries.push(`${jsName}: ${renderElementReadObject(context, nested, offset)}`);\n },\n });\n\n return `{ ${entries.join(\", \")} }`;\n};\n\nconst renderElementWriteStatement = (visit: InlineFieldVisit, valuePath: string): string => {\n const { jsName, descriptor, offset, slot } = visit;\n const valueExpr = `${valuePath}.${jsName}`;\n\n if (slot.bitWidth === undefined) {\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${valueExpr});`;\n }\n\n const merged = mergeBitfield(\n `(${elementAccessExpr(descriptor, offset)} as number)`,\n valueExpr,\n bitMask(slot.bitWidth),\n slot.bitOffset ?? 0,\n );\n\n return `write(__array, ${descriptor}, __base + ${String(offset)}, ${merged});`;\n};\n\nconst appendElementWriteStatements = (context: ModuleContext, options: ElementWriteOptions): void => {\n const { fields, baseOffset, valuePath, out } = options;\n\n visitInlineStructFields(context, fields, baseOffset, {\n leaf: (visit) => {\n out.push(renderElementWriteStatement(visit, valuePath));\n },\n nested: (jsName, nested, offset) => {\n appendElementWriteStatements(context, {\n fields: nested,\n baseOffset: offset,\n valuePath: `${valuePath}.${jsName}`,\n out,\n });\n },\n });\n};\n\nconst structArrayGetterBlock = (options: StructArrayAccessorOptions): string => {\n const { context, jsName, tsType, elementDescriptor, offset, lengthExpr, elementSize, elementFields } = options;\n const element = renderElementReadObject(context, elementFields, 0);\n const loop = [`const __base = __index * ${String(elementSize)};`, `__result.push(${element});`].join(\"\\n\");\n const handleType = \"ReturnType<typeof getHandle>\";\n\n const body = [\n `const __array = read(getHandle(this), ${elementDescriptor}, ${String(offset)}) as ${handleType};`,\n `const __result: ${tsType} = [];`,\n `for (let __index = 0; __index < ${lengthExpr}; __index++) {`,\n indent(loop, 1),\n \"}\",\n \"return __result;\",\n ].join(\"\\n\");\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst structArraySetterStatements = (context: ModuleContext, options: StructArrayAccessorOptions): string => {\n const { elementDescriptor, offset, elementSize, elementFields } = options;\n const writes: string[] = [];\n\n appendElementWriteStatements(context, {\n fields: elementFields,\n baseOffset: 0,\n valuePath: \"__element\",\n out: writes,\n });\n\n const loop = [`const __base = __index * ${String(elementSize)};`, ...writes].join(\"\\n\");\n\n return [\n `const __descriptor = ${elementDescriptor};`,\n `const __array = read(getHandle(this), __descriptor, ${String(offset)}) as ReturnType<typeof getHandle>;`,\n \"for (const [__index, __element] of __value.entries()) {\",\n indent(loop, 1),\n \"}\",\n `write(getHandle(this), __descriptor, ${String(offset)}, __array);`,\n ].join(\"\\n\");\n};\n\nconst structArraySetterBlock = (options: StructArrayAccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(__value: ${options.tsType})`,\n structArraySetterStatements(options.context, options),\n );\n\nconst resolveStructArrayElements = (context: ModuleContext, fieldType: TypeId): StructArrayElements | undefined => {\n const arrayType = context.library.typeFor(fieldType);\n\n if (arrayType?.kind !== \"carray\") {\n return undefined;\n }\n\n const elementType = context.library.typeFor(arrayType.element);\n\n if (elementType?.kind === \"record\" && elementType.value.glibGetType !== undefined) {\n return undefined;\n }\n\n const elementFields = resolveInlineStructFields(context, arrayType.element, arrayType.elementCType);\n\n if (elementFields === undefined) {\n return undefined;\n }\n\n return { arrayType, elementFields };\n};\n\nconst resolveStructArrayShape = (\n context: ModuleContext,\n elements: StructArrayElements,\n siblingFields: GirField[],\n): { lengthExpr: string; elementSize: number } | undefined => {\n const lengthExpr = arrayLengthExpression(elements.arrayType, siblingFields);\n\n if (lengthExpr === undefined) {\n return undefined;\n }\n\n const elementSize = computeRecordFieldSlots(context, elements.elementFields).size;\n\n if (elementSize === 0) {\n return undefined;\n }\n\n return { lengthExpr, elementSize };\n};\n\nconst resolveStructArray = (context: ModuleContext, target: StructArrayTarget): StructArrayResolution | undefined => {\n const { field, slot, siblingFields } = target;\n\n if (field.type === undefined || slot.bitWidth !== undefined) {\n return undefined;\n }\n\n const elements = resolveStructArrayElements(context, field.type);\n\n if (elements === undefined) {\n return undefined;\n }\n\n const shape = resolveStructArrayShape(context, elements, siblingFields);\n\n if (shape === undefined) {\n return undefined;\n }\n\n return {\n fieldType: field.type,\n elementFields: elements.elementFields,\n lengthExpr: shape.lengthExpr,\n elementSize: shape.elementSize,\n };\n};\n\nconst renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTarget): string | undefined => {\n const resolution = resolveStructArray(context, target);\n\n if (resolution === undefined) {\n return undefined;\n }\n\n const { field, jsName, slot } = target;\n const { fieldType, elementFields, lengthExpr, elementSize } = resolution;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n context.addRuntimeImport(\"t\");\n\n const options: StructArrayAccessorOptions = {\n context,\n jsName,\n tsType: renderTsType(context, fieldType, false),\n elementDescriptor: tStruct(\"borrowed\", {\n size: `${lengthExpr} * ${String(elementSize)}`,\n wrapperClass: undefined,\n isCallerAllocated: false,\n }),\n offset: slot.byteOffset,\n lengthExpr,\n elementSize,\n elementFields,\n };\n\n const blocks: string[] = [];\n\n if (field.readable) {\n blocks.push(structArrayGetterBlock(options));\n }\n\n if (field.writable) {\n context.addRuntimeImport(\"write\");\n blocks.push(structArraySetterBlock(options));\n }\n\n return blocks.length === 0 ? undefined : blocks.join(\"\\n\\n\");\n};\n\nconst getterBlock = (options: AccessorOptions): string => {\n const { context, jsName, tsType, descriptor, slot, fieldType } = options;\n context.addRuntimeImport(\"read\");\n context.addRuntimeImport(\"getHandle\");\n\n if (slot.bitWidth === undefined) {\n const valueExpression = `read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)})`;\n\n const wrapped = wrapReturnValue(context, {\n ref: fieldType,\n isNullable: false,\n valueExpression,\n });\n\n const body = `return ${wrapped};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n }\n\n const mask = bitMask(slot.bitWidth);\n const shift = slot.bitOffset ?? 0;\n const readUnit = `const __unit = read(getHandle(this), ${descriptor}, ${String(slot.byteOffset)}) as number;`;\n const body = `${readUnit}\\nreturn (((__unit >>> ${String(shift)}) & ${String(mask)}) >>> 0) as ${tsType};`;\n\n return renderBlock(`get ${jsName}(): ${tsType}`, body);\n};\n\nconst setterBody = (context: ModuleContext, descriptor: string, slot: FieldSlot): string => {\n context.addRuntimeImport(\"getHandle\");\n\n return emitFieldWrite(context, { descriptor, slot, targetExpr: \"getHandle(this)\", valueExpr: \"value\" });\n};\n\nconst setterBlock = (options: AccessorOptions): string =>\n renderBlock(\n `set ${options.jsName}(value: ${options.tsType})`,\n setterBody(options.context, options.descriptor, options.slot),\n );\n\nexport {\n isEmittableField,\n isInlineField,\n emitFieldWrite,\n resolveRecordFieldEntry,\n renderRecordFieldAccessor,\n type RecordFieldEntry,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-layout.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAIH,KAAK,SAAS,EAEjB,MAAM,mBAAmB,CAAC;AAI3B,KAAK,eAAe,GAAG;IACnB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;CACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"record-layout.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAIH,KAAK,SAAS,EAEjB,MAAM,mBAAmB,CAAC;AAI3B,KAAK,eAAe,GAAG;IACnB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;CACnB,CAAC;AAUF,QAAA,MAAM,uBAAuB,GACzB,SAAS,aAAa,EACtB,QAAQ,QAAQ,EAAE,EAClB,iBAAe,KAChB;IAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAe1C,CAAC;AAEF,QAAA,MAAM,OAAO,GAAI,OAAO,MAAM,KAAG,MAMhC,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,MAQzF,CAAC;AAwJF,OAAO,EAAE,uBAAuB,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,CAAC"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { computeFieldSlots, layoutOfPrimitive, } from "../../gir/size.js";
|
|
2
2
|
const POINTER_LAYOUT = { size: 8, align: 8 };
|
|
3
3
|
const recordLayoutCache = new Map();
|
|
4
|
-
// GIR carries no alignment attribute, and a type whose alignment exceeds its widest member cannot be
|
|
5
|
-
// derived from the field list: Graphene models `graphene_simd4f_t` as four `gfloat`, which computes
|
|
6
|
-
// to align 4 while the real type is a 16-byte SIMD vector. Keying the override on `c:type` keeps it
|
|
7
|
-
// to the handful of types where the XML genuinely cannot express the ABI.
|
|
8
4
|
const ALIGNMENT_OVERRIDES = new Map([
|
|
9
5
|
["graphene_simd4f_t", { size: 16, align: 16 }],
|
|
10
6
|
["graphene_simd4x4f_t", { size: 64, align: 16 }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-layout.js","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { EntityType, GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n computeFieldSlots,\n type FieldLayout,\n type FieldLayoutInput,\n type FieldSlot,\n layoutOfPrimitive,\n} from \"../../gir/size.js\";\n\ntype ResolvedRecordValue = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype RecordFieldSlot = {\n field: GirField;\n slot: FieldSlot;\n};\n\nconst POINTER_LAYOUT: FieldLayout = { size: 8, align: 8 };\nconst recordLayoutCache: Map<string, FieldLayout> = new Map();\n\n// GIR carries no alignment attribute, and a type whose alignment exceeds its widest member cannot be\n// derived from the field list: Graphene models `graphene_simd4f_t` as four `gfloat`, which computes\n// to align 4 while the real type is a 16-byte SIMD vector. Keying the override on `c:type` keeps it\n// to the handful of types where the XML genuinely cannot express the ABI.\nconst ALIGNMENT_OVERRIDES: Map<string, FieldLayout> = new Map([\n [\"graphene_simd4f_t\", { size: 16, align: 16 }],\n [\"graphene_simd4x4f_t\", { size: 64, align: 16 }],\n]);\n\nconst computeRecordFieldSlots = (\n context: ModuleContext,\n fields: GirField[],\n isUnion = false,\n): { slots: RecordFieldSlot[]; size: number } => {\n const inputs: FieldLayoutInput[] = Array.from(fields, (field) => fieldLayoutInput(context, field, new Set()));\n const result = computeFieldSlots(inputs, isUnion);\n\n const slots = result.slots.map((slot, index) => {\n const field = fields[index];\n\n if (field === undefined) {\n throw new Error(\"computeRecordFieldSlots: parallel arrays diverged\");\n }\n\n return { field, slot };\n });\n\n return { slots, size: result.size };\n};\n\nconst bitMask = (width: number): number => {\n if (width >= 32) {\n return 0xFF_FF_FF_FF;\n }\n\n return (1 << width) - 1;\n};\n\nconst mergeBitfield = (readExpr: string, valueExpr: string, mask: number, shift: number): string => {\n const maskExpr = String(mask);\n const shiftExpr = String(shift);\n\n return (\n `((${readExpr} & ~(${maskExpr} << ${shiftExpr})) | ` +\n `((Number(${valueExpr}) & ${maskExpr}) << ${shiftExpr})) >>> 0`\n );\n};\n\nconst fieldLayoutInput = (context: ModuleContext, field: GirField, visited: Set<string>): FieldLayoutInput => {\n if (field.inlineMembers !== undefined) {\n const layout = inlineMemberLayout(context, field.inlineMembers, field.inlineIsUnion, visited);\n\n return { layout, bits: undefined };\n }\n\n if (field.type === undefined) {\n return { layout: POINTER_LAYOUT, bits: undefined };\n }\n\n return { layout: layoutOfType(context, field.type, field.cType, visited), bits: field.bits };\n};\n\nconst inlineMemberLayout = (\n context: ModuleContext,\n members: GirField[],\n isUnion: boolean,\n visited: Set<string>,\n): FieldLayout => {\n const inputs = Array.from(members, (member) => fieldLayoutInput(context, member, visited));\n\n if (inputs.length === 0) {\n return { size: 0, align: 1 };\n }\n\n const { size } = computeFieldSlots(inputs, isUnion);\n\n return { size, align: Math.max(1, ...inputs.map((input) => input.layout.align)) };\n};\n\nconst pointerOr = (occurrenceCType: string | undefined, otherwise: () => FieldLayout): FieldLayout =>\n occurrenceCType?.endsWith(\"*\") === true ? POINTER_LAYOUT : otherwise();\n\nconst layoutOfType = (\n context: ModuleContext,\n ref: TypeId,\n occurrenceCType: string | undefined,\n visited: Set<string>,\n): FieldLayout => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return POINTER_LAYOUT;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(type.category));\n }\n case \"carray\": {\n return arrayLayout(context, type, visited);\n }\n case \"list\":\n case \"hashtable\":\n case \"callback\":\n case \"varargs\":\n case \"class\":\n case \"interface\": {\n return POINTER_LAYOUT;\n }\n case \"enum\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(\"int32\"));\n }\n case \"record\": {\n return pointerOr(occurrenceCType, () => layoutOfRecord(context, type, visited));\n }\n case \"alias\": {\n return pointerOr(occurrenceCType, () => resolveAliasLayout(context, type, visited));\n }\n }\n};\n\nconst arrayLayout = (\n context: ModuleContext,\n ref: Extract<GirType, { kind: \"carray\" }>,\n visited: Set<string>,\n): FieldLayout => {\n if (ref.fixedSize === undefined) {\n return POINTER_LAYOUT;\n }\n\n const elementLayout = layoutOfType(context, ref.element, ref.elementCType, visited);\n\n return { size: elementLayout.size * ref.fixedSize, align: elementLayout.align };\n};\n\nconst declaredLayout = (record: ResolvedRecordValue): FieldLayout | undefined => {\n if (record.cType?.endsWith(\"*\") === true) {\n return POINTER_LAYOUT;\n }\n\n return record.cType === undefined ? undefined : ALIGNMENT_OVERRIDES.get(record.cType);\n};\n\nconst layoutOfRecord = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const declared = declaredLayout(resolved.value);\n\n if (declared !== undefined) {\n return declared;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (visited.has(key)) {\n return POINTER_LAYOUT;\n }\n\n const cached = recordLayoutCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(key);\n\n const inputs: FieldLayoutInput[] = Array.from(resolved.value.fields, (field) =>\n fieldLayoutInput(context, field, nextVisited));\n\n if (inputs.length === 0) {\n return POINTER_LAYOUT;\n }\n\n const { size } = computeFieldSlots(inputs, resolved.value.isUnion);\n const align = Math.max(1, ...inputs.map((input) => input.layout.align));\n const layout: FieldLayout = { size, align };\n recordLayoutCache.set(key, layout);\n\n return layout;\n};\n\nconst resolveAliasLayout = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"alias\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const ref = resolved.value.target;\n\n if (ref === undefined) {\n return POINTER_LAYOUT;\n }\n\n return layoutOfType(context, ref, resolved.value.targetCType, visited);\n};\n\nexport { computeRecordFieldSlots, bitMask, mergeBitfield, type RecordFieldSlot };\n"]}
|
|
1
|
+
{"version":3,"file":"record-layout.js","sourceRoot":"","sources":["../../../src/store/gi/record-layout.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirField } from \"../../gir/field.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { EntityType, GirType } from \"../../gir/type.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n computeFieldSlots,\n type FieldLayout,\n type FieldLayoutInput,\n type FieldSlot,\n layoutOfPrimitive,\n} from \"../../gir/size.js\";\n\ntype ResolvedRecordValue = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype RecordFieldSlot = {\n field: GirField;\n slot: FieldSlot;\n};\n\nconst POINTER_LAYOUT: FieldLayout = { size: 8, align: 8 };\nconst recordLayoutCache: Map<string, FieldLayout> = new Map();\n\nconst ALIGNMENT_OVERRIDES: Map<string, FieldLayout> = new Map([\n [\"graphene_simd4f_t\", { size: 16, align: 16 }],\n [\"graphene_simd4x4f_t\", { size: 64, align: 16 }],\n]);\n\nconst computeRecordFieldSlots = (\n context: ModuleContext,\n fields: GirField[],\n isUnion = false,\n): { slots: RecordFieldSlot[]; size: number } => {\n const inputs: FieldLayoutInput[] = Array.from(fields, (field) => fieldLayoutInput(context, field, new Set()));\n const result = computeFieldSlots(inputs, isUnion);\n\n const slots = result.slots.map((slot, index) => {\n const field = fields[index];\n\n if (field === undefined) {\n throw new Error(\"computeRecordFieldSlots: parallel arrays diverged\");\n }\n\n return { field, slot };\n });\n\n return { slots, size: result.size };\n};\n\nconst bitMask = (width: number): number => {\n if (width >= 32) {\n return 0xFF_FF_FF_FF;\n }\n\n return (1 << width) - 1;\n};\n\nconst mergeBitfield = (readExpr: string, valueExpr: string, mask: number, shift: number): string => {\n const maskExpr = String(mask);\n const shiftExpr = String(shift);\n\n return (\n `((${readExpr} & ~(${maskExpr} << ${shiftExpr})) | ` +\n `((Number(${valueExpr}) & ${maskExpr}) << ${shiftExpr})) >>> 0`\n );\n};\n\nconst fieldLayoutInput = (context: ModuleContext, field: GirField, visited: Set<string>): FieldLayoutInput => {\n if (field.inlineMembers !== undefined) {\n const layout = inlineMemberLayout(context, field.inlineMembers, field.inlineIsUnion, visited);\n\n return { layout, bits: undefined };\n }\n\n if (field.type === undefined) {\n return { layout: POINTER_LAYOUT, bits: undefined };\n }\n\n return { layout: layoutOfType(context, field.type, field.cType, visited), bits: field.bits };\n};\n\nconst inlineMemberLayout = (\n context: ModuleContext,\n members: GirField[],\n isUnion: boolean,\n visited: Set<string>,\n): FieldLayout => {\n const inputs = Array.from(members, (member) => fieldLayoutInput(context, member, visited));\n\n if (inputs.length === 0) {\n return { size: 0, align: 1 };\n }\n\n const { size } = computeFieldSlots(inputs, isUnion);\n\n return { size, align: Math.max(1, ...inputs.map((input) => input.layout.align)) };\n};\n\nconst pointerOr = (occurrenceCType: string | undefined, otherwise: () => FieldLayout): FieldLayout =>\n occurrenceCType?.endsWith(\"*\") === true ? POINTER_LAYOUT : otherwise();\n\nconst layoutOfType = (\n context: ModuleContext,\n ref: TypeId,\n occurrenceCType: string | undefined,\n visited: Set<string>,\n): FieldLayout => {\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return POINTER_LAYOUT;\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(type.category));\n }\n case \"carray\": {\n return arrayLayout(context, type, visited);\n }\n case \"list\":\n case \"hashtable\":\n case \"callback\":\n case \"varargs\":\n case \"class\":\n case \"interface\": {\n return POINTER_LAYOUT;\n }\n case \"enum\": {\n return pointerOr(occurrenceCType, () => layoutOfPrimitive(\"int32\"));\n }\n case \"record\": {\n return pointerOr(occurrenceCType, () => layoutOfRecord(context, type, visited));\n }\n case \"alias\": {\n return pointerOr(occurrenceCType, () => resolveAliasLayout(context, type, visited));\n }\n }\n};\n\nconst arrayLayout = (\n context: ModuleContext,\n ref: Extract<GirType, { kind: \"carray\" }>,\n visited: Set<string>,\n): FieldLayout => {\n if (ref.fixedSize === undefined) {\n return POINTER_LAYOUT;\n }\n\n const elementLayout = layoutOfType(context, ref.element, ref.elementCType, visited);\n\n return { size: elementLayout.size * ref.fixedSize, align: elementLayout.align };\n};\n\nconst declaredLayout = (record: ResolvedRecordValue): FieldLayout | undefined => {\n if (record.cType?.endsWith(\"*\") === true) {\n return POINTER_LAYOUT;\n }\n\n return record.cType === undefined ? undefined : ALIGNMENT_OVERRIDES.get(record.cType);\n};\n\nconst layoutOfRecord = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const declared = declaredLayout(resolved.value);\n\n if (declared !== undefined) {\n return declared;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (visited.has(key)) {\n return POINTER_LAYOUT;\n }\n\n const cached = recordLayoutCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const nextVisited = new Set(visited);\n nextVisited.add(key);\n\n const inputs: FieldLayoutInput[] = Array.from(resolved.value.fields, (field) =>\n fieldLayoutInput(context, field, nextVisited));\n\n if (inputs.length === 0) {\n return POINTER_LAYOUT;\n }\n\n const { size } = computeFieldSlots(inputs, resolved.value.isUnion);\n const align = Math.max(1, ...inputs.map((input) => input.layout.align));\n const layout: FieldLayout = { size, align };\n recordLayoutCache.set(key, layout);\n\n return layout;\n};\n\nconst resolveAliasLayout = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"alias\" }>,\n visited: Set<string>,\n): FieldLayout => {\n const ref = resolved.value.target;\n\n if (ref === undefined) {\n return POINTER_LAYOUT;\n }\n\n return layoutOfType(context, ref, resolved.value.targetCType, visited);\n};\n\nexport { computeRecordFieldSlots, bitMask, mergeBitfield, type RecordFieldSlot };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/store/gi/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAa7D,QAAA,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,QAAQ,SAAS,KAAG,IA8BnE,CAAC;AAmCF,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/store/gi/record.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { renderJsDoc } from "../../writer/doc.js";
|
|
2
2
|
import { indentMembers } from "../../writer/emit.js";
|
|
3
3
|
import { dedupeCallables, generateBindings, renderPlainTypeMembers } from "./callables.js";
|
|
4
|
-
import { isClassStructRecord } from "./class-struct-record.js";
|
|
5
4
|
import { renderSourceGtype } from "./gtype-binding.js";
|
|
6
5
|
import { renderRecordConstructor, renderRecordConstructorPropsInterface } from "./record-constructor.js";
|
|
7
6
|
import { renderRecordFieldAccessor } from "./record-field-accessor.js";
|
|
@@ -12,15 +11,9 @@ const generateRecord = (context, record) => {
|
|
|
12
11
|
if (!record.introspectable) {
|
|
13
12
|
return;
|
|
14
13
|
}
|
|
15
|
-
if (record.isVtable) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
14
|
if (record.name.length === 0) {
|
|
19
15
|
return;
|
|
20
16
|
}
|
|
21
|
-
if (isClassStructRecord(context.library, context.namespace.name, record)) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
17
|
const className = record.name;
|
|
25
18
|
const isErrorSubclass = isGErrorRecord(context, record);
|
|
26
19
|
const callables = {
|