Skip to content

Commit eaf02e1

Browse files
committed
cmd/compile/internal/types: remove unused lineno arguments for PushDcl/MarkDcl
More steps towards simpler symbol handling: - Pushdcl's incoming pos argument, saved in a newly pushed *Sym, was always immediately overwritten by the Lastlineno value of the saved *Sym. - Markdcl's incoming pos argument, saved in the stack mark *Sym, was not restored when the stack mark was popped. - Popdcl always maintained the most recent Lastlineno for a *Sym given by package and name, making it unnecessary to save Lastlineno in the first place. Removed Lastlineno from the set of fields that need saving, and simplified Popdcl. Change-Id: Ie93da1fbd780dcafc2703044e781c0c6298df569 Reviewed-on: https://go-review.googlesource.com/41390 Run-TryBot: Robert Griesemer <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]> Reviewed-by: Matthew Dempsky <[email protected]>
1 parent 227fff2 commit eaf02e1

File tree

7 files changed

+36
-51
lines changed

7 files changed

+36
-51
lines changed

src/cmd/compile/internal/gc/alg.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ func genhash(sym *types.Sym, t *types.Type) {
191191

192192
lineno = autogeneratedPos // less confusing than end of input
193193
dclcontext = PEXTERN
194-
types.Markdcl(lineno)
194+
types.Markdcl()
195195

196196
// func sym(p *T, h uintptr) uintptr
197197
tfn := nod(OTFUNC, nil, nil)
@@ -362,7 +362,7 @@ func geneq(sym *types.Sym, t *types.Type) {
362362

363363
lineno = autogeneratedPos // less confusing than end of input
364364
dclcontext = PEXTERN
365-
types.Markdcl(lineno)
365+
types.Markdcl()
366366

367367
// func sym(p, q *T) bool
368368
tfn := nod(OTFUNC, nil, nil)

src/cmd/compile/internal/gc/bimport.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,7 +1091,7 @@ func (p *importer) node() *Node {
10911091
return nodl(p.pos(), op, p.expr(), nil)
10921092

10931093
case OIF:
1094-
types.Markdcl(lineno)
1094+
types.Markdcl()
10951095
n := nodl(p.pos(), OIF, nil, nil)
10961096
n.Ninit.Set(p.stmtList())
10971097
n.Left = p.expr()
@@ -1101,7 +1101,7 @@ func (p *importer) node() *Node {
11011101
return n
11021102

11031103
case OFOR:
1104-
types.Markdcl(lineno)
1104+
types.Markdcl()
11051105
n := nodl(p.pos(), OFOR, nil, nil)
11061106
n.Ninit.Set(p.stmtList())
11071107
n.Left, n.Right = p.exprsOrNil()
@@ -1110,7 +1110,7 @@ func (p *importer) node() *Node {
11101110
return n
11111111

11121112
case ORANGE:
1113-
types.Markdcl(lineno)
1113+
types.Markdcl()
11141114
n := nodl(p.pos(), ORANGE, nil, nil)
11151115
n.List.Set(p.stmtList())
11161116
n.Right = p.expr()
@@ -1119,7 +1119,7 @@ func (p *importer) node() *Node {
11191119
return n
11201120

11211121
case OSELECT, OSWITCH:
1122-
types.Markdcl(lineno)
1122+
types.Markdcl()
11231123
n := nodl(p.pos(), op, nil, nil)
11241124
n.Ninit.Set(p.stmtList())
11251125
n.Left, _ = p.exprsOrNil()
@@ -1131,7 +1131,7 @@ func (p *importer) node() *Node {
11311131
// unreachable - mapped to OXCASE case below by exporter
11321132

11331133
case OXCASE:
1134-
types.Markdcl(lineno)
1134+
types.Markdcl()
11351135
n := nodl(p.pos(), OXCASE, nil, nil)
11361136
n.Xoffset = int64(types.Block)
11371137
n.List.Set(p.exprList())

src/cmd/compile/internal/gc/dcl.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func declare(n *Node, ctxt Class) {
104104
vargen++
105105
gen = vargen
106106
}
107-
types.Pushdcl(s, lineno)
107+
types.Pushdcl(s)
108108
n.Name.Curfn = Curfn
109109
}
110110

@@ -510,7 +510,7 @@ var funcdepth int32 // len(funcstack) during parsing, but then forced to be th
510510
// start the function.
511511
// called before funcargs; undone at end of funcbody.
512512
func funcstart(n *Node) {
513-
types.Markdcl(lineno)
513+
types.Markdcl()
514514
funcstack = append(funcstack, Curfn)
515515
funcdepth++
516516
Curfn = n

src/cmd/compile/internal/gc/noder.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -774,14 +774,14 @@ func (p *noder) stmt(stmt syntax.Stmt) *Node {
774774
}
775775

776776
func (p *noder) blockStmt(stmt *syntax.BlockStmt) []*Node {
777-
types.Markdcl(lineno)
777+
types.Markdcl()
778778
nodes := p.stmts(stmt.List)
779779
types.Popdcl()
780780
return nodes
781781
}
782782

783783
func (p *noder) ifStmt(stmt *syntax.IfStmt) *Node {
784-
types.Markdcl(lineno)
784+
types.Markdcl()
785785
n := p.nod(stmt, OIF, nil, nil)
786786
if stmt.Init != nil {
787787
n.Ninit.Set1(p.stmt(stmt.Init))
@@ -803,7 +803,7 @@ func (p *noder) ifStmt(stmt *syntax.IfStmt) *Node {
803803
}
804804

805805
func (p *noder) forStmt(stmt *syntax.ForStmt) *Node {
806-
types.Markdcl(lineno)
806+
types.Markdcl()
807807
var n *Node
808808
if r, ok := stmt.Init.(*syntax.RangeClause); ok {
809809
if stmt.Cond != nil || stmt.Post != nil {
@@ -837,7 +837,7 @@ func (p *noder) forStmt(stmt *syntax.ForStmt) *Node {
837837
}
838838

839839
func (p *noder) switchStmt(stmt *syntax.SwitchStmt) *Node {
840-
types.Markdcl(lineno)
840+
types.Markdcl()
841841
n := p.nod(stmt, OSWITCH, nil, nil)
842842
if stmt.Init != nil {
843843
n.Ninit.Set1(p.stmt(stmt.Init))
@@ -861,7 +861,7 @@ func (p *noder) caseClauses(clauses []*syntax.CaseClause, tswitch *Node) []*Node
861861
var nodes []*Node
862862
for _, clause := range clauses {
863863
p.lineno(clause)
864-
types.Markdcl(lineno)
864+
types.Markdcl()
865865
n := p.nod(clause, OXCASE, nil, nil)
866866
if clause.Cases != nil {
867867
n.List.Set(p.exprList(clause.Cases))
@@ -891,7 +891,7 @@ func (p *noder) commClauses(clauses []*syntax.CommClause) []*Node {
891891
var nodes []*Node
892892
for _, clause := range clauses {
893893
p.lineno(clause)
894-
types.Markdcl(lineno)
894+
types.Markdcl()
895895
n := p.nod(clause, OXCASE, nil, nil)
896896
if clause.Comm != nil {
897897
n.List.Set1(p.stmt(clause.Comm))

src/cmd/compile/internal/gc/subr.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,7 @@ func genwrapper(rcvr *types.Type, method *types.Field, newnam *types.Sym, iface
16841684
lineno = autogeneratedPos
16851685

16861686
dclcontext = PEXTERN
1687-
types.Markdcl(lineno)
1687+
types.Markdcl()
16881688

16891689
this := namedfield(".this", rcvr)
16901690
this.Left.Name.Param.Ntype = this.Right

src/cmd/compile/internal/types/scope.go

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44

55
package types
66

7-
import "cmd/internal/src"
8-
97
// Declaration stack & operations
108

119
var blockgen int32 = 1 // max block number
1210
var Block int32 // current block number
1311

1412
// dclstack maintains a stack of shadowed symbol declarations so that
15-
// popdcl can restore their declarations when a block scope ends.
13+
// Popdcl can restore their declarations when a block scope ends.
1614
//
1715
// The Syms on this stack are not "real" Syms as they don't actually
1816
// represent object names. Sym is just a convenient type for saving shadowed
@@ -24,52 +22,39 @@ func dcopy(a, b *Sym) {
2422
a.Name = b.Name
2523
a.Def = b.Def
2624
a.Block = b.Block
27-
a.Lastlineno = b.Lastlineno
2825
}
2926

30-
func push(pos src.XPos) *Sym {
27+
func push() *Sym {
3128
d := new(Sym)
32-
d.Lastlineno = pos
3329
dclstack = append(dclstack, d)
3430
return d
3531
}
3632

3733
// Pushdcl pushes the current declaration for symbol s (if any) so that
3834
// it can be shadowed by a new declaration within a nested block scope.
39-
func Pushdcl(s *Sym, pos src.XPos) {
40-
d := push(pos)
41-
dcopy(d, s)
35+
func Pushdcl(s *Sym) {
36+
dcopy(push(), s)
4237
}
4338

4439
// Popdcl pops the innermost block scope and restores all symbol declarations
4540
// to their previous state.
4641
func Popdcl() {
47-
i := len(dclstack)
48-
for ; i > 0; i-- {
42+
for i := len(dclstack); i > 0; i-- {
4943
d := dclstack[i-1]
5044
if d.Name == "" {
51-
break
45+
// pop stack mark
46+
Block = d.Block
47+
dclstack = dclstack[:i-1]
48+
return
5249
}
53-
s := d.Pkg.Lookup(d.Name)
54-
lno := s.Lastlineno
55-
dcopy(s, d)
56-
d.Lastlineno = lno
57-
}
58-
59-
if i == 0 {
60-
Fatalf("popdcl: no mark")
50+
dcopy(d.Pkg.Lookup(d.Name), d)
6151
}
62-
63-
Block = dclstack[i-1].Block
64-
dclstack = dclstack[:i-1] // pop mark
52+
Fatalf("popdcl: no stack mark")
6553
}
6654

6755
// Markdcl records the start of a new block scope for declarations.
68-
func Markdcl(lineno src.XPos) {
69-
d := push(lineno)
70-
d.Name = "" // used as stack mark
71-
d.Block = Block
72-
56+
func Markdcl() {
57+
push().Block = Block // stack mark (Name == "")
7358
blockgen++
7459
Block = blockgen
7560
}

src/cmd/compile/internal/types/sym.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ import (
1818
// allows using Sym pointer equality to test for Go identifier uniqueness when
1919
// handling selector expressions.
2020
type Sym struct {
21-
Importdef *Pkg // where imported definition was found
22-
Linkname string // link name
21+
Importdef *Pkg // where imported definition was found
22+
Linkname string // link name
23+
Lastlineno src.XPos // last declaration for diagnostic
2324

2425
// saved and restored by dcopy
25-
Pkg *Pkg
26-
Name string // object name
27-
Def *Node // definition: ONAME OTYPE OPACK or OLITERAL
28-
Lastlineno src.XPos // last declaration for diagnostic
29-
Block int32 // blocknumber to catch redeclaration
26+
Pkg *Pkg
27+
Name string // object name
28+
Def *Node // definition: ONAME OTYPE OPACK or OLITERAL
29+
Block int32 // blocknumber to catch redeclaration
3030

3131
flags bitset8
3232
Label *Node // corresponding label (ephemeral)

0 commit comments

Comments
 (0)