lib/liquidscript/scanner/base/lexer.rb in liquidscript-0.4.1 vs lib/liquidscript/scanner/base/lexer.rb in liquidscript-0.5.0

- old
+ new

@@ -5,43 +5,46 @@ def perform_with_context(context, scanner = @scanner) key, value = context.find_matcher(scanner) if value.nil? && scanner.rest? - error scanner + error scanner, context end normalize_action key, value, scanner if scanner.rest? end - def lex(argument) - context, body = - if argument.is_a?(Hash) - argument.to_a.first + def lex(*args) + args.flatten! + to_lex = args.pop + + context, body = if to_lex.is_a? Hash + to_lex.to_a.first else - argument + [to_lex, nil] end scanner = if body StringScanner.new(body) else @scanner end out = [] context = find_context(context) - instance_exec &context.init + instance_exec(*args, &context.init) while scanner.rest? && out.last != EXIT out << perform_with_context(context, scanner) end out end - def error(scanner = @scanner) - raise SyntaxError, "Unexpected #{scanner.peek(2).inspect}" \ + def error(scanner = @scanner, context = @context) + raise SyntaxError, "Unexpected " + + "#{scanner.matched}#{scanner.peek(2)}".inspect + " (line: #{line}, column: #{column})" end private @@ -66,10 +69,10 @@ case value when Proc instance_exec(*body.match(key), &value) when Symbol - lex value + lex(*body.match(key), value) when EXIT EXIT end end