File tree Expand file tree Collapse file tree 3 files changed +25
-34
lines changed Expand file tree Collapse file tree 3 files changed +25
-34
lines changed Original file line number Diff line number Diff line change @@ -501,6 +501,24 @@ func TestCheck_error(t *testing.T) {
501
501
}
502
502
}
503
503
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
+
504
522
func TestVisitor_ConstantNode (t * testing.T ) {
505
523
tree , err := parser .Parse (`re("[a-z]")` )
506
524
require .NoError (t , err )
Original file line number Diff line number Diff line change @@ -9,7 +9,9 @@ type Env struct {
9
9
Bool bool
10
10
Float float64
11
11
Int64 int64
12
+ Int32 int32
12
13
Int int
14
+ Uint32 uint32
13
15
String string
14
16
BoolPtr * bool
15
17
FloatPtr * float64
Original file line number Diff line number Diff line change @@ -22,43 +22,14 @@ var (
22
22
errorType = reflect .TypeOf ((* error )(nil )).Elem ()
23
23
)
24
24
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
-
56
25
func combined (a , b reflect.Type ) reflect.Type {
57
- if typeWeight ( a ) > typeWeight ( b ) {
26
+ if a . Kind () == b . Kind ( ) {
58
27
return a
59
- } else {
60
- return b
61
28
}
29
+ if isFloat (a ) || isFloat (b ) {
30
+ return floatType
31
+ }
32
+ return integerType
62
33
}
63
34
64
35
func anyOf (t reflect.Type , fns ... func (reflect.Type ) bool ) bool {
You can’t perform that action at this time.
0 commit comments