func isNonZero()

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)
}