summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-28 10:43:22 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-02-28 10:43:22 +0900
commitc52bbe1b4e97d6580cced6c1b3819bd2e9289cc8 (patch)
tree2d3b62e40a1dea655d572f2b92af016b94650869 /mrbgems/mruby-compiler
parent89eac4f59dc128041811884773f348942095dea9 (diff)
downloadmruby-c52bbe1b4e97d6580cced6c1b3819bd2e9289cc8.tar.gz
mruby-c52bbe1b4e97d6580cced6c1b3819bd2e9289cc8.zip
Fixed a bug in dregex option generation; fix #3471
Diffstat (limited to 'mrbgems/mruby-compiler')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 23e036d49..f198dbd5b 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -2473,16 +2473,23 @@ codegen(codegen_scope *s, node *tree, int val)
pop();
genop_peep(s, MKOP_AB(OP_STRCAT, cursp(), cursp()+1), VAL);
}
- if (n->cdr) {
- char *p2 = (char*)n->cdr;
+ if (n->cdr->car) {
+ char *p2 = (char*)n->cdr->car;
push();
off = new_lit(s, mrb_str_new_cstr(s->mrb, p2));
genop(s, MKOP_ABx(OP_STRING, cursp(), off));
argc++;
- pop();
}
- pop();
+ if (n->cdr->cdr) {
+ char *p2 = (char*)n->cdr->cdr;
+
+ push();
+ off = new_lit(s, mrb_str_new_cstr(s->mrb, p2));
+ genop(s, MKOP_ABx(OP_STRING, cursp(), off));
+ argc++;
+ }
+ pop_n(argc);
sym = new_sym(s, mrb_intern_lit(s->mrb, "compile"));
genop(s, MKOP_ABC(OP_SEND, cursp(), sym, argc));
mrb_gc_arena_restore(s->mrb, ai);