Documentation
¶
Overview ¶
This file is used to convert type from ast type to types.Type
Index ¶
- Constants
- Variables
- func IsDepStd(pkgPath string) (string, bool)
- func ModInit(deps []string, outputDir string, modulePath string) error
- func NewCommentGroup(comments ...*goast.Comment) *goast.CommentGroup
- func NewCommentGroupFromC(doc *ast.CommentGroup) *goast.CommentGroup
- func NewFuncDocComment(funcName string, goFuncName string) *goast.Comment
- func NewTypecDocComment() *goast.Comment
- func SetDebug(dbgFlags dbgFlags)
- func Sizeof(T types.Type) int64
- type BuiltinTypeMap
- type Config
- type ConstGroup
- type Converter
- type ExprWrap
- type GoFuncSpec
- type Incomplete
- type IncompleteTypes
- type LitParseError
- type Module
- type Node
- type Package
- func (p *Package) CollectNameMapping(originName, newName string, pnc nc.NodeConverter)
- func (p *Package) Complete() error
- func (p *Package) Config() *PackageConfig
- func (p *Package) GetUniqueName(node Node, pubName string) (_ string, changed bool)
- func (p *Package) Lookup(name string) types.Object
- func (p *Package) NewConstGroup() *ConstGroup
- func (p *Package) NewEnumTypeDecl(goName string, enumTypeDecl *ast.EnumTypeDecl, pnc nc.NodeConverter) error
- func (p *Package) NewFuncDecl(goName string, funcDecl *ast.FuncDecl) error
- func (p *Package) NewMacro(goName string, macro *ast.Macro) error
- func (p *Package) NewTypeDecl(goName string, typeDecl *ast.TypeDecl, pnc nc.NodeConverter) error
- func (p *Package) NewTypedefDecl(goName string, typedefDecl *ast.TypedefDecl, pnc nc.NodeConverter) error
- func (p *Package) NewTypedefs(name string, typ types.Type) *gogen.TypeDecl
- func (p *Package) Pkg() *gogen.Package
- func (p *Package) RegisterNode(node Node, goName string, ...) (pubName string, changed bool, exist bool, err error)
- func (p *Package) ToSigSignature(recv *types.Var, funcDecl *ast.FuncDecl) (*types.Signature, error)
- func (p *Package) ToType(expr ast.Expr) (types.Type, error)
- type PackageConfig
- type PkgBase
- type PkgDepLoader
- func (pm *PkgDepLoader) Import(pkgPath string) (*PkgInfo, error)
- func (pm *PkgDepLoader) Imports(pkgPaths []string) (pkgs []*PkgInfo, err error)
- func (pm *PkgDepLoader) InitDeps(p *PkgInfo) error
- func (pm *PkgDepLoader) LoadDeps(p *PkgInfo) ([]*PkgInfo, error)
- func (pm *PkgDepLoader) RegisterDep(dep *PkgInfo)
- func (pm *PkgDepLoader) RegisterDeps(p *PkgInfo)
- type PkgInfo
- type ProcessSymbol
- type TypeContext
- type TypeConv
- type TypeDefinedError
Constants ¶
const ( DbgLog dbgFlags = 1 << iota DbgFlagAll = DbgLog )
const ( FuncDecl nodeKind = iota + 1 TypeDecl TypedefDecl EnumTypeDecl EnumItem Macro )
const (
TYPEC = "// llgo:type C"
)
Variables ¶
var (
ErrTypeConv = errors.New("error convert type")
)
Functions ¶
func NewCommentGroup ¶
func NewCommentGroup(comments ...*goast.Comment) *goast.CommentGroup
func NewCommentGroupFromC ¶
func NewCommentGroupFromC(doc *ast.CommentGroup) *goast.CommentGroup
func NewTypecDocComment ¶
Types ¶
type BuiltinTypeMap ¶
type BuiltinTypeMap struct {
// contains filtered or unexported fields
}
func NewBuiltinTypeMap ¶
func NewBuiltinTypeMap(pkgPath, name string, conf *gogen.Config) *BuiltinTypeMap
func NewBuiltinTypeMapWithPkgRefS ¶
func NewBuiltinTypeMapWithPkgRefS(pkgs ...gogen.PkgRef) *BuiltinTypeMap
func (*BuiltinTypeMap) FindBuiltinType ¶
func (p *BuiltinTypeMap) FindBuiltinType(builtinType ast.BuiltinType) (types.Type, error)
func (*BuiltinTypeMap) IsVoidType ¶
func (p *BuiltinTypeMap) IsVoidType(typ types.Type) bool
type ConstGroup ¶
type ConstGroup struct {
// contains filtered or unexported fields
}
func NewConstGroup ¶
func NewConstGroup(pkg *gogen.Package, scope *types.Scope) *ConstGroup
type Converter ¶
func NewConverter ¶
type GoFuncSpec ¶
type GoFuncSpec struct { GoSymbName string // original full name from input FnName string // function name without receiver IsMethod bool // if the function canbe a method RecvName string // receiver name PtrRecv bool // if the receiver is a pointer }
GoFuncSpec parses and stores components of a Go function name Input examples from llcppg.symb.json's "go" field: 1. Simple function: "AddPatchToArray" 2. Method with pointer receiver: "(*Sqlite3Stmt).Sqlite3BindParameterIndex" 3. Method with value receiver: "CJSONBool.CJSONCreateBool"
func NewGoFuncSpec ¶
func NewGoFuncSpec(name string, field []*ast.Field) *GoFuncSpec
- "AddPatchToArray" -> {goSymbolName: "AddPatchToArray", funcName: "AddPatchToArray"} - "(*Sqlite3Stmt).Sqlite3BindParameterIndex" -> {goSymbolName: "...", recvName: "Sqlite3Stmt", funcName: "Sqlite3BindParameterIndex", ptrRecv: true} - "CJSONBool.CJSONCreateBool" -> {goSymbolName: "...", recvName: "CJSONBool", funcName: "CJSONCreateBool", ptrRecv: false}
func (*GoFuncSpec) IsIgnore ¶
func (g *GoFuncSpec) IsIgnore() bool
type Incomplete ¶
type Incomplete struct {
// contains filtered or unexported fields
}
type IncompleteTypes ¶
type IncompleteTypes struct {
// contains filtered or unexported fields
}
func NewIncompleteTypes ¶
func NewIncompleteTypes() *IncompleteTypes
func (*IncompleteTypes) Add ¶
func (it *IncompleteTypes) Add(inc *Incomplete)
func (*IncompleteTypes) Clear ¶
func (it *IncompleteTypes) Clear()
func (*IncompleteTypes) Complete ¶
func (it *IncompleteTypes) Complete(cname string)
func (*IncompleteTypes) IterateIncomplete ¶
func (it *IncompleteTypes) IterateIncomplete(fn func(*Incomplete) error) error
func (*IncompleteTypes) Lookup ¶
func (it *IncompleteTypes) Lookup(cname string) (*Incomplete, bool)
type LitParseError ¶
type LitParseError struct {
// contains filtered or unexported fields
}
func NewLitParseError ¶
func NewLitParseError(from any, to string) *LitParseError
func (*LitParseError) Error ¶
func (p *LitParseError) Error() string
type Package ¶
type Package struct { *PkgInfo // contains filtered or unexported fields }
In Processing Package
func NewPackage ¶
func NewPackage(pnc nc.NodeConverter, config *PackageConfig) (*Package, error)
When creating a new package for conversion, a Go file named after the package is generated by default. If SetCurFile is not called, all type conversions will be written to this default Go file.
func (*Package) CollectNameMapping ¶
func (p *Package) CollectNameMapping(originName, newName string, pnc nc.NodeConverter)
Collect the name mapping between origin name and pubname if in current package, it will be collected in public symbol table
func (*Package) Complete ¶
Complete completes all incomplete type definitions, because some types may be implemented across multiple files.
func (*Package) Config ¶
func (p *Package) Config() *PackageConfig
func (*Package) GetUniqueName ¶
GetUniqueName generates a unique public name for a given node using the provided name transformation method. It ensures the generated name doesn't conflict with existing names by adding a numeric suffix if needed.
Parameters:
- node: The node containing the original name to be transformed
- nameMethod: Function used to transform the original name (e.g., declName, constName)
Returns:
- pubName: The generated unique public name
- changed: Whether the generated name differs from the original name
func (*Package) NewConstGroup ¶
func (p *Package) NewConstGroup() *ConstGroup
func (*Package) NewEnumTypeDecl ¶
func (p *Package) NewEnumTypeDecl(goName string, enumTypeDecl *ast.EnumTypeDecl, pnc nc.NodeConverter) error
func (*Package) NewFuncDecl ¶
func (*Package) NewTypeDecl ¶
NewTypeDecl converts C/C++ type declarations to Go. Besides regular type declarations, it also supports: - Forward declarations: Pre-registers incomplete types for later definition - Self-referential types: Handles types that reference themselves (like linked lists)
func (*Package) NewTypedefDecl ¶
func (p *Package) NewTypedefDecl(goName string, typedefDecl *ast.TypedefDecl, pnc nc.NodeConverter) error
func (*Package) NewTypedefs ¶
func (*Package) RegisterNode ¶
func (*Package) ToSigSignature ¶
type PackageConfig ¶
type PkgDepLoader ¶
type PkgDepLoader struct {
// contains filtered or unexported fields
}
func NewPkgDepLoader ¶
func NewPkgDepLoader(mod *xgomod.Module, pkg *gogen.Package) *PkgDepLoader
func (*PkgDepLoader) Imports ¶
func (pm *PkgDepLoader) Imports(pkgPaths []string) (pkgs []*PkgInfo, err error)
func (*PkgDepLoader) InitDeps ¶
func (pm *PkgDepLoader) InitDeps(p *PkgInfo) error
func (*PkgDepLoader) LoadDeps ¶
func (pm *PkgDepLoader) LoadDeps(p *PkgInfo) ([]*PkgInfo, error)
LoadDeps loads direct dependencies of the current package and recursively loads their dependencies, to get the complete dependency.
func (*PkgDepLoader) RegisterDep ¶
func (pm *PkgDepLoader) RegisterDep(dep *PkgInfo)
func (*PkgDepLoader) RegisterDeps ¶
func (pm *PkgDepLoader) RegisterDeps(p *PkgInfo)
RegisterDeps registers types from dependent packages into the current conversion project's scope
type ProcessSymbol ¶
type ProcessSymbol struct {
// contains filtered or unexported fields
}
func NewProcessSymbol ¶
func NewProcessSymbol() *ProcessSymbol
type TypeContext ¶
type TypeContext int
const ( Normal TypeContext = iota Param // In function parameter context Record // In record field context )
type TypeConv ¶
type TypeConv struct {
// contains filtered or unexported fields
}
func (*TypeConv) RecordTypeToStruct ¶
func (*TypeConv) ToDefaultEnumType ¶
func (*TypeConv) ToSignature ¶
type TypeDefinedError ¶
func NewTypeDefinedError ¶
func NewTypeDefinedError(name, originName string) *TypeDefinedError
func (*TypeDefinedError) Error ¶
func (p *TypeDefinedError) Error() string