Skip to content

Commit 0107cca

Browse files
committed
Fix checker with int/float sums
1 parent b4d6293 commit 0107cca

File tree

3 files changed

+25
-34
lines changed

3 files changed

+25
-34
lines changed

checker/checker_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,24 @@ func TestCheck_error(t *testing.T) {
501501
}
502502
}
503503

504+
func TestCheck_FloatVsInt(t *testing.T) {
505+
tree, err := parser.Parse(`Int + Float`)
506+
require.NoError(t, err)
507+
508+
typ, err := checker.Check(tree, conf.New(mock.Env{}))
509+
assert.NoError(t, err)
510+
assert.Equal(t, typ.Kind(), reflect.Float64)
511+
}
512+
513+
func TestCheck_IntSums(t *testing.T) {
514+
tree, err := parser.Parse(`Uint32 + Int32`)
515+
require.NoError(t, err)
516+
517+
typ, err := checker.Check(tree, conf.New(mock.Env{}))
518+
assert.NoError(t, err)
519+
assert.Equal(t, typ.Kind(), reflect.Int)
520+
}
521+
504522
func TestVisitor_ConstantNode(t *testing.T) {
505523
tree, err := parser.Parse(`re("[a-z]")`)
506524
require.NoError(t, err)

checker/mock/mock.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ type Env struct {
99
Bool bool
1010
Float float64
1111
Int64 int64
12+
Int32 int32
1213
Int int
14+
Uint32 uint32
1315
String string
1416
BoolPtr *bool
1517
FloatPtr *float64

checker/types.go

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,43 +22,14 @@ var (
2222
errorType = reflect.TypeOf((*error)(nil)).Elem()
2323
)
2424

25-
func typeWeight(t reflect.Type) int {
26-
switch t.Kind() {
27-
case reflect.Uint:
28-
return 1
29-
case reflect.Uint8:
30-
return 2
31-
case reflect.Uint16:
32-
return 3
33-
case reflect.Uint32:
34-
return 4
35-
case reflect.Uint64:
36-
return 5
37-
case reflect.Int:
38-
return 6
39-
case reflect.Int8:
40-
return 7
41-
case reflect.Int16:
42-
return 8
43-
case reflect.Int32:
44-
return 9
45-
case reflect.Int64:
46-
return 10
47-
case reflect.Float32:
48-
return 11
49-
case reflect.Float64:
50-
return 12
51-
default:
52-
return 0
53-
}
54-
}
55-
5625
func combined(a, b reflect.Type) reflect.Type {
57-
if typeWeight(a) > typeWeight(b) {
26+
if a.Kind() == b.Kind() {
5827
return a
59-
} else {
60-
return b
6128
}
29+
if isFloat(a) || isFloat(b) {
30+
return floatType
31+
}
32+
return integerType
6233
}
6334

6435
func anyOf(t reflect.Type, fns ...func(reflect.Type) bool) bool {

0 commit comments

Comments
 (0)