diff options
author | Robert Griesemer <gri@golang.org> | 2020-10-12 13:11:03 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2020-10-13 00:22:03 +0000 |
commit | 617b6339170a56a235625f8359730ba710d3ae96 (patch) | |
tree | e305a6eee8b80d9bd924dd006a51c689c2c75835 /src/cmd/compile/internal/syntax | |
parent | 986cad14e2ebf671b39623de438d13b0b5d99be6 (diff) | |
download | go-617b6339170a56a235625f8359730ba710d3ae96.tar.gz go-617b6339170a56a235625f8359730ba710d3ae96.zip |
[dev.typeparams] cmd/compile/internal/syntax: prepare syntax nodes for type parameters
- add TParamList fields to TypeDecl, FuncDecl
- also: change File.Lines to File.EOF so we have the actual file end position
Change-Id: Ia345f888080a884f7ac5cefd8bff3d80e4a59cdc
Reviewed-on: https://go-review.googlesource.com/c/go/+/261657
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/compile/internal/syntax')
-rw-r--r-- | src/cmd/compile/internal/syntax/nodes.go | 33 | ||||
-rw-r--r-- | src/cmd/compile/internal/syntax/parser.go | 2 | ||||
-rw-r--r-- | src/cmd/compile/internal/syntax/parser_test.go | 2 |
3 files changed, 20 insertions, 17 deletions
diff --git a/src/cmd/compile/internal/syntax/nodes.go b/src/cmd/compile/internal/syntax/nodes.go index 815630fcd4..f2dbdcda29 100644 --- a/src/cmd/compile/internal/syntax/nodes.go +++ b/src/cmd/compile/internal/syntax/nodes.go @@ -37,7 +37,7 @@ type File struct { Pragma Pragma PkgName *Name DeclList []Decl - Lines uint + EOF Pos node } @@ -74,11 +74,12 @@ type ( // Name Type TypeDecl struct { - Group *Group // nil means not part of a group - Pragma Pragma - Name *Name - Alias bool - Type Expr + Group *Group // nil means not part of a group + Pragma Pragma + Name *Name + TParamList []*Field // nil means no type parameters + Alias bool + Type Expr decl } @@ -99,11 +100,12 @@ type ( // func Receiver Name Type { Body } // func Receiver Name Type FuncDecl struct { - Pragma Pragma - Recv *Field // nil means regular function - Name *Name - Type *FuncType - Body *BlockStmt // nil means no body (forward declaration) + Pragma Pragma + Recv *Field // nil means regular function + Name *Name + TParamList []*Field // nil means no type parameters + Type *FuncType + Body *BlockStmt // nil means no body (forward declaration) decl } ) @@ -223,9 +225,10 @@ type ( // Fun(ArgList[0], ArgList[1], ...) CallExpr struct { - Fun Expr - ArgList []Expr // nil means no arguments - HasDots bool // last argument is followed by ... + Fun Expr + ArgList []Expr // nil means no arguments + HasDots bool // last argument is followed by ... + Brackets bool // []'s instead of ()'s expr } @@ -272,7 +275,7 @@ type ( // interface { MethodList[0]; MethodList[1]; ... } InterfaceType struct { - MethodList []*Field + MethodList []*Field // a field named "type" means a type constraint expr } diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index 1485b70059..146f83ed01 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -445,7 +445,7 @@ func (p *parser) fileOrNil() *File { // p.tok == _EOF p.clearPragma() - f.Lines = p.line + f.EOF = p.pos() return f } diff --git a/src/cmd/compile/internal/syntax/parser_test.go b/src/cmd/compile/internal/syntax/parser_test.go index 81945faee9..f1c5433b40 100644 --- a/src/cmd/compile/internal/syntax/parser_test.go +++ b/src/cmd/compile/internal/syntax/parser_test.go @@ -76,7 +76,7 @@ func TestStdLib(t *testing.T) { if *verify { verifyPrint(filename, ast) } - results <- parseResult{filename, ast.Lines} + results <- parseResult{filename, ast.EOF.Line()} }) } }() |