From 9a4e85ed3c905739a6cee1cfed5084a251273941 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 8 Nov 2017 23:09:25 +0000 Subject: 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 --- parse.y | 7 ++----- 1 file 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); } -- cgit v1.2.3