@@ -164,7 +164,7 @@ var Builtins = []*Function{
164
164
if len (args ) != 1 {
165
165
return anyType , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
166
166
}
167
- switch kind (deref . Type ( args [0 ]) ) {
167
+ switch kind (args [0 ]) {
168
168
case reflect .Interface :
169
169
return integerType , nil
170
170
case reflect .Float32 , reflect .Float64 , reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 , reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 :
@@ -642,18 +642,21 @@ var Builtins = []*Function{
642
642
if len (args ) != 2 {
643
643
return nil , fmt .Errorf ("invalid number of arguments (expected 2, got %d)" , len (args ))
644
644
}
645
- v := reflect .ValueOf (args [0 ])
645
+ v := deref .ValueOf (args [0 ])
646
646
if v .Kind () != reflect .Slice && v .Kind () != reflect .Array {
647
647
return nil , fmt .Errorf ("cannot take from %s" , v .Kind ())
648
648
}
649
- n := reflect .ValueOf (args [1 ])
649
+ n := deref .ValueOf (args [1 ])
650
650
if ! n .CanInt () {
651
651
return nil , fmt .Errorf ("cannot take %s elements" , n .Kind ())
652
652
}
653
+ to := 0
653
654
if n .Int () > int64 (v .Len ()) {
654
- return args [0 ], nil
655
+ to = v .Len ()
656
+ } else {
657
+ to = int (n .Int ())
655
658
}
656
- return v .Slice (0 , int ( n . Int ()) ).Interface (), nil
659
+ return v .Slice (0 , to ).Interface (), nil
657
660
},
658
661
Validate : func (args []reflect.Type ) (reflect.Type , error ) {
659
662
if len (args ) != 2 {
@@ -678,7 +681,7 @@ var Builtins = []*Function{
678
681
if len (args ) != 1 {
679
682
return nil , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
680
683
}
681
- v := reflect .ValueOf (args [0 ])
684
+ v := deref .ValueOf (args [0 ])
682
685
if v .Kind () != reflect .Map {
683
686
return nil , fmt .Errorf ("cannot get keys from %s" , v .Kind ())
684
687
}
@@ -708,7 +711,7 @@ var Builtins = []*Function{
708
711
if len (args ) != 1 {
709
712
return nil , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
710
713
}
711
- v := reflect .ValueOf (args [0 ])
714
+ v := deref .ValueOf (args [0 ])
712
715
if v .Kind () != reflect .Map {
713
716
return nil , fmt .Errorf ("cannot get values from %s" , v .Kind ())
714
717
}
@@ -738,7 +741,7 @@ var Builtins = []*Function{
738
741
if len (args ) != 1 {
739
742
return nil , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
740
743
}
741
- v := reflect .ValueOf (args [0 ])
744
+ v := deref .ValueOf (args [0 ])
742
745
if v .Kind () != reflect .Map {
743
746
return nil , fmt .Errorf ("cannot transform %s to pairs" , v .Kind ())
744
747
}
@@ -766,7 +769,7 @@ var Builtins = []*Function{
766
769
if len (args ) != 1 {
767
770
return nil , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
768
771
}
769
- v := reflect .ValueOf (args [0 ])
772
+ v := deref .ValueOf (args [0 ])
770
773
if v .Kind () != reflect .Slice && v .Kind () != reflect .Array {
771
774
return nil , fmt .Errorf ("cannot transform %s from pairs" , v )
772
775
}
@@ -798,14 +801,14 @@ var Builtins = []*Function{
798
801
},
799
802
{
800
803
Name : "reverse" ,
801
- Func : func (args ... any ) (any , error ) {
804
+ Safe : func (args ... any ) (any , uint , error ) {
802
805
if len (args ) != 1 {
803
- return nil , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
806
+ return nil , 0 , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
804
807
}
805
808
806
- v := reflect .ValueOf (args [0 ])
809
+ v := deref .ValueOf (args [0 ])
807
810
if v .Kind () != reflect .Slice && v .Kind () != reflect .Array {
808
- return nil , fmt .Errorf ("cannot reverse %s" , v .Kind ())
811
+ return nil , 0 , fmt .Errorf ("cannot reverse %s" , v .Kind ())
809
812
}
810
813
811
814
size := v .Len ()
@@ -815,7 +818,7 @@ var Builtins = []*Function{
815
818
arr [i ] = v .Index (size - i - 1 ).Interface ()
816
819
}
817
820
818
- return arr , nil
821
+ return arr , uint ( size ), nil
819
822
820
823
},
821
824
Validate : func (args []reflect.Type ) (reflect.Type , error ) {
@@ -838,7 +841,7 @@ var Builtins = []*Function{
838
841
return nil , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
839
842
}
840
843
841
- v := reflect .ValueOf (deref .Deref (args [0 ]))
844
+ v := deref .ValueOf (deref .Deref (args [0 ]))
842
845
if v .Kind () != reflect .Array && v .Kind () != reflect .Slice {
843
846
return nil , fmt .Errorf ("cannot uniq %s" , v .Kind ())
844
847
}
@@ -892,7 +895,7 @@ var Builtins = []*Function{
892
895
var arr []any
893
896
894
897
for _ , arg := range args {
895
- v := reflect .ValueOf (deref .Deref (arg ))
898
+ v := deref .ValueOf (deref .Deref (arg ))
896
899
897
900
if v .Kind () != reflect .Slice && v .Kind () != reflect .Array {
898
901
return nil , 0 , fmt .Errorf ("cannot concat %s" , v .Kind ())
@@ -914,7 +917,7 @@ var Builtins = []*Function{
914
917
}
915
918
916
919
for _ , arg := range args {
917
- switch kind (deref . Type ( arg ) ) {
920
+ switch kind (arg ) {
918
921
case reflect .Interface , reflect .Slice , reflect .Array :
919
922
default :
920
923
return anyType , fmt .Errorf ("cannot concat %s" , arg )
@@ -931,7 +934,7 @@ var Builtins = []*Function{
931
934
if len (args ) != 1 {
932
935
return nil , 0 , fmt .Errorf ("invalid number of arguments (expected 1, got %d)" , len (args ))
933
936
}
934
- v := reflect .ValueOf (deref .Deref (args [0 ]))
937
+ v := deref .ValueOf (deref .Deref (args [0 ]))
935
938
if v .Kind () != reflect .Array && v .Kind () != reflect .Slice {
936
939
return nil , size , fmt .Errorf ("cannot flatten %s" , v .Kind ())
937
940
}
@@ -945,7 +948,7 @@ var Builtins = []*Function{
945
948
}
946
949
947
950
for _ , arg := range args {
948
- switch kind (deref . Type ( arg ) ) {
951
+ switch kind (arg ) {
949
952
case reflect .Interface , reflect .Slice , reflect .Array :
950
953
default :
951
954
return anyType , fmt .Errorf ("cannot flatten %s" , arg )
0 commit comments