Skip to content

Commit 076a63f

Browse files
committed
Cast to int and float64 by default
1 parent 27ed5f2 commit 076a63f

File tree

3 files changed

+1308
-1302
lines changed

3 files changed

+1308
-1302
lines changed

expr_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -583,11 +583,11 @@ func TestExpr(t *testing.T) {
583583
},
584584
{
585585
`Uint64 + Int64`,
586-
int64(0),
586+
int(0),
587587
},
588588
{
589589
`Int32 + Int64`,
590-
int64(0),
590+
int(0),
591591
},
592592
{
593593
`Float64 + 0`,

vm/runtime/generate/main.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,30 @@ func cases(op string, noFloat bool) string {
5050
out += fmt.Sprintf(s, xs...) + "\n"
5151
}
5252
for i, a := range types {
53-
if noFloat && strings.HasPrefix(a, "float") {
53+
aIsFloat := strings.HasPrefix(a, "float")
54+
if noFloat && aIsFloat {
5455
continue
5556
}
5657
echo(`case %v:`, a)
5758
echo(`switch y := b.(type) {`)
5859
for j, b := range types {
59-
if noFloat && strings.HasPrefix(b, "float") {
60+
bIsFloat := strings.HasPrefix(b, "float")
61+
if noFloat && bIsFloat {
6062
continue
6163
}
64+
t := "int"
65+
if aIsFloat || bIsFloat {
66+
t = "float64"
67+
}
6268
echo(`case %v:`, b)
6369
if i == j {
6470
echo(`return x %v y`, op)
6571
}
6672
if i < j {
67-
echo(`return %v(x) %v y`, b, op)
73+
echo(`return %v(x) %v %v(y)`, t, op, t)
6874
}
6975
if i > j {
70-
echo(`return x %v %v(y)`, op, a)
76+
echo(`return %v(x) %v %v(y)`, t, op, t)
7177
}
7278
}
7379
echo(`}`)
@@ -119,7 +125,7 @@ func Less(a, b interface{}) interface{} {
119125
return x.Before(y)
120126
}
121127
}
122-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, "<", b))
128+
panic(fmt.Sprintf("invalid operation: %T < %T", a, b))
123129
}
124130
125131
func More(a, b interface{}) interface{} {
@@ -136,7 +142,7 @@ func More(a, b interface{}) interface{} {
136142
return x.After(y)
137143
}
138144
}
139-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, ">", b))
145+
panic(fmt.Sprintf("invalid operation: %T > %T", a, b))
140146
}
141147
142148
func LessOrEqual(a, b interface{}) interface{} {
@@ -153,7 +159,7 @@ func LessOrEqual(a, b interface{}) interface{} {
153159
return x.Before(y) || x.Equal(y)
154160
}
155161
}
156-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, "<=", b))
162+
panic(fmt.Sprintf("invalid operation: %T <= %T", a, b))
157163
}
158164
159165
func MoreOrEqual(a, b interface{}) interface{} {
@@ -170,7 +176,7 @@ func MoreOrEqual(a, b interface{}) interface{} {
170176
return x.After(y) || x.Equal(y)
171177
}
172178
}
173-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, ">=", b))
179+
panic(fmt.Sprintf("invalid operation: %T >= %T", a, b))
174180
}
175181
176182
func Add(a, b interface{}) interface{} {
@@ -192,7 +198,7 @@ func Add(a, b interface{}) interface{} {
192198
return y.Add(x)
193199
}
194200
}
195-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, "+", b))
201+
panic(fmt.Sprintf("invalid operation: %T + %T", a, b))
196202
}
197203
198204
func Subtract(a, b interface{}) interface{} {
@@ -204,27 +210,27 @@ func Subtract(a, b interface{}) interface{} {
204210
return x.Sub(y)
205211
}
206212
}
207-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, "-", b))
213+
panic(fmt.Sprintf("invalid operation: %T - %T", a, b))
208214
}
209215
210216
func Multiply(a, b interface{}) interface{} {
211217
switch x := a.(type) {
212218
{{ cases "*" }}
213219
}
214-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, "*", b))
220+
panic(fmt.Sprintf("invalid operation: %T * %T", a, b))
215221
}
216222
217223
func Divide(a, b interface{}) interface{} {
218224
switch x := a.(type) {
219225
{{ cases "/" }}
220226
}
221-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, "/", b))
227+
panic(fmt.Sprintf("invalid operation: %T / %T", a, b))
222228
}
223229
224230
func Modulo(a, b interface{}) interface{} {
225231
switch x := a.(type) {
226232
{{ cases_int_only "%" }}
227233
}
228-
panic(fmt.Sprintf("invalid operation: %T %v %T", a, "%", b))
234+
panic(fmt.Sprintf("invalid operation: %T %% %T", a, b))
229235
}
230236
`

0 commit comments

Comments
 (0)