From e871a1538d2c84c56d102656d393ecf630f4deef Mon Sep 17 00:00:00 2001 From: dearblue Date: Wed, 27 Feb 2019 20:22:55 +0900 Subject: Compositing `NODE_DSTR` and `NODE_DSTR` --- mrbgems/mruby-compiler/core/parse.y | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index fed8cfbbc..57eb03cc6 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -908,6 +908,27 @@ concat_string(parser_state *p, node *a, node *b) push(a, b); return a; } + else { + /* a == NODE_DSTR && b == NODE_DSTR */ + + node *c, *d; + for (c = a; c->cdr != NULL; c = c->cdr) ; + if (string_node_p(c->car) && string_node_p(b->cdr->car)) { + /* a->[..., NODE_STR] && b->[NODE_STR, ...] */ + d = b->cdr; + cons_free(b); + composite_string_node(p, c->car->cdr, d->car->cdr); + cons_free(d->car); + c->cdr = d->cdr; + cons_free(d); + return a; + } + else { + c->cdr = b->cdr; + cons_free(b); + return a; + } + } return new_dstr(p, list2(a, b)); } -- cgit v1.2.3