Extract rescue code from BlockBody#render_node for re-use in liquid-c

This commit is contained in:
Dylan Thacker-Smith
2020-09-16 09:31:36 -04:00
parent 9917924adb
commit cddd8ea4ff
+17 -9
View File
@@ -71,15 +71,23 @@ module Liquid
# @api private # @api private
def self.render_node(context, output, node) def self.render_node(context, output, node)
node.render_to_output_buffer(context, output) node.render_to_output_buffer(context, output)
rescue UndefinedVariable, UndefinedDropMethod, UndefinedFilter => e rescue => exc
context.handle_error(e, node.line_number) blank_tag = !node.instance_of?(Variable) && node.blank?
rescue MemoryError rescue_render_node(context, output, node.line_number, exc, blank_tag)
raise end
rescue ::StandardError => e
line_number = node.is_a?(String) ? nil : node.line_number # @api private
error_message = context.handle_error(e, line_number) def self.rescue_render_node(context, output, line_number, exc, blank_tag)
if node.instance_of?(Variable) || !node.blank? # conditional for backwards compatibility case exc
output << error_message 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
end end