cmd/vet: fix for changes to go/types package Need to use (or stub) exact.Value. R=gri CC=golang-dev https://golang.org/cl/9126043
diff --git a/src/cmd/vet/main.go b/src/cmd/vet/main.go index 2fefa0b..b3d12d0 100644 --- a/src/cmd/vet/main.go +++ b/src/cmd/vet/main.go
@@ -179,7 +179,7 @@ type Package struct { types map[ast.Expr]Type - values map[ast.Expr]interface{} + values map[ast.Expr]ExactValue files []*File }
diff --git a/src/cmd/vet/types.go b/src/cmd/vet/types.go index 75f195b..46e4d94 100644 --- a/src/cmd/vet/types.go +++ b/src/cmd/vet/types.go
@@ -14,19 +14,27 @@ "go/ast" "go/token" + "code.google.com/p/go.exp/go/exact" "code.google.com/p/go.exp/go/types" ) -// Type is equivalent to go/types.Type. Repeating it here allows us to avoid -// depending on the go/types package. +// Type is equivalent to types.Type. Repeating it here allows us to avoid +// having main depend on the go/types package. type Type interface { String() string } +// ExactValue is equivalent to exact.Value. Repeating it here allows us to +// avoid having main depend on the go/exact package. +type ExactValue interface { + Kind() exact.Kind + String() string +} + func (pkg *Package) check(fs *token.FileSet, astFiles []*ast.File) error { pkg.types = make(map[ast.Expr]Type) - pkg.values = make(map[ast.Expr]interface{}) - exprFn := func(x ast.Expr, typ types.Type, val interface{}) { + pkg.values = make(map[ast.Expr]ExactValue) + exprFn := func(x ast.Expr, typ types.Type, val exact.Value) { pkg.types[x] = typ if val != nil { pkg.values[x] = val @@ -93,10 +101,8 @@ return t&argFloat != 0 case types.UntypedFloat: // If it's integral, we can use an int format. - switch f.pkg.values[arg].(type) { - case int, int8, int16, int32, int64: - return t&(argInt|argFloat) != 0 - case uint, uint8, uint16, uint32, uint64: + switch f.pkg.values[arg].Kind() { + case exact.Int: return t&(argInt|argFloat) != 0 } return t&argFloat != 0
diff --git a/src/cmd/vet/typestub.go b/src/cmd/vet/typestub.go index fabbbe1..74a3b13 100644 --- a/src/cmd/vet/typestub.go +++ b/src/cmd/vet/typestub.go
@@ -15,11 +15,16 @@ ) // Type is equivalent to go/types.Type. Repeating it here allows us to avoid -// depending on the go/types package. +// having main depend on the go/types package. type Type interface { String() string } +// ExactValue is a stub for exact.Value. Stubbing it here allows us to +// avoid having main depend on the go/exact package. +type ExactValue interface { +} + func (pkg *Package) check(fs *token.FileSet, astFiles []*ast.File) error { return nil }