@@ -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