mirror of
https://github.com/golang/go
synced 2024-11-23 16:20:04 -07:00
go/types: fix scope printing (debugging support)
Printing of scopes was horribly wrong: If a scope contained no object declarations, it would abort printing even if the scope had children scopes. Also, the line breaks were not inserted consistently. The actual test case (ExampleScope) was incorrect as well. Fixed and simplified printing, and adjusted example which tests the printing output. Change-Id: If21c1d4ad71b15a517d4a54da16de5e6228eb4b5 Reviewed-on: https://go-review.googlesource.com/135115 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
parent
0ef42f4dd6
commit
8e2333b282
@ -51,6 +51,7 @@ type Celsius float64
|
||||
func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) }
|
||||
func FToC(f float64) Celsius { return Celsius(f - 32 / 9 * 5) }
|
||||
const Boiling Celsius = 100
|
||||
func Unused() { {}; {{ var x int; _ = x }} } // make sure empty block scopes get printed
|
||||
`},
|
||||
} {
|
||||
f, err := parser.ParseFile(fset, file.name, file.input, 0)
|
||||
@ -81,23 +82,33 @@ const Boiling Celsius = 100
|
||||
// . const temperature.Boiling temperature.Celsius
|
||||
// . type temperature.Celsius float64
|
||||
// . func temperature.FToC(f float64) temperature.Celsius
|
||||
// . func temperature.Unused()
|
||||
// . func temperature.main()
|
||||
//
|
||||
// . main.go scope {
|
||||
// . . package fmt
|
||||
//
|
||||
// . . function scope {
|
||||
// . . . var freezing temperature.Celsius
|
||||
// . . }. }
|
||||
// . . }
|
||||
// . }
|
||||
// . celsius.go scope {
|
||||
// . . package fmt
|
||||
//
|
||||
// . . function scope {
|
||||
// . . . var c temperature.Celsius
|
||||
// . . }
|
||||
// . . function scope {
|
||||
// . . . var f float64
|
||||
// . . }. }}
|
||||
// . . }
|
||||
// . . function scope {
|
||||
// . . . block scope {
|
||||
// . . . }
|
||||
// . . . block scope {
|
||||
// . . . . block scope {
|
||||
// . . . . . var x int
|
||||
// . . . . }
|
||||
// . . . }
|
||||
// . . }
|
||||
// . }
|
||||
// }
|
||||
}
|
||||
|
||||
// ExampleMethodSet prints the method sets of various types.
|
||||
|
@ -161,13 +161,8 @@ func (s *Scope) WriteTo(w io.Writer, n int, recurse bool) {
|
||||
const ind = ". "
|
||||
indn := strings.Repeat(ind, n)
|
||||
|
||||
fmt.Fprintf(w, "%s%s scope %p {", indn, s.comment, s)
|
||||
if len(s.elems) == 0 {
|
||||
fmt.Fprintf(w, "}\n")
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(w, "%s%s scope %p {\n", indn, s.comment, s)
|
||||
|
||||
fmt.Fprintln(w)
|
||||
indn1 := indn + ind
|
||||
for _, name := range s.Names() {
|
||||
fmt.Fprintf(w, "%s%s\n", indn1, s.elems[name])
|
||||
@ -175,12 +170,11 @@ func (s *Scope) WriteTo(w io.Writer, n int, recurse bool) {
|
||||
|
||||
if recurse {
|
||||
for _, s := range s.children {
|
||||
fmt.Fprintln(w)
|
||||
s.WriteTo(w, n+1, recurse)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Fprintf(w, "%s}", indn)
|
||||
fmt.Fprintf(w, "%s}\n", indn)
|
||||
}
|
||||
|
||||
// String returns a string representation of the scope, for debugging.
|
||||
|
Loading…
Reference in New Issue
Block a user