@@ -50,24 +50,30 @@ func cases(op string, noFloat bool) string {
50
50
out += fmt .Sprintf (s , xs ... ) + "\n "
51
51
}
52
52
for i , a := range types {
53
- if noFloat && strings .HasPrefix (a , "float" ) {
53
+ aIsFloat := strings .HasPrefix (a , "float" )
54
+ if noFloat && aIsFloat {
54
55
continue
55
56
}
56
57
echo (`case %v:` , a )
57
58
echo (`switch y := b.(type) {` )
58
59
for j , b := range types {
59
- if noFloat && strings .HasPrefix (b , "float" ) {
60
+ bIsFloat := strings .HasPrefix (b , "float" )
61
+ if noFloat && bIsFloat {
60
62
continue
61
63
}
64
+ t := "int"
65
+ if aIsFloat || bIsFloat {
66
+ t = "float64"
67
+ }
62
68
echo (`case %v:` , b )
63
69
if i == j {
64
70
echo (`return x %v y` , op )
65
71
}
66
72
if i < j {
67
- echo (`return %v(x) %v y ` , b , op )
73
+ echo (`return %v(x) %v %v(y) ` , t , op , t )
68
74
}
69
75
if i > j {
70
- echo (`return x %v %v(y)` , op , a )
76
+ echo (`return %v(x) %v %v(y)` , t , op , t )
71
77
}
72
78
}
73
79
echo (`}` )
@@ -119,7 +125,7 @@ func Less(a, b interface{}) interface{} {
119
125
return x.Before(y)
120
126
}
121
127
}
122
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, "<" , b))
128
+ panic(fmt.Sprintf("invalid operation: %T < %T", a, b))
123
129
}
124
130
125
131
func More(a, b interface{}) interface{} {
@@ -136,7 +142,7 @@ func More(a, b interface{}) interface{} {
136
142
return x.After(y)
137
143
}
138
144
}
139
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, ">" , b))
145
+ panic(fmt.Sprintf("invalid operation: %T > %T", a, b))
140
146
}
141
147
142
148
func LessOrEqual(a, b interface{}) interface{} {
@@ -153,7 +159,7 @@ func LessOrEqual(a, b interface{}) interface{} {
153
159
return x.Before(y) || x.Equal(y)
154
160
}
155
161
}
156
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, "<=" , b))
162
+ panic(fmt.Sprintf("invalid operation: %T <= %T", a, b))
157
163
}
158
164
159
165
func MoreOrEqual(a, b interface{}) interface{} {
@@ -170,7 +176,7 @@ func MoreOrEqual(a, b interface{}) interface{} {
170
176
return x.After(y) || x.Equal(y)
171
177
}
172
178
}
173
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, ">=" , b))
179
+ panic(fmt.Sprintf("invalid operation: %T >= %T", a, b))
174
180
}
175
181
176
182
func Add(a, b interface{}) interface{} {
@@ -192,7 +198,7 @@ func Add(a, b interface{}) interface{} {
192
198
return y.Add(x)
193
199
}
194
200
}
195
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, "+" , b))
201
+ panic(fmt.Sprintf("invalid operation: %T + %T", a, b))
196
202
}
197
203
198
204
func Subtract(a, b interface{}) interface{} {
@@ -204,27 +210,27 @@ func Subtract(a, b interface{}) interface{} {
204
210
return x.Sub(y)
205
211
}
206
212
}
207
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, "-" , b))
213
+ panic(fmt.Sprintf("invalid operation: %T - %T", a, b))
208
214
}
209
215
210
216
func Multiply(a, b interface{}) interface{} {
211
217
switch x := a.(type) {
212
218
{{ cases "*" }}
213
219
}
214
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, "*" , b))
220
+ panic(fmt.Sprintf("invalid operation: %T * %T", a, b))
215
221
}
216
222
217
223
func Divide(a, b interface{}) interface{} {
218
224
switch x := a.(type) {
219
225
{{ cases "/" }}
220
226
}
221
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, "/" , b))
227
+ panic(fmt.Sprintf("invalid operation: %T / %T", a, b))
222
228
}
223
229
224
230
func Modulo(a, b interface{}) interface{} {
225
231
switch x := a.(type) {
226
232
{{ cases_int_only "%" }}
227
233
}
228
- panic(fmt.Sprintf("invalid operation: %T %v %T", a, "%" , b))
234
+ panic(fmt.Sprintf("invalid operation: %T %% %T", a, b))
229
235
}
230
236
`
0 commit comments