From c157b8fb19f31e6e30f2b8f8881d9b17911d0c05 Mon Sep 17 00:00:00 2001 From: Michael Go Date: Mon, 22 Jan 2024 14:41:23 -0400 Subject: [PATCH] contextualize value before invoking to_liquid --- ext/liquid_c/context.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ext/liquid_c/context.h b/ext/liquid_c/context.h index 8cd43d90..f251e71e 100644 --- a/ext/liquid_c/context.h +++ b/ext/liquid_c/context.h @@ -44,12 +44,15 @@ inline static VALUE value_to_liquid_and_set_context(VALUE value, VALUE context_t if (klass == rb_cString || klass == rb_cArray || klass == rb_cHash) return value; - value = rb_funcall(value, id_to_liquid, 0); + if (rb_respond_to(value, rb_intern("context="))) + rb_funcall(value, rb_intern("context="), 1, context_to_set); - if (rb_respond_to(value, id_set_context)) - rb_funcall(value, id_set_context, 1, context_to_set); + VALUE liquid_value = rb_funcall(value, id_to_liquid, 0); - return value; + if (value != liquid_value && rb_respond_to(liquid_value, id_set_context)) + rb_funcall(liquid_value, id_set_context, 1, context_to_set); + + return liquid_value; }