summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authordearblue <[email protected]>2019-02-27 20:21:35 +0900
committerdearblue <[email protected]>2019-02-27 22:58:13 +0900
commit8ead6da9132e57f2b8e47e4dfb793aa1b90e5daa (patch)
tree888c7a68dcfb5f2049bd2bf7cd831a5f23f575b5
parent25957421bcea8070a796428c4dc6638142ffbb56 (diff)
downloadmruby-8ead6da9132e57f2b8e47e4dfb793aa1b90e5daa.tar.gz
mruby-8ead6da9132e57f2b8e47e4dfb793aa1b90e5daa.zip
Compositing `NODE_STR` and `NODE_DSTR`
-rw-r--r--mrbgems/mruby-compiler/core/parse.y11
1 files changed, 11 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index ea292c3b9..4c884fa92 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -881,6 +881,17 @@ concat_string(parser_state *p, node *a, node *b)
cons_free(b);
return a;
}
+ else {
+ /* a == NODE_STR && b == NODE_DSTR */
+
+ if (string_node_p(b->cdr->car)) {
+ /* a == NODE_STR && b->[NODE_STR, ...] */
+ composite_string_node(p, a->cdr, b->cdr->car->cdr);
+ cons_free(b->cdr->car);
+ b->cdr->car = a;
+ return b;
+ }
+ }
}
return new_dstr(p, list2(a, b));