summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-11-25 09:33:20 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-11-25 09:33:20 +0900
commit55842c5a3482d507bae16f14f563a5eadfa0b720 (patch)
tree410dcc9689d96e13a49b735eb85a4ed0b663670c
parentd3ff9d31f0ee3775b5ed722515933aa7e79f7659 (diff)
parent73e4f069becaf69707b990d658b34155f8973508 (diff)
downloadmruby-55842c5a3482d507bae16f14f563a5eadfa0b720.tar.gz
mruby-55842c5a3482d507bae16f14f563a5eadfa0b720.zip
resolve conflict; ref #3279
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c6
-rw-r--r--mrbgems/mruby-compiler/core/parse.y2
-rw-r--r--test/t/codegen.rb8
3 files changed, 14 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 25db887a0..553baa116 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -2295,7 +2295,11 @@ codegen(codegen_scope *s, node *tree, int val)
if (val) {
node *n = tree;
- if (!n) break;
+ if (!n) {
+ genop(s, MKOP_A(OP_LOADNIL, cursp()));
+ push();
+ break;
+ }
codegen(s, n->car, VAL);
n = n->cdr;
while (n) {
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index 0ff7d819c..c44669f45 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -6541,7 +6541,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_HEREDOC:
printf("NODE_HEREDOC (<<%s):\n", ((parser_heredoc_info*)tree)->term);
- mrb_parser_dump(mrb, ((parser_heredoc_info*)tree)->doc, offset+1);
+ dump_recur(mrb, ((parser_heredoc_info*)tree)->doc, offset+1);
break;
default:
diff --git a/test/t/codegen.rb b/test/t/codegen.rb
index 7d6efdc98..1ac689a82 100644
--- a/test/t/codegen.rb
+++ b/test/t/codegen.rb
@@ -46,3 +46,11 @@ assert('method call with exactly 127 arguments') do
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
)
end
+
+assert('nested empty heredoc') do
+ _, a = nil, <<B
+#{<<A}
+A
+B
+ assert_equal "\n", a
+end