Skip to content

Commit c2b6f32

Browse files
committed
Add more typed call signatures
1 parent b062494 commit c2b6f32

File tree

2 files changed

+79
-1
lines changed

2 files changed

+79
-1
lines changed

vm/func_types/main.go

+19-1
Original file line numberDiff line numberDiff line change
@@ -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

6680
func 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, ", "))

vm/generated.go

+60
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)