Skip to content
This repository was archived by the owner on Mar 16, 2025. It is now read-only.

Commit 089656c

Browse files
committed
remove Number.Equal()
1 parent 6e373ed commit 089656c

3 files changed

Lines changed: 27 additions & 46 deletions

File tree

pkg/eval/builtin/comparisons.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ func makeNumberComparatorFunc(inter intProcessor, floater floatProcessor, desc s
5959
return inter(leftInt, rightInt)
6060
}
6161

62-
leftFloat := numbers[0].ToFloat()
63-
rightFloat := numbers[1].ToFloat()
62+
leftFloat := numbers[0].MustToFloat()
63+
rightFloat := numbers[1].MustToFloat()
6464

6565
return floater(leftFloat, rightFloat)
6666
}, desc)

pkg/eval/builtin/math.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func sumFunction(ctx types.Context, args []ast.Expression) (any, error) {
5959

6060
sum := float64(0)
6161
for _, num := range values {
62-
sum += num.ToFloat()
62+
sum += num.MustToFloat()
6363
}
6464

6565
return sum, nil
@@ -85,9 +85,9 @@ func subFunction(ctx types.Context, args []ast.Expression) (any, error) {
8585
return difference, nil
8686
}
8787

88-
difference := values[0].ToFloat()
88+
difference := values[0].MustToFloat()
8989
for _, num := range values[1:] {
90-
difference -= num.ToFloat()
90+
difference -= num.MustToFloat()
9191
}
9292

9393
return difference, nil
@@ -115,7 +115,7 @@ func multiplyFunction(ctx types.Context, args []ast.Expression) (any, error) {
115115

116116
product := float64(1)
117117
for _, num := range values {
118-
product *= num.ToFloat()
118+
product *= num.MustToFloat()
119119
}
120120

121121
return product, nil
@@ -131,13 +131,14 @@ func divideFunction(ctx types.Context, args []ast.Expression) (any, error) {
131131
return nil, err
132132
}
133133

134-
result := values[0].ToFloat()
134+
result := values[0].MustToFloat()
135135

136136
for _, num := range values[1:] {
137-
divisor := num.ToFloat()
137+
divisor := num.MustToFloat()
138138
if divisor == 0 {
139139
return nil, errors.New("division by zero")
140140
}
141+
141142
result /= divisor
142143
}
143144

pkg/lang/ast/types.go

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -272,27 +272,6 @@ type Number struct {
272272
var _ Expression = Number{}
273273
var _ Literal = Number{}
274274

275-
func (n Number) Equal(other Number) bool {
276-
// handle technically invalid numbers
277-
if other.Value == nil || n.Value == nil {
278-
return (other.Value == nil) == (n.Value == nil)
279-
}
280-
281-
selfInt, selfOk := n.ToInteger()
282-
otherInt, otherOk := other.ToInteger()
283-
284-
// not the same type
285-
if selfOk != otherOk {
286-
return false
287-
}
288-
289-
if selfOk {
290-
return otherInt == selfInt
291-
}
292-
293-
return n.ToFloat() == other.ToFloat()
294-
}
295-
296275
func (n Number) ToInteger() (int64, bool) {
297276
switch asserted := n.Value.(type) {
298277
case int:
@@ -306,31 +285,32 @@ func (n Number) ToInteger() (int64, bool) {
306285
}
307286
}
308287

309-
func (n Number) IsFloat() bool {
310-
_, ok := n.Value.(float64)
311-
return ok
312-
}
313-
314-
func (n Number) ToFloat() float64 {
288+
func (n Number) ToFloat() (float64, bool) {
315289
switch asserted := n.Value.(type) {
316-
case int:
317-
return float64(asserted)
318-
case int32:
319-
return float64(asserted)
320-
case int64:
321-
return float64(asserted)
322290
case float32:
323-
return float64(asserted)
291+
return float64(asserted), true
324292
case float64:
325-
return asserted
293+
return asserted, true
326294
default:
327-
panic(fmt.Sprintf("Number with non-numeric value %v (%T)", n.Value, n.Value))
295+
return 0, false
328296
}
329297
}
330298

299+
func (n Number) MustToFloat() float64 {
300+
if i, ok := n.ToInteger(); ok {
301+
return float64(i)
302+
}
303+
304+
if f, ok := n.ToFloat(); ok {
305+
return f
306+
}
307+
308+
panic(fmt.Sprintf("invalid number value %#v (%T)", n.Value, n.Value))
309+
}
310+
331311
func (n Number) String() string {
332-
if n.IsFloat() {
333-
return fmt.Sprintf("%f", n.Value)
312+
if f, ok := n.ToFloat(); ok {
313+
return fmt.Sprintf("%f", f)
334314
}
335315

336316
return fmt.Sprintf("%d", n.Value)

0 commit comments

Comments
 (0)