From dc35b765e8dfd4d3ad2aa64f5d96ba2af33926cf Mon Sep 17 00:00:00 2001 From: Tobi Lutke Date: Wed, 11 Mar 2026 10:30:41 -0400 Subject: [PATCH] =?UTF-8?q?Skip=20respond=5Fto=3F(:context=3D)=20for=20pri?= =?UTF-8?q?mitive=20types=20in=20find=5Fvariable=20=E2=80=94=20avoids=20me?= =?UTF-8?q?thod=20lookup=20overhead\n\nResult:=20{"status":"keep","combine?= =?UTF-8?q?d=5F=C2=B5s":4207,"parse=5F=C2=B5s":2943,"render=5F=C2=B5s":126?= =?UTF-8?q?4,"allocations":25535}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/liquid/context.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb index 29edfb1e..2de41a23 100644 --- a/lib/liquid/context.rb +++ b/lib/liquid/context.rb @@ -226,11 +226,19 @@ module Liquid end # update variable's context before invoking #to_liquid - variable.context = self if variable.respond_to?(:context=) + # 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=) + end liquid_variable = variable.to_liquid - liquid_variable.context = self if variable != liquid_variable && liquid_variable.respond_to?(:context=) + 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 + end liquid_variable end