diff options
| author | dearblue <[email protected]> | 2019-02-27 20:22:24 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2019-02-27 22:58:13 +0900 |
| commit | 4d2bb3cb47b3628eb140d1d28f79f29887cf6262 (patch) | |
| tree | 770e07ff16b1e2e85600b2b274d34cca8309a74e /mrbgems/mruby-compiler/core | |
| parent | 8ead6da9132e57f2b8e47e4dfb793aa1b90e5daa (diff) | |
| download | mruby-4d2bb3cb47b3628eb140d1d28f79f29887cf6262.tar.gz mruby-4d2bb3cb47b3628eb140d1d28f79f29887cf6262.zip | |
Compositing `NODE_DSTR` and `NODE_STR`
Diffstat (limited to 'mrbgems/mruby-compiler/core')
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 15 |
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)); } |
