Skip to content

Commit 8fa1b8a

Browse files
committed
NewType/AliasType support pos
1 parent 86db4de commit 8fa1b8a

File tree

3 files changed

+19
-10
lines changed

3 files changed

+19
-10
lines changed

builtin_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ func TestToFields(t *testing.T) {
258258
}
259259

260260
func TestToVariadic(t *testing.T) {
261+
getPos([]token.Pos{1})
261262
defer func() {
262263
if e := recover(); e == nil {
263264
t.Fatal("TestToVariadic: no error?")

codebuild.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -572,19 +572,19 @@ func (p *CodeBuilder) NewClosureWith(sig *types.Signature) *Func {
572572
}
573573

574574
// NewType func
575-
func (p *CodeBuilder) NewType(name string) *TypeDecl {
575+
func (p *CodeBuilder) NewType(name string, pos ...token.Pos) *TypeDecl {
576576
if debugInstr {
577577
log.Println("NewType", name)
578578
}
579-
return p.pkg.doNewType(p.current.scope, name, nil, 0)
579+
return p.pkg.doNewType(p.current.scope, getPos(pos), name, nil, 0)
580580
}
581581

582582
// AliasType func
583-
func (p *CodeBuilder) AliasType(name string, typ types.Type) *types.Named {
583+
func (p *CodeBuilder) AliasType(name string, typ types.Type, pos ...token.Pos) *types.Named {
584584
if debugInstr {
585585
log.Println("AliasType", name, typ)
586586
}
587-
decl := p.pkg.doNewType(p.current.scope, name, typ, 1)
587+
decl := p.pkg.doNewType(p.current.scope, getPos(pos), name, typ, 1)
588588
return decl.typ
589589
}
590590

type_var_and_const.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,32 @@ func (p *TypeDecl) InitType(pkg *Package, typ types.Type) *types.Named {
6363
}
6464

6565
// AliasType gives a specified type with a new name
66-
func (p *Package) AliasType(name string, typ types.Type) *types.Named {
66+
func (p *Package) AliasType(name string, typ types.Type, pos ...token.Pos) *types.Named {
6767
if debugInstr {
6868
log.Println("AliasType", name, typ)
6969
}
70-
decl := p.doNewType(p.Types.Scope(), name, typ, 1)
70+
decl := p.doNewType(p.Types.Scope(), getPos(pos), name, typ, 1)
7171
return decl.typ
7272
}
7373

7474
// NewType creates a new type (which need to call InitType later).
75-
func (p *Package) NewType(name string) *TypeDecl {
75+
func (p *Package) NewType(name string, pos ...token.Pos) *TypeDecl {
7676
if debugInstr {
7777
log.Println("NewType", name)
7878
}
79-
return p.doNewType(p.Types.Scope(), name, nil, 0)
79+
return p.doNewType(p.Types.Scope(), getPos(pos), name, nil, 0)
8080
}
8181

82-
func (p *Package) doNewType(scope *types.Scope, name string, typ types.Type, alias token.Pos) *TypeDecl {
83-
typName := types.NewTypeName(token.NoPos, p.Types, name, typ)
82+
func getPos(pos []token.Pos) token.Pos {
83+
if pos == nil {
84+
return 0
85+
}
86+
return pos[0]
87+
}
88+
89+
func (p *Package) doNewType(
90+
scope *types.Scope, pos token.Pos, name string, typ types.Type, alias token.Pos) *TypeDecl {
91+
typName := types.NewTypeName(pos, p.Types, name, typ)
8492
if scope.Insert(typName) != nil {
8593
log.Panicln("TODO: type already defined -", name)
8694
}

0 commit comments

Comments
 (0)