From: Robert Griesemer Date: Mon, 12 Oct 2020 20:11:03 +0000 (-0700) Subject: [dev.typeparams] cmd/compile/internal/syntax: prepare syntax nodes for type parameters X-Git-Tag: go1.17beta1~1473^2~220 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=617b633917;p=gostls13.git [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 Run-TryBot: Robert Griesemer TryBot-Result: Go Bot Reviewed-by: Matthew Dempsky --- diff --git a/src/cmd/compile/internal/gc/noder.go b/src/cmd/compile/internal/gc/noder.go index 5dce533e4b..8b11055983 100644 --- a/src/cmd/compile/internal/gc/noder.go +++ b/src/cmd/compile/internal/gc/noder.go @@ -60,7 +60,7 @@ func parseFiles(filenames []string) uint { } p.node() - lines += p.file.Lines + lines += p.file.EOF.Line() p.file = nil // release memory if nsyntaxerrors != 0 { 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()} }) } }()