mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-19 10:52:48 -07:00
Make Parser.expression parse equality expressions
This commit is contained in:
+3
-3
@@ -6,14 +6,14 @@ module Liquid
|
||||
CLOSE_SQUARE = [:close_square, "]"].freeze
|
||||
COLON = [:colon, ":"].freeze
|
||||
COMMA = [:comma, ","].freeze
|
||||
COMPARISION_NOT_EQUAL = [:comparison, "!="].freeze
|
||||
COMPARISION_NOT_EQUAL = [:equality, "!="].freeze
|
||||
COMPARISON_CONTAINS = [:comparison, "contains"].freeze
|
||||
COMPARISON_EQUAL = [:comparison, "=="].freeze
|
||||
COMPARISON_EQUAL = [:equality, "=="].freeze
|
||||
COMPARISON_GREATER_THAN = [:comparison, ">"].freeze
|
||||
COMPARISON_GREATER_THAN_OR_EQUAL = [:comparison, ">="].freeze
|
||||
COMPARISON_LESS_THAN = [:comparison, "<"].freeze
|
||||
COMPARISON_LESS_THAN_OR_EQUAL = [:comparison, "<="].freeze
|
||||
COMPARISON_NOT_EQUAL_ALT = [:comparison, "<>"].freeze
|
||||
COMPARISON_NOT_EQUAL_ALT = [:equality, "<>"].freeze
|
||||
DASH = [:dash, "-"].freeze
|
||||
DOT = [:dot, "."].freeze
|
||||
DOTDOT = [:dotdot, ".."].freeze
|
||||
|
||||
+12
-2
@@ -47,11 +47,21 @@ module Liquid
|
||||
tok[0] == type
|
||||
end
|
||||
|
||||
# expression := comparison
|
||||
# expression := equality
|
||||
# equality := comparison (("==" | "!=" | "<>") comparison)*
|
||||
# comparison := primary ((">=" | ">" | "<" | "<=" | ... ) primary)*
|
||||
# primary := string | number | variable_lookup | range | boolean
|
||||
def expression
|
||||
comparison
|
||||
equality
|
||||
end
|
||||
|
||||
def equality
|
||||
expr = comparison
|
||||
while look(:equality)
|
||||
operator = consume
|
||||
expr = BinaryExpression.new(expr, operator, comparison)
|
||||
end
|
||||
expr
|
||||
end
|
||||
|
||||
# comparison := primary ((">=" | ">" | "<" | "<=" | ... ) primary)*
|
||||
|
||||
@@ -97,7 +97,7 @@ module Liquid
|
||||
|
||||
def parse_comparison(p)
|
||||
a = parse_expression(p)
|
||||
if (op = p.consume?(:comparison))
|
||||
if (op = p.consume?(:comparison) || p.consume?(:equality))
|
||||
b = parse_expression(p)
|
||||
Condition.new(a, op, b)
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user