aboutsummaryrefslogtreecommitdiff
path: root/src/text/template/funcs.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/text/template/funcs.go')
-rw-r--r--src/text/template/funcs.go20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/text/template/funcs.go b/src/text/template/funcs.go
index 9107431037..abddfa1141 100644
--- a/src/text/template/funcs.go
+++ b/src/text/template/funcs.go
@@ -139,10 +139,24 @@ func prepareArg(value reflect.Value, argType reflect.Type) (reflect.Value, error
}
value = reflect.Zero(argType)
}
- if !value.Type().AssignableTo(argType) {
- return reflect.Value{}, fmt.Errorf("value has type %s; should be %s", value.Type(), argType)
+ if value.Type().AssignableTo(argType) {
+ return value, nil
}
- return value, nil
+ if intLike(value.Kind()) && intLike(argType.Kind()) && value.Type().ConvertibleTo(argType) {
+ value = value.Convert(argType)
+ return value, nil
+ }
+ return reflect.Value{}, fmt.Errorf("value has type %s; should be %s", value.Type(), argType)
+}
+
+func intLike(typ reflect.Kind) bool {
+ switch typ {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ return true
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ return true
+ }
+ return false
}
// Indexing.