mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[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>
This commit is contained in:
parent
986cad14e2
commit
617b633917
4 changed files with 21 additions and 18 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -445,7 +445,7 @@ func (p *parser) fileOrNil() *File {
|
|||
// p.tok == _EOF
|
||||
|
||||
p.clearPragma()
|
||||
f.Lines = p.line
|
||||
f.EOF = p.pos()
|
||||
|
||||
return f
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()}
|
||||
})
|
||||
}
|
||||
}()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue