Documentation ¶
Index ¶
- Constants
- Variables
- func AddAux(a *obj.Addr, v *ssa.Value)
- func AddAux2(a *obj.Addr, v *ssa.Value, offset int64)
- func AddrAuto(a *obj.Addr, v *ssa.Value)
- func Addrconst(a *obj.Addr, v int64)
- func CheckLoweredGetClosurePtr(v *ssa.Value)
- func CheckLoweredPhi(v *ssa.Value)
- func Dump(s string, n *Node)
- func EqCanPanic(t *types.Type) bool
- func Exit(code int)
- func Fatalf(fmt_ string, args ...interface{})
- func IncomparableField(t *types.Type) *types.Field
- func IsAlias(sym *types.Sym) bool
- func IsComparable(t *types.Type) bool
- func IsRegularMemory(t *types.Type) bool
- func Isconst(n *Node, ct Ctype) bool
- func Main(archInit func(*Arch))
- func Patch(p *obj.Prog, to *obj.Prog)
- func Rnd(o int64, r int64) int64
- func Warn(fmt_ string, args ...interface{})
- func Warnl(line src.XPos, fmt_ string, args ...interface{})
- type AlgKind
- type Arch
- type BlockEffects
- type Branch
- type Class
- type Ctype
- type DebugFlags
- type Dlist
- type Error
- type EscEdge
- type EscHole
- type EscLeaks
- type EscLocation
- type EscNote
- type Escape
- type FmtFlag
- type Func
- func (f *Func) Dupok() bool
- func (f *Func) ExportInline() bool
- func (f *Func) HasDefer() bool
- func (f *Func) InlinabilityChecked() bool
- func (f *Func) InstrumentBody() bool
- func (f *Func) IsHiddenClosure() bool
- func (f *Func) Needctxt() bool
- func (f *Func) NilCheckDisabled() bool
- func (f *Func) OpenCodedDeferDisallowed() bool
- func (f *Func) ReflectMethod() bool
- func (f *Func) SetDupok(b bool)
- func (f *Func) SetExportInline(b bool)
- func (f *Func) SetHasDefer(b bool)
- func (f *Func) SetInlinabilityChecked(b bool)
- func (f *Func) SetInstrumentBody(b bool)
- func (f *Func) SetIsHiddenClosure(b bool)
- func (f *Func) SetNeedctxt(b bool)
- func (f *Func) SetNilCheckDisabled(b bool)
- func (f *Func) SetOpenCodedDeferDisallowed(b bool)
- func (f *Func) SetReflectMethod(b bool)
- func (f *Func) SetWrapper(b bool)
- func (f *Func) Wrapper() bool
- type GCProg
- type IndexJump
- type InitEntry
- type InitOrder
- type InitPlan
- type InitSchedule
- type Inline
- type Liveness
- type LivenessIndex
- type LivenessMap
- type Mark
- type Mpcplx
- type Mpflt
- func (a *Mpflt) Add(b *Mpflt)
- func (a *Mpflt) AddFloat64(c float64)
- func (a *Mpflt) Cmp(b *Mpflt) int
- func (a *Mpflt) CmpFloat64(c float64) int
- func (a *Mpflt) Float32() float64
- func (a *Mpflt) Float64() float64
- func (fvp *Mpflt) GoString() string
- func (a *Mpflt) Mul(b *Mpflt)
- func (a *Mpflt) MulFloat64(c float64)
- func (a *Mpflt) Neg()
- func (a *Mpflt) Quo(b *Mpflt)
- func (a *Mpflt) Set(b *Mpflt)
- func (a *Mpflt) SetFloat64(c float64)
- func (a *Mpflt) SetInt(b *Mpint)
- func (a *Mpflt) SetString(as string)
- func (f *Mpflt) String() string
- func (a *Mpflt) Sub(b *Mpflt)
- type Mpint
- func (a *Mpint) Add(b *Mpint)
- func (a *Mpint) And(b *Mpint)
- func (a *Mpint) AndNot(b *Mpint)
- func (a *Mpint) Cmp(b *Mpint) int
- func (a *Mpint) CmpInt64(c int64) int
- func (a *Mpint) GoString() string
- func (a *Mpint) Int64() int64
- func (a *Mpint) Lsh(b *Mpint)
- func (a *Mpint) Mul(b *Mpint)
- func (a *Mpint) Neg()
- func (a *Mpint) Or(b *Mpint)
- func (a *Mpint) Quo(b *Mpint)
- func (a *Mpint) Rem(b *Mpint)
- func (a *Mpint) Rsh(b *Mpint)
- func (a *Mpint) Set(b *Mpint)
- func (a *Mpint) SetFloat(b *Mpflt) bool
- func (a *Mpint) SetInt64(c int64)
- func (a *Mpint) SetOverflow()
- func (a *Mpint) SetString(as string)
- func (a *Mpint) String() string
- func (a *Mpint) Sub(b *Mpint)
- func (a *Mpint) Xor(b *Mpint)
- type Name
- func (n *Name) Addrtaken() bool
- func (n *Name) Assigned() bool
- func (n *Name) AutoTemp() bool
- func (n *Name) Byval() bool
- func (n *Name) Captured() bool
- func (n *Name) InlFormal() bool
- func (n *Name) InlLocal() bool
- func (n *Name) IsClosureVar() bool
- func (n *Name) IsOutputParamHeapAddr() bool
- func (n *Name) LibfuzzerExtraCounter() bool
- func (n *Name) Needzero() bool
- func (n *Name) OpenDeferSlot() bool
- func (n *Name) Readonly() bool
- func (n *Name) SetAddrtaken(b bool)
- func (n *Name) SetAssigned(b bool)
- func (n *Name) SetAutoTemp(b bool)
- func (n *Name) SetByval(b bool)
- func (n *Name) SetCaptured(b bool)
- func (n *Name) SetInlFormal(b bool)
- func (n *Name) SetInlLocal(b bool)
- func (n *Name) SetIsClosureVar(b bool)
- func (n *Name) SetIsOutputParamHeapAddr(b bool)
- func (n *Name) SetLibfuzzerExtraCounter(b bool)
- func (n *Name) SetNeedzero(b bool)
- func (n *Name) SetOpenDeferSlot(b bool)
- func (n *Name) SetReadonly(b bool)
- func (n *Name) SetUsed(b bool)
- func (n *Name) Used() bool
- type NilVal
- type Node
- func (n *Node) BoolVal() bool
- func (n *Node) Bounded() bool
- func (n *Node) CanBeAnSSASym()
- func (n *Node) CanInt64() bool
- func (n *Node) Class() Class
- func (n *Node) Colas() bool
- func (n *Node) Diag() bool
- func (n *Node) Embedded() bool
- func (n *Node) Format(s fmt.State, verb rune)
- func (n *Node) HasBreak() bool
- func (n *Node) HasCall() bool
- func (n *Node) HasOpt() bool
- func (n *Node) HasVal() bool
- func (n *Node) Implicit() bool
- func (n *Node) IndexMapLValue() bool
- func (n *Node) Initorder() uint8
- func (n *Node) Int64Val() int64
- func (n *Node) Iota() int64
- func (n *Node) IsAutoTmp() bool
- func (n *Node) IsDDD() bool
- func (n *Node) IsMethod() bool
- func (n *Node) IsSynthetic() bool
- func (n *Node) Likely() bool
- func (n *Node) Line() string
- func (n *Node) MarkNonNil()
- func (n *Node) MarkReadonly()
- func (n *Node) NoInline() bool
- func (n *Node) NonNil() bool
- func (n *Node) Opt() interface{}
- func (n *Node) ResetAux()
- func (n *Node) SetBounded(b bool)
- func (n *Node) SetClass(b Class)
- func (n *Node) SetColas(b bool)
- func (n *Node) SetDiag(b bool)
- func (n *Node) SetEmbedded(b bool)
- func (n *Node) SetHasBreak(b bool)
- func (n *Node) SetHasCall(b bool)
- func (n *Node) SetHasOpt(b bool)
- func (n *Node) SetHasVal(b bool)
- func (n *Node) SetImplicit(b bool)
- func (n *Node) SetIndexMapLValue(b bool)
- func (n *Node) SetInitorder(b uint8)
- func (n *Node) SetIota(x int64)
- func (n *Node) SetIsDDD(b bool)
- func (n *Node) SetLikely(b bool)
- func (n *Node) SetNoInline(b bool)
- func (n *Node) SetOpt(x interface{})
- func (n *Node) SetSliceBounds(low, high, max *Node)
- func (n *Node) SetSubOp(op Op)
- func (n *Node) SetTChanDir(dir types.ChanDir)
- func (n *Node) SetTransient(b bool)
- func (n *Node) SetTypecheck(b uint8)
- func (n *Node) SetVal(v Val)
- func (n *Node) SetWalkdef(b uint8)
- func (n *Node) SliceBounds() (low, high, max *Node)
- func (n *Node) StorageClass() ssa.StorageClass
- func (n *Node) String() string
- func (n *Node) StringVal() string
- func (n *Node) SubOp() Op
- func (n *Node) TChanDir() types.ChanDir
- func (n *Node) Transient() bool
- func (n *Node) Typ() *types.Type
- func (n *Node) Typecheck() uint8
- func (n *Node) Val() Val
- func (n *Node) Walkdef() uint8
- type NodeSet
- type Nodes
- func (n Nodes) Addr(i int) **Node
- func (n *Nodes) Append(a ...*Node)
- func (n *Nodes) AppendNodes(n2 *Nodes)
- func (n Nodes) First() *Node
- func (n Nodes) Format(s fmt.State, verb rune)
- func (n Nodes) Index(i int) *Node
- func (n Nodes) Len() int
- func (n *Nodes) MoveNodes(n2 *Nodes)
- func (n *Nodes) Prepend(a ...*Node)
- func (n Nodes) Second() *Node
- func (n *Nodes) Set(s []*Node)
- func (n *Nodes) Set1(n1 *Node)
- func (n *Nodes) Set2(n1, n2 *Node)
- func (n *Nodes) Set3(n1, n2, n3 *Node)
- func (n Nodes) SetFirst(node *Node)
- func (n Nodes) SetIndex(i int, node *Node)
- func (n Nodes) SetSecond(node *Node)
- func (n Nodes) Slice() []*Node
- func (n Nodes) String() string
- type Op
- type Order
- type Param
- type Pragma
- type PragmaEmbed
- type PragmaFlag
- type PragmaPos
- type Progs
- type SSAGenState
- func (s *SSAGenState) AddrScratch(a *obj.Addr)
- func (s *SSAGenState) Br(op obj.As, target *ssa.Block) *obj.Prog
- func (s *SSAGenState) Call(v *ssa.Value) *obj.Prog
- func (s *SSAGenState) CombJump(b, next *ssa.Block, jumps *[2][2]IndexJump)
- func (s *SSAGenState) DebugFriendlySetPosFrom(v *ssa.Value)
- func (s *SSAGenState) Pc() *obj.Prog
- func (s *SSAGenState) PrepareCall(v *ssa.Value)
- func (s *SSAGenState) Prog(as obj.As) *obj.Prog
- func (s *SSAGenState) SetPos(pos src.XPos)
- func (s *SSAGenState) UseArgs(n int64)
- type ScopeID
- type Sig
- type Symlink
- type Timings
- type Val
Constants ¶
const ( H0 = 2166136261 Hp = 16777619 )
FNV-1 hash function constants.
const ( EscFuncUnknown = 0 + iota EscFuncPlanned EscFuncStarted EscFuncTagged )
const ( EscUnknown = iota EscNone // Does not escape to heap, result, or parameters. EscHeap // Reachable from the heap EscNever // By construction will not escape. )
const ( FErr fmtMode = iota FDbg FTypeId FTypeIdName // same as FTypeId, but use package name instead of prefix )
*types.Sym, *types.Type, and *Node types use the flags below to set the format mode
const ( InitNotStarted = iota InitDone InitPending )
Static initialization phase. These values are stored in two bits in Node.flags.
const ( FuncPragmas = Nointerface | Noescape | Norace | Nosplit | Noinline | NoCheckPtr | CgoUnsafeArgs | UintptrEscapes | Systemstack | Nowritebarrier | Nowritebarrierrec | Yeswritebarrierrec TypePragmas = NotInHeap )
const ( // Maximum size in bits for Mpints before signalling // overflow and also mantissa precision for Mpflts. Mpprec = 512 // Turn on for constant arithmetic debugging output. Mpdebug = false )
const ( BUCKETSIZE = 8 MAXKEYSIZE = 128 MAXELEMSIZE = 128 )
Builds a type representing a Bucket structure for the given map type. This type is not visible to users - we include only enough information to generate a correct GC program for it. Make sure this stays in sync with runtime/map.go.
const ( Txxx = types.Txxx TINT8 = types.TINT8 TUINT8 = types.TUINT8 TINT16 = types.TINT16 TUINT16 = types.TUINT16 TINT32 = types.TINT32 TUINT32 = types.TUINT32 TINT64 = types.TINT64 TUINT64 = types.TUINT64 TINT = types.TINT TUINT = types.TUINT TUINTPTR = types.TUINTPTR TCOMPLEX64 = types.TCOMPLEX64 TCOMPLEX128 = types.TCOMPLEX128 TFLOAT32 = types.TFLOAT32 TFLOAT64 = types.TFLOAT64 TBOOL = types.TBOOL TPTR = types.TPTR TFUNC = types.TFUNC TSLICE = types.TSLICE TARRAY = types.TARRAY TSTRUCT = types.TSTRUCT TCHAN = types.TCHAN TMAP = types.TMAP TINTER = types.TINTER TFORW = types.TFORW TANY = types.TANY TSTRING = types.TSTRING TUNSAFEPTR = types.TUNSAFEPTR // pseudo-types for literals TIDEAL = types.TIDEAL TNIL = types.TNIL TBLANK = types.TBLANK // pseudo-types for frame layout TFUNCARGS = types.TFUNCARGS TCHANARGS = types.TCHANARGS NTYPE = types.NTYPE )
convenience constants
const ArhdrSize = 60
architecture-independent object file output
const (
BADWIDTH = types.BADWIDTH
)
const StackMapDontCare = -1000
StackMapDontCare indicates that the stack map index at a Value doesn't matter.
This is a sentinel value that should never be emitted to the PCDATA stream. We use -1000 because that's obviously never a valid stack index (but -1 is).
Variables ¶
var ( Deferreturn, Duffcopy, Duffzero, Udiv *obj.LSym BoundsCheckFunc [ssa.BoundsKindCount]*obj.LSym ExtendCheckFunc [ssa.BoundsKindCount]*obj.LSym // Wasm WasmMove, WasmZero, WasmDiv, WasmTruncS, WasmTruncU, SigPanic *obj.LSym )
var ( Debug_append int Debug_checkptr int Debug_closure int Debug_compilelater int Debug_dumpptrs int Debug_libfuzzer int Debug_panic int Debug_slice int Debug_vlog bool Debug_wb int Debug_pctab string Debug_locationlist int Debug_typecheckinl int Debug_gendwarfinl int Debug_softfloat int Debug_defer int )
var Ctxt *obj.Link
var Debug_checknil int
var (
Debug_export int // if set, print debugging information about export data
)
var Debug_gcprog int // set by -d gcprog
var Debug_typeassert int
var GCWriteBarrierReg map[int16]*obj.LSym
GCWriteBarrierReg maps from registers to gcWriteBarrier implementation LSyms.
var LivenessDontCare = LivenessIndex{StackMapDontCare, true}
LivenessDontCare indicates that the liveness information doesn't matter. Currently it is used in deferreturn liveness when we don't actually need it. It should never be emitted to the PCDATA stream.
var Runtimepkg *types.Pkg // fake package runtime
var Widthptr int
var Widthreg int
Functions ¶
func CheckLoweredGetClosurePtr ¶ added in go1.8
CheckLoweredGetClosurePtr checks that v is the first instruction in the function's entry block. The output of LoweredGetClosurePtr is generally hardwired to the correct register. That register contains the closure pointer on closure entry.
func CheckLoweredPhi ¶ added in go1.8
CheckLoweredPhi checks that regalloc and stackalloc correctly handled phi values. Called during ssaGenValue.
func EqCanPanic ¶ added in go1.15
EqCanPanic reports whether == on type t could panic (has an interface somewhere). t must be comparable.
func IncomparableField ¶ added in go1.9
IncomparableField returns an incomparable Field of struct Type t, if any.
func IsComparable ¶ added in go1.9
IsComparable reports whether t is a comparable type.
func IsRegularMemory ¶ added in go1.9
IsRegularMemory reports whether t can be compared/hashed as regular memory.
Types ¶
type AlgKind ¶ added in go1.7
type AlgKind int
AlgKind describes the kind of algorithms used for comparing and hashing a Type.
const ( // These values are known by runtime. ANOEQ AlgKind = iota AMEM0 AMEM8 AMEM16 AMEM32 AMEM64 AMEM128 ASTRING AINTER ANILINTER AFLOAT32 AFLOAT64 ACPLX64 ACPLX128 // Type can be compared/hashed as regular memory. AMEM AlgKind = 100 // Type needs special comparison/hashing functions. ASPECIAL AlgKind = -1 )
type Arch ¶
type Arch struct { LinkArch *obj.LinkArch REGSP int MAXWIDTH int64 SoftFloat bool PadFrame func(int64) int64 // ZeroRange zeroes a range of memory on stack. It is only inserted // at function entry, and it is ok to clobber registers. ZeroRange func(*Progs, *obj.Prog, int64, int64, *uint32) *obj.Prog Ginsnop func(*Progs) *obj.Prog Ginsnopdefer func(*Progs) *obj.Prog // special ginsnop for deferreturn // SSAMarkMoves marks any MOVXconst ops that need to avoid clobbering flags. SSAMarkMoves func(*SSAGenState, *ssa.Block) // SSAGenValue emits Prog(s) for the Value. SSAGenValue func(*SSAGenState, *ssa.Value) // SSAGenBlock emits end-of-block Progs. SSAGenValue should be called // for all values in the block before SSAGenBlock. SSAGenBlock func(s *SSAGenState, b, next *ssa.Block) }
type BlockEffects ¶ added in go1.9
type BlockEffects struct {
// contains filtered or unexported fields
}
BlockEffects summarizes the liveness effects on an SSA block.
type Class ¶ added in go1.6
type Class uint8
The Class of a variable/function describes the "storage class" of a variable or function. During parsing, storage classes are called declaration contexts.
type Ctype ¶ added in go1.6
type Ctype uint8
Ctype describes the constant kind of an "ideal" (untyped) constant.
type DebugFlags ¶ added in go1.16
type DebugFlags struct {
P, B, C, E,
K, L, N, S,
W int
// contains filtered or unexported fields
}
gc debug flags
var Debug DebugFlags
type Dlist ¶
type Dlist struct {
// contains filtered or unexported fields
}
A Dlist stores a pointer to a TFIELD Type embedded within a TSTRUCT or TINTER Type.
type EscEdge ¶ added in go1.13
type EscEdge struct {
// contains filtered or unexported fields
}
An EscEdge represents an assignment edge between two Go variables.
type EscHole ¶ added in go1.13
type EscHole struct {
// contains filtered or unexported fields
}
An EscHole represents a context for evaluation a Go expression. E.g., when evaluating p in "x = **p", we'd have a hole with dst==x and derefs==2.
type EscLeaks ¶ added in go1.14
type EscLeaks [1 + numEscResults]uint8
An EscLeaks represents a set of assignment flows from a parameter to the heap or to any of its function's (first numEscResults) result parameters.
func ParseLeaks ¶ added in go1.14
ParseLeaks parses a binary string representing an EscLeaks.
func (*EscLeaks) AddResult ¶ added in go1.14
AddResult adds an assignment flow from l to its function's i'th result parameter.
func (EscLeaks) Empty ¶ added in go1.14
Empty reports whether l is an empty set (i.e., no assignment flows).
func (EscLeaks) Heap ¶ added in go1.14
Heap returns the minimum deref count of any assignment flow from l to the heap. If no such flows exist, Heap returns -1.
type EscLocation ¶ added in go1.13
type EscLocation struct {
// contains filtered or unexported fields
}
An EscLocation represents an abstract location that stores a Go variable.
type FmtFlag ¶ added in go1.7
type FmtFlag int
A FmtFlag value is a set of flags (or 0). They control how the Xconv functions format their values. See the respective function's documentation for details.
type Func ¶
type Func struct { Shortname *types.Sym // Extra entry code for the function. For example, allocate and initialize // memory for escaping parameters. However, just for OCLOSURE, Enter is a // list of ONAME nodes of captured variables Enter Nodes Exit Nodes // ONAME nodes for closure params, each should have closurevar set Cvars Nodes // ONAME nodes for all params/locals for this func/closure, does NOT // include closurevars until transformclosure runs. Dcl []*Node // Parents records the parent scope of each scope within a // function. The root scope (0) has no parent, so the i'th // scope's parent is stored at Parents[i-1]. Parents []ScopeID // Marks records scope boundary changes. Marks []Mark // Closgen tracks how many closures have been generated within // this function. Used by closurename for creating unique // function names. Closgen int FieldTrack map[*types.Sym]struct{} DebugInfo *ssa.FuncDebug Ntype *Node // signature Top int // top context (ctxCallee, etc) Closure *Node // OCLOSURE <-> ODCLFUNC (see header comment above) Nname *Node // The ONAME node associated with an ODCLFUNC (both have same Type) Inl *Inline Label int32 // largest auto-generated label in this function Endlineno src.XPos WBPos src.XPos // position of first write barrier; see SetWBPos Pragma PragmaFlag // go:xxx function annotations // contains filtered or unexported fields }
Func holds Node fields used only with function-like nodes.
func (*Func) ExportInline ¶ added in go1.10
func (*Func) InlinabilityChecked ¶ added in go1.10
func (*Func) InstrumentBody ¶ added in go1.11
func (*Func) IsHiddenClosure ¶ added in go1.8
func (*Func) NilCheckDisabled ¶ added in go1.9
func (*Func) OpenCodedDeferDisallowed ¶ added in go1.14
func (*Func) ReflectMethod ¶ added in go1.7
func (*Func) SetExportInline ¶ added in go1.10
func (*Func) SetHasDefer ¶ added in go1.9
func (*Func) SetInlinabilityChecked ¶ added in go1.10
func (*Func) SetInstrumentBody ¶ added in go1.11
func (*Func) SetIsHiddenClosure ¶ added in go1.9
func (*Func) SetNeedctxt ¶ added in go1.9
func (*Func) SetNilCheckDisabled ¶ added in go1.9
func (*Func) SetOpenCodedDeferDisallowed ¶ added in go1.14
func (*Func) SetReflectMethod ¶ added in go1.9
func (*Func) SetWrapper ¶ added in go1.9
type IndexJump ¶ added in go1.15
For generating consecutive jump instructions to model a specific branching
type InitOrder ¶ added in go1.13
type InitOrder struct {
// contains filtered or unexported fields
}
type InitSchedule ¶ added in go1.13
type InitSchedule struct {
// contains filtered or unexported fields
}
An InitSchedule is used to decompose assignment statements into static and dynamic initialization parts. Static initializations are handled by populating variables' linker symbol data, while dynamic initializations are accumulated to be executed in order.
type Inline ¶ added in go1.11
type Inline struct { Cost int32 // heuristic cost of inlining this function // Copies of Func.Dcl and Nbody for use during inlining. Dcl []*Node Body []*Node }
An Inline holds fields used for function bodies that can be inlined.
type Liveness ¶
type Liveness struct {
// contains filtered or unexported fields
}
A collection of global state used by liveness analysis.
type LivenessIndex ¶ added in go1.11
type LivenessIndex struct {
// contains filtered or unexported fields
}
LivenessIndex stores the liveness map information for a Value.
func (LivenessIndex) StackMapValid ¶ added in go1.15
func (idx LivenessIndex) StackMapValid() bool
type LivenessMap ¶ added in go1.11
type LivenessMap struct {
// contains filtered or unexported fields
}
LivenessMap maps from *ssa.Value to LivenessIndex.
func (LivenessMap) Get ¶ added in go1.11
func (m LivenessMap) Get(v *ssa.Value) LivenessIndex
type Mark ¶ added in go1.9
type Mark struct { // Pos is the position of the token that marks the scope // change. Pos src.XPos // Scope identifies the innermost scope to the right of Pos. Scope ScopeID }
A Mark represents a scope boundary.
type Mpcplx ¶
Mpcplx represents a complex constant.
func (*Mpcplx) Div ¶ added in go1.11
complex divide v /= rv
(a, b) / (c, d) = ((a*c + b*d), (b*c - a*d))/(c*c + d*d)
type Mpflt ¶
Mpflt represents a floating-point constant.
func (*Mpflt) AddFloat64 ¶ added in go1.7
func (*Mpflt) CmpFloat64 ¶ added in go1.7
func (*Mpflt) MulFloat64 ¶ added in go1.7
func (*Mpflt) SetFloat64 ¶ added in go1.7
type Mpint ¶
type Mpint struct { Val big.Int Ovf bool // set if Val overflowed compiler limit (sticky) Rune bool // set if syntax indicates default type rune }
Mpint represents an integer constant.
func (*Mpint) SetOverflow ¶ added in go1.7
func (a *Mpint) SetOverflow()
type Name ¶
type Name struct { Pack *Node // real package for import . names Pkg *types.Pkg // pkg for OPACK nodes // For a local variable (not param) or extern, the initializing assignment (OAS or OAS2). // For a closure var, the ONAME node of the outer captured variable Defn *Node // The ODCLFUNC node (for a static function/method or a closure) in which // local variable or param is declared. Curfn *Node Param *Param // additional fields for ONAME, OTYPE Decldepth int32 // declaration loop depth, increased for every loop or label // Unique number for ONAME nodes within a function. Function outputs // (results) are numbered starting at one, followed by function inputs // (parameters), and then local variables. Vargen is used to distinguish // local variables/params with the same name. Vargen int32 // contains filtered or unexported fields }
Name holds Node fields used only by named nodes (ONAME, OTYPE, OPACK, OLABEL, some OLITERAL).
func (*Name) IsClosureVar ¶ added in go1.14
func (*Name) IsOutputParamHeapAddr ¶ added in go1.14
func (*Name) LibfuzzerExtraCounter ¶ added in go1.14
func (*Name) OpenDeferSlot ¶ added in go1.14
func (*Name) SetAddrtaken ¶ added in go1.14
func (*Name) SetAssigned ¶ added in go1.14
func (*Name) SetAutoTemp ¶ added in go1.9
func (*Name) SetCaptured ¶ added in go1.9
func (*Name) SetInlFormal ¶ added in go1.14
func (*Name) SetInlLocal ¶ added in go1.14
func (*Name) SetIsClosureVar ¶ added in go1.14
func (*Name) SetIsOutputParamHeapAddr ¶ added in go1.14
func (*Name) SetLibfuzzerExtraCounter ¶ added in go1.14
func (*Name) SetNeedzero ¶ added in go1.9
func (*Name) SetOpenDeferSlot ¶ added in go1.14
func (*Name) SetReadonly ¶ added in go1.9
type Node ¶
type Node struct { // Tree structure. // Generic recursive walks should follow these fields. Left *Node Right *Node Ninit Nodes Nbody Nodes List Nodes Rlist Nodes // most nodes Type *types.Type Orig *Node // original form, for printing, and tracking copies of ONAMEs // func Func *Func // ONAME, OTYPE, OPACK, OLABEL, some OLITERAL Name *Name Sym *types.Sym // various E interface{} // Opt or Val, see methods below // Various. Usually an offset into a struct. For example: // - ONAME nodes that refer to local variables use it to identify their stack frame position. // - ODOT, ODOTPTR, and ORESULT use it to indicate offset relative to their base address. // - OSTRUCTKEY uses it to store the named field's offset. // - Named OLITERALs use it to store their ambient iota value. // - OINLMARK stores an index into the inlTree data structure. // - OCLOSURE uses it to store ambient iota value, if any. // Possibly still more uses. If you find any, document them. Xoffset int64 Pos src.XPos Esc uint16 // EscXXX Op Op // contains filtered or unexported fields }
A Node is a single node in the syntax tree. Actually the syntax tree is a syntax DAG, because there is only one node with Op=ONAME for a given instance of a variable x. The same is true for Op=OTYPE and Op=OLITERAL. See Node.mayBeShared.
var Curfn *Node
func AutoVar ¶ added in go1.7
AutoVar returns a *Node and int64 representing the auto variable and offset within it where v should be spilled.
func (*Node) CanBeAnSSASym ¶ added in go1.15
func (n *Node) CanBeAnSSASym()
The compiler needs *Node to be assignable to cmd/compile/internal/ssa.Sym.
func (*Node) CanInt64 ¶ added in go1.10.5
CanInt64 reports whether it is safe to call Int64Val() on n.
func (*Node) IndexMapLValue ¶ added in go1.11
func (*Node) Int64Val ¶ added in go1.16
Int64Val returns n as an int64. n must be an integer or rune constant.
func (*Node) IsAutoTmp ¶ added in go1.8
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 (*Node) IsMethod ¶ added in go1.8
IsMethod reports whether n is a method. n must be a function or a method.
func (*Node) IsSynthetic ¶ added in go1.11
func (*Node) Line ¶
Line returns n's position as a string. If n has been inlined, it uses the outermost position where n has been inlined.
func (*Node) MarkNonNil ¶ added in go1.15
func (n *Node) MarkNonNil()
MarkNonNil marks a pointer n as being guaranteed non-nil, on all code paths, at all times. During conversion to SSA, non-nil pointers won't have nil checks inserted before dereferencing. See state.exprPtr.
func (*Node) MarkReadonly ¶ added in go1.15
func (n *Node) MarkReadonly()
MarkReadonly indicates that n is an ONAME with readonly contents.
func (*Node) SetBounded ¶ added in go1.9
SetBounded indicates whether operation n does not need safety checks. When n is an index or slice operation, n does not need bounds checks. When n is a dereferencing operation, n does not need nil checks. When n is a makeslice+copy operation, n does not need length and cap checks.
func (*Node) SetEmbedded ¶ added in go1.9
func (*Node) SetHasBreak ¶ added in go1.7
func (*Node) SetHasCall ¶ added in go1.9
func (*Node) SetImplicit ¶ added in go1.9
func (*Node) SetIndexMapLValue ¶ added in go1.11
func (*Node) SetInitorder ¶ added in go1.9
func (*Node) SetNoInline ¶ added in go1.9
func (*Node) SetOpt ¶
func (n *Node) SetOpt(x interface{})
SetOpt sets the optimizer data for the node, which must not have been used with SetVal. SetOpt(nil) is ignored for Vals to simplify call sites that are clearing Opts.
func (*Node) SetSliceBounds ¶ added in go1.7
SetSliceBounds sets n's slice bounds, where n is a slice expression. n must be a slice expression. If max is non-nil, n must be a full slice expression.
func (*Node) SetTChanDir ¶ added in go1.11
func (*Node) SetTransient ¶ added in go1.14
func (*Node) SetTypecheck ¶ added in go1.9
func (*Node) SetWalkdef ¶ added in go1.9
func (*Node) SliceBounds ¶ added in go1.7
SliceBounds returns n's slice bounds: low, high, and max in expr[low:high:max]. n must be a slice expression. max is nil if n is a simple slice expression.
func (*Node) StorageClass ¶ added in go1.10
func (n *Node) StorageClass() ssa.StorageClass
type NodeSet ¶ added in go1.13
type NodeSet map[*Node]struct{}
NodeSet is a set of Nodes.
type Nodes ¶ added in go1.7
type Nodes struct {
// contains filtered or unexported fields
}
Nodes is a pointer to a slice of *Node. For fields that are not used in most nodes, this is used instead of a slice to save space.
func (Nodes) Addr ¶ added in go1.7
Addr returns the address of the i'th element of Nodes. It panics if n does not have at least i+1 elements.
func (*Nodes) AppendNodes ¶ added in go1.7
AppendNodes appends the contents of *n2 to n, then clears n2.
func (Nodes) First ¶ added in go1.7
First returns the first element of Nodes (same as n.Index(0)). It panics if n has no elements.
func (Nodes) Index ¶ added in go1.7
Index returns the i'th element of Nodes. It panics if n does not have at least i+1 elements.
func (*Nodes) Prepend ¶ added in go1.8
Prepend prepends entries to Nodes. If a slice is passed in, this will take ownership of it.
func (Nodes) Second ¶ added in go1.7
Second returns the second element of Nodes (same as n.Index(1)). It panics if n has fewer than two elements.
func (Nodes) SetFirst ¶ added in go1.9
SetFirst sets the first element of Nodes to node. It panics if n does not have at least one elements.
func (Nodes) SetIndex ¶ added in go1.7
SetIndex sets the i'th element of Nodes to node. It panics if n does not have at least i+1 elements.
func (Nodes) SetSecond ¶ added in go1.9
SetSecond sets the second element of Nodes to node. It panics if n does not have at least two elements.
type Op ¶ added in go1.6
type Op uint8
const ( OXXX Op = iota // names ONAME // var or func name // Unnamed arg or return value: f(int, string) (int, error) { etc } // Also used for a qualified package identifier that hasn't been resolved yet. ONONAME OTYPE // type name OPACK // import OLITERAL // literal // expressions OADD // Left + Right OSUB // Left - Right OOR // Left | Right OXOR // Left ^ Right OADDSTR // +{List} (string addition, list elements are strings) OADDR // &Left OANDAND // Left && Right OAPPEND // append(List); after walk, Left may contain elem type descriptor OBYTES2STR // Type(Left) (Type is string, Left is a []byte) OBYTES2STRTMP // Type(Left) (Type is string, Left is a []byte, ephemeral) ORUNES2STR // Type(Left) (Type is string, Left is a []rune) OSTR2BYTES // Type(Left) (Type is []byte, Left is a string) OSTR2BYTESTMP // Type(Left) (Type is []byte, Left is a string, ephemeral) OSTR2RUNES // Type(Left) (Type is []rune, Left is a string) // Left = Right or (if Colas=true) Left := Right // If Colas, then Ninit includes a DCL node for Left. OAS // List = Rlist (x, y, z = a, b, c) or (if Colas=true) List := Rlist // If Colas, then Ninit includes DCL nodes for List OAS2 OAS2DOTTYPE // List = Right (x, ok = I.(int)) OAS2FUNC // List = Right (x, y = f()) OAS2MAPR // List = Right (x, ok = m["foo"]) OAS2RECV // List = Right (x, ok = <-c) OASOP // Left Etype= Right (x += y) OCALL // Left(List) (function call, method call or type conversion) // OCALLFUNC, OCALLMETH, and OCALLINTER have the same structure. // Prior to walk, they are: Left(List), where List is all regular arguments. // After walk, List is a series of assignments to temporaries, // and Rlist is an updated set of arguments. // Nbody is all OVARLIVE nodes that are attached to OCALLxxx. // TODO(josharian/khr): Use Ninit instead of List for the assignments to temporaries. See CL 114797. OCALLFUNC // Left(List/Rlist) (function call f(args)) OCALLMETH // Left(List/Rlist) (direct method call x.Method(args)) OCALLINTER // Left(List/Rlist) (interface method call x.Method(args)) OCALLPART // Left.Right (method expression x.Method, not called) OCAP // cap(Left) OCLOSE // close(Left) OCLOSURE // func Type { Func.Closure.Nbody } (func literal) OCOMPLIT // Right{List} (composite literal, not yet lowered to specific form) OMAPLIT // Type{List} (composite literal, Type is map) OSTRUCTLIT // Type{List} (composite literal, Type is struct) OARRAYLIT // Type{List} (composite literal, Type is array) OSLICELIT // Type{List} (composite literal, Type is slice) Right.Int64() = slice length. OPTRLIT // &Left (left is composite literal) OCONV // Type(Left) (type conversion) OCONVIFACE // Type(Left) (type conversion, to interface) OCONVNOP // Type(Left) (type conversion, no effect) OCOPY // copy(Left, Right) ODCL // var Left (declares Left of type Left.Type) // Used during parsing but don't last. ODCLFUNC // func f() or func (r) f() ODCLFIELD // struct field, interface field, or func/method argument/return value. ODCLCONST // const pi = 3.14 ODCLTYPE // type Int int or type Int = int ODELETE // delete(List) ODOT // Left.Sym (Left is of struct type) ODOTPTR // Left.Sym (Left is of pointer to struct type) ODOTMETH // Left.Sym (Left is non-interface, Right is method name) ODOTINTER // Left.Sym (Left is interface, Right is method name) OXDOT // Left.Sym (before rewrite to one of the preceding) ODOTTYPE // Left.Right or Left.Type (.Right during parsing, .Type once resolved); after walk, .Right contains address of interface type descriptor and .Right.Right contains address of concrete type descriptor ODOTTYPE2 // Left.Right or Left.Type (.Right during parsing, .Type once resolved; on rhs of OAS2DOTTYPE); after walk, .Right contains address of interface type descriptor OEQ // Left == Right ONE // Left != Right OLT // Left < Right OLE // Left <= Right OGE // Left >= Right OGT // Left > Right ODEREF // *Left OINDEX // Left[Right] (index of array or slice) OINDEXMAP // Left[Right] (index of map) OKEY // Left:Right (key:value in struct/array/map literal) OSTRUCTKEY // Sym:Left (key:value in struct literal, after type checking) OLEN // len(Left) OMAKE // make(List) (before type checking converts to one of the following) OMAKECHAN // make(Type, Left) (type is chan) OMAKEMAP // make(Type, Left) (type is map) OMAKESLICE // make(Type, Left, Right) (type is slice) OMAKESLICECOPY // makeslicecopy(Type, Left, Right) (type is slice; Left is length and Right is the copied from slice) // OMAKESLICECOPY is created by the order pass and corresponds to: // s = make(Type, Left); copy(s, Right) // // Bounded can be set on the node when Left == len(Right) is known at compile time. // // This node is created so the walk pass can optimize this pattern which would // otherwise be hard to detect after the order pass. OMUL // Left * Right ODIV // Left / Right OMOD // Left % Right OLSH // Left << Right ORSH // Left >> Right OAND // Left & Right OANDNOT // Left &^ Right ONEW // new(Left); corresponds to calls to new in source code ONEWOBJ // runtime.newobject(n.Type); introduced by walk; Left is type descriptor ONOT // !Left OBITNOT // ^Left OPLUS // +Left ONEG // -Left OOROR // Left || Right OPANIC // panic(Left) OPRINT // print(List) OPRINTN // println(List) OPAREN // (Left) OSEND // Left <- Right OSLICE // Left[List[0] : List[1]] (Left is untypechecked or slice) OSLICEARR // Left[List[0] : List[1]] (Left is array) OSLICESTR // Left[List[0] : List[1]] (Left is string) OSLICE3 // Left[List[0] : List[1] : List[2]] (Left is untypedchecked or slice) OSLICE3ARR // Left[List[0] : List[1] : List[2]] (Left is array) OSLICEHEADER // sliceheader{Left, List[0], List[1]} (Left is unsafe.Pointer, List[0] is length, List[1] is capacity) ORECOVER // recover() ORECV // <-Left ORUNESTR // Type(Left) (Type is string, Left is rune) OSELRECV // Left = <-Right.Left: (appears as .Left of OCASE; Right.Op == ORECV) OSELRECV2 // List = <-Right.Left: (appears as .Left of OCASE; count(List) == 2, Right.Op == ORECV) OIOTA // iota OREAL // real(Left) OIMAG // imag(Left) OCOMPLEX // complex(Left, Right) or complex(List[0]) where List[0] is a 2-result function call OALIGNOF // unsafe.Alignof(Left) OOFFSETOF // unsafe.Offsetof(Left) OSIZEOF // unsafe.Sizeof(Left) // statements OBLOCK // { List } (block of code) OBREAK // break [Sym] // OCASE: case List: Nbody (List==nil means default) // For OTYPESW, List is a OTYPE node for the specified type (or OLITERAL // for nil), and, if a type-switch variable is specified, Rlist is an // ONAME for the version of the type-switch variable with the specified // type. OCASE OCONTINUE // continue [Sym] ODEFER // defer Left (Left must be call) OEMPTY // no-op (empty statement) OFALL // fallthrough OFOR // for Ninit; Left; Right { Nbody } // OFORUNTIL is like OFOR, but the test (Left) is applied after the body: // Ninit // top: { Nbody } // Execute the body at least once // cont: Right // if Left { // And then test the loop condition // List // Before looping to top, execute List // goto top // } // OFORUNTIL is created by walk. There's no way to write this in Go code. OFORUNTIL OGOTO // goto Sym OIF // if Ninit; Left { Nbody } else { Rlist } OLABEL // Sym: OGO // go Left (Left must be call) ORANGE // for List = range Right { Nbody } ORETURN // return List OSELECT // select { List } (List is list of OCASE) OSWITCH // switch Ninit; Left { List } (List is a list of OCASE) // OTYPESW: Left := Right.(type) (appears as .Left of OSWITCH) // Left is nil if there is no type-switch variable OTYPESW // types OTCHAN // chan int OTMAP // map[string]int OTSTRUCT // struct{} OTINTER // interface{} // OTFUNC: func() - Left is receiver field, List is list of param fields, Rlist is // list of result fields. OTFUNC OTARRAY // []int, [8]int, [N]int or [...]int // misc ODDD // func f(args ...int) or f(l...) or var a = [...]int{0, 1, 2}. OINLCALL // intermediary representation of an inlined call. OEFACE // itable and data words of an empty-interface value. OITAB // itable word of an interface value. OIDATA // data word of an interface value in Left OSPTR // base pointer of a slice or string. OCLOSUREVAR // variable reference at beginning of closure function OCFUNC // reference to c function pointer (not go func value) OCHECKNIL // emit code to ensure pointer/interface not nil OVARDEF // variable is about to be fully initialized OVARKILL // variable is dead OVARLIVE // variable is alive ORESULT // result of a function call; Xoffset is stack offset OINLMARK // start of an inlined body, with file/line of caller. Xoffset is an index into the inline tree. // arch-specific opcodes ORETJMP // return to other function OGETG // runtime.getg() (read g pointer) OEND )
Node ops.
type Order ¶
type Order struct {
// contains filtered or unexported fields
}
Order holds state during the ordering process.
type Param ¶
type Param struct { Ntype *Node Heapaddr *Node // temp holding heap address of param // ONAME PAUTOHEAP Stackcopy *Node // the PPARAM/PPARAMOUT on-stack slot (moved func params only) // ONAME closure linkage // Consider: // // func f() { // x := 1 // x1 // func() { // use(x) // x2 // func() { // use(x) // x3 // --- parser is here --- // }() // }() // } // // There is an original declaration of x and then a chain of mentions of x // leading into the current function. Each time x is mentioned in a new closure, // we create a variable representing x for use in that specific closure, // since the way you get to x is different in each closure. // // Let's number the specific variables as shown in the code: // x1 is the original x, x2 is when mentioned in the closure, // and x3 is when mentioned in the closure in the closure. // // We keep these linked (assume N > 1): // // - x1.Defn = original declaration statement for x (like most variables) // - x1.Innermost = current innermost closure x (in this case x3), or nil for none // - x1.IsClosureVar() = false // // - xN.Defn = x1, N > 1 // - xN.IsClosureVar() = true, N > 1 // - x2.Outer = nil // - xN.Outer = x(N-1), N > 2 // // // When we look up x in the symbol table, we always get x1. // Then we can use x1.Innermost (if not nil) to get the x // for the innermost known closure function, // but the first reference in a closure will find either no x1.Innermost // or an x1.Innermost with .Funcdepth < Funcdepth. // In that case, a new xN must be created, linked in with: // // xN.Defn = x1 // xN.Outer = x1.Innermost // x1.Innermost = xN // // When we finish the function, we'll process its closure variables // and find xN and pop it off the list using: // // x1 := xN.Defn // x1.Innermost = xN.Outer // // We leave x1.Innermost set so that we can still get to the original // variable quickly. Not shown here, but once we're // done parsing a function and no longer need xN.Outer for the // lexical x reference links as described above, funcLit // recomputes xN.Outer as the semantic x reference link tree, // even filling in x in intermediate closures that might not // have mentioned it along the way to inner closures that did. // See funcLit for details. // // During the eventual compilation, then, for closure variables we have: // // xN.Defn = original variable // xN.Outer = variable captured in next outward scope // to make closure where xN appears // // Because of the sharding of pieces of the node, x.Defn means x.Name.Defn // and x.Innermost/Outer means x.Name.Param.Innermost/Outer. Innermost *Node Outer *Node // OTYPE & ONAME //go:embed info, // sharing storage to reduce gc.Param size. // Extra is nil, or else *Extra is a *paramType or an *embedFileList. Extra *interface{} }
func (*Param) Alias ¶ added in go1.9
Alias reports whether p, which must be for an OTYPE, is a type alias.
func (*Param) EmbedFiles ¶
EmbedFiles returns the list of embedded files for p, which must be for an ONAME var.
func (*Param) Pragma ¶ added in go1.8
func (p *Param) Pragma() PragmaFlag
Pragma returns the PragmaFlag for p, which must be for an OTYPE.
func (*Param) SetAlias ¶ added in go1.16
SetAlias sets whether p, which must be for an OTYPE, is a type alias.
func (*Param) SetEmbedFiles ¶
SetEmbedFiles sets the list of embedded files for p, which must be for an ONAME var.
func (*Param) SetPragma ¶ added in go1.16
func (p *Param) SetPragma(flag PragmaFlag)
SetPragma sets the PragmaFlag for p, which must be for an OTYPE.
type Pragma ¶ added in go1.7
type Pragma struct { Flag PragmaFlag // collected bits Pos []PragmaPos // position of each individual flag Embeds []PragmaEmbed }
*Pragma is the value stored in a syntax.Pragma during parsing.
type PragmaEmbed ¶ added in go1.16
type PragmaFlag ¶ added in go1.15
type PragmaFlag int16
const ( // Func pragmas. Nointerface PragmaFlag = 1 << iota Noescape // func parameters don't escape Norace // func must not have race detector annotations Nosplit // func should not execute on separate stack Noinline // func should not be inlined NoCheckPtr // func should not be instrumented by checkptr CgoUnsafeArgs // treat a pointer to one arg as a pointer to them all UintptrEscapes // pointers converted to uintptr escape // Runtime-only func pragmas. // See ../../../../runtime/README.md for detailed descriptions. Systemstack // func must run on system stack Nowritebarrier // emit compiler error instead of write barrier Nowritebarrierrec // error on write barrier in this or recursive callees Yeswritebarrierrec // cancels Nowritebarrierrec in this function and callees // Runtime and cgo type pragmas NotInHeap // values of this type must not be heap allocated // Go command pragmas GoBuildPragma )
type PragmaPos ¶ added in go1.15
type PragmaPos struct { Flag PragmaFlag Pos syntax.Pos }
type Progs ¶ added in go1.9
type Progs struct { Text *obj.Prog // ATEXT Prog for this function // contains filtered or unexported fields }
Progs accumulates Progs for a function and converts them into machine code.
func (*Progs) Flush ¶ added in go1.9
func (pp *Progs) Flush()
Flush converts from pp to machine code.
type SSAGenState ¶ added in go1.7
type SSAGenState struct { // Branches remembers all the branch instructions we've seen // and where they would like to go. Branches []Branch // Some architectures require a 64-bit temporary for FP-related register shuffling. Examples include PPC and Sparc V8. ScratchFpMem *Node // wasm: The number of values on the WebAssembly stack. This is only used as a safeguard. OnWasmStackSkipped int // contains filtered or unexported fields }
SSAGenState contains state needed during Prog generation.
func (*SSAGenState) AddrScratch ¶ added in go1.8
func (s *SSAGenState) AddrScratch(a *obj.Addr)
func (*SSAGenState) Br ¶ added in go1.11
Br emits a single branch instruction and returns the instruction. Not all architectures need the returned instruction, but otherwise the boilerplate is common to all.
func (*SSAGenState) Call ¶ added in go1.9
func (s *SSAGenState) Call(v *ssa.Value) *obj.Prog
Call returns a new CALL instruction for the SSA value v. It uses PrepareCall to prepare the call.
func (*SSAGenState) CombJump ¶ added in go1.15
func (s *SSAGenState) CombJump(b, next *ssa.Block, jumps *[2][2]IndexJump)
CombJump generates combinational instructions (2 at present) for a block jump, thereby the behaviour of non-standard condition codes could be simulated
func (*SSAGenState) DebugFriendlySetPosFrom ¶ added in go1.9
func (s *SSAGenState) DebugFriendlySetPosFrom(v *ssa.Value)
DebugFriendlySetPosFrom adjusts Pos.IsStmt subject to heuristics that reduce "jumpy" line number churn when debugging. Spill/fill/copy instructions from the register allocator, phi functions, and instructions with a no-pos position are examples of instructions that can cause churn.
func (*SSAGenState) Pc ¶ added in go1.7
func (s *SSAGenState) Pc() *obj.Prog
Pc returns the current Prog.
func (*SSAGenState) PrepareCall ¶ added in go1.11
func (s *SSAGenState) PrepareCall(v *ssa.Value)
PrepareCall prepares to emit a CALL instruction for v and does call-related bookkeeping. It must be called immediately before emitting the actual CALL instruction, since it emits PCDATA for the stack map at the call (calls are safe points).
func (*SSAGenState) Prog ¶ added in go1.9
func (s *SSAGenState) Prog(as obj.As) *obj.Prog
Prog appends a new Prog.
func (*SSAGenState) SetPos ¶ added in go1.9
func (s *SSAGenState) SetPos(pos src.XPos)
SetPos sets the current source position.
func (*SSAGenState) UseArgs ¶ added in go1.13
func (s *SSAGenState) UseArgs(n int64)
UseArgs records the fact that an instruction needs a certain amount of callee args space for its use.
type ScopeID ¶ added in go1.9
type ScopeID int32
A ScopeID represents a lexical scope within a function.
type Timings ¶ added in go1.8
type Timings struct {
// contains filtered or unexported fields
}
Timings collects the execution times of labeled phases which are added trough a sequence of Start/Stop calls. Events may be associated with each phase via AddEvent.
func (*Timings) AddEvent ¶ added in go1.8
AddEvent associates an event, i.e., a count, or an amount of data, with the most recently started or stopped phase; or the very first phase if Start or Stop hasn't been called yet. The unit specifies the unit of measurement (e.g., MB, lines, no. of funcs, etc.).
func (*Timings) Start ¶ added in go1.8
Start marks the beginning of a new phase and implicitly stops the previous phase. The phase name is the colon-separated concatenation of the labels.
type Val ¶
type Val struct { // U contains one of: // bool bool when Ctype() == CTBOOL // *Mpint int when Ctype() == CTINT, rune when Ctype() == CTRUNE // *Mpflt float when Ctype() == CTFLT // *Mpcplx pair of floats when Ctype() == CTCPLX // string string when Ctype() == CTSTR // *Nilval when Ctype() == CTNIL U interface{} }
Source Files ¶
- alg.go
- algkind_string.go
- align.go
- bexport.go
- bimport.go
- bitset.go
- builtin.go
- bv.go
- class_string.go
- closure.go
- const.go
- dcl.go
- dump.go
- dwinl.go
- embed.go
- esc.go
- escape.go
- export.go
- fmt.go
- gen.go
- go.go
- gsubr.go
- iexport.go
- iimport.go
- init.go
- initorder.go
- inl.go
- lex.go
- main.go
- mapfile_mmap.go
- mpfloat.go
- mpint.go
- noder.go
- obj.go
- op_string.go
- order.go
- pgen.go
- phi.go
- plive.go
- pprof.go
- racewalk.go
- range.go
- reflect.go
- scc.go
- scope.go
- select.go
- sinit.go
- ssa.go
- subr.go
- swt.go
- syntax.go
- timings.go
- trace.go
- typecheck.go
- types.go
- types_acc.go
- universe.go
- unsafe.go
- util.go
- walk.go