parse.y: fix r60644

* parse.y (rb_strterm_heredoc_t): should not define sourceline as
  union, to fix wrong read on big-endian platforms.
  as rb_imemo_new stores all members as VALUEs, should read it as
  VALUE too.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60720 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-11-08 23:09:25 +00:00
parent b887848188
commit cf3329cb8d

View File

@ -757,10 +757,7 @@ typedef struct rb_strterm_literal_struct {
} rb_strterm_literal_t;
typedef struct rb_strterm_heredoc_struct {
union {
VALUE dummy;
int sourceline;
} u1;
SIGNED_VALUE sourceline;
VALUE term; /* `"END"` of `<<"END"` */
VALUE lastline; /* the string of line that contains `<<"END"` */
union {
@ -6793,7 +6790,7 @@ parser_heredoc_restore(struct parser_params *parser, rb_strterm_heredoc_t *here)
lex_pend = lex_pbeg + RSTRING_LEN(line);
lex_p = lex_pbeg + here->u3.lastidx;
heredoc_end = ruby_sourceline;
ruby_sourceline = here->u1.sourceline;
ruby_sourceline = (int)here->sourceline;
token_flush(parser);
}