mirror of
https://github.com/hanzoai/expr.git
synced 2026-09-24 16:58:58 +00:00
Add more func_types
This commit is contained in:
+27
-1
@@ -22,14 +22,21 @@ var types = []any{
|
||||
new(func() any),
|
||||
new(func() bool),
|
||||
new(func() byte),
|
||||
new(func() float32),
|
||||
new(func() float64),
|
||||
new(func() int),
|
||||
new(func() int16),
|
||||
new(func() int32),
|
||||
new(func() int64),
|
||||
new(func() int8),
|
||||
new(func() map[string]any),
|
||||
new(func() rune),
|
||||
new(func() string),
|
||||
new(func() uint),
|
||||
new(func() uint16),
|
||||
new(func() uint32),
|
||||
new(func() uint64),
|
||||
new(func() uint8),
|
||||
new(func(Duration) Duration),
|
||||
new(func(Duration) Time),
|
||||
new(func(Time) Duration),
|
||||
@@ -38,6 +45,7 @@ var types = []any{
|
||||
new(func([]any) any),
|
||||
new(func([]any) map[string]any),
|
||||
new(func([]any, string) string),
|
||||
new(func([]byte) string),
|
||||
new(func([]string, string) string),
|
||||
new(func(any) []any),
|
||||
new(func(any) any),
|
||||
@@ -54,21 +62,31 @@ var types = []any{
|
||||
new(func(bool) float64),
|
||||
new(func(bool) int),
|
||||
new(func(bool) string),
|
||||
new(func(bool, bool) bool),
|
||||
new(func(float32) float64),
|
||||
new(func(float64) bool),
|
||||
new(func(float64) float32),
|
||||
new(func(float64) float64),
|
||||
new(func(float64) int),
|
||||
new(func(float64) string),
|
||||
new(func(float64, float64) bool),
|
||||
new(func(int) bool),
|
||||
new(func(int) float64),
|
||||
new(func(int) int),
|
||||
new(func(int) string),
|
||||
new(func(int, int) bool),
|
||||
new(func(int, int) int),
|
||||
new(func(int, int) string),
|
||||
new(func(int16) int32),
|
||||
new(func(int32) float64),
|
||||
new(func(int32) int),
|
||||
new(func(int32) int64),
|
||||
new(func(int64) Time),
|
||||
new(func(int8) int),
|
||||
new(func(int8) int16),
|
||||
new(func(string) []byte),
|
||||
new(func(string) []string),
|
||||
new(func(string) bool),
|
||||
new(func(string) bool),
|
||||
new(func(string) float64),
|
||||
new(func(string) int),
|
||||
new(func(string) string),
|
||||
@@ -77,6 +95,14 @@ var types = []any{
|
||||
new(func(string, rune) int),
|
||||
new(func(string, string) bool),
|
||||
new(func(string, string) string),
|
||||
new(func(uint) float64),
|
||||
new(func(uint) int),
|
||||
new(func(uint) uint),
|
||||
new(func(uint16) uint),
|
||||
new(func(uint32) uint64),
|
||||
new(func(uint64) float64),
|
||||
new(func(uint64) int64),
|
||||
new(func(uint8) byte),
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
+209
-109
@@ -17,61 +17,87 @@ var FuncTypes = []any{
|
||||
7: new(func() interface{}),
|
||||
8: new(func() bool),
|
||||
9: new(func() uint8),
|
||||
10: new(func() float64),
|
||||
11: new(func() int),
|
||||
12: new(func() int64),
|
||||
13: new(func() map[string]interface{}),
|
||||
10: new(func() float32),
|
||||
11: new(func() float64),
|
||||
12: new(func() int),
|
||||
13: new(func() int16),
|
||||
14: new(func() int32),
|
||||
15: new(func() string),
|
||||
16: new(func() uint),
|
||||
17: new(func() uint64),
|
||||
18: new(func(time.Duration) time.Duration),
|
||||
19: new(func(time.Duration) time.Time),
|
||||
20: new(func(time.Time) time.Duration),
|
||||
21: new(func(time.Time) bool),
|
||||
22: new(func([]interface{}) []interface{}),
|
||||
23: new(func([]interface{}) interface{}),
|
||||
24: new(func([]interface{}) map[string]interface{}),
|
||||
25: new(func([]interface{}, string) string),
|
||||
26: new(func([]string, string) string),
|
||||
27: new(func(interface{}) []interface{}),
|
||||
28: new(func(interface{}) interface{}),
|
||||
29: new(func(interface{}) bool),
|
||||
30: new(func(interface{}) float64),
|
||||
31: new(func(interface{}) int),
|
||||
32: new(func(interface{}) map[string]interface{}),
|
||||
33: new(func(interface{}) string),
|
||||
34: new(func(interface{}, interface{}) []interface{}),
|
||||
35: new(func(interface{}, interface{}) interface{}),
|
||||
36: new(func(interface{}, interface{}) bool),
|
||||
37: new(func(interface{}, interface{}) string),
|
||||
38: new(func(bool) bool),
|
||||
39: new(func(bool) float64),
|
||||
40: new(func(bool) int),
|
||||
41: new(func(bool) string),
|
||||
42: new(func(float64) bool),
|
||||
43: new(func(float64) float64),
|
||||
44: new(func(float64) int),
|
||||
45: new(func(float64) string),
|
||||
46: new(func(int) bool),
|
||||
47: new(func(int) float64),
|
||||
48: new(func(int) int),
|
||||
49: new(func(int) string),
|
||||
50: new(func(int, int) int),
|
||||
51: new(func(int, int) string),
|
||||
52: new(func(int32) float64),
|
||||
53: new(func(int64) time.Time),
|
||||
54: new(func(string) []string),
|
||||
55: new(func(string) bool),
|
||||
56: new(func(string) bool),
|
||||
57: new(func(string) float64),
|
||||
58: new(func(string) int),
|
||||
59: new(func(string) string),
|
||||
60: new(func(string, uint8) int),
|
||||
61: new(func(string, int) int),
|
||||
62: new(func(string, int32) int),
|
||||
63: new(func(string, string) bool),
|
||||
64: new(func(string, string) string),
|
||||
15: new(func() int64),
|
||||
16: new(func() int8),
|
||||
17: new(func() map[string]interface{}),
|
||||
18: new(func() int32),
|
||||
19: new(func() string),
|
||||
20: new(func() uint),
|
||||
21: new(func() uint16),
|
||||
22: new(func() uint32),
|
||||
23: new(func() uint64),
|
||||
24: new(func() uint8),
|
||||
25: new(func(time.Duration) time.Duration),
|
||||
26: new(func(time.Duration) time.Time),
|
||||
27: new(func(time.Time) time.Duration),
|
||||
28: new(func(time.Time) bool),
|
||||
29: new(func([]interface{}) []interface{}),
|
||||
30: new(func([]interface{}) interface{}),
|
||||
31: new(func([]interface{}) map[string]interface{}),
|
||||
32: new(func([]interface{}, string) string),
|
||||
33: new(func([]uint8) string),
|
||||
34: new(func([]string, string) string),
|
||||
35: new(func(interface{}) []interface{}),
|
||||
36: new(func(interface{}) interface{}),
|
||||
37: new(func(interface{}) bool),
|
||||
38: new(func(interface{}) float64),
|
||||
39: new(func(interface{}) int),
|
||||
40: new(func(interface{}) map[string]interface{}),
|
||||
41: new(func(interface{}) string),
|
||||
42: new(func(interface{}, interface{}) []interface{}),
|
||||
43: new(func(interface{}, interface{}) interface{}),
|
||||
44: new(func(interface{}, interface{}) bool),
|
||||
45: new(func(interface{}, interface{}) string),
|
||||
46: new(func(bool) bool),
|
||||
47: new(func(bool) float64),
|
||||
48: new(func(bool) int),
|
||||
49: new(func(bool) string),
|
||||
50: new(func(bool, bool) bool),
|
||||
51: new(func(float32) float64),
|
||||
52: new(func(float64) bool),
|
||||
53: new(func(float64) float32),
|
||||
54: new(func(float64) float64),
|
||||
55: new(func(float64) int),
|
||||
56: new(func(float64) string),
|
||||
57: new(func(float64, float64) bool),
|
||||
58: new(func(int) bool),
|
||||
59: new(func(int) float64),
|
||||
60: new(func(int) int),
|
||||
61: new(func(int) string),
|
||||
62: new(func(int, int) bool),
|
||||
63: new(func(int, int) int),
|
||||
64: new(func(int, int) string),
|
||||
65: new(func(int16) int32),
|
||||
66: new(func(int32) float64),
|
||||
67: new(func(int32) int),
|
||||
68: new(func(int32) int64),
|
||||
69: new(func(int64) time.Time),
|
||||
70: new(func(int8) int),
|
||||
71: new(func(int8) int16),
|
||||
72: new(func(string) []uint8),
|
||||
73: new(func(string) []string),
|
||||
74: new(func(string) bool),
|
||||
75: new(func(string) float64),
|
||||
76: new(func(string) int),
|
||||
77: new(func(string) string),
|
||||
78: new(func(string, uint8) int),
|
||||
79: new(func(string, int) int),
|
||||
80: new(func(string, int32) int),
|
||||
81: new(func(string, string) bool),
|
||||
82: new(func(string, string) string),
|
||||
83: new(func(uint) float64),
|
||||
84: new(func(uint) int),
|
||||
85: new(func(uint) uint),
|
||||
86: new(func(uint16) uint),
|
||||
87: new(func(uint32) uint64),
|
||||
88: new(func(uint64) float64),
|
||||
89: new(func(uint64) int64),
|
||||
90: new(func(uint8) uint8),
|
||||
}
|
||||
|
||||
func (vm *VM) call(fn any, kind int) any {
|
||||
@@ -95,175 +121,249 @@ func (vm *VM) call(fn any, kind int) any {
|
||||
case 9:
|
||||
return fn.(func() uint8)()
|
||||
case 10:
|
||||
return fn.(func() float64)()
|
||||
return fn.(func() float32)()
|
||||
case 11:
|
||||
return fn.(func() int)()
|
||||
return fn.(func() float64)()
|
||||
case 12:
|
||||
return fn.(func() int64)()
|
||||
return fn.(func() int)()
|
||||
case 13:
|
||||
return fn.(func() map[string]interface{})()
|
||||
return fn.(func() int16)()
|
||||
case 14:
|
||||
return fn.(func() int32)()
|
||||
case 15:
|
||||
return fn.(func() string)()
|
||||
return fn.(func() int64)()
|
||||
case 16:
|
||||
return fn.(func() uint)()
|
||||
return fn.(func() int8)()
|
||||
case 17:
|
||||
return fn.(func() uint64)()
|
||||
return fn.(func() map[string]interface{})()
|
||||
case 18:
|
||||
return fn.(func() int32)()
|
||||
case 19:
|
||||
return fn.(func() string)()
|
||||
case 20:
|
||||
return fn.(func() uint)()
|
||||
case 21:
|
||||
return fn.(func() uint16)()
|
||||
case 22:
|
||||
return fn.(func() uint32)()
|
||||
case 23:
|
||||
return fn.(func() uint64)()
|
||||
case 24:
|
||||
return fn.(func() uint8)()
|
||||
case 25:
|
||||
arg1 := vm.pop().(time.Duration)
|
||||
return fn.(func(time.Duration) time.Duration)(arg1)
|
||||
case 19:
|
||||
case 26:
|
||||
arg1 := vm.pop().(time.Duration)
|
||||
return fn.(func(time.Duration) time.Time)(arg1)
|
||||
case 20:
|
||||
case 27:
|
||||
arg1 := vm.pop().(time.Time)
|
||||
return fn.(func(time.Time) time.Duration)(arg1)
|
||||
case 21:
|
||||
case 28:
|
||||
arg1 := vm.pop().(time.Time)
|
||||
return fn.(func(time.Time) bool)(arg1)
|
||||
case 22:
|
||||
case 29:
|
||||
arg1 := vm.pop().([]interface{})
|
||||
return fn.(func([]interface{}) []interface{})(arg1)
|
||||
case 23:
|
||||
case 30:
|
||||
arg1 := vm.pop().([]interface{})
|
||||
return fn.(func([]interface{}) interface{})(arg1)
|
||||
case 24:
|
||||
case 31:
|
||||
arg1 := vm.pop().([]interface{})
|
||||
return fn.(func([]interface{}) map[string]interface{})(arg1)
|
||||
case 25:
|
||||
case 32:
|
||||
arg2 := vm.pop().(string)
|
||||
arg1 := vm.pop().([]interface{})
|
||||
return fn.(func([]interface{}, string) string)(arg1, arg2)
|
||||
case 26:
|
||||
case 33:
|
||||
arg1 := vm.pop().([]uint8)
|
||||
return fn.(func([]uint8) string)(arg1)
|
||||
case 34:
|
||||
arg2 := vm.pop().(string)
|
||||
arg1 := vm.pop().([]string)
|
||||
return fn.(func([]string, string) string)(arg1, arg2)
|
||||
case 27:
|
||||
case 35:
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}) []interface{})(arg1)
|
||||
case 28:
|
||||
case 36:
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}) interface{})(arg1)
|
||||
case 29:
|
||||
case 37:
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}) bool)(arg1)
|
||||
case 30:
|
||||
case 38:
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}) float64)(arg1)
|
||||
case 31:
|
||||
case 39:
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}) int)(arg1)
|
||||
case 32:
|
||||
case 40:
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}) map[string]interface{})(arg1)
|
||||
case 33:
|
||||
case 41:
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}) string)(arg1)
|
||||
case 34:
|
||||
case 42:
|
||||
arg2 := vm.pop()
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}, interface{}) []interface{})(arg1, arg2)
|
||||
case 35:
|
||||
case 43:
|
||||
arg2 := vm.pop()
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}, interface{}) interface{})(arg1, arg2)
|
||||
case 36:
|
||||
case 44:
|
||||
arg2 := vm.pop()
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}, interface{}) bool)(arg1, arg2)
|
||||
case 37:
|
||||
case 45:
|
||||
arg2 := vm.pop()
|
||||
arg1 := vm.pop()
|
||||
return fn.(func(interface{}, interface{}) string)(arg1, arg2)
|
||||
case 38:
|
||||
case 46:
|
||||
arg1 := vm.pop().(bool)
|
||||
return fn.(func(bool) bool)(arg1)
|
||||
case 39:
|
||||
case 47:
|
||||
arg1 := vm.pop().(bool)
|
||||
return fn.(func(bool) float64)(arg1)
|
||||
case 40:
|
||||
case 48:
|
||||
arg1 := vm.pop().(bool)
|
||||
return fn.(func(bool) int)(arg1)
|
||||
case 41:
|
||||
case 49:
|
||||
arg1 := vm.pop().(bool)
|
||||
return fn.(func(bool) string)(arg1)
|
||||
case 42:
|
||||
case 50:
|
||||
arg2 := vm.pop().(bool)
|
||||
arg1 := vm.pop().(bool)
|
||||
return fn.(func(bool, bool) bool)(arg1, arg2)
|
||||
case 51:
|
||||
arg1 := vm.pop().(float32)
|
||||
return fn.(func(float32) float64)(arg1)
|
||||
case 52:
|
||||
arg1 := vm.pop().(float64)
|
||||
return fn.(func(float64) bool)(arg1)
|
||||
case 43:
|
||||
case 53:
|
||||
arg1 := vm.pop().(float64)
|
||||
return fn.(func(float64) float32)(arg1)
|
||||
case 54:
|
||||
arg1 := vm.pop().(float64)
|
||||
return fn.(func(float64) float64)(arg1)
|
||||
case 44:
|
||||
case 55:
|
||||
arg1 := vm.pop().(float64)
|
||||
return fn.(func(float64) int)(arg1)
|
||||
case 45:
|
||||
case 56:
|
||||
arg1 := vm.pop().(float64)
|
||||
return fn.(func(float64) string)(arg1)
|
||||
case 46:
|
||||
case 57:
|
||||
arg2 := vm.pop().(float64)
|
||||
arg1 := vm.pop().(float64)
|
||||
return fn.(func(float64, float64) bool)(arg1, arg2)
|
||||
case 58:
|
||||
arg1 := vm.pop().(int)
|
||||
return fn.(func(int) bool)(arg1)
|
||||
case 47:
|
||||
case 59:
|
||||
arg1 := vm.pop().(int)
|
||||
return fn.(func(int) float64)(arg1)
|
||||
case 48:
|
||||
case 60:
|
||||
arg1 := vm.pop().(int)
|
||||
return fn.(func(int) int)(arg1)
|
||||
case 49:
|
||||
case 61:
|
||||
arg1 := vm.pop().(int)
|
||||
return fn.(func(int) string)(arg1)
|
||||
case 50:
|
||||
case 62:
|
||||
arg2 := vm.pop().(int)
|
||||
arg1 := vm.pop().(int)
|
||||
return fn.(func(int, int) bool)(arg1, arg2)
|
||||
case 63:
|
||||
arg2 := vm.pop().(int)
|
||||
arg1 := vm.pop().(int)
|
||||
return fn.(func(int, int) int)(arg1, arg2)
|
||||
case 51:
|
||||
case 64:
|
||||
arg2 := vm.pop().(int)
|
||||
arg1 := vm.pop().(int)
|
||||
return fn.(func(int, int) string)(arg1, arg2)
|
||||
case 52:
|
||||
case 65:
|
||||
arg1 := vm.pop().(int16)
|
||||
return fn.(func(int16) int32)(arg1)
|
||||
case 66:
|
||||
arg1 := vm.pop().(int32)
|
||||
return fn.(func(int32) float64)(arg1)
|
||||
case 53:
|
||||
case 67:
|
||||
arg1 := vm.pop().(int32)
|
||||
return fn.(func(int32) int)(arg1)
|
||||
case 68:
|
||||
arg1 := vm.pop().(int32)
|
||||
return fn.(func(int32) int64)(arg1)
|
||||
case 69:
|
||||
arg1 := vm.pop().(int64)
|
||||
return fn.(func(int64) time.Time)(arg1)
|
||||
case 54:
|
||||
case 70:
|
||||
arg1 := vm.pop().(int8)
|
||||
return fn.(func(int8) int)(arg1)
|
||||
case 71:
|
||||
arg1 := vm.pop().(int8)
|
||||
return fn.(func(int8) int16)(arg1)
|
||||
case 72:
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string) []uint8)(arg1)
|
||||
case 73:
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string) []string)(arg1)
|
||||
case 55:
|
||||
case 74:
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string) bool)(arg1)
|
||||
case 56:
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string) bool)(arg1)
|
||||
case 57:
|
||||
case 75:
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string) float64)(arg1)
|
||||
case 58:
|
||||
case 76:
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string) int)(arg1)
|
||||
case 59:
|
||||
case 77:
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string) string)(arg1)
|
||||
case 60:
|
||||
case 78:
|
||||
arg2 := vm.pop().(uint8)
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string, uint8) int)(arg1, arg2)
|
||||
case 61:
|
||||
case 79:
|
||||
arg2 := vm.pop().(int)
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string, int) int)(arg1, arg2)
|
||||
case 62:
|
||||
case 80:
|
||||
arg2 := vm.pop().(int32)
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string, int32) int)(arg1, arg2)
|
||||
case 63:
|
||||
case 81:
|
||||
arg2 := vm.pop().(string)
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string, string) bool)(arg1, arg2)
|
||||
case 64:
|
||||
case 82:
|
||||
arg2 := vm.pop().(string)
|
||||
arg1 := vm.pop().(string)
|
||||
return fn.(func(string, string) string)(arg1, arg2)
|
||||
case 83:
|
||||
arg1 := vm.pop().(uint)
|
||||
return fn.(func(uint) float64)(arg1)
|
||||
case 84:
|
||||
arg1 := vm.pop().(uint)
|
||||
return fn.(func(uint) int)(arg1)
|
||||
case 85:
|
||||
arg1 := vm.pop().(uint)
|
||||
return fn.(func(uint) uint)(arg1)
|
||||
case 86:
|
||||
arg1 := vm.pop().(uint16)
|
||||
return fn.(func(uint16) uint)(arg1)
|
||||
case 87:
|
||||
arg1 := vm.pop().(uint32)
|
||||
return fn.(func(uint32) uint64)(arg1)
|
||||
case 88:
|
||||
arg1 := vm.pop().(uint64)
|
||||
return fn.(func(uint64) float64)(arg1)
|
||||
case 89:
|
||||
arg1 := vm.pop().(uint64)
|
||||
return fn.(func(uint64) int64)(arg1)
|
||||
case 90:
|
||||
arg1 := vm.pop().(uint8)
|
||||
return fn.(func(uint8) uint8)(arg1)
|
||||
|
||||
}
|
||||
panic(fmt.Sprintf("unknown function kind (%v)", kind))
|
||||
|
||||
Reference in New Issue
Block a user