@@ -121,24 +121,35 @@ func (intr *treeInterpreter) execute(node parsing.ASTNode, value interface{}, fu
121
121
case parsing .TOKNE :
122
122
return ! util .ObjsEqual (left , right ), nil
123
123
}
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
+ }
131
137
}
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
+ }
141
151
}
152
+ return nil , nil
142
153
case parsing .ASTExpRef :
143
154
return func (data interface {}) (interface {}, error ) {
144
155
return intr .execute (node .Children [0 ], data , functionCaller )
0 commit comments