diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-28 10:43:22 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-28 10:43:22 +0900 |
| commit | c52bbe1b4e97d6580cced6c1b3819bd2e9289cc8 (patch) | |
| tree | 2d3b62e40a1dea655d572f2b92af016b94650869 /mrbgems/mruby-compiler/core/codegen.c | |
| parent | 89eac4f59dc128041811884773f348942095dea9 (diff) | |
| download | mruby-c52bbe1b4e97d6580cced6c1b3819bd2e9289cc8.tar.gz mruby-c52bbe1b4e97d6580cced6c1b3819bd2e9289cc8.zip | |
Fixed a bug in dregex option generation; fix #3471
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 15 |
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); |
