// 
PACKAGE d

IMPORTPATH
	testdata/d

FILENAMES
	testdata/d1.go
	testdata/d2.go

CONSTANTS
	// CBx constants should appear before CAx constants. 
	const (
		CB2	= iota	// before CB1
		CB1		// before CB0
		CB0		// at end
	)

	// CAx constants should appear after CBx constants. 
	const (
		CA2	= iota	// before CA1
		CA1		// before CA0
		CA0		// at end
	)

	// C0 should be first. 
	const C0 = 0

	// C1 should be second. 
	const C1 = 1

	// C2 should be third. 
	const C2 = 2

	// 
	const (
		// Single const declarations inside ()'s are considered ungrouped
		// and show up in sorted order.
		Cungrouped = 0
	)


VARIABLES
	// VBx variables should appear before VAx variables. 
	var (
		VB2	int	// before VB1
		VB1	int	// before VB0
		VB0	int	// at end
	)

	// VAx variables should appear after VBx variables. 
	var (
		VA2	int	// before VA1
		VA1	int	// before VA0
		VA0	int	// at end
	)

	// V0 should be first. 
	var V0 uintptr

	// V1 should be second. 
	var V1 uint

	// V2 should be third. 
	var V2 int

	// 
	var (
		// Single var declarations inside ()'s are considered ungrouped
		// and show up in sorted order.
		Vungrouped = 0
	)


FUNCTIONS
	// F0 should be first. 
	func F0()

	// F1 should be second. 
	func F1()

	// F2 should be third. 
	func F2()


TYPES
	// T0 should be first. 
	type T0 struct{}

	// T1 should be second. 
	type T1 struct{}

	// T2 should be third. 
	type T2 struct{}

	// TG0 should be first. 
	type TG0 struct{}

	// TG1 should be second. 
	type TG1 struct{}

	// TG2 should be third. 
	type TG2 struct{}

