Index: parse.y =================================================================== --- parse.y (revision 25401) +++ parse.y (working copy) @@ -4744,6 +4744,18 @@ } static void +ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t) +{ + VALUE str; + + if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp"); + if (lex_p == parser->tokp) return; + str = STR_NEW(parser->tokp, lex_p - parser->tokp); + ripper_dispatch1(parser, ripper_token2eventid(t), str); + ripper_flush(parser); +} + +static void ripper_dispatch_delayed_token(struct parser_params *parser, int t) { int saved_line = ruby_sourceline; @@ -5900,7 +5912,7 @@ if (!NIL_P(parser->delayed)) ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); lex_goto_eol(parser); - ripper_dispatch_scan_event(parser, tHEREDOC_END); + ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END); #endif line = here->nd_orig; lex_lastline = line;