summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler
diff options
context:
space:
mode:
authordearblue <[email protected]>2019-02-27 21:49:41 +0900
committerdearblue <[email protected]>2019-02-27 22:58:13 +0900
commit25957421bcea8070a796428c4dc6638142ffbb56 (patch)
tree24ffaf754f188f6a0c6f676db1abec8a5b4339a3 /mrbgems/mruby-compiler
parent477e5285e86afb5f33e74747a54201718a249489 (diff)
downloadmruby-25957421bcea8070a796428c4dc6638142ffbb56.tar.gz
mruby-25957421bcea8070a796428c4dc6638142ffbb56.zip
Replacement to function for composite two string nodes
Diffstat (limited to 'mrbgems/mruby-compiler')
-rw-r--r--mrbgems/mruby-compiler/core/parse.y21
1 files changed, 14 insertions, 7 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index 2771ddeed..ea292c3b9 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -859,18 +859,25 @@ string_node_p(node *n)
}
static node*
+composite_string_node(parser_state *p, node *a, node *b)
+{
+ size_t newlen = (size_t)a->cdr + (size_t)b->cdr;
+ char *str = (char*)mrb_pool_realloc(p->pool, a->car, (size_t)a->cdr + 1, newlen + 1);
+ memcpy(str + (size_t)a->cdr, b->car, (size_t)b->cdr);
+ str[newlen] = '\0';
+ a->car = (node*)str;
+ a->cdr = (node*)newlen;
+ cons_free(b);
+ return a;
+}
+
+static node*
concat_string(parser_state *p, node *a, node *b)
{
if (string_node_p(a)) {
if (string_node_p(b)) {
/* a == NODE_STR && b == NODE_STR */
- size_t newlen = (size_t)a->cdr->cdr + (size_t)b->cdr->cdr;
- char *str = (char*)mrb_pool_realloc(p->pool, a->cdr->car, (size_t)a->cdr->cdr + 1, newlen + 1);
- memcpy(str + (size_t)a->cdr->cdr, b->cdr->car, (size_t)b->cdr->cdr);
- str[newlen] = '\0';
- a->cdr->car = (node*)str;
- a->cdr->cdr = (node*)newlen;
- cons_free(b->cdr);
+ composite_string_node(p, a->cdr, b->cdr);
cons_free(b);
return a;
}