Skip to content

Commit

Permalink
[dev.typeparams] cmd/compile/internal/syntax: prepare syntax nodes fo…
Browse files Browse the repository at this point in the history
…r 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>
  • Loading branch information
griesemer committed Oct 13, 2020
1 parent 986cad1 commit 617b633
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/gc/noder.go
Expand Up @@ -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 {
Expand Down
33 changes: 18 additions & 15 deletions src/cmd/compile/internal/syntax/nodes.go
Expand Up @@ -37,7 +37,7 @@ type File struct {
Pragma Pragma
PkgName *Name
DeclList []Decl
Lines uint
EOF Pos
node
}

Expand Down Expand Up @@ -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
}

Expand All @@ -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
}
)
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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
}

Expand Down
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/syntax/parser.go
Expand Up @@ -445,7 +445,7 @@ func (p *parser) fileOrNil() *File {
// p.tok == _EOF

p.clearPragma()
f.Lines = p.line
f.EOF = p.pos()

return f
}
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/syntax/parser_test.go
Expand Up @@ -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()}
})
}
}()
Expand Down

0 comments on commit 617b633

Please sign in to comment.