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

	// 
	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

