-------- @describe pkgdecl --------
definition of package "describe"
	type  C      int
		method (*C) f()
	type  D      struct{...}
		method (D) f()
	type  I      interface{f()}
		method (I) f()
	const c      untyped int = 0
	type  cake   float64
	var   global *string
	func  main   func()
	const pi     untyped float = 3.141
	const pie    cake = 3.141

-------- @describe unsafe --------
import of package "unsafe"
	builtin Alignof 
	builtin Offsetof
	type  Pointer  unsafe.Pointer
	builtin Sizeof  

-------- @describe type-ref-builtin --------
reference to built-in type float64

-------- @describe const-ref-iota --------
reference to const iota untyped int of value 0

-------- @describe const-def-pi --------
definition of const pi untyped float of value 3.141

-------- @describe const-def-pie --------
definition of const pie cake of value 3.141

-------- @describe const-ref-pi --------
reference to const pi untyped float of value 3.141
defined here

-------- @describe func-def-main --------
definition of func main()

-------- @describe func-ref-main --------
reference to func main()
defined here

-------- @describe func-ref-*C.f --------
reference to method func (*C).f()
defined here

-------- @describe func-ref-D.f --------
reference to method func (D).f()
defined here

-------- @describe func-ref-I.f --------
reference to interface method func (I).f()
defined here

-------- @describe type-D --------
reference to type D (size 24, align 8)
defined as struct{Field int; AnotherField string}
Methods:
	method (D) f()
Fields:
	Field        int
	AnotherField string

-------- @describe type-I --------
reference to type I (size 16, align 8)
defined as interface{f()}
Methods:
	method (I) f()

-------- @describe func-ref-d.f --------
reference to method func (D).f()
defined here

-------- @describe func-ref-i.f --------
reference to interface method func (I).f()
defined here

-------- @describe ptr-with-nonptr-methods --------
definition of var dptr *D
Methods:
	method (*D) f()
Fields:
	Field        int
	AnotherField string

-------- @describe ref-lexical-d --------
reference to var d D
defined here
Methods:
	method (D) f()
Fields:
	Field        int
	AnotherField string

-------- @describe ref-anon --------
reference to var anon func()
defined here

-------- @describe ref-global --------
reference to var global *string
defined here

-------- @describe var-def-x-1 --------
definition of var x *int

-------- @describe var-ref-x-1 --------
reference to var x *int
defined here

-------- @describe var-def-x-2 --------
reference to var x *int
defined here

-------- @describe var-ref-x-2 --------
reference to var x *int
defined here

-------- @describe var-ref-i-C --------
reference to var i I
defined here
Methods:
	method (I) f()

-------- @describe var-ref-i-D --------
reference to var i I
defined here
Methods:
	method (I) f()

-------- @describe var-ref-i --------
reference to var i I
defined here
Methods:
	method (I) f()

-------- @describe const-local-pi --------
definition of const localpi untyped float of value 3.141

-------- @describe const-local-pie --------
definition of const localpie cake of value 3.141

-------- @describe const-ref-localpi --------
reference to const localpi untyped float of value 3.141
defined here

-------- @describe type-def-T --------
definition of type T (size 8, align 8)
No methods.

-------- @describe type-ref-T --------
reference to type T (size 8, align 8)
defined as int
No methods.

-------- @describe const-expr --------
binary * operation of value 6

-------- @describe const-expr2 --------
binary - operation of value -2

-------- @describe map-lookup,ok --------
index expression of type (*int, bool)

-------- @describe mapval --------
reference to var mapval *int
defined here

-------- @describe m --------
reference to var m map[string]*int
defined here

-------- @describe defer-stmt --------
defer statement

-------- @describe go-stmt --------
go statement

-------- @describe builtin-ref-panic --------
function call (or conversion) of type ()

-------- @describe var-decl-stmt --------
definition of var a2 int

-------- @describe var-decl-stmt2 --------
definition of var _ int

-------- @describe var-def-blank --------
definition of var _ int

-------- @describe lib-outer --------
reference to type lib.Outer (size 56, align 8)
defined as struct{A int; b int; lib.inner}
No methods.
Fields:
	A                 int
	inner.C           bool
	inner.recursive.E bool

-------- @describe call-unknown --------
function call of type invalid type

-------- @describe def-iface-I --------
definition of type I (size 16, align 8)
Methods:
	method (I) f()

-------- @describe def-imethod-I.f --------
definition of interface method func (I).f()

