Functions
ABIWrapper
method
#
func (f *Func) ABIWrapper() bool
Add
method
#
Add adds n to s.
func (s *NameSet) Add(n *Name)
Addrtaken
method
#
func (n *Name) Addrtaken() bool
Alias
method
#
Alias reports whether p, which must be for an OTYPE, is a type alias.
func (n *Name) Alias() bool
Any
function
#
Any looks for a non-nil node x in the IR tree rooted at n
for which cond(x) returns true.
Any considers nodes in a depth-first, preorder traversal.
When Any finds a node x such that cond(x) is true,
Any ends the traversal and returns true immediately.
Otherwise Any returns false after completing the entire traversal.
func Any(n Node, cond func(Node) bool) bool
AnyList
function
#
AnyList calls Any(x, cond) for each node x in the list, in order.
If any call returns true, AnyList stops and returns true.
Otherwise, AnyList returns false after calling Any(x, cond)
for every x in the list.
func AnyList(list Nodes, cond func(Node) bool) bool
Append
method
#
Append appends entries to Nodes.
func (n *Nodes) Append(a ...Node)
AssertValidTypeForConst
function
#
func AssertValidTypeForConst(t *types.Type, v constant.Value)
AutoTemp
method
#
func (n *Name) AutoTemp() bool
BigFloat
function
#
func BigFloat(v constant.Value) *big.Float
BoolVal
function
#
BoolVal returns n as a bool.
n must be a boolean constant.
func BoolVal(n Node) bool
Bounded
method
#
func (n *miniExpr) Bounded() bool
Byval
method
#
func (n *Name) Byval() bool
CanBeAnSSAAux
method
#
func (*Name) CanBeAnSSAAux()
CanBeAnSSASym
method
#
func (*Name) CanBeAnSSASym()
CanBeNtype
method
#
func (*Name) CanBeNtype()
Canonical
method
#
Canonical returns the logical declaration that n represents. If n
is a closure variable, then Canonical returns the original Name as
it appears in the function that immediately contains the
declaration. Otherwise, Canonical simply returns n itself.
func (n *Name) Canonical() *Name
CheckPtr
method
#
func (n *ConvExpr) CheckPtr() bool
ClosureDebugRuntimeCheck
function
#
ClosureDebugRuntimeCheck applies boilerplate checks for debug flags
and compiling runtime.
func ClosureDebugRuntimeCheck(clo *ClosureExpr)
ClosureResultsLost
method
#
func (f *Func) ClosureResultsLost() bool
ConstOverflow
function
#
ConstOverflow reports whether constant value v is too large
to represent with type t.
func ConstOverflow(v constant.Value, t *types.Type) bool
ConstType
function
#
func ConstType(n Node) constant.Kind
Copy
method
#
Copy returns a copy of the content of the slice.
func (n Nodes) Copy() Nodes
Copy
function
#
Copy returns a shallow copy of n.
func Copy(n Node) Node
CoverageAuxVar
method
#
func (n *Name) CoverageAuxVar() bool
DeclareParams
method
#
DeclareParams creates Names for all of the parameters in fn's
signature and adds them to fn.Dcl.
If setNname is true, then it also sets types.Field.Nname for each
parameter.
func (fn *Func) DeclareParams(setNname bool)
DeclaredBy
function
#
DeclaredBy reports whether expression x refers (directly) to a
variable that was declared by the given statement.
func DeclaredBy(x Node, stmt Node) bool
DeepCopy
function
#
DeepCopy returns a “deep” copy of n, with its entire structure copied
(except for shared nodes like ONAME, ONONAME, OLITERAL, and OTYPE).
If pos.IsKnown(), it sets the source position of newly allocated Nodes to pos.
func DeepCopy(pos src.XPos, n Node) Node
DeepCopyList
function
#
DeepCopyList returns a list of deep copies (using DeepCopy) of the nodes in list.
func DeepCopyList(pos src.XPos, list []Node) []Node
DoChildren
function
#
DoChildren calls do(x) on each of n's non-nil child nodes x.
If any call returns true, DoChildren stops and returns true.
Otherwise, DoChildren returns false.
Note that DoChildren(n, do) only calls do(x) for n's immediate children.
If x's children should be processed, then do(x) must call DoChildren(x, do).
DoChildren allows constructing general traversals of the IR graph
that can stop early if needed. The most general usage is:
var do func(ir.Node) bool
do = func(x ir.Node) bool {
... processing BEFORE visiting children ...
if ... should visit children ... {
ir.DoChildren(x, do)
... processing AFTER visiting children ...
}
if ... should stop parent DoChildren call from visiting siblings ... {
return true
}
return false
}
do(root)
Since DoChildren does not return true itself, if the do function
never wants to stop the traversal, it can assume that DoChildren
itself will always return false, simplifying to:
var do func(ir.Node) bool
do = func(x ir.Node) bool {
... processing BEFORE visiting children ...
if ... should visit children ... {
ir.DoChildren(x, do)
}
... processing AFTER visiting children ...
return false
}
do(root)
The Visit function illustrates a further simplification of the pattern,
only processing before visiting children and never stopping:
func Visit(n ir.Node, visit func(ir.Node)) {
if n == nil {
return
}
var do func(ir.Node) bool
do = func(x ir.Node) bool {
visit(x)
return ir.DoChildren(x, do)
}
do(n)
}
The Any function illustrates a different simplification of the pattern,
visiting each node and then its children, recursively, until finding
a node x for which cond(x) returns true, at which point the entire
traversal stops and returns true.
func Any(n ir.Node, cond(ir.Node) bool) bool {
if n == nil {
return false
}
var do func(ir.Node) bool
do = func(x ir.Node) bool {
return cond(x) || ir.DoChildren(x, do)
}
return do(n)
}
Visit and Any are presented above as examples of how to use
DoChildren effectively, but of course, usage that fits within the
simplifications captured by Visit or Any will be best served
by directly calling the ones provided by this package.
func DoChildren(n Node, do func(Node) bool) bool
DoChildrenWithHidden
function
#
DoChildrenWithHidden is like DoChildren, but also visits
Node-typed fields tagged with `mknode:"-"`.
TODO(mdempsky): Remove the `mknode:"-"` tags so this function can
go away.
func DoChildrenWithHidden(n Node, do func(Node) bool) bool
Dump
function
#
Dump prints the message s followed by a debug dump of n.
func Dump(s string, n Node)
DumpAny
function
#
DumpAny is like FDumpAny but prints to stderr.
func DumpAny(root interface{}, filter string, depth int)
DumpList
function
#
DumpList prints the message s followed by a debug dump of each node in the list.
func DumpList(s string, list Nodes)
Dupok
method
#
func (f *Func) Dupok() bool
EditChildren
function
#
EditChildren edits the child nodes of n, replacing each child x with edit(x).
Note that EditChildren(n, edit) only calls edit(x) for n's immediate children.
If x's children should be processed, then edit(x) must call EditChildren(x, edit).
EditChildren allows constructing general editing passes of the IR graph.
The most general usage is:
var edit func(ir.Node) ir.Node
edit = func(x ir.Node) ir.Node {
... processing BEFORE editing children ...
if ... should edit children ... {
EditChildren(x, edit)
... processing AFTER editing children ...
}
... return x ...
}
n = edit(n)
EditChildren edits the node in place. To edit a copy, call Copy first.
As an example, a simple deep copy implementation would be:
func deepCopy(n ir.Node) ir.Node {
var edit func(ir.Node) ir.Node
edit = func(x ir.Node) ir.Node {
x = ir.Copy(x)
ir.EditChildren(x, edit)
return x
}
return edit(n)
}
Of course, in this case it is better to call ir.DeepCopy than to build one anew.
func EditChildren(n Node, edit func(Node) Node)
EditChildrenWithHidden
function
#
EditChildrenWithHidden is like EditChildren, but also edits
Node-typed fields tagged with `mknode:"-"`.
TODO(mdempsky): Remove the `mknode:"-"` tags so this function can
go away.
func EditChildrenWithHidden(n Node, edit func(Node) Node)
Empty
method
#
Empty reports whether q contains no Names.
func (q *NameQueue) Empty() bool
Esc
method
#
func (n *miniNode) Esc() uint16
FDumpAny
function
#
FDumpAny prints the structure of a rooted data structure
to w by depth-first traversal of the data structure.
The filter parameter is a regular expression. If it is
non-empty, only struct fields whose names match filter
are printed.
The depth parameter controls how deep traversal recurses
before it returns (higher value means greater depth).
If an empty field filter is given, a good depth default value
is 4. A negative depth means no depth limit, which may be fine
for small data structures or if there is a non-empty filter.
In the output, Node structs are identified by their Op name
rather than their type; struct fields with zero values or
non-matching field names are omitted, and "…" means recursion
depth has been reached or struct fields have been omitted.
func FDumpAny(w io.Writer, root interface{}, filter string, depth int)
FDumpList
function
#
FDumpList prints to w the message s followed by a debug dump of each node in the list.
func FDumpList(w io.Writer, s string, list Nodes)
Format
method
#
func (n *InlineMarkStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *IndexExpr) Format(s fmt.State, verb rune)
Format
method
#
Format implements formatting for an Op.
The valid formats are:
%v Go syntax ("+", "<-", "print")
%+v Debug syntax ("ADD", "RECV", "PRINT")
func (o Op) Format(s fmt.State, verb rune)
Format
method
#
Format implements formatting for a Nodes.
The valid formats are:
%v Go syntax, semicolon-separated
%.v Go syntax, comma-separated
%+v Debug syntax, as in DumpList.
func (l Nodes) Format(s fmt.State, verb rune)
Format
method
#
func (n *Decl) Format(s fmt.State, verb rune)
Format
method
#
func (n *SliceHeaderExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *BlockStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *KeyExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *StructKeyExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *JumpTableStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *TypeAssertExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *SendStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *SelectorExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *SelectStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *ReturnStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *CommClause) Format(s fmt.State, verb rune)
Format
method
#
func (n *DynamicType) Format(s fmt.State, verb rune)
Format
method
#
func (n *ResultExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *LabelStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *BinaryExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *RangeStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *GoDeferStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *TypeSwitchGuard) Format(s fmt.State, verb rune)
Format
method
#
func (n *ForStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *BranchStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *ClosureExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *ParenExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *SwitchStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *BasicLit) Format(s fmt.State, verb rune)
Format
method
#
func (n *InterfaceSwitchStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *UnaryExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *AddStringExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *NilExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *Name) Format(s fmt.State, verb rune)
Format
method
#
func (n *CaseClause) Format(s fmt.State, verb rune)
Format
method
#
func (n *CallExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *Ident) Format(s fmt.State, verb rune)
Format
method
#
func (n *AddrExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *AssignStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *StringHeaderExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *typeNode) Format(s fmt.State, verb rune)
Format
method
#
func (n *MakeExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *AssignOpStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *TailCallStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *StarExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *IfStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *LogicalExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *DynamicTypeAssertExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *ConvExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *AssignListStmt) Format(s fmt.State, verb rune)
Format
method
#
func (n *LinksymOffsetExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *Func) Format(s fmt.State, verb rune)
Format
method
#
func (n *CompLitExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *SliceExpr) Format(s fmt.State, verb rune)
Format
method
#
func (n *InlinedCallExpr) Format(s fmt.State, verb rune)
FrameOffset
method
#
func (n *Name) FrameOffset() int64
FuncName
method
#
func (n *SelectorExpr) FuncName() *Name
FuncName
function
#
FuncName returns the name (without the package) of the function f.
func FuncName(f *Func) string
FuncPC
function
#
FuncPC returns a uintptr-typed expression that evaluates to the PC of a
function as uintptr, as returned by internal/abi.FuncPC{ABI0,ABIInternal}.
n should be a Node of an interface type, as is passed to
internal/abi.FuncPC{ABI0,ABIInternal}.
TODO(prattmic): Since n is simply an interface{} there is no assertion that
it is actually a function at all. Perhaps we should emit a runtime type
assertion?
func FuncPC(pos src.XPos, n Node, wantABI obj.ABI) Node
FuncSymName
function
#
func FuncSymName(s *types.Sym) string
GoString
method
#
GoString returns the Go syntax for the Op, or else its name.
func (o Op) GoString() string
Has
method
#
Has reports whether s contains n.
func (s NameSet) Has(n *Name) bool
HasDefer
method
#
func (f *Func) HasDefer() bool
HasUniquePos
function
#
HasUniquePos reports whether n has a unique position that can be
used for reporting error messages.
It's primarily used to distinguish references to named objects,
whose Pos will point back to their declaration position rather than
their usage position.
func HasUniquePos(n Node) bool
Implicit
method
#
func (n *AddrExpr) Implicit() bool
Implicit
method
#
func (n *SelectorExpr) Implicit() bool
Implicit
method
#
func (n *StarExpr) Implicit() bool
Implicit
method
#
func (n *CompLitExpr) Implicit() bool
Implicit
method
#
func (n *ConvExpr) Implicit() bool
Implicit
method
#
func (n *ParenExpr) Implicit() bool
Init
method
#
Init initializes the oracle based on the IR in function fn, laying
the groundwork for future calls to the StaticValue and Reassigned
methods. If the fn's IR is subsequently modified, Init must be
called again.
func (ro *ReassignOracle) Init(fn *Func)
Init
method
#
func (n *miniExpr) Init() Nodes
Init
method
#
func (n *miniNode) Init() Nodes
Init
method
#
func (n *miniStmt) Init() Nodes
InitExpr
function
#
The result of InitExpr MUST be assigned back to n, e.g.
n.X = InitExpr(init, n.X)
func InitExpr(init []Node, expr Node) Node
InitLSym
function
#
InitLSym defines f's obj.LSym and initializes it based on the
properties of f. This includes setting the symbol flags and ABI and
creating and initializing related DWARF symbols.
InitLSym must be called exactly once per function and must be
called for both functions with bodies and functions without bodies.
For body-less functions, we only create the LSym; for functions
with bodies call a helper to setup up / populate the LSym.
func InitLSym(f *Func, hasBody bool)
InlFormal
method
#
func (n *Name) InlFormal() bool
InlLocal
method
#
func (n *Name) InlLocal() bool
InlinabilityChecked
method
#
func (f *Func) InlinabilityChecked() bool
Int64Val
function
#
Int64Val returns n as an int64.
n must be an integer or rune constant.
func Int64Val(n Node) int64
IntVal
function
#
IntVal returns v converted to int64.
Note: if t is uint64, very large values will be converted to negative int64.
func IntVal(t *types.Type, v constant.Value) int64
IsAddressable
function
#
lvalue etc
func IsAddressable(n Node) bool
IsAutoTmp
function
#
IsAutoTmp indicates if n was created by the compiler as a temporary,
based on the setting of the .AutoTemp flag in n's Name.
func IsAutoTmp(n Node) bool
IsBlank
function
#
func IsBlank(n Node) bool
IsClosure
method
#
IsClosure reports whether f is a function literal that captures at least one value.
func (f *Func) IsClosure() bool
IsClosureVar
method
#
func (n *Name) IsClosureVar() bool
IsCmp
method
#
IsCmp reports whether op is a comparison operation (==, !=, <, <=,
>, or >=).
func (op Op) IsCmp() bool
IsConst
function
#
func IsConst(n Node, ct constant.Kind) bool
IsConstNode
function
#
IsConstNode reports whether n is a Go language constant (as opposed to a
compile-time constant).
Expressions derived from nil, like string([]byte(nil)), while they
may be known at compile time, are not Go language constants.
func IsConstNode(n Node) bool
IsFuncPCIntrinsic
function
#
IsFuncPCIntrinsic returns whether n is a direct call of internal/abi.FuncPCABIxxx functions.
func IsFuncPCIntrinsic(n *CallExpr) bool
IsIfaceOfFunc
function
#
IsIfaceOfFunc inspects whether n is an interface conversion from a direct
reference of a func. If so, it returns referenced Func; otherwise nil.
This is only usable before walk.walkConvertInterface, which converts to an
OMAKEFACE.
func IsIfaceOfFunc(n Node) *Func
IsMethod
function
#
IsMethod reports whether n is a method.
n must be a function or a method.
func IsMethod(n Node) bool
IsNil
function
#
IsNil reports whether n represents the universal untyped zero value "nil".
func IsNil(n Node) bool
IsOutputParamHeapAddr
method
#
func (n *Name) IsOutputParamHeapAddr() bool
IsOutputParamInRegisters
method
#
func (n *Name) IsOutputParamInRegisters() bool
IsPackageInit
method
#
func (f *Func) IsPackageInit() bool
IsSlice3
method
#
IsSlice3 reports whether o is a slice3 op (OSLICE3, OSLICE3ARR).
o must be a slicing op.
func (o Op) IsSlice3() bool
IsSmallIntConst
function
#
func IsSmallIntConst(n Node) bool
IsSynthetic
function
#
func IsSynthetic(n Node) bool
IsZero
function
#
func IsZero(n Node) bool
Libfuzzer8BitCounter
method
#
func (n *Name) Libfuzzer8BitCounter() bool
Line
function
#
Line returns n's position as a string. If n has been inlined,
it uses the outermost position where n has been inlined.
func Line(n Node) string
LinkFuncName
function
#
LinkFuncName returns the name of the function f, as it will appear in the
symbol table of the final linked binary.
func LinkFuncName(f *Func) string
Linksym
method
#
func (n *Name) Linksym() *obj.LSym
Linksym
method
#
func (f *Func) Linksym() *obj.LSym
LinksymABI
method
#
func (f *Func) LinksymABI(abi obj.ABI) *obj.LSym
LinksymABI
method
#
func (n *Name) LinksymABI(abi obj.ABI) *obj.LSym
LookupMethodSelector
function
#
LookupMethodSelector returns the types.Sym of the selector for a method
named in local symbol name, as well as the types.Sym of the receiver.
TODO(prattmic): this does not attempt to handle method suffixes (wrappers).
func LookupMethodSelector(pkg *types.Pkg, name string) (typ *types.Sym, meth *types.Sym, err error)
MarkNonNil
method
#
func (n *miniExpr) MarkNonNil()
MarkNonNil
method
#
func (n *miniNode) MarkNonNil()
MarkReadonly
method
#
MarkReadonly indicates that n is an ONAME with readonly contents.
func (n *Name) MarkReadonly()
MayBeShared
function
#
MayBeShared reports whether n may occur in multiple places in the AST.
Extra care must be taken when mutating such a node.
func MayBeShared(n Node) bool
MethodExprFunc
function
#
MethodExprFunc is like MethodExprName, but returns the types.Field instead.
func MethodExprFunc(n Node) *types.Field
MethodExprName
function
#
MethodExprName returns the ONAME representing the method
referenced by expression n, which must be a method selector,
method expression, or method value.
func MethodExprName(n Node) *Name
MethodSym
function
#
MethodSym returns the method symbol representing a method name
associated with a specific receiver type.
Method symbols can be used to distinguish the same method appearing
in different method sets. For example, T.M and (*T).M have distinct
method symbols.
The returned symbol will be marked as a function.
func MethodSym(recv *types.Type, msym *types.Sym) *types.Sym
MethodSymSuffix
function
#
MethodSymSuffix is like MethodSym, but allows attaching a
distinguisher suffix. To avoid collisions, the suffix must not
start with a letter, number, or period.
func MethodSymSuffix(recv *types.Type, msym *types.Sym, suffix string) *types.Sym
Name
method
#
func (n *miniNode) Name() *Name
Name
method
#
func (n *Name) Name() *Name
Needctxt
method
#
func (f *Func) Needctxt() bool
Needzero
method
#
func (n *Name) Needzero() bool
NeverReturns
method
#
func (f *Func) NeverReturns() bool
NewAddStringExpr
function
#
func NewAddStringExpr(pos src.XPos, list []Node) *AddStringExpr
NewAddrExpr
function
#
func NewAddrExpr(pos src.XPos, x Node) *AddrExpr
NewAssignListStmt
function
#
func NewAssignListStmt(pos src.XPos, op Op, lhs []Node, rhs []Node) *AssignListStmt
NewAssignOpStmt
function
#
func NewAssignOpStmt(pos src.XPos, asOp Op, x Node, y Node) *AssignOpStmt
NewAssignStmt
function
#
func NewAssignStmt(pos src.XPos, x Node, y Node) *AssignStmt
NewBasicLit
function
#
NewBasicLit returns an OLITERAL representing val with the given type.
func NewBasicLit(pos src.XPos, typ *types.Type, val constant.Value) Node
NewBinaryExpr
function
#
func NewBinaryExpr(pos src.XPos, op Op, x Node, y Node) *BinaryExpr
NewBlockStmt
function
#
func NewBlockStmt(pos src.XPos, list []Node) *BlockStmt
NewBool
function
#
NewBool returns an OLITERAL representing b as an untyped boolean.
func NewBool(pos src.XPos, b bool) Node
NewBranchStmt
function
#
func NewBranchStmt(pos src.XPos, op Op, label *types.Sym) *BranchStmt
NewBuiltin
function
#
NewBuiltin returns a new Name representing a builtin function,
either predeclared or from package unsafe.
func NewBuiltin(sym *types.Sym, op Op) *Name
NewCallExpr
function
#
func NewCallExpr(pos src.XPos, op Op, fun Node, args []Node) *CallExpr
NewCaseStmt
function
#
func NewCaseStmt(pos src.XPos, list []Node, body []Node) *CaseClause
NewClosureFunc
function
#
NewClosureFunc creates a new Func to represent a function literal
with the given type.
fpos the position used for the underlying ODCLFUNC and ONAME,
whereas cpos is the position used for the OCLOSURE. They're
separate because in the presence of inlining, the OCLOSURE node
should have an inline-adjusted position, whereas the ODCLFUNC and
ONAME must not.
outerfn is the enclosing function. The returned function is
appending to pkg.Funcs.
why is the reason we're generating this Func. It can be OCLOSURE
(for a normal function literal) or OGO or ODEFER (for wrapping a
call expression that has parameters or results).
func NewClosureFunc(fpos src.XPos, cpos src.XPos, why Op, typ *types.Type, outerfn *Func, pkg *Package) *Func
NewClosureVar
function
#
NewClosureVar returns a new closure variable for fn to refer to
outer variable n.
func NewClosureVar(pos src.XPos, fn *Func, n *Name) *Name
NewCommStmt
function
#
func NewCommStmt(pos src.XPos, comm Node, body []Node) *CommClause
NewCompLitExpr
function
#
func NewCompLitExpr(pos src.XPos, op Op, typ *types.Type, list []Node) *CompLitExpr
NewConstAt
function
#
NewConstAt returns a new OLITERAL Node associated with symbol s at position pos.
func NewConstAt(pos src.XPos, sym *types.Sym, typ *types.Type, val constant.Value) *Name
NewConstExpr
function
#
NewConstExpr returns an OLITERAL representing val, copying the
position and type from orig.
func NewConstExpr(val constant.Value, orig Node) Node
NewConvExpr
function
#
func NewConvExpr(pos src.XPos, op Op, typ *types.Type, x Node) *ConvExpr
NewDecl
function
#
func NewDecl(pos src.XPos, op Op, x *Name) *Decl
NewDeclNameAt
function
#
NewDeclNameAt returns a new Name associated with symbol s at position pos.
The caller is responsible for setting Curfn.
func NewDeclNameAt(pos src.XPos, op Op, sym *types.Sym) *Name
NewDynamicType
function
#
func NewDynamicType(pos src.XPos, rtype Node) *DynamicType
NewDynamicTypeAssertExpr
function
#
func NewDynamicTypeAssertExpr(pos src.XPos, op Op, x Node, rtype Node) *DynamicTypeAssertExpr
NewForStmt
function
#
func NewForStmt(pos src.XPos, init Node, cond Node, post Node, body []Node, distinctVars bool) *ForStmt
NewFunc
function
#
NewFunc returns a new Func with the given name and type.
fpos is the position of the "func" token, and npos is the position
of the name identifier.
TODO(mdempsky): I suspect there's no need for separate fpos and
npos.
func NewFunc(fpos src.XPos, npos src.XPos, sym *types.Sym, typ *types.Type) *Func
NewGoDeferStmt
function
#
func NewGoDeferStmt(pos src.XPos, op Op, call Node) *GoDeferStmt
NewHiddenParam
function
#
NewHiddenParam returns a new hidden parameter for fn with the given
name and type.
func NewHiddenParam(pos src.XPos, fn *Func, sym *types.Sym, typ *types.Type) *Name
NewIdent
function
#
func NewIdent(pos src.XPos, sym *types.Sym) *Ident
NewIfStmt
function
#
func NewIfStmt(pos src.XPos, cond Node, body []Node, els []Node) *IfStmt
NewIndexExpr
function
#
func NewIndexExpr(pos src.XPos, x Node, index Node) *IndexExpr
NewInlineMarkStmt
function
#
func NewInlineMarkStmt(pos src.XPos, index int64) *InlineMarkStmt
NewInlinedCallExpr
function
#
func NewInlinedCallExpr(pos src.XPos, body []Node, retvars []Node) *InlinedCallExpr
NewInt
function
#
NewInt returns an OLITERAL representing v as an untyped integer.
func NewInt(pos src.XPos, v int64) Node
NewInterfaceSwitchStmt
function
#
func NewInterfaceSwitchStmt(pos src.XPos, case_ Node, itab Node, runtimeType Node, hash Node, descriptor *obj.LSym) *InterfaceSwitchStmt
NewJumpTableStmt
function
#
func NewJumpTableStmt(pos src.XPos, idx Node) *JumpTableStmt
NewKeyExpr
function
#
func NewKeyExpr(pos src.XPos, key Node, value Node) *KeyExpr
NewLabelStmt
function
#
func NewLabelStmt(pos src.XPos, label *types.Sym) *LabelStmt
NewLinksymExpr
function
#
NewLinksymExpr is NewLinksymOffsetExpr, but with offset fixed at 0.
func NewLinksymExpr(pos src.XPos, lsym *obj.LSym, typ *types.Type) *LinksymOffsetExpr
NewLinksymOffsetExpr
function
#
func NewLinksymOffsetExpr(pos src.XPos, lsym *obj.LSym, offset int64, typ *types.Type) *LinksymOffsetExpr
NewLocal
method
#
NewLocal returns a new function-local variable with the given name and type.
func (fn *Func) NewLocal(pos src.XPos, sym *types.Sym, typ *types.Type) *Name
NewLogicalExpr
function
#
func NewLogicalExpr(pos src.XPos, op Op, x Node, y Node) *LogicalExpr
NewMakeExpr
function
#
func NewMakeExpr(pos src.XPos, op Op, len Node, cap Node) *MakeExpr
NewNameAt
function
#
NewNameAt returns a new ONAME Node associated with symbol s at position pos.
The caller is responsible for setting Curfn.
func NewNameAt(pos src.XPos, sym *types.Sym, typ *types.Type) *Name
NewNameOffsetExpr
function
#
NewNameOffsetExpr is NewLinksymOffsetExpr, but taking a *Name
representing a global variable instead of an *obj.LSym directly.
func NewNameOffsetExpr(pos src.XPos, name *Name, offset int64, typ *types.Type) *LinksymOffsetExpr
NewNilExpr
function
#
func NewNilExpr(pos src.XPos, typ *types.Type) *NilExpr
NewOne
function
#
NewOne returns an OLITERAL representing 1 with the given type.
func NewOne(pos src.XPos, typ *types.Type) Node
NewParenExpr
function
#
func NewParenExpr(pos src.XPos, x Node) *ParenExpr
NewRangeStmt
function
#
func NewRangeStmt(pos src.XPos, key Node, value Node, x Node, body []Node, distinctVars bool) *RangeStmt
NewResultExpr
function
#
func NewResultExpr(pos src.XPos, typ *types.Type, index int64) *ResultExpr
NewReturnStmt
function
#
func NewReturnStmt(pos src.XPos, results []Node) *ReturnStmt
NewSelectStmt
function
#
func NewSelectStmt(pos src.XPos, cases []*CommClause) *SelectStmt
NewSelectorExpr
function
#
func NewSelectorExpr(pos src.XPos, op Op, x Node, sel *types.Sym) *SelectorExpr
NewSendStmt
function
#
func NewSendStmt(pos src.XPos, ch Node, value Node) *SendStmt
NewSliceExpr
function
#
func NewSliceExpr(pos src.XPos, op Op, x Node, low Node, high Node, max Node) *SliceExpr
NewStarExpr
function
#
func NewStarExpr(pos src.XPos, x Node) *StarExpr
NewString
function
#
NewString returns an OLITERAL representing s as an untyped string.
func NewString(pos src.XPos, s string) Node
NewStructKeyExpr
function
#
func NewStructKeyExpr(pos src.XPos, field *types.Field, value Node) *StructKeyExpr
NewSwitchStmt
function
#
func NewSwitchStmt(pos src.XPos, tag Node, cases []*CaseClause) *SwitchStmt
NewTailCallStmt
function
#
func NewTailCallStmt(pos src.XPos, call *CallExpr) *TailCallStmt
NewTypeAssertExpr
function
#
func NewTypeAssertExpr(pos src.XPos, x Node, typ *types.Type) *TypeAssertExpr
NewTypeSwitchGuard
function
#
func NewTypeSwitchGuard(pos src.XPos, tag *Ident, x Node) *TypeSwitchGuard
NewUintptr
function
#
NewUintptr returns an OLITERAL representing v as a uintptr.
func NewUintptr(pos src.XPos, v int64) Node
NewUnaryExpr
function
#
func NewUnaryExpr(pos src.XPos, op Op, x Node) *UnaryExpr
NewZero
function
#
NewZero returns a zero value of the given type.
func NewZero(pos src.XPos, typ *types.Type) Node
NilCheckDisabled
method
#
func (f *Func) NilCheckDisabled() bool
NonMergeable
method
#
func (n *Name) NonMergeable() bool
NonNil
method
#
func (n *miniNode) NonNil() bool
NonNil
method
#
func (n *miniExpr) NonNil() bool
Offset
method
#
func (n *SelectorExpr) Offset() int64
Offset
method
#
func (n *InlineMarkStmt) Offset() int64
OnStack
method
#
OnStack reports whether variable n may reside on the stack.
func (n *Name) OnStack() bool
Op
method
#
op can be read, but not written.
An embedding implementation can provide a SetOp if desired.
(The panicking SetOp is with the other panics below.)
func (n *miniNode) Op() Op
OpenCodedDeferDisallowed
method
#
func (f *Func) OpenCodedDeferDisallowed() bool
OpenDeferSlot
method
#
func (n *Name) OpenDeferSlot() bool
OuterValue
function
#
what's the outer value that a write to n affects?
outer value means containing struct or array.
func OuterValue(n Node) Node
ParamNames
function
#
func ParamNames(ft *types.Type) []Node
ParseLinkFuncName
function
#
ParseLinkFuncName parsers a symbol name (as returned from LinkFuncName) back
to the package path and local symbol name.
func ParseLinkFuncName(name string) (pkg string, sym string, err error)
PkgFuncName
function
#
PkgFuncName returns the name of the function referenced by f, with package
prepended.
This differs from the compiler's internal convention where local functions
lack a package. This is primarily useful when the ultimate consumer of this
is a human looking at message.
func PkgFuncName(f *Func) string
PopLeft
method
#
PopLeft pops a Name from the left of the queue. It panics if q is
empty.
func (q *NameQueue) PopLeft() *Name
Pos
method
#
func (n *miniNode) Pos() src.XPos
Pragma
method
#
Pragma returns the PragmaFlag for p, which must be for an OTYPE.
func (n *Name) Pragma() PragmaFlag
Prepend
method
#
Prepend prepends entries to Nodes.
If a slice is passed in, this will take ownership of it.
func (n *Nodes) Prepend(a ...Node)
PtrInit
method
#
func (n *miniStmt) PtrInit() *Nodes
PtrInit
method
#
func (n *miniExpr) PtrInit() *Nodes
PushRight
method
#
PushRight appends n to the right of the queue.
func (q *NameQueue) PushRight(n *Name)
Readonly
method
#
func (n *Name) Readonly() bool
Reassigned
method
#
Reassigned method has the same semantics as the ir package function
of the same name; see comments on [Reassigned] for more info.
func (ro *ReassignOracle) Reassigned(n *Name) bool
Reassigned
function
#
Reassigned takes an ONAME node, walks the function in which it is
defined, and returns a boolean indicating whether the name has any
assignments other than its declaration.
NB: global variables are always considered to be re-assigned.
TODO: handle initial declaration not including an assignment and
followed by a single assignment?
NOTE: any changes made here should also be made in the corresponding
code in the ReassignOracle.Init method.
func Reassigned(name *Name) bool
RecordFrameOffset
method
#
RecordFrameOffset records the frame offset for the name.
It is used by package types when laying out function arguments.
func (n *Name) RecordFrameOffset(offset int64)
SameSafeExpr
function
#
SameSafeExpr checks whether it is safe to reuse one of l and r
instead of computing both. SameSafeExpr assumes that l and r are
used in the same statement or expression. In order for it to be
safe to reuse l or r, they must:
- be the same expression
- not have side-effects (no function calls, no channel ops);
however, panics are ok
- not cause inappropriate aliasing; e.g. two string to []byte
conversions, must result in two distinct slices
The handling of OINDEXMAP is subtle. OINDEXMAP can occur both
as an lvalue (map assignment) and an rvalue (map access). This is
currently OK, since the only place SameSafeExpr gets used on an
lvalue expression is for OSLICE and OAPPEND optimizations, and it
is correct in those settings.
func SameSafeExpr(l Node, r Node) bool
SameSource
function
#
SameSource reports whether two nodes refer to the same source
element.
It exists to help incrementally migrate the compiler towards
allowing the introduction of IdentExpr (#42990). Once we have
IdentExpr, it will no longer be safe to directly compare Node
values to tell if they refer to the same Name. Instead, code will
need to explicitly get references to the underlying Name object(s),
and compare those instead.
It will still be safe to compare Nodes directly for checking if two
nodes are syntactically the same. The SameSource function exists to
indicate code that intentionally compares Nodes for syntactic
equality as opposed to code that has yet to be updated in
preparation for IdentExpr.
func SameSource(n1 Node, n2 Node) bool
SetABIWrapper
method
#
func (f *Func) SetABIWrapper(b bool)
SetAddrtaken
method
#
func (n *Name) SetAddrtaken(b bool)
SetAlias
method
#
SetAlias sets whether p, which must be for an OTYPE, is a type alias.
func (n *Name) SetAlias(alias bool)
SetAutoTemp
method
#
func (n *Name) SetAutoTemp(b bool)
SetBounded
method
#
func (n *miniExpr) SetBounded(b bool)
SetByval
method
#
func (n *Name) SetByval(b bool)
SetCheckPtr
method
#
func (n *ConvExpr) SetCheckPtr(b bool)
SetClosureResultsLost
method
#
func (f *Func) SetClosureResultsLost(b bool)
SetCoverageAuxVar
method
#
func (n *Name) SetCoverageAuxVar(b bool)
SetDupok
method
#
func (f *Func) SetDupok(b bool)
SetEsc
method
#
func (n *miniNode) SetEsc(x uint16)
SetFrameOffset
method
#
func (n *Name) SetFrameOffset(x int64)
SetFunc
method
#
func (n *Name) SetFunc(x *Func)
SetHasDefer
method
#
func (f *Func) SetHasDefer(b bool)
SetImplicit
method
#
func (n *AddrExpr) SetImplicit(b bool)
SetImplicit
method
#
func (n *CompLitExpr) SetImplicit(b bool)
SetImplicit
method
#
func (n *ConvExpr) SetImplicit(b bool)
SetImplicit
method
#
func (n *ParenExpr) SetImplicit(b bool)
SetImplicit
method
#
func (n *StarExpr) SetImplicit(b bool)
SetImplicit
method
#
func (n *SelectorExpr) SetImplicit(b bool)
SetInit
method
#
func (n *miniExpr) SetInit(x Nodes)
SetInit
method
#
func (n *miniStmt) SetInit(x Nodes)
SetInlFormal
method
#
func (n *Name) SetInlFormal(b bool)
SetInlLocal
method
#
func (n *Name) SetInlLocal(b bool)
SetInlinabilityChecked
method
#
func (f *Func) SetInlinabilityChecked(b bool)
SetIsClosureVar
method
#
func (n *Name) SetIsClosureVar(b bool)
SetIsOutputParamHeapAddr
method
#
func (n *Name) SetIsOutputParamHeapAddr(b bool)
SetIsOutputParamInRegisters
method
#
func (n *Name) SetIsOutputParamInRegisters(b bool)
SetIsPackageInit
method
#
func (f *Func) SetIsPackageInit(b bool)
SetLibfuzzer8BitCounter
method
#
func (n *Name) SetLibfuzzer8BitCounter(b bool)
SetNeedctxt
method
#
func (f *Func) SetNeedctxt(b bool)
SetNeedzero
method
#
func (n *Name) SetNeedzero(b bool)
SetNeverReturns
method
#
func (f *Func) SetNeverReturns(b bool)
SetNilCheckDisabled
method
#
func (f *Func) SetNilCheckDisabled(b bool)
SetNonMergeable
method
#
func (n *Name) SetNonMergeable(b bool)
SetOffset
method
#
func (n *InlineMarkStmt) SetOffset(x int64)
SetOp
method
#
func (n *AssignStmt) SetOp(op Op)
SetOp
method
#
func (n *TypeAssertExpr) SetOp(op Op)
SetOp
method
#
func (n *SliceExpr) SetOp(op Op)
SetOp
method
#
func (n *BinaryExpr) SetOp(op Op)
SetOp
method
#
func (n *CallExpr) SetOp(op Op)
SetOp
method
#
func (n *IndexExpr) SetOp(op Op)
SetOp
method
#
func (n *AssignListStmt) SetOp(op Op)
SetOp
method
#
func (n *UnaryExpr) SetOp(op Op)
SetOp
method
#
func (n *CompLitExpr) SetOp(op Op)
SetOp
method
#
func (n *MakeExpr) SetOp(op Op)
SetOp
method
#
func (n *AddrExpr) SetOp(op Op)
SetOp
method
#
func (n *SelectorExpr) SetOp(op Op)
SetOp
method
#
func (n *DynamicTypeAssertExpr) SetOp(op Op)
SetOp
method
#
func (n *LogicalExpr) SetOp(op Op)
SetOp
method
#
func (n *BranchStmt) SetOp(op Op)
SetOp
method
#
func (n *ConvExpr) SetOp(op Op)
SetOpenCodedDeferDisallowed
method
#
func (f *Func) SetOpenCodedDeferDisallowed(b bool)
SetOpenDeferSlot
method
#
func (n *Name) SetOpenDeferSlot(b bool)
SetPos
function
#
func SetPos(n Node) src.XPos
SetPos
method
#
func (n *miniNode) SetPos(x src.XPos)
SetPragma
method
#
SetPragma sets the PragmaFlag for p, which must be for an OTYPE.
func (n *Name) SetPragma(flag PragmaFlag)
SetSubOp
method
#
func (n *Name) SetSubOp(x Op)
SetSym
method
#
func (n *Name) SetSym(x *types.Sym)
SetTransient
method
#
func (n *miniExpr) SetTransient(b bool)
SetType
method
#
func (n *miniExpr) SetType(x *types.Type)
SetType
method
#
func (n *miniNode) SetType(*types.Type)
SetTypecheck
method
#
func (n *miniNode) SetTypecheck(x uint8)
SetUsed
method
#
func (n *Name) SetUsed(b bool)
SetVal
method
#
func (n *BasicLit) SetVal(val constant.Value)
SetVal
method
#
func (n *miniNode) SetVal(v constant.Value)
SetVal
method
#
SetVal sets the constant.Value for the node.
func (n *Name) SetVal(v constant.Value)
SetWBPos
method
#
func (f *Func) SetWBPos(pos src.XPos)
SetWalked
method
#
func (n *miniNode) SetWalked(x bool)
SetWrapper
method
#
func (f *Func) SetWrapper(b bool)
ShouldAsanCheckPtr
function
#
ShouldAsanCheckPtr reports whether pointer checking should be enabled for
function fn when -asan is enabled.
func ShouldAsanCheckPtr(fn *Func) bool
ShouldCheckPtr
function
#
ShouldCheckPtr reports whether pointer checking should be enabled for
function fn at a given level. See debugHelpFooter for defined
levels.
func ShouldCheckPtr(fn *Func, level int) bool
SingleResult
method
#
func (n *InlinedCallExpr) SingleResult() Node
StaticCalleeName
function
#
StaticCalleeName returns the ONAME/PFUNC for n, if known.
func StaticCalleeName(n Node) *Name
StaticValue
function
#
StaticValue analyzes n to find the earliest expression that always
evaluates to the same value as n, which might be from an enclosing
function.
For example, given:
var x int = g()
func() {
y := x
*p = int(y)
}
calling StaticValue on the "int(y)" expression returns the outer
"g()" expression.
func StaticValue(n Node) Node
StaticValue
method
#
StaticValue method has the same semantics as the ir package function
of the same name; see comments on [StaticValue].
func (ro *ReassignOracle) StaticValue(n Node) Node
StmtWithInit
function
#
StmtWithInit reports whether op is a statement with an explicit init list.
func StmtWithInit(op Op) bool
String
method
#
func (i Class) String() string
String
method
#
func (i Op) String() string
StringVal
function
#
StringVal returns the value of a literal string Node as a string.
n must be a string constant.
func StringVal(n Node) string
SubOp
method
#
func (n *Name) SubOp() Op
Sym
method
#
func (f *Func) Sym() *types.Sym
Sym
method
#
func (n *BranchStmt) Sym() *types.Sym
Sym
method
#
func (n *Ident) Sym() *types.Sym
Sym
method
#
func (n *miniNode) Sym() *types.Sym
Sym
method
#
func (n *SelectorExpr) Sym() *types.Sym
Sym
method
#
func (n *Name) Sym() *types.Sym
Sym
method
#
func (n *typeNode) Sym() *types.Sym
Sym
method
#
func (n *StructKeyExpr) Sym() *types.Sym
Sym
method
#
func (n *LabelStmt) Sym() *types.Sym
Take
method
#
Take clears n, returning its former contents.
func (n *Nodes) Take() []Node
TakeInit
function
#
func TakeInit(n Node) Nodes
ToNodes
function
#
ToNodes returns s as a slice of Nodes.
func ToNodes(s []T) Nodes
ToStatic
method
#
ToStatic returns static type of dt if it is actually static.
func (dt *DynamicType) ToStatic() Node
Transient
method
#
func (n *miniExpr) Transient() bool
Type
method
#
func (n *miniExpr) Type() *types.Type
Type
method
#
func (f *Func) Type() *types.Type
Type
method
#
func (n *typeNode) Type() *types.Type
Type
method
#
func (n *miniNode) Type() *types.Type
TypeNode
function
#
TypeNode returns the Node representing the type t.
func TypeNode(t *types.Type) Node
Typecheck
method
#
func (n *miniNode) Typecheck() uint8
Uint64Val
function
#
Uint64Val returns n as a uint64.
n must be an integer or rune constant.
func Uint64Val(n Node) uint64
Used
method
#
func (n *Name) Used() bool
Uses
function
#
Uses reports whether expression x is a (direct) use of the given
variable.
func Uses(x Node, v *Name) bool
Val
method
#
func (n *miniNode) Val() constant.Value
Val
method
#
Val returns the constant.Value for the node.
func (n *Name) Val() constant.Value
Val
method
#
func (n *BasicLit) Val() constant.Value
ValidTypeForConst
function
#
func ValidTypeForConst(t *types.Type, v constant.Value) bool
Visit
function
#
Visit visits each non-nil node x in the IR tree rooted at n
in a depth-first preorder traversal, calling visit on each node visited.
func Visit(n Node, visit func(Node))
VisitFuncAndClosures
function
#
VisitFuncAndClosures calls visit on each non-nil node in fn.Body,
including any nested closure bodies.
func VisitFuncAndClosures(fn *Func, visit func(n Node))
VisitFuncsBottomUp
function
#
VisitFuncsBottomUp invokes analyze on the ODCLFUNC nodes listed in list.
It calls analyze with successive groups of functions, working from
the bottom of the call graph upward. Each time analyze is called with
a list of functions, every function on that list only calls other functions
on the list or functions that have been passed in previous invocations of
analyze. Closures appear in the same list as their outer functions.
The lists are as short as possible while preserving those requirements.
(In a typical program, many invocations of analyze will be passed just
a single function.) The boolean argument 'recursive' passed to analyze
specifies whether the functions on the list are mutually recursive.
If recursive is false, the list consists of only a single function and its closures.
If recursive is true, the list may still contain only a single function,
if that function is itself recursive.
func VisitFuncsBottomUp(list []*Func, analyze func(list []*Func, recursive bool))
VisitList
function
#
VisitList calls Visit(x, visit) for each node x in the list.
func VisitList(list Nodes, visit func(Node))
Walked
method
#
func (n *miniNode) Walked() bool
WithFunc
function
#
WithFunc invokes do with CurFunc and base.Pos set to curfn and
curfn.Pos(), respectively, and then restores their previous values
before returning.
func WithFunc(curfn *Func, do func())
Wrapper
method
#
func (f *Func) Wrapper() bool
Write
method
#
func (p *dumper) Write(data []byte) (n int, err error)
_
function
#
func _()
_
function
#
func _()
addr
method
#
addr returns the (hexadecimal) address string of the object
represented by x (or "?" if x is not addressable), with the
common prefix between this and the prior address replaced by
"0x…" to make it easier to visually match addresses.
func (p *dumper) addr(x reflect.Value) string
checkReassignedResult
function
#
checkReassignedResult compares the result from ReassignOracle.Reassigned
with the corresponding result from ir.Reassigned to make sure they agree.
This method is called only when turned on via build tag.
func checkReassignedResult(n *Name, newres bool)
checkStaticValueResult
function
#
checkStaticValueResult compares the result from ReassignOracle.StaticValue
with the corresponding result from ir.StaticValue to make sure they agree.
This method is called only when turned on via build tag.
func checkStaticValueResult(n Node, newres Node)
closureName
function
#
closureName generates a new unique name for a closure within outerfn at pos.
func closureName(outerfn *Func, pos src.XPos, why Op) *types.Sym
commonPrefixLen
function
#
func commonPrefixLen(a string, b string) (i int)
copy
method
#
func (n *SliceExpr) copy() Node
copy
method
#
func (n *InlinedCallExpr) copy() Node
copy
method
#
func (n *NilExpr) copy() Node
copy
method
#
func (n *AddStringExpr) copy() Node
copy
method
#
func (n *RangeStmt) copy() Node
copy
method
#
func (n *AddrExpr) copy() Node
copy
method
#
func (n *MakeExpr) copy() Node
copy
method
#
func (n *TypeAssertExpr) copy() Node
copy
method
#
func (n *LogicalExpr) copy() Node
copy
method
#
func (n *AssignListStmt) copy() Node
copy
method
#
func (n *ResultExpr) copy() Node
copy
method
#
func (n *AssignOpStmt) copy() Node
copy
method
#
func (n *LinksymOffsetExpr) copy() Node
copy
method
#
func (n *TypeSwitchGuard) copy() Node
copy
method
#
func (n *ReturnStmt) copy() Node
copy
method
#
func (n *AssignStmt) copy() Node
copy
method
#
func (n *LabelStmt) copy() Node
copy
method
#
func (n *BasicLit) copy() Node
copy
method
#
func (n *KeyExpr) copy() Node
copy
method
#
func (n *UnaryExpr) copy() Node
copy
method
#
func (n *SelectStmt) copy() Node
copy
method
#
func (n *BinaryExpr) copy() Node
copy
method
#
func (n *JumpTableStmt) copy() Node
copy
method
#
func (n *BlockStmt) copy() Node
copy
method
#
func (n *InterfaceSwitchStmt) copy() Node
copy
method
#
func (n *typeNode) copy() Node
copy
method
#
func (n *SelectorExpr) copy() Node
copy
method
#
func (n *ParenExpr) copy() Node
copy
method
#
func (n *BranchStmt) copy() Node
copy
method
#
func (n *DynamicTypeAssertExpr) copy() Node
copy
method
#
func (n *ForStmt) copy() Node
copy
method
#
func (n *DynamicType) copy() Node
copy
method
#
func (n *CallExpr) copy() Node
copy
method
#
func (n *Func) copy() Node
copy
method
#
func (n *SendStmt) copy() Node
copy
method
#
func (n *TailCallStmt) copy() Node
copy
method
#
func (n *Decl) copy() Node
copy
method
#
func (n *Name) copy() Node
copy
method
#
func (n *CaseClause) copy() Node
copy
method
#
func (n *StringHeaderExpr) copy() Node
copy
method
#
func (n *InlineMarkStmt) copy() Node
copy
method
#
func (n *ClosureExpr) copy() Node
copy
method
#
func (n *SwitchStmt) copy() Node
copy
method
#
func (n *IndexExpr) copy() Node
copy
method
#
func (n *CommClause) copy() Node
copy
method
#
func (n *IfStmt) copy() Node
copy
method
#
func (n *CompLitExpr) copy() Node
copy
method
#
func (n *SliceHeaderExpr) copy() Node
copy
method
#
func (n *StructKeyExpr) copy() Node
copy
method
#
func (n *Ident) copy() Node
copy
method
#
func (n *ConvExpr) copy() Node
copy
method
#
func (n *GoDeferStmt) copy() Node
copy
method
#
func (n *StarExpr) copy() Node
copyCaseClauses
function
#
func copyCaseClauses(list []*CaseClause) []*CaseClause
copyCommClauses
function
#
func copyCommClauses(list []*CommClause) []*CommClause
copyNames
function
#
func copyNames(list []*Name) []*Name
copyNodes
function
#
func copyNodes(list []Node) []Node
doCaseClauses
function
#
func doCaseClauses(list []*CaseClause, do func(Node) bool) bool
doChildren
method
#
func (n *BlockStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *DynamicTypeAssertExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *DynamicType) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *Func) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *Decl) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *ForStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *StarExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *StringHeaderExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *ConvExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *GoDeferStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *CompLitExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *SliceHeaderExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *StructKeyExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *Ident) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *CommClause) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *IfStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *SliceExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *ClosureExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *IndexExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *CaseClause) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *Name) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *SendStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *CallExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *InlineMarkStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *BranchStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *InlinedCallExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *SelectorExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *typeNode) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *SwitchStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *InterfaceSwitchStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *BinaryExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *SelectStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *UnaryExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *JumpTableStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *BasicLit) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *KeyExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *ReturnStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *AssignStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *TypeSwitchGuard) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *LabelStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *AssignOpStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *LinksymOffsetExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *ResultExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *AssignListStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *TypeAssertExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *LogicalExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *AddrExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *RangeStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *AddStringExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *MakeExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *TailCallStmt) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *NilExpr) doChildren(do func(Node) bool) bool
doChildren
method
#
func (n *ParenExpr) doChildren(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *SendStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *CompLitExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *SliceExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *NilExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *ParenExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *IfStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *SliceHeaderExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *GoDeferStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *TailCallStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *MakeExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *AddStringExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *RangeStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *AddrExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *TypeAssertExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *LogicalExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *AssignListStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *AssignOpStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *TypeSwitchGuard) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *AssignStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *LinksymOffsetExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *ResultExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *SwitchStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *BasicLit) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *UnaryExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *LabelStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *BinaryExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *typeNode) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *BlockStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *BranchStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *KeyExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *ReturnStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *ForStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *StarExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *CallExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *JumpTableStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *Name) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *SelectStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *IndexExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *Func) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *InterfaceSwitchStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *CaseClause) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *ClosureExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *StructKeyExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *CommClause) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *InlinedCallExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *SelectorExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *Ident) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *StringHeaderExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *ConvExpr) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *InlineMarkStmt) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *Decl) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *DynamicType) doChildrenWithHidden(do func(Node) bool) bool
doChildrenWithHidden
method
#
func (n *DynamicTypeAssertExpr) doChildrenWithHidden(do func(Node) bool) bool
doCommClauses
function
#
func doCommClauses(list []*CommClause, do func(Node) bool) bool
doNames
function
#
func doNames(list []*Name, do func(Node) bool) bool
doNodes
function
#
func doNodes(list []Node, do func(Node) bool) bool
dump
method
#
dump prints the contents of x.
func (p *dumper) dump(x reflect.Value, depth int)
dumpNode
function
#
func dumpNode(w io.Writer, n Node, depth int)
dumpNodes
function
#
func dumpNodes(w io.Writer, list Nodes, depth int)
editCaseClauses
function
#
func editCaseClauses(list []*CaseClause, edit func(Node) Node)
editChildren
method
#
func (n *SendStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *StructKeyExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *NilExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *Ident) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *SliceExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *ParenExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *IfStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *MakeExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *GoDeferStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *TailCallStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *SliceHeaderExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *AddStringExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *AddrExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *LogicalExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *ForStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *TypeAssertExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *RangeStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *AssignListStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *SwitchStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *AssignOpStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *IndexExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *Func) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *TypeSwitchGuard) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *LinksymOffsetExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *AssignStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *DynamicTypeAssertExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *ResultExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *StarExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *BasicLit) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *LabelStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *DynamicType) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *UnaryExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *BinaryExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *BlockStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *typeNode) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *Decl) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *KeyExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *BranchStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *ReturnStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *JumpTableStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *ConvExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *InlineMarkStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *Name) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *StringHeaderExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *CallExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *CompLitExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *SelectorExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *InterfaceSwitchStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *SelectStmt) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *CaseClause) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *CommClause) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *InlinedCallExpr) editChildren(edit func(Node) Node)
editChildren
method
#
func (n *ClosureExpr) editChildren(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *InterfaceSwitchStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *IndexExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *SliceExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *MakeExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *GoDeferStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *InlinedCallExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *SelectStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *StructKeyExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *IfStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *CaseClause) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *CommClause) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *ParenExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *StringHeaderExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *SliceHeaderExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *CallExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *CompLitExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *AddStringExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *Ident) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *TailCallStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *ReturnStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *InlineMarkStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *Name) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *ConvExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *JumpTableStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *StarExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *BranchStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *SwitchStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *SelectorExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *LogicalExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *typeNode) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *Decl) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *BlockStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *ForStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *KeyExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *AddrExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *UnaryExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *BinaryExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *AssignListStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *ResultExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *NilExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *DynamicType) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *BasicLit) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *TypeAssertExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *LabelStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *ClosureExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *TypeSwitchGuard) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *AssignStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *DynamicTypeAssertExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *RangeStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *Func) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *LinksymOffsetExpr) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *AssignOpStmt) editChildrenWithHidden(edit func(Node) Node)
editChildrenWithHidden
method
#
func (n *SendStmt) editChildrenWithHidden(edit func(Node) Node)
editCommClauses
function
#
func editCommClauses(list []*CommClause, edit func(Node) Node)
editNames
function
#
func editNames(list []*Name, edit func(Node) Node)
editNodes
function
#
func editNodes(list []Node, edit func(Node) Node)
ellipsisIf
function
#
func ellipsisIf(b bool) string
escapedImportPathOK
function
#
func escapedImportPathOK(r rune) bool
exprFmt
function
#
func exprFmt(n Node, s fmt.State, prec int)
fmtFullPos
function
#
fmtFullPos returns a verbose dump for pos p, including inlines.
func fmtFullPos(p src.XPos) string
fmtNode
function
#
fmtNode implements formatting for a Node n.
Every Node implementation must define a Format method that calls fmtNode.
The valid formats are:
%v Go syntax
%L Go syntax followed by " (type T)" if type is known.
%+v Debug syntax, as in Dump.
func fmtNode(n Node, s fmt.State, verb rune)
get2
method
#
func (f bitset8) get2(shift uint8) uint8
indent
function
#
indent prints indentation to w.
func indent(w io.Writer, depth int)
isExpr
method
#
func (*miniExpr) isExpr()
isExpr
method
#
func (n *Name) isExpr()
isStmt
method
#
func (*miniStmt) isStmt()
isStmt
method
#
func (f *Func) isStmt()
isStmt
method
#
func (*CallExpr) isStmt()
isStmt
method
#
func (*Decl) isStmt()
modPathOK
function
#
Borrowed from x/mod.
func modPathOK(r rune) bool
newNameAt
function
#
newNameAt is like NewNameAt but allows sym == nil.
func newNameAt(pos src.XPos, op Op, sym *types.Sym) *Name
newTypeNode
function
#
func newTypeNode(typ *types.Type) *typeNode
no
method
#
func (n *miniNode) no(name string) string
posOr
method
#
posOr returns pos if known, or else n.pos.
For use in DeepCopy.
func (n *miniNode) posOr(pos src.XPos) src.XPos
printf
method
#
printf is a convenience wrapper.
func (p *dumper) printf(format string, args ...interface{})
set
method
#
func (f *bitset16) set(mask uint16, b bool)
set
method
#
func (f *bitset8) set(mask uint8, b bool)
set2
method
#
set2 sets two bits in f using the bottom two bits of b.
func (f *bitset8) set2(shift uint8, b uint8)
setReadonly
method
#
func (n *Name) setReadonly(b bool)
setupTextLSym
function
#
setupTextLSym initializes the LSym for a with-body text symbol.
func setupTextLSym(f *Func, flag int)
splitPkg
function
#
splitPkg splits the full linker symbol name into package and local symbol
name.
func splitPkg(name string) (pkgpath string, sym string)
splitType
function
#
splitType splits a local symbol name into type and method (fn). If this a
free function, typ == "".
N.B. closures and methods can be ambiguous (e.g., bar.func1). These cases
are returned as methods.
func splitType(name string) (typ string, fn string)
staticValue1
function
#
func staticValue1(nn Node) Node
staticValue1
method
#
func (ro *ReassignOracle) staticValue1(nn Node) Node
stmtFmt
function
#
func stmtFmt(n Node, s fmt.State)
visit
method
#
func (v *bottomUpVisitor) visit(n *Func) uint32