From 3f9b8916b2186e928732ffecf87c225f090284ff Mon Sep 17 00:00:00 2001 From: Tobi Lutke Date: Wed, 11 Mar 2026 10:35:29 -0400 Subject: [PATCH] =?UTF-8?q?Fast-path=20Hash=20lookups=20in=20VariableLooku?= =?UTF-8?q?p#evaluate=20=E2=80=94=20skip=20respond=5Fto=3F=20checks=20for?= =?UTF-8?q?=20Hash=20objects\n\nResult:=20{"status":"keep","combined=5F?= =?UTF-8?q?=C2=B5s":4110,"parse=5F=C2=B5s":2922,"render=5F=C2=B5s":1188,"a?= =?UTF-8?q?llocations":25535}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/liquid/variable_lookup.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/liquid/variable_lookup.rb b/lib/liquid/variable_lookup.rb index 743d573f..e5d273de 100644 --- a/lib/liquid/variable_lookup.rb +++ b/lib/liquid/variable_lookup.rb @@ -177,9 +177,10 @@ module Liquid # If object is a hash- or array-like object we look for the # presence of the key and if its available we return it - if object.respond_to?(:[]) && - ((object.respond_to?(:key?) && object.key?(key)) || - (object.respond_to?(:fetch) && key.is_a?(Integer))) + if object.instance_of?(Hash) ? object.key?(key) : + (object.respond_to?(:[]) && + ((object.respond_to?(:key?) && object.key?(key)) || + (object.respond_to?(:fetch) && key.is_a?(Integer)))) # if its a proc we will replace the entry with the proc object = context.lookup_and_evaluate(object, key)