Skip to content

Commit c67292b

Browse files
Rakothantonmedv
authored andcommitted
Fix type check of binary node
1 parent f14e17e commit c67292b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

type.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,24 @@ func (n binaryNode) Type(table typesTable) (Type, error) {
8787
}
8888
return nil, fmt.Errorf(`invalid operation: %v (mismatched types %v and %v)`, n, ltype, rtype)
8989

90-
case "|", "^", "&", "<", ">", ">=", "<=", "+", "-", "*", "/", "%", "**", "..":
90+
case "<", ">", ">=", "<=":
9191
if (isNumberType(ltype) || isInterfaceType(ltype)) && (isNumberType(rtype) || isInterfaceType(rtype)) {
9292
return boolType, nil
9393
}
9494
return nil, fmt.Errorf(`invalid operation: %v (mismatched types %v and %v)`, n, ltype, rtype)
95+
96+
case "/", "+", "-", "*", "**", "|", "^", "&", "%":
97+
if (isNumberType(ltype) || isInterfaceType(ltype)) && (isNumberType(rtype) || isInterfaceType(rtype)) {
98+
return numberType, nil
99+
}
100+
return nil, fmt.Errorf(`invalid operation: %v (mismatched types %v and %v)`, n, ltype, rtype)
101+
102+
case "..":
103+
if (isNumberType(ltype) || isInterfaceType(ltype)) && (isNumberType(rtype) || isInterfaceType(rtype)) {
104+
return arrayType, nil
105+
}
106+
return nil, fmt.Errorf(`invalid operation: %v (mismatched types %v and %v)`, n, ltype, rtype)
107+
95108
}
96109

97110
return interfaceType, nil

type_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ var typeTests = []typeTest{
6666
"Int % Num",
6767
"Int ** Num",
6868
"Int .. Num",
69+
"Int + Int + Int",
70+
"Int % Int > 1",
71+
"Int in Int..Int",
6972
}
7073

7174
var typeErrorTests = []typeErrorTest{

0 commit comments

Comments
 (0)