-------- @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()
	func  newD   func() D
	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
Named types:
	type cake defined here

-------- @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 32, align 8)
defined as struct{Field int; AnotherField string; ThirdField C}
Methods:
	method (D) f()
Fields:
	Field        int
	AnotherField string
	ThirdField   C

-------- @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 slice-of-D --------
definition of var slice []D
Named types:
	type D defined here

-------- @describe ptr-with-nonptr-methods --------
definition of var dptr *D
Methods:
	method (*D) f()
Fields:
	Field        int
	AnotherField string
	ThirdField   C
Named types:
	type D defined here

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

-------- @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()
Named types:
	type I defined here

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

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

-------- @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
Named types:
	type cake defined here

-------- @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 var-map-of-C-D --------
definition of var mmm map[C]D
Named types:
	type C defined here
	type D defined here

-------- @describe field-access --------
reference to field ThirdField C
defined here
Methods:
	method (*C) f()
Named types:
	type C defined here

-------- @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()

