Documentation
¶
Overview ¶
Package cl compiles XGo syntax trees (ast).
Index ¶
- Constants
- func ClassNameAndExt(file string) (name, clsfile, ext string)
- func GetFileClassType(file *ast.File, filename string, ...) (classType string, isTest bool)deprecated
- func NewPackage(pkgPath string, pkg *ast.Package, conf *Config) (p *gogen.Package, err error)
- func SetDebug(flags dbgFlags)
- func SetDisableRecover(disableRecover bool)
- type Class
- type Config
- type Project
- type Recorder
Constants ¶
View Source
const ( DbgFlagLoad dbgFlags = 1 << iota DbgFlagLookup FlagNoMarkAutogen DbgFlagAll = DbgFlagLoad | DbgFlagLookup )
Variables ¶
This section is empty.
Functions ¶
func ClassNameAndExt ¶ added in v1.5.0
func NewPackage ¶ added in v1.5.0
NewPackage creates an XGo package instance.
func SetDisableRecover ¶ added in v1.5.0
func SetDisableRecover(disableRecover bool)
Types ¶
type Config ¶ added in v1.5.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
// 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 XGo packages.
type Recorder ¶ added in v1.5.0
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)
// *ast.FunLit function literal in *ast.OverloadFuncDecl
//
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
// *ast.ForPhraseStmt
// *ast.ForPhrase
// *ast.LambdaExpr
// *ast.LambdaExpr2
//
Scope(ast.Node, *types.Scope)
}
Recorder represents a compiling event recorder.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
_testc
|
|
|
hello
command
|
|
|
_testgop
|
|
|
append1
command
|
|
|
append2
command
|
|
|
autoref-2484
command
|
|
|
cap
command
|
|
|
domaintext-huh
command
|
|
|
domaintext-json
command
|
|
|
domaintext-regexp
command
|
|
|
domaintext-tpl
command
|
|
|
domaintpl
command
|
|
|
enumlines-rdr
command
|
|
|
enumlines-stdin
command
|
|
|
errwrap1
command
|
|
|
errwrap2
command
|
|
|
fatal
command
|
|
|
implicit-cast-2439
command
|
|
|
kwargs1
command
|
|
|
kwargs2
command
|
|
|
kwargs3
command
|
|
|
kwargs4
command
|
|
|
optparam
command
|
|
|
optparam2
command
|
|
|
rangeexpr
command
|
|
|
repeatuntil
command
|
|
|
structtag
command
|
|
|
unit
command
|
|
|
_testpy
|
|
|
hello
command
|
|
|
pycall
command
|
|
|
_testspx
|
|
|
basic
command
|
|
|
init
command
|
|
|
multiworks
command
|
|
|
newobj
command
|
|
|
nogame
command
|
|
|
singlework
command
|
|
|
internal
|
|
Click to show internal directories.
Click to hide internal directories.