Documentation ¶
Overview ¶
Package cl compiles Go+ syntax trees (ast).
Index ¶
Constants ¶
View Source
const ( DbgFlagLoad dbgFlags = 1 << iota DbgFlagLookup FlagNoMarkAutogen DbgFlagAll = DbgFlagLoad | DbgFlagLookup )
Variables ¶
This section is empty.
Functions ¶
func ClassNameAndExt ¶ added in v1.2.0
func NewPackage ¶ added in v0.7.0
NewPackage creates a Go+ package instance.
func SetDisableRecover ¶ added in v1.0.0
func SetDisableRecover(disableRecover bool)
Types ¶
type Config ¶ added in v0.9.0
type Config struct { // Types provides type information for the package (optional). Types *types.Package // Fset provides source position information for syntax trees and types (required). Fset *token.FileSet // RelativeBase is the root directory of relative path. RelativeBase string // C2goBase specifies base of standard c2go packages (optional). // Default is github.com/goplus/. C2goBase string // LookupPub lookups the c2go package pubfile named c2go.a.pub (required). // See gop/x/c2go.LookupPub. LookupPub func(pkgPath string) (pubfile string, err error) // LookupClass lookups a class by specified file extension (required). // See (*github.com/goplus/mod/gopmod.Module).LookupClass. LookupClass func(ext string) (c *Project, ok bool) // An Importer resolves import paths to Packages (optional). Importer types.Importer // A Recorder records existing objects including constants, variables and // types etc (optional). Recorder Recorder // NoFileLine = true means not to generate file line comments. NoFileLine bool // NoAutoGenMain = true means not to auto generate main func is no entry. NoAutoGenMain bool // NoSkipConstant = true means to disable optimization of skipping constants. NoSkipConstant bool // Outline = true means to skip compiling function bodies. Outline bool }
Config of loading Go+ packages.
type Recorder ¶ added in v1.1.9
type Recorder interface { // Type maps expressions to their types, and for constant // expressions, also their values. Invalid expressions are // omitted. // // For (possibly parenthesized) identifiers denoting built-in // functions, the recorded signatures are call-site specific: // if the call result is not a constant, the recorded type is // an argument-specific signature. Otherwise, the recorded type // is invalid. // // The Types map does not record the type of every identifier, // only those that appear where an arbitrary expression is // permitted. For instance, the identifier f in a selector // expression x.f is found only in the Selections map, the // identifier z in a variable declaration 'var z int' is found // only in the Defs map, and identifiers denoting packages in // qualified identifiers are collected in the Uses map. Type(ast.Expr, types.TypeAndValue) // Instantiate maps identifiers denoting generic types or functions to their // type arguments and instantiated type. // // For example, Instantiate will map the identifier for 'T' in the type // instantiation T[int, string] to the type arguments [int, string] and // resulting instantiated *Named type. Given a generic function // func F[A any](A), Instances will map the identifier for 'F' in the call // expression F(int(1)) to the inferred type arguments [int], and resulting // instantiated *Signature. // // Invariant: Instantiating Uses[id].Type() with Instances[id].TypeArgs // results in an equivalent of Instances[id].Type. Instantiate(*ast.Ident, types.Instance) // Def maps identifiers to the objects they define (including // package names, dots "." of dot-imports, and blank "_" identifiers). // For identifiers that do not denote objects (e.g., the package name // in package clauses, or symbolic variables t in t := x.(type) of // type switch headers), the corresponding objects are nil. // // For an embedded field, Def maps the field *Var it defines. // // Invariant: Defs[id] == nil || Defs[id].Pos() == id.Pos() Def(id *ast.Ident, obj types.Object) // Use maps identifiers to the objects they denote. // // For an embedded field, Use maps the *TypeName it denotes. // // Invariant: Uses[id].Pos() != id.Pos() Use(id *ast.Ident, obj types.Object) // Implicit maps nodes to their implicitly declared objects, if any. // The following node and object types may appear: // // node declared object // // *ast.ImportSpec *PkgName for imports without renames // *ast.CaseClause type-specific *Var for each type switch case clause (incl. default) // *ast.Field anonymous parameter *Var (incl. unnamed results) // Implicit(node ast.Node, obj types.Object) // Select maps selector expressions (excluding qualified identifiers) // to their corresponding selections. Select(*ast.SelectorExpr, *types.Selection) // Scope maps ast.Nodes to the scopes they define. Package scopes are not // associated with a specific node but with all files belonging to a package. // Thus, the package scope can be found in the type-checked Package object. // Scopes nest, with the Universe scope being the outermost scope, enclosing // the package scope, which contains (one or more) files scopes, which enclose // function scopes which in turn enclose statement and function literal scopes. // Note that even though package-level functions are declared in the package // scope, the function scopes are embedded in the file scope of the file // containing the function declaration. // // The following node types may appear in Scopes: // // *ast.File // *ast.FuncType // *ast.TypeSpec // *ast.BlockStmt // *ast.IfStmt // *ast.SwitchStmt // *ast.TypeSwitchStmt // *ast.CaseClause // *ast.CommClause // *ast.ForStmt // *ast.RangeStmt // Scope(ast.Node, *types.Scope) }
Recorder represents a compiling event recorder.
Source Files ¶
Click to show internal directories.
Click to hide internal directories.