// 
PACKAGE b

IMPORTPATH
	testdata/b

IMPORTS
	a

FILENAMES
	testdata/b.go

CONSTANTS
	// 
	const Pi = 3.14	// Pi


VARIABLES
	// 
	var MaxInt int	// MaxInt


FUNCTIONS
	// 
	func F(x int) int

	// Always under the package functions list. 
	func NotAFactory() int


TYPES
	// 
	type T struct{}	// T

	// 
	var V T	// v

	// 
	func (x *T) M()

	// Should only appear if AllDecls is set. 
	type comparable struct{}	// overrides a predeclared type comparable

	// Associated with comparable type if AllDecls is set. 
	func ComparableFactory() comparable

	// 
	type notExported int

	// 
	const (
		C1	notExported	= iota
		C2
		c3
		C4
		C5
	)

	// 
	const C notExported = 0

	// 
	var (
		U1, U2, u3, U4, U5	notExported
		u6			notExported
		U7			notExported	= 7
	)

	// 
	var V notExported

	// 
	var V1, V2, v3, V4, V5 notExported

	// 
	func F1() notExported

	// 
	func f2() notExported

	// Should only appear if AllDecls is set. 
	type uint struct{}	// overrides a predeclared type uint

	// Associated with uint type if AllDecls is set. 
	func UintFactory() uint

	// Associated with uint type if AllDecls is set. 
	func uintFactory() uint

