in cmd/generate-fastjson/main.go [402:431]
func isNonZero(expr string, t types.Type) string {
if named, ok := t.(*types.Named); ok {
if hasMethod(named, isZeroMethod) {
return fmt.Sprintf("!%s.%s()", expr, isZeroMethod)
}
t = named.Underlying()
}
zero := "nil"
switch t := t.(type) {
case *types.Pointer:
case *types.Slice:
case *types.Map:
case *types.Interface:
case *types.Basic:
switch t.Kind() {
case types.String:
zero = `""`
case types.Bool:
zero = "false"
default:
zero = "0"
}
case *types.Alias:
unaliasType := types.Unalias(t)
isNonZero(expr, unaliasType)
default:
panic(fmt.Errorf("unhandled type %T", t))
}
return fmt.Sprintf("%s != %s", expr, zero)
}