@@ -61,6 +61,20 @@ var types = []interface{}{
61
61
new (func (string , rune ) int ),
62
62
new (func (string , string ) bool ),
63
63
new (func (string , string ) string ),
64
+ new (func (interface {}) bool ),
65
+ new (func (interface {}) float64 ),
66
+ new (func (interface {}) int ),
67
+ new (func (interface {}) string ),
68
+ new (func (interface {}) interface {}),
69
+ new (func (interface {}) []interface {}),
70
+ new (func (interface {}) map [string ]interface {}),
71
+ new (func ([]interface {}) interface {}),
72
+ new (func ([]interface {}) []interface {}),
73
+ new (func ([]interface {}) map [string ]interface {}),
74
+ new (func (interface {}, interface {}) bool ),
75
+ new (func (interface {}, interface {}) string ),
76
+ new (func (interface {}, interface {}) interface {}),
77
+ new (func (interface {}, interface {}) []interface {}),
64
78
}
65
79
66
80
func main () {
@@ -78,7 +92,11 @@ func main() {
78
92
data .Code += fmt .Sprintf ("case %d:\n " , i )
79
93
args := make ([]string , fn .NumIn ())
80
94
for j := fn .NumIn () - 1 ; j >= 0 ; j -- {
81
- data .Code += fmt .Sprintf ("arg%v := vm.pop().(%v)\n " , j + 1 , fn .In (j ))
95
+ cast := fmt .Sprintf (".(%v)" , fn .In (j ))
96
+ if fn .In (j ).Kind () == reflect .Interface {
97
+ cast = ""
98
+ }
99
+ data .Code += fmt .Sprintf ("arg%v := vm.pop()%v\n " , j + 1 , cast )
82
100
args [j ] = fmt .Sprintf ("arg%v" , j + 1 )
83
101
}
84
102
data .Code += fmt .Sprintf ("return fn.(%v)(%v)\n " , fn , strings .Join (args , ", " ))
0 commit comments