diff --git a/common-errors.go b/common-errors.go index 0a9cc11..b28007f 100644 --- a/common-errors.go +++ b/common-errors.go @@ -25,15 +25,11 @@ func errTooMuchParams(funcName string, maxArgs, argCount int) (err error) { // --- General errors func errCantConvert(funcName string, value any, kind string) error { - if typer, ok := value.(Typer); ok { - return fmt.Errorf("%s(): can't convert %s to %s", funcName, typer.TypeName(), kind) - } else { - return fmt.Errorf("%s(): can't convert %T to %s", funcName, value, kind) - } + return fmt.Errorf("%s(): can't convert %s to %s", funcName, typeName(value), kind) } func errExpectedGot(funcName string, kind string, value any) error { - return fmt.Errorf("%s() expected %s, got %T (%v)", funcName, kind, value, value) + return fmt.Errorf("%s() expected %s, got %s (%v)", funcName, kind, typeName(value), value) } func errFuncDivisionByZero(funcName string) error { @@ -46,18 +42,14 @@ func errDivisionByZero() error { // --- Parameter errors -// func errOneParam(funcName string) error { -// return fmt.Errorf("%s() requires exactly one param", funcName) -// } - func errMissingRequiredParameter(funcName, paramName string) error { return fmt.Errorf("%s() missing required parameter %q", funcName, paramName) } func errInvalidParameterValue(funcName, paramName string, paramValue any) error { - return fmt.Errorf("%s() invalid value %T (%v) for parameter %q", funcName, paramValue, paramValue, paramName) + return fmt.Errorf("%s() invalid value %s (%v) for parameter %q", funcName, typeName(paramValue), paramValue, paramName) } func errWrongParamType(funcName, paramName, paramType string, paramValue any) error { - return fmt.Errorf("%s() the %q parameter must be a %s, got a %T (%v)", funcName, paramName, paramType, paramValue, paramValue) + return fmt.Errorf("%s() the %q parameter must be a %s, got a %s (%v)", funcName, paramName, paramType, typeName(paramValue), paramValue) } diff --git a/formatter.go b/formatter.go index eb6e654..be0d911 100644 --- a/formatter.go +++ b/formatter.go @@ -51,8 +51,10 @@ type Typer interface { TypeName() string } -func getTypeName(v any) (name string) { - if typer, ok := v.(Typer); ok { +func typeName(v any) (name string) { + if v == nil { + name = "nil" + } else if typer, ok := v.(Typer); ok { name = typer.TypeName() } else if IsInteger(v) { name = "integer" diff --git a/term.go b/term.go index 325eaa4..fae9b58 100644 --- a/term.go +++ b/term.go @@ -156,15 +156,15 @@ func (self *term) toInt(computedValue any, valueDescription string) (i int, err if index64, ok := computedValue.(int64); ok { i = int(index64) } else { - err = self.Errorf("%s, got %T (%v)", valueDescription, computedValue, computedValue) + err = self.Errorf("%s, got %s (%v)", valueDescription, typeName(computedValue), computedValue) } return } func (self *term) errIncompatibleTypes(leftValue, rightValue any) error { - leftType := getTypeName(leftValue) + leftType := typeName(leftValue) leftText := getFormatted(leftValue, Truncate) - rightType := getTypeName(rightValue) + rightType := typeName(rightValue) rightText := getFormatted(rightValue, Truncate) return self.tk.Errorf( "left operand '%s' [%s] and right operand '%s' [%s] are not compatible with operator %q", @@ -175,8 +175,8 @@ func (self *term) errIncompatibleTypes(leftValue, rightValue any) error { func (self *term) errIncompatibleType(value any) error { return self.tk.Errorf( - "prefix/postfix operator %q do not support operand '%v' [%T]", - self.source(), value, value) + "prefix/postfix operator %q do not support operand '%v' [%s]", + self.source(), value, typeName(value)) } func (self *term) Errorf(template string, args ...any) (err error) {