summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler
diff options
context:
space:
mode:
authordearblue <[email protected]>2019-02-27 20:22:24 +0900
committerdearblue <[email protected]>2019-02-27 22:58:13 +0900
commit4d2bb3cb47b3628eb140d1d28f79f29887cf6262 (patch)
tree770e07ff16b1e2e85600b2b274d34cca8309a74e /mrbgems/mruby-compiler
parent8ead6da9132e57f2b8e47e4dfb793aa1b90e5daa (diff)
downloadmruby-4d2bb3cb47b3628eb140d1d28f79f29887cf6262.tar.gz
mruby-4d2bb3cb47b3628eb140d1d28f79f29887cf6262.zip
Compositing `NODE_DSTR` and `NODE_STR`
Diffstat (limited to 'mrbgems/mruby-compiler')
-rw-r--r--mrbgems/mruby-compiler/core/parse.y15
1 files changed, 15 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index 4c884fa92..fed8cfbbc 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -893,6 +893,21 @@ concat_string(parser_state *p, node *a, node *b)
}
}
}
+ else if (string_node_p(b)) {
+ /* a == NODE_DSTR && b == NODE_STR */
+
+ node *c;
+ for (c = a; c->cdr != NULL; c = c->cdr) ;
+ if (string_node_p(c->car)) {
+ /* a->[..., NODE_STR] && b == NODE_STR */
+ composite_string_node(p, c->car->cdr, b->cdr);
+ cons_free(b);
+ return a;
+ }
+
+ push(a, b);
+ return a;
+ }
return new_dstr(p, list2(a, b));
}