@@ -61,6 +61,20 @@ var types = []interface{}{
6161 new (func (string , rune ) int ),
6262 new (func (string , string ) bool ),
6363 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 {}),
6478}
6579
6680func main () {
@@ -78,7 +92,11 @@ func main() {
7892 data .Code += fmt .Sprintf ("case %d:\n " , i )
7993 args := make ([]string , fn .NumIn ())
8094 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 )
82100 args [j ] = fmt .Sprintf ("arg%v" , j + 1 )
83101 }
84102 data .Code += fmt .Sprintf ("return fn.(%v)(%v)\n " , fn , strings .Join (args , ", " ))
0 commit comments