From 9d16eb3d0580b1fdb78a0283439da1fb79e41e3f Mon Sep 17 00:00:00 2001 From: Tobi Lutke Date: Wed, 11 Mar 2026 08:36:28 -0400 Subject: [PATCH] fast-path simple if truthiness: use byte scanner before SIMPLE_CONDITION regex --- lib/liquid/tags/if.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/liquid/tags/if.rb b/lib/liquid/tags/if.rb index b896a1c0..45e85332 100644 --- a/lib/liquid/tags/if.rb +++ b/lib/liquid/tags/if.rb @@ -89,6 +89,11 @@ module Liquid SIMPLE_CONDITION = /\A\s*(#{QuotedFragment})\s*(?:([=!<>a-z_]+)\s*(#{QuotedFragment}))?\s*\z/o def lax_parse(markup) + # Fastest path: simple identifier truthiness like "product.available" or "forloop.first" + if (simple = Variable.simple_variable_markup(markup)) + return Condition.new(parse_expression(simple)) + end + # Fast path: simple condition without and/or if !markup.include?(' and ') && !markup.include?(' or ') && markup =~ SIMPLE_CONDITION return Condition.new(