From e33eb09b76e9070fd49837e8b896319636501b38 Mon Sep 17 00:00:00 2001 From: Nobuhiro IMAI Date: Sat, 19 Dec 2020 01:31:12 +0900 Subject: ripper: fix `#tok` on some error events [Bug 17345] sorting alias target by event arity, and setup suitable `Elem` for error. --- ext/ripper/lib/ripper/lexer.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'ext/ripper') diff --git a/ext/ripper/lib/ripper/lexer.rb b/ext/ripper/lib/ripper/lexer.rb index 6a9a9cb39a..cff38c617d 100644 --- a/ext/ripper/lib/ripper/lexer.rb +++ b/ext/ripper/lib/ripper/lexer.rb @@ -190,13 +190,18 @@ class Ripper e end - def on_error(mesg, tok = token()) - @errors.push Elem.new([lineno(), column()], __callee__, tok, state(), mesg) + def on_error1(mesg) + @errors.push Elem.new([lineno(), column()], __callee__, token(), state(), mesg) + end + + def on_error2(mesg, elem) + @errors.push Elem.new(elem.pos, __callee__, elem.tok, elem.state, mesg) end PARSER_EVENTS.grep(/_error\z/) do |e| - alias_method "on_#{e}", :on_error + arity = PARSER_EVENT_TABLE.fetch(e) + alias_method "on_#{e}", "on_error#{arity}" end - alias compile_error on_error + alias compile_error on_error1 (SCANNER_EVENTS.map {|event|:"on_#{event}"} - private_instance_methods(false)).each do |event| alias_method event, :_push_token -- cgit v1.2.3