Documentation
¶
Overview ¶
Package view holds the pure-data intermediate representation for the raw purego framework emitter. A gather phase in package emit resolves metadata and type information into these structs; package render turns them into Go source through templates only. No struct here carries behaviour or makes a type decision — every value is already resolved.
Index ¶
- type BlockAdapter
- type BlockCallbackParam
- type ClassSelectorVar
- type ClassTypeDecl
- type ClassVars
- type Enum
- type EnumMember
- type Extern
- type FromIDConstructor
- type Function
- type FunctionFile
- type FunctionVar
- type Protocol
- type ProtocolMethod
- type RawMethod
- type RawRetVar
- type Struct
- type StructField
- type TypedefAlias
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BlockAdapter ¶
type BlockAdapter struct {
// Degraded marks an unbridgeable block: no construction is emitted.
Degraded bool
// ParamName is the public closure parameter name (the Go func the caller
// supplies).
ParamName string
// BlockVar is the local objc.Block variable ("__block_<ParamName>").
BlockVar string
// CallbackSig is the fully-rendered objc.NewBlock callback signature,
// e.g. "func(_ objc.Block, blockParam0 objc.ID) bool".
CallbackSig string
// Params are the callback's adapted parameters, in order, used to emit the
// retain guards for ObjC-object arguments.
Params []BlockCallbackParam
// HasReturn is true when the block returns a value (the call is returned).
HasReturn bool
// CallExpr is the call into the public closure with each ABI value converted
// to its public form, e.g. "onDone(purego.GoCString(blockParam0))".
CallExpr string
}
BlockAdapter is the resolved objc.NewBlock construction for one block-typed parameter of a wrapper function or method. A degraded adapter emits nothing (the public objc.Block parameter is passed through verbatim); otherwise the template builds a block whose callback adapts the ABI values to the public Go closure and invokes it.
type BlockCallbackParam ¶
type BlockCallbackParam struct {
// ArgName is the callback parameter name ("blockParam<i>").
ArgName string
// NeedsRetain marks an ObjC-object argument that must be retained before it
// is wrapped, so the Go finalizer owns the +1.
NeedsRetain bool
}
BlockCallbackParam is one parameter of a block callback, used to emit the pre-call retain guard for ObjC-object arguments.
type ClassSelectorVar ¶
type ClassSelectorVar struct {
// VarName is the unexported selector variable name.
VarName string
// Selector is the ObjC selector string passed to objc.RegisterName.
Selector string
}
ClassSelectorVar is one registered-selector variable in a class's var block.
type ClassTypeDecl ¶
type ClassTypeDecl struct {
// CommentBlock is the class doc, the Apple documentation URL, and any
// deprecation line (all column 0, trailing newline).
CommentBlock string
// TypeHeader is the type name with any generic constraint list,
// e.g. "NSView" or "NSArray[ObjectType objc.AnyObject]".
TypeHeader string
// EmbedLine is the struct's single line: "ptr objc.ID" for a root or
// cycle-broken class, otherwise the embedded superclass type.
EmbedLine string
// EmitPtrMethods emits the promoted Ptr()/InitPtr() accessors (only for
// root/cycle-broken classes that hold the ptr field directly).
EmitPtrMethods bool
// PtrReceiver is the receiver type for the Ptr/InitPtr methods, with any
// generic parameter list, e.g. "NSView" or "NSArray[ObjectType]".
PtrReceiver string
}
ClassTypeDecl is the resolved Go struct declaration for an ObjC class: the doc comment block, the (possibly generic) type header, the single embedded field (the raw ptr for a root/cycle-broken class, otherwise the superclass struct), and — for those root/cycle-broken classes — the promoted Ptr/InitPtr methods.
type ClassVars ¶
type ClassVars struct {
// ClassVarName is the unexported class-reference variable (e.g. "_clsNSView").
ClassVarName string
// ClassName is the ObjC class name passed to _objcClass.
ClassName string
// Selectors are the registered-selector variables, deduplicated by name; an
// empty list collapses to a single `var` declaration.
Selectors []ClassSelectorVar
}
ClassVars is the resolved package-level var block for a class: the class reference variable and one registered-selector variable per selector used by the class's methods.
type Enum ¶
type Enum struct {
// GoName is the exported Go type name (empty for an anonymous enum).
GoName string
// GoType is the underlying Go integer type (empty for an anonymous enum).
GoType string
// CommentBlock is the rendered doc + deprecation comment for the type, each
// line "// "-prefixed with a trailing newline, or empty.
CommentBlock string
// IsBitmask selects the flag-combining String form over the switch form.
IsBitmask bool
// IsAnon marks an anonymous enum: only Members is used, rendered as an
// untyped const block.
IsAnon bool
// HasConstBlock is true when the named enum had at least one (deduplicated)
// member, so a `const (...)` block is emitted even if every member was
// filtered out as unavailable — matching the original emitter exactly.
HasConstBlock bool
// Members are the constant declarations, in source order, already
// deduplicated and filtered to available members.
Members []EnumMember
// StringMembers are the members the String method dispatches on: for the
// switch form, deduplicated by value; for the bitmask form, the non-zero
// members. Empty for an anonymous enum.
StringMembers []EnumMember
}
Enum is a resolved ObjC enum ready to render as a Go type. A named enum emits a `type X <underlying>` declaration, a typed const block, and a String method; an anonymous enum (IsAnon) emits only an untyped const block.
type EnumMember ¶
type EnumMember struct {
// ConstName is the exported Go constant name.
ConstName string
// Value is the literal integer value as it appears in source.
Value string
// CommentBlock is the rendered doc comment for the member ("\t// …\n"), or
// empty.
CommentBlock string
}
EnumMember is one constant of an enum.
type Extern ¶
type Extern struct {
// CommentBlock is the doc + deprecation comment (column 0, trailing newline).
CommentBlock string
// GoName is the exported accessor function name.
GoName string
// RetType is the accessor's Go return type ("uintptr" for the raw form).
RetType string
// DylibVar is the package-level variable holding the loaded dylib handle.
DylibVar string
// Symbol is the C symbol name passed to Dlsym.
Symbol string
// Form selects the body shape (see above).
Form string
// GoType is the value type read for the "value" form.
GoType string
// FromIDCall is the typed-wrapper expression for the "fromid" form.
FromIDCall string
// Zero is the zero value returned by the "value" form when the symbol is
// absent.
Zero string
}
Extern is a resolved accessor for an extern global symbol, read at runtime via purego.Dlsym. The Form selects the body shape:
- "raw" — returns the raw uintptr address
- "fromid" — reads an ObjC object reference and wraps it via FromIDCall
- "string" — reads a char* as a Go string
- "value" — reads a value type, returning Zero when the symbol is absent
type FromIDConstructor ¶
type FromIDConstructor struct {
// Signature is the full function signature up to the opening brace, e.g.
// "func NSViewFromID(id objc.ID) *NSView" or the generic form.
Signature string
// AllocType is the type literal allocated for the wrapper, e.g. "NSView" or
// "NSArray[ObjectType]".
AllocType string
}
FromIDConstructor is the resolved XFromID factory: it wraps a raw objc.ID in the class's Go type and registers it with the runtime for finalization.
type Function ¶
type Function struct {
// CommentBlock is the doc, "// C function: <name>", and deprecation comment
// (all column 0, trailing newline).
CommentBlock string
GoName string
ParamStr string
RetSig string
// Adapters build the objc.Block values for block-typed parameters.
Adapters []BlockAdapter
// FuncVarName is the bound C function-pointer variable.
FuncVarName string
// CallStr is the comma-joined call argument list.
CallStr string
// ReturnKind selects the body shape: 0 void, 1 plain return, 2 object
// return (retain then wrap).
ReturnKind int
// WrapExpr is the wrapper expression for an object return (ReturnKind 2).
WrapExpr string
}
Function is an exported wrapper around a C function pointer. Block-typed parameters are adapted by Adapters before the call; the result is returned directly, returned after a retain (object returns), or discarded (void).
type FunctionFile ¶
type FunctionFile struct {
Vars []FunctionVar
Wrappers []Function
}
FunctionFile is the whole rendered functions output for a package: the `var (...)` block of purego-bound C function pointers followed by the exported wrapper functions.
type FunctionVar ¶
FunctionVar is one entry in the function-pointer var block: the binding variable and its C-ABI func type. Its CommentBlock matches the original emitter's indentation (the doc line is tab-indented inside the var block; a deprecation line is at column 0 and gofmt re-indents it).
type Protocol ¶
type Protocol struct {
// CommentBlock is the "// X wraps the ObjC protocol Y." comment (column 0,
// trailing newline).
CommentBlock string
// GoName is the exported Go interface name.
GoName string
// Embeds are the embedded parent interface names, already qualified with a
// package selector when cross-framework.
Embeds []string
// Methods are the required interface methods.
Methods []ProtocolMethod
}
Protocol is a resolved ObjC protocol rendered as a Go interface: the embedded parent interfaces followed by the required method set.
type ProtocolMethod ¶
ProtocolMethod is one method of a protocol interface: its Go name and its already-resolved signature (the "(params) ret" fragment).
type RawMethod ¶
type RawMethod struct {
// CommentBlock is the doc + deprecation comment (column 0, trailing newline).
CommentBlock string
// Receiver is the method receiver clause "(o *Type) " (empty for a class
// function).
Receiver string
// GoName is the exported method or function name.
GoName string
// ParamStr is the rendered signature parameter list.
ParamStr string
// ReturnSig is the return clause: "", " T", " error", or " (T, error)".
ReturnSig string
// Adapters build objc.Block values for block-typed parameters.
Adapters []BlockAdapter
// HasNSError adds the trailing NSError out-parameter and error handling.
HasNSError bool
// Target is the receiver expression of the objc.Send ("o.Ptr()" or the class
// reference for class methods).
Target string
// SelVar is the registered-selector variable passed to objc.Send.
SelVar string
// SendArgStr is the marshaled argument list, already comma-prefixed (or empty).
SendArgStr string
// ReturnKind selects the dispatch shape: 0 void, 1 object, 2 string, 3 bool,
// 4 scalar/struct.
ReturnKind int
// RetGoType is the Go return type (the objc.Send type parameter for the
// scalar/struct kind).
RetGoType string
// AlreadyRetained skips the post-call retain for object returns the callee
// already retained (NARC).
AlreadyRetained bool
// WrapExpr wraps the raw objc.ID result for an object return (kind 1).
WrapExpr string
// ZeroVal is the zero value returned on the error path for a scalar/struct
// return (kind 4 with NSError).
ZeroVal string
// MainThread wraps the objc.Send dispatch in purego.Main so the call runs on
// the main thread — set when the class or selector is @MainActor-isolated
// (and the selector is not nonisolated). Mirrors the idiomatic layer.
MainThread bool
// RetDecls are the `var _mainthreadN T` declarations hoisted above the
// purego.Main closure so return values can escape it (empty for a void
// main-thread method).
RetDecls []RawRetVar
// RetVarList is the comma-joined `_mainthread0, _mainthread1` list used for
// the in-closure assignment and the trailing return (empty for void).
RetVarList string
}
RawMethod is a resolved Go method (or class function) wrapping an ObjC method via objc.Send. Block parameters are adapted first; the call dispatches on the resolved return kind, optionally unpacking a trailing NSError.
type Struct ¶
type Struct struct {
// CommentBlock is everything rendered before the `type` keyword — the doc
// comment, any deprecation line, the "// C struct: <name>" note, and (for an
// opaque struct) the "// X is an opaque type." line — each "// "-prefixed
// with a trailing newline. Already at column 0, matching the original.
CommentBlock string
// GoName is the exported Go type name.
GoName string
// IsOpaque marks a zero-field struct, rendered as `struct{}`.
IsOpaque bool
// Fields are the exported fields, in declaration order (empty when opaque).
Fields []StructField
}
Struct is a resolved C/ObjC struct ready to render as a Go type. A struct with no fields renders as an opaque empty struct; otherwise it renders its exported fields with their resolved Go types.
type StructField ¶
StructField is one exported struct field with its resolved Go type.
type TypedefAlias ¶
type TypedefAlias struct {
// CommentBlock is the doc comment before the alias (column 0, trailing
// newline).
CommentBlock string
// GoName is the exported alias name.
GoName string
// RHS is the right-hand side of the alias: a type, or "*Type" for an
// opaque-pointer typedef.
RHS string
}
TypedefAlias is a resolved C typedef rendered as a Go type alias (`type X = <RHS>`), for example `NSRect = CGRect` or an opaque-pointer `FooRef = *Foo`.