diff --git a/lib/liquid/parse_context.rb b/lib/liquid/parse_context.rb index 855acc64..4bec4c87 100644 --- a/lib/liquid/parse_context.rb +++ b/lib/liquid/parse_context.rb @@ -3,7 +3,7 @@ module Liquid class ParseContext attr_accessor :locale, :line_number, :trim_whitespace, :depth - attr_reader :partial, :warnings, :error_mode, :environment + attr_reader :partial, :warnings, :error_mode, :environment, :expression_cache, :string_scanner def initialize(options = Const::EMPTY_HASH) @environment = options.fetch(:environment, Environment.default) diff --git a/lib/liquid/variable.rb b/lib/liquid/variable.rb index db7d4a6b..f807d417 100644 --- a/lib/liquid/variable.rb +++ b/lib/liquid/variable.rb @@ -143,8 +143,8 @@ module Liquid # Resolve the name expression expr_markup = markup.byteslice(name_start, name_end - name_start) - cache = parse_context.instance_variable_get(:@expression_cache) - ss = parse_context.instance_variable_get(:@string_scanner) + cache = parse_context.expression_cache + ss = parse_context.string_scanner if Expression::LITERALS.key?(expr_markup) @name = Expression::LITERALS[expr_markup] @@ -300,7 +300,8 @@ module Liquid filter_args = [] keyword_args = nil unparsed_args.each do |a| - if (matches = a.match(JustTagAttributes)) + # Fast check: keyword args must contain ':' + if a.include?(':') && (matches = a.match(JustTagAttributes)) keyword_args ||= {} keyword_args[matches[1]] = parse_context.parse_expression(matches[2]) else