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()
|
p.node()
|
||||||
lines += p.file.Lines
|
lines += p.file.EOF.Line()
|
||||||
p.file = nil // release memory
|
p.file = nil // release memory
|
||||||
|
|
||||||
if nsyntaxerrors != 0 {
|
if nsyntaxerrors != 0 {
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ type File struct {
|
||||||
Pragma Pragma
|
Pragma Pragma
|
||||||
PkgName *Name
|
PkgName *Name
|
||||||
DeclList []Decl
|
DeclList []Decl
|
||||||
Lines uint
|
EOF Pos
|
||||||
node
|
node
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,11 +74,12 @@ type (
|
||||||
|
|
||||||
// Name Type
|
// Name Type
|
||||||
TypeDecl struct {
|
TypeDecl struct {
|
||||||
Group *Group // nil means not part of a group
|
Group *Group // nil means not part of a group
|
||||||
Pragma Pragma
|
Pragma Pragma
|
||||||
Name *Name
|
Name *Name
|
||||||
Alias bool
|
TParamList []*Field // nil means no type parameters
|
||||||
Type Expr
|
Alias bool
|
||||||
|
Type Expr
|
||||||
decl
|
decl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,11 +100,12 @@ type (
|
||||||
// func Receiver Name Type { Body }
|
// func Receiver Name Type { Body }
|
||||||
// func Receiver Name Type
|
// func Receiver Name Type
|
||||||
FuncDecl struct {
|
FuncDecl struct {
|
||||||
Pragma Pragma
|
Pragma Pragma
|
||||||
Recv *Field // nil means regular function
|
Recv *Field // nil means regular function
|
||||||
Name *Name
|
Name *Name
|
||||||
Type *FuncType
|
TParamList []*Field // nil means no type parameters
|
||||||
Body *BlockStmt // nil means no body (forward declaration)
|
Type *FuncType
|
||||||
|
Body *BlockStmt // nil means no body (forward declaration)
|
||||||
decl
|
decl
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
@ -223,9 +225,10 @@ type (
|
||||||
|
|
||||||
// Fun(ArgList[0], ArgList[1], ...)
|
// Fun(ArgList[0], ArgList[1], ...)
|
||||||
CallExpr struct {
|
CallExpr struct {
|
||||||
Fun Expr
|
Fun Expr
|
||||||
ArgList []Expr // nil means no arguments
|
ArgList []Expr // nil means no arguments
|
||||||
HasDots bool // last argument is followed by ...
|
HasDots bool // last argument is followed by ...
|
||||||
|
Brackets bool // []'s instead of ()'s
|
||||||
expr
|
expr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -272,7 +275,7 @@ type (
|
||||||
|
|
||||||
// interface { MethodList[0]; MethodList[1]; ... }
|
// interface { MethodList[0]; MethodList[1]; ... }
|
||||||
InterfaceType struct {
|
InterfaceType struct {
|
||||||
MethodList []*Field
|
MethodList []*Field // a field named "type" means a type constraint
|
||||||
expr
|
expr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -445,7 +445,7 @@ func (p *parser) fileOrNil() *File {
|
||||||
// p.tok == _EOF
|
// p.tok == _EOF
|
||||||
|
|
||||||
p.clearPragma()
|
p.clearPragma()
|
||||||
f.Lines = p.line
|
f.EOF = p.pos()
|
||||||
|
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ func TestStdLib(t *testing.T) {
|
||||||
if *verify {
|
if *verify {
|
||||||
verifyPrint(filename, ast)
|
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