MCPcopy
hub / github.com/flosch/pongo2 / Evaluate

Method Evaluate

parser_expression.go:168–225  ·  view source on GitHub ↗
(ctx *ExecutionContext)

Source from the content-addressed store, hash-verified

166}
167
168func (expr *relationalExpression) Evaluate(ctx *ExecutionContext) (*Value, *Error) {
169 v1, err := expr.expr1.Evaluate(ctx)
170 if err != nil {
171 return nil, err
172 }
173 if expr.expr2 != nil {
174 v2, err := expr.expr2.Evaluate(ctx)
175 if err != nil {
176 return nil, err
177 }
178 switch expr.opToken.Val {
179 case "<=":
180 if v1.IsFloat() || v2.IsFloat() {
181 return AsValue(v1.Float() <= v2.Float()), nil
182 }
183 if v1.IsTime() && v2.IsTime() {
184 tm1, tm2 := v1.Time(), v2.Time()
185 return AsValue(tm1.Before(tm2) || tm1.Equal(tm2)), nil
186 }
187 return AsValue(v1.Integer() <= v2.Integer()), nil
188 case ">=":
189 if v1.IsFloat() || v2.IsFloat() {
190 return AsValue(v1.Float() >= v2.Float()), nil
191 }
192 if v1.IsTime() && v2.IsTime() {
193 tm1, tm2 := v1.Time(), v2.Time()
194 return AsValue(tm1.After(tm2) || tm1.Equal(tm2)), nil
195 }
196 return AsValue(v1.Integer() >= v2.Integer()), nil
197 case "==":
198 return AsValue(v1.EqualValueTo(v2)), nil
199 case ">":
200 if v1.IsFloat() || v2.IsFloat() {
201 return AsValue(v1.Float() > v2.Float()), nil
202 }
203 if v1.IsTime() && v2.IsTime() {
204 return AsValue(v1.Time().After(v2.Time())), nil
205 }
206 return AsValue(v1.Integer() > v2.Integer()), nil
207 case "<":
208 if v1.IsFloat() || v2.IsFloat() {
209 return AsValue(v1.Float() < v2.Float()), nil
210 }
211 if v1.IsTime() && v2.IsTime() {
212 return AsValue(v1.Time().Before(v2.Time())), nil
213 }
214 return AsValue(v1.Integer() < v2.Integer()), nil
215 case "!=", "<>":
216 return AsValue(!v1.EqualValueTo(v2)), nil
217 case "in":
218 return AsValue(v2.Contains(v1)), nil
219 default:
220 return nil, ctx.Error(fmt.Sprintf("unimplemented: %s", expr.opToken.Val), expr.opToken)
221 }
222 } else {
223 return v1, nil
224 }
225}

Callers 1

ExecuteMethod · 0.95

Calls 10

AsValueFunction · 0.85
IsFloatMethod · 0.80
FloatMethod · 0.80
IsTimeMethod · 0.80
TimeMethod · 0.80
IntegerMethod · 0.80
EqualValueToMethod · 0.80
ContainsMethod · 0.80
EvaluateMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected