@@ -394,38 +394,53 @@ var Builtins = []*Function{
394394 Name : "max" ,
395395 Func : Max ,
396396 Validate : func (args []reflect.Type ) (reflect.Type , error ) {
397- if len (args ) == 0 {
397+ switch len (args ) {
398+ case 0 :
398399 return anyType , fmt .Errorf ("not enough arguments to call max" )
399- }
400- for _ , arg := range args {
401- switch kind (arg ) {
402- case reflect .Interface :
400+ case 1 :
401+ if kindName := kind (args [0 ]); kindName == reflect .Array || kindName == reflect .Slice {
403402 return anyType , nil
404- case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 , reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 , reflect .Float32 , reflect .Float64 :
405- default :
406- return anyType , fmt .Errorf ("invalid argument for max (type %s)" , arg )
407403 }
404+ fallthrough
405+ default :
406+ for _ , arg := range args {
407+ switch kind (arg ) {
408+ case reflect .Interface , reflect .Array , reflect .Slice :
409+ return anyType , nil
410+ case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 , reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 , reflect .Float32 , reflect .Float64 :
411+ default :
412+ return anyType , fmt .Errorf ("invalid argument for max (type %s)" , arg )
413+ }
414+ }
415+ return args [0 ], nil
408416 }
409- return args [0 ], nil
410417 },
411418 },
412419 {
413420 Name : "min" ,
414421 Func : Min ,
415422 Validate : func (args []reflect.Type ) (reflect.Type , error ) {
416- if len (args ) == 0 {
423+ switch len (args ) {
424+ case 0 :
417425 return anyType , fmt .Errorf ("not enough arguments to call min" )
418- }
419- for _ , arg := range args {
420- switch kind (arg ) {
421- case reflect .Interface :
426+ case 1 :
427+ if kindName := kind (args [0 ]); kindName == reflect .Array || kindName == reflect .Slice {
422428 return anyType , nil
423- case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 , reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 , reflect .Float32 , reflect .Float64 :
424- default :
425- return anyType , fmt .Errorf ("invalid argument for min (type %s)" , arg )
426429 }
430+ fallthrough
431+ default :
432+ for _ , arg := range args {
433+ switch kind (arg ) {
434+ case reflect .Interface , reflect .Array , reflect .Slice :
435+ return anyType , nil
436+ case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 , reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 , reflect .Float32 , reflect .Float64 :
437+ default :
438+ return anyType , fmt .Errorf ("invalid argument for min (type %s)" , arg )
439+ }
440+ }
441+ return args [0 ], nil
442+
427443 }
428- return args [0 ], nil
429444 },
430445 },
431446 {
0 commit comments