mirror of
https://github.com/Shopify/liquid.git
synced 2026-10-03 00:55:11 -07:00
Use cleaner recursive solution
This commit is contained in:
+7
-14
@@ -83,23 +83,16 @@ module Liquid
|
|||||||
|
|
||||||
def strict_parse(markup)
|
def strict_parse(markup)
|
||||||
p = Parser.new(markup)
|
p = Parser.new(markup)
|
||||||
|
condition = parse_binary_comparison(p)
|
||||||
conditions = [parse_comparison(p)]
|
|
||||||
|
|
||||||
while op = (p.id?('and'.freeze) || p.id?('or'.freeze))
|
|
||||||
conditions << op << parse_comparison(p)
|
|
||||||
end
|
|
||||||
p.consume(:end_of_string)
|
p.consume(:end_of_string)
|
||||||
|
condition
|
||||||
|
end
|
||||||
|
|
||||||
condition = conditions.pop
|
def parse_binary_comparison(p)
|
||||||
|
condition = parse_comparison(p)
|
||||||
until conditions.empty?
|
if op = (p.id?('and'.freeze) || p.id?('or'.freeze))
|
||||||
op = conditions.pop
|
condition.send(op, parse_binary_comparison(p))
|
||||||
new_cond = conditions.pop
|
|
||||||
new_cond.send(op, condition)
|
|
||||||
condition = new_cond
|
|
||||||
end
|
end
|
||||||
|
|
||||||
condition
|
condition
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user