diff options
author | Robert Griesemer <gri@golang.org> | 2016-12-16 16:28:30 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2017-01-10 00:10:11 +0000 |
commit | 3e119404372fd0d47de1458802b68522f593bf36 (patch) | |
tree | 3fef88cfe7315fd65cc271d195ef1f9e3caa8e67 /src/cmd/compile/internal/syntax | |
parent | e0a05c274aa5a3917c5e53f72537e38bb05c10d6 (diff) | |
download | go-3e119404372fd0d47de1458802b68522f593bf36.tar.gz go-3e119404372fd0d47de1458802b68522f593bf36.zip |
[dev.typealias] cmd/compile: recognize type aliases but complain for now (not yet supported)
Added test file.
For #18130.
Change-Id: Ifcfd7cd1acf9dd6a2f4f3d85979d232bb6b8c6b1
Reviewed-on: https://go-review.googlesource.com/34988
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/syntax')
-rw-r--r-- | src/cmd/compile/internal/syntax/nodes.go | 1 | ||||
-rw-r--r-- | src/cmd/compile/internal/syntax/parser.go | 3 | ||||
-rw-r--r-- | src/cmd/compile/internal/syntax/printer.go | 6 | ||||
-rw-r--r-- | src/cmd/compile/internal/syntax/printer_test.go | 17 |
4 files changed, 25 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/syntax/nodes.go b/src/cmd/compile/internal/syntax/nodes.go index fadba84bce..34524e5c09 100644 --- a/src/cmd/compile/internal/syntax/nodes.go +++ b/src/cmd/compile/internal/syntax/nodes.go @@ -74,6 +74,7 @@ type ( // Name Type TypeDecl struct { Name *Name + Alias bool Type Expr Group *Group // nil means not part of a group Pragma Pragma diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index 121dfb75e5..1185507238 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -325,7 +325,7 @@ func (p *parser) constDecl(group *Group) Decl { return d } -// TypeSpec = identifier Type . +// TypeSpec = identifier [ "=" ] Type . func (p *parser) typeDecl(group *Group) Decl { if trace { defer p.trace("typeDecl")() @@ -335,6 +335,7 @@ func (p *parser) typeDecl(group *Group) Decl { d.init(p) d.Name = p.name() + d.Alias = p.got(_Assign) d.Type = p.tryType() if d.Type == nil { p.syntax_error("in type declaration") diff --git a/src/cmd/compile/internal/syntax/printer.go b/src/cmd/compile/internal/syntax/printer.go index 0cacf1e5d4..43876a25c2 100644 --- a/src/cmd/compile/internal/syntax/printer.go +++ b/src/cmd/compile/internal/syntax/printer.go @@ -619,7 +619,11 @@ func (p *printer) printRawNode(n Node) { if n.Group == nil { p.print(_Type, blank) } - p.print(n.Name, blank, n.Type) + p.print(n.Name, blank) + if n.Alias { + p.print(_Assign, blank) + } + p.print(n.Type) case *VarDecl: if n.Group == nil { diff --git a/src/cmd/compile/internal/syntax/printer_test.go b/src/cmd/compile/internal/syntax/printer_test.go index 5c0fc776a1..a9969e610a 100644 --- a/src/cmd/compile/internal/syntax/printer_test.go +++ b/src/cmd/compile/internal/syntax/printer_test.go @@ -22,3 +22,20 @@ func TestPrint(t *testing.T) { Fprint(os.Stdout, ast, true) fmt.Println() } + +func TestPrintString(t *testing.T) { + for _, want := range []string{ + "package p", + "package p; type _ = int; type T1 = struct{}; type ( _ = *struct{}; T2 = float32 )", + // TODO(gri) expand + } { + ast, err := ParseBytes([]byte(want), nil, nil, 0) + if err != nil { + t.Error(err) + continue + } + if got := String(ast); got != want { + t.Errorf("%q: got %q", want, got) + } + } +} |