diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-03-21 23:25:03 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-03-21 23:25:03 -0700 |
| commit | ab7bd61596e0d684c27d08088e51cca092291751 (patch) | |
| tree | e7af45d8632180b7c6b56db0df7013b0a1ff1013 /src/codegen.c | |
| parent | f6646f44c2a33147b7f491d1551243c96f72ab25 (diff) | |
| parent | 4be161c43c4c22c9d3e081e30cf5964ab970a0a7 (diff) | |
| download | mruby-ab7bd61596e0d684c27d08088e51cca092291751.tar.gz mruby-ab7bd61596e0d684c27d08088e51cca092291751.zip | |
Merge pull request #1040 from mattn/backtick
xquote operator
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/codegen.c b/src/codegen.c index 7a91d597d..8fb1eebe9 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2031,6 +2031,26 @@ codegen(codegen_scope *s, node *tree, int val) gen_literal_array(s, tree, TRUE, val); break; + case NODE_XSTR: + if (val) { + char *p = (char*)tree->car; + size_t len = (intptr_t)tree->cdr; + int ai = mrb_gc_arena_save(s->mrb); + int sym = new_sym(s, mrb_intern2(s->mrb, "Kernel", 6)); + int off = new_lit(s, mrb_str_new(s->mrb, p, len)); + + genop(s, MKOP_A(OP_OCLASS, cursp())); + genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym)); + push(); + genop(s, MKOP_ABx(OP_STRING, cursp(), off)); + pop(); + sym = new_sym(s, mrb_intern2(s->mrb, "`", 1)); + genop(s, MKOP_ABC(OP_SEND, cursp(), sym, 1)); + mrb_gc_arena_restore(s->mrb, ai); + push(); + } + break; + case NODE_REGX: if (val) { char *p1 = (char*)tree->car; |
