aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-11-08 23:09:25 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-11-08 23:09:25 +0000
commit9a4e85ed3c905739a6cee1cfed5084a251273941 (patch)
tree49bc656b751dd14dfa6507d025917f3c6e1c9ce4
parent9b981d113313f08ff6d8b9d4ecef15faeedc2901 (diff)
downloadruby-9a4e85ed3c905739a6cee1cfed5084a251273941.tar.gz
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
-rw-r--r--parse.y7
1 files changed, 2 insertions, 5 deletions
diff --git a/parse.y b/parse.y
index fab1eece8e..d9b3e2da03 100644
--- a/parse.y
+++ b/parse.y
@@ -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);
}