From cddd8ea4fffd6207dda9cb0ef6f8e88203d8edb6 Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Mon, 14 Sep 2020 14:12:19 -0400 Subject: [PATCH] Extract rescue code from BlockBody#render_node for re-use in liquid-c --- lib/liquid/block_body.rb | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index 3c2f8e7..76d1600 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -71,15 +71,23 @@ module Liquid # @api private def self.render_node(context, output, node) node.render_to_output_buffer(context, output) - rescue UndefinedVariable, UndefinedDropMethod, UndefinedFilter => e - context.handle_error(e, node.line_number) - rescue MemoryError - raise - rescue ::StandardError => e - line_number = node.is_a?(String) ? nil : node.line_number - error_message = context.handle_error(e, line_number) - if node.instance_of?(Variable) || !node.blank? # conditional for backwards compatibility - output << error_message + rescue => exc + blank_tag = !node.instance_of?(Variable) && node.blank? + rescue_render_node(context, output, node.line_number, exc, blank_tag) + end + + # @api private + def self.rescue_render_node(context, output, line_number, exc, blank_tag) + case exc + when MemoryError + raise + when UndefinedVariable, UndefinedDropMethod, UndefinedFilter + context.handle_error(exc, line_number) + else + error_message = context.handle_error(exc, line_number) + unless blank_tag # conditional for backwards compatibility + output << error_message + end end end