gen := 0
if ctxt == PEXTERN {
- externdcl = list(externdcl, n)
+ externdcl = append(externdcl, n)
if dflag() {
fmt.Printf("\t%v global decl %v %p\n", Ctxt.Line(int(lineno)), s, n)
}
}
// Phase 9: Check external declarations.
- for l := externdcl; l != nil; l = l.Next {
- if l.N.Op == ONAME {
- typecheck(&l.N, Erv)
+ for i, n := range externdcl {
+ if n.Op == ONAME {
+ typecheck(&externdcl[i], Erv)
}
}
fmt.Fprintf(bout, "\n!\n")
- var externs *NodeList
- if externdcl != nil {
- externs = externdcl.End
- }
+ externs := len(externdcl)
dumpglobls()
dumptypestructs()
// Dump extra globals.
tmp := externdcl
- if externs != nil {
- externdcl = externs.Next
+ if externdcl != nil {
+ externdcl = externdcl[externs:]
}
dumpglobls()
externdcl = tmp
var n *Node
// add globals
- for l := externdcl; l != nil; l = l.Next {
- n = l.N
+ for _, n := range externdcl {
if n.Op != ONAME {
continue
}
continue
}
dowidth(n.Type)
-
ggloblnod(n)
}
}
func frame(context int) {
- var l *NodeList
-
if context != 0 {
fmt.Printf("--- external frame ---\n")
- l = externdcl
- } else if Curfn != nil {
- fmt.Printf("--- %v frame ---\n", Curfn.Func.Nname.Sym)
- l = Curfn.Func.Dcl
- } else {
+ for _, n := range externdcl {
+ printframenode(n)
+ }
return
}
- var n *Node
- var w int64
- for ; l != nil; l = l.Next {
- n = l.N
- w = -1
- if n.Type != nil {
- w = n.Type.Width
+ if Curfn != nil {
+ fmt.Printf("--- %v frame ---\n", Curfn.Func.Nname.Sym)
+ for l := Curfn.Func.Dcl; l != nil; l = l.Next {
+ printframenode(l.N)
}
- switch n.Op {
- case ONAME:
- fmt.Printf("%v %v G%d %v width=%d\n", Oconv(int(n.Op), 0), n.Sym, n.Name.Vargen, n.Type, w)
+ }
+}
- case OTYPE:
- fmt.Printf("%v %v width=%d\n", Oconv(int(n.Op), 0), n.Type, w)
- }
+func printframenode(n *Node) {
+ w := int64(-1)
+ if n.Type != nil {
+ w = n.Type.Width
+ }
+ switch n.Op {
+ case ONAME:
+ fmt.Printf("%v %v G%d %v width=%d\n", Oconv(int(n.Op), 0), n.Sym, n.Name.Vargen, n.Type, w)
+ case OTYPE:
+ fmt.Printf("%v %v width=%d\n", Oconv(int(n.Op), 0), n.Type, w)
}
}