Freeze block body after parsing completes

This commit is contained in:
Peter Zhu
2020-10-26 11:06:55 -04:00
parent 784db053f2
commit fe66edb825
7 changed files with 20 additions and 2 deletions
+9
View File
@@ -16,9 +16,12 @@ module Liquid
def initialize
@nodelist = []
@blank = true
@frozen = false
end
def parse(tokenizer, parse_context, &block)
raise FrozenError, "can't modify frozen Liquid::BlockBody" if @frozen
parse_context.line_number = tokenizer.line_number
if tokenizer.for_liquid_tag
@@ -28,6 +31,10 @@ module Liquid
end
end
def freeze(_context)
@frozen = true
end
private def parse_for_liquid_tag(tokenizer, parse_context)
while (token = tokenizer.shift)
unless token.empty? || token =~ WhitespaceOrNothing
@@ -192,6 +199,8 @@ module Liquid
end
def render_to_output_buffer(context, output)
raise "Can only render when frozen" unless @frozen
context.resource_limits.increment_render_score(@nodelist.length)
idx = 0