Skip to content

Commit 52975c1

Browse files
committed
feat: add string comparison support
Signed-off-by: Charles-Edouard Brétéché <[email protected]>
1 parent bdbb290 commit 52975c1

File tree

1 file changed

+27
-16
lines changed

1 file changed

+27
-16
lines changed

pkg/interpreter/interpreter.go

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -121,24 +121,35 @@ func (intr *treeInterpreter) execute(node parsing.ASTNode, value interface{}, fu
121121
case parsing.TOKNE:
122122
return !util.ObjsEqual(left, right), nil
123123
}
124-
leftNum, ok := util.ToNumber(left)
125-
if !ok {
126-
return nil, nil
127-
}
128-
rightNum, ok := util.ToNumber(right)
129-
if !ok {
130-
return nil, nil
124+
if leftStr, ok := left.(string); ok {
125+
if rightStr, ok := right.(string); ok {
126+
switch node.Value {
127+
case parsing.TOKGT:
128+
return leftStr > rightStr, nil
129+
case parsing.TOKGTE:
130+
return leftStr >= rightStr, nil
131+
case parsing.TOKLT:
132+
return leftStr < rightStr, nil
133+
case parsing.TOKLTE:
134+
return leftStr <= rightStr, nil
135+
}
136+
}
131137
}
132-
switch node.Value {
133-
case parsing.TOKGT:
134-
return leftNum > rightNum, nil
135-
case parsing.TOKGTE:
136-
return leftNum >= rightNum, nil
137-
case parsing.TOKLT:
138-
return leftNum < rightNum, nil
139-
case parsing.TOKLTE:
140-
return leftNum <= rightNum, nil
138+
if leftNum, ok := util.ToNumber(left); ok {
139+
if rightNum, ok := util.ToNumber(right); ok {
140+
switch node.Value {
141+
case parsing.TOKGT:
142+
return leftNum > rightNum, nil
143+
case parsing.TOKGTE:
144+
return leftNum >= rightNum, nil
145+
case parsing.TOKLT:
146+
return leftNum < rightNum, nil
147+
case parsing.TOKLTE:
148+
return leftNum <= rightNum, nil
149+
}
150+
}
141151
}
152+
return nil, nil
142153
case parsing.ASTExpRef:
143154
return func(data interface{}) (interface{}, error) {
144155
return intr.execute(node.Children[0], data, functionCaller)

0 commit comments

Comments
 (0)