From: Hiroshi NAKAMURA Date: 2011-06-26T19:01:31+09:00 Subject: [ruby-dev:43937] [Ruby 1.9 - Bug #4543] Ripperで"<<-eos\neos"を正常にパースできない Issue #4543 has been updated by Hiroshi NAKAMURA. Target version set to 1.9.3 ---------------------------------------- Bug #4543: Ripperで"<<-eos\neos"を正常にパースできない http://redmine.ruby-lang.org/issues/4543 Author: Kazunori SAKAMOTO Status: Assigned Priority: Normal Assignee: Nobuyoshi Nakada Category: ext Target version: 1.9.3 ruby -v: ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux] =begin Ripper::SexpBuilder.new(%Q!<<-eos\neos!).parse にて、on_heredoc_end メソッドが呼び出されません。 ■検証済みバージョン ruby 1.9.3dev (2011-03-31 trunk 31223) [i686-linux] ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux] ruby 1.9.1p431 (2011-02-18 revision 30908) [i686-linux] ■検証用スクリプト require 'ripper' class Parser < Ripper::SexpBuilder ms = Ripper::SexpBuilder.new('').methods defs = ms.map { |s| s.to_s } .select { |s| s.start_with?('on_') } .map { |s| %Q{ def #{s}(*args) print '#{s}: ' p args end }}.join eval(defs) end def parse(src) puts "****" + src.inspect + "****" Parser.new(src).parse puts end parse(%Q!<<-eos\neos!) parse(%Q!<<-eos\n\neos!) ■実行結果 ****"<<-eos\neos"**** on_heredoc_beg: ["<<-eos"] on_string_content: [] on_string_literal: [[]] on_nl: ["\n"] on_stmts_new: [] on_stmts_add: [[], [[]]] on_program: [[[], [[]]]] ****"<<-eos\n\neos"**** on_heredoc_beg: ["<<-eos"] on_string_content: [] on_tstring_content: ["\n"] on_heredoc_end: ["eos"] on_string_add: [[], ["\n"]] on_string_literal: [[[], ["\n"]]] on_nl: ["\n"] on_stmts_new: [] on_stmts_add: [[], [[[], ["\n"]]]] on_program: [[[], [[[], ["\n"]]]]] =end -- http://redmine.ruby-lang.org