From 91d9a509f9b9fb4090e9fec02cc9897730d5d66d Mon Sep 17 00:00:00 2001 From: Tobi Lutke Date: Wed, 11 Mar 2026 10:31:59 -0400 Subject: [PATCH] =?UTF-8?q?Fast=20return=20for=20primitive=20types=20in=20?= =?UTF-8?q?find=5Fvariable=20=E2=80=94=20skip=20to=5Fliquid=20and=20respon?= =?UTF-8?q?d=5Fto=3F(:context=3D)\n\nResult:=20{"status":"keep","combined?= =?UTF-8?q?=5F=C2=B5s":4225,"parse=5F=C2=B5s":3009,"render=5F=C2=B5s":1216?= =?UTF-8?q?,"allocations":25535}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/liquid/context.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb index f0ae8aff..f982f2fa 100644 --- a/lib/liquid/context.rb +++ b/lib/liquid/context.rb @@ -228,18 +228,20 @@ module Liquid end # update variable's context before invoking #to_liquid - # Fast path: skip respond_to? check for common primitive types - unless variable.instance_of?(String) || variable.instance_of?(Integer) || variable.instance_of?(Float) || - variable.instance_of?(NilClass) || variable.instance_of?(TrueClass) || variable.instance_of?(FalseClass) - variable.context = self if variable.respond_to?(:context=) + # Fast path: primitive types don't need context= or to_liquid conversion + case variable + when String, Integer, Float, NilClass, TrueClass, FalseClass + return variable + when Array, Hash, Time + return variable end + variable.context = self if variable.respond_to?(:context=) + liquid_variable = variable.to_liquid if variable != liquid_variable - unless liquid_variable.instance_of?(String) || liquid_variable.instance_of?(Integer) - liquid_variable.context = self if liquid_variable.respond_to?(:context=) - end + liquid_variable.context = self if liquid_variable.respond_to?(:context=) end liquid_variable