Add more func_types

This commit is contained in:
Anton Medvedev
2024-02-16 23:40:23 +01:00
parent 8cd9257996
commit 2af0e981b2
2 changed files with 236 additions and 110 deletions
+27 -1
View File
@@ -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
View File
@@ -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))