From a9c7df931fdeb5ccf280dc772c6d057ebb38b9f7 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Fri, 15 May 2015 13:37:53 -0400 Subject: [PATCH] Strict parse conditions in reverse order --- lib/liquid/tags/if.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/liquid/tags/if.rb b/lib/liquid/tags/if.rb index 4901d4a..d7f88aa 100644 --- a/lib/liquid/tags/if.rb +++ b/lib/liquid/tags/if.rb @@ -84,14 +84,21 @@ module Liquid def strict_parse(markup) p = Parser.new(markup) - condition = parse_comparison(p) + conditions = [parse_comparison(p)] while op = (p.id?('and'.freeze) || p.id?('or'.freeze)) - new_cond = parse_comparison(p) + conditions << op << parse_comparison(p) + end + p.consume(:end_of_string) + + condition = conditions.pop + + until conditions.empty? + op = conditions.pop + new_cond = conditions.pop new_cond.send(op, condition) condition = new_cond end - p.consume(:end_of_string) condition end