// Unlink from v1; see comment in syntax.go type Param for these fields.
v1 := v.Name.Defn
v1.Name.Param.Innermost = v.Name.Param.Outer
-
+
// If the closure usage of v is not dense,
// we need to make it dense; now that we're out
// of the function in which v appeared,
c.Addable = false
c.Ullman = 2
c.Name.Funcdepth = Funcdepth
-
+
// Link into list of active closure variables.
// Popped from list in func closurebody.
c.Name.Param.Outer = n.Name.Param.Innermost
n.Func = new(Func)
n.Func.FCurfn = Curfn
dclcontext = PPARAM
-
+
funcstart(n)
funcargs(n.Right)
}
var funcstack []*Node // stack of previous values of Curfn
-var Funcdepth int32 // len(funcstack) during parsing, but then forced to be the same later during compilation
-
+var Funcdepth int32 // len(funcstack) during parsing, but then forced to be the same later during compilation
// start the function.
// called before funcargs; undone at end of funcbody.
// Name holds Node fields used only by named nodes (ONAME, OPACK, OLABEL, ODCLFIELD, some OLITERAL).
type Name struct {
- Pack *Node // real package for import . names
- Pkg *Pkg // pkg for OPACK nodes
- Heapaddr *Node // temp holding heap address of param (could move to Param?)
- Inlvar *Node // ONAME substitute while inlining (could move to Param?)
- Defn *Node // initializing assignment
- Curfn *Node // function for local variables
+ Pack *Node // real package for import . names
+ Pkg *Pkg // pkg for OPACK nodes
+ Heapaddr *Node // temp holding heap address of param (could move to Param?)
+ Inlvar *Node // ONAME substitute while inlining (could move to Param?)
+ Defn *Node // initializing assignment
+ Curfn *Node // function for local variables
Param *Param // additional fields for ONAME, ODCLFIELD
- Decldepth int32 // declaration loop depth, increased for every loop or label
- Vargen int32 // unique name for ONAME within a function. Function outputs are numbered starting at one.
- Iota int32 // value if this name is iota
+ Decldepth int32 // declaration loop depth, increased for every loop or label
+ Vargen int32 // unique name for ONAME within a function. Function outputs are numbered starting at one.
+ Iota int32 // value if this name is iota
Funcdepth int32
Method bool // OCALLMETH name
Readonly bool
// 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
+ Outer *Node
}
// Func holds Node fields used only with function-like nodes.