def heredoc_identifier
term, func = nil, STR_FUNC_BORING
self.string_buffer = []
case
when src.scan(/(-?)(['"`])(.*?)\2/) then
term = src[2]
func |= STR_FUNC_INDENT unless src[1].empty?
func |= case term
when "\'" then
STR_SQUOTE
when '"' then
STR_DQUOTE
else
STR_XQUOTE
end
string_buffer << src[3]
when src.scan(/-?(['"`])(?!\1*\Z)/) then
rb_compile_error "unterminated here document identifier"
when src.scan(/(-?)(\w+)/) then
term = '"'
func |= STR_DQUOTE
unless src[1].empty? then
func |= STR_FUNC_INDENT
end
string_buffer << src[2]
else
return nil
end
if src.scan(/.*\n/) then
line = src.matched
src.extra_lines_added += 1
else
line = nil
end
self.lex_strterm = [:heredoc, string_buffer.join, func, line]
if term == '`' then
self.yacc_value = "`"
return :tXSTRING_BEG
else
self.yacc_value = "\""
return :tSTRING_BEG
end
end