From 1ab4dbcbf365d0ef75d08d28478c06fcf8628afe Mon Sep 17 00:00:00 2001 From: mattn Date: Thu, 21 Mar 2013 19:45:47 +0900 Subject: Backtick operation --- src/codegen.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/codegen.c') diff --git a/src/codegen.c b/src/codegen.c index 7a91d597d..1e4802d01 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_intern(s->mrb, "Kernel")); + 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_intern(s->mrb, "__backtick__")); + 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; -- cgit v1.2.3 From 603302c74ce450ceb490ff0533fde15be73fb206 Mon Sep 17 00:00:00 2001 From: mattn Date: Fri, 22 Mar 2013 09:08:12 +0900 Subject: Use ` --- src/codegen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/codegen.c') diff --git a/src/codegen.c b/src/codegen.c index 1e4802d01..cb00e2896 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2043,8 +2043,8 @@ codegen(codegen_scope *s, node *tree, int val) genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym)); push(); genop(s, MKOP_ABx(OP_STRING, cursp(), off)); - pop(); - sym = new_sym(s, mrb_intern(s->mrb, "__backtick__")); + pop(); + sym = new_sym(s, mrb_intern(s->mrb, "`")); genop(s, MKOP_ABC(OP_SEND, cursp(), sym, 1)); mrb_gc_arena_restore(s->mrb, ai); push(); -- cgit v1.2.3 From 4be161c43c4c22c9d3e081e30cf5964ab970a0a7 Mon Sep 17 00:00:00 2001 From: mattn Date: Fri, 22 Mar 2013 12:15:04 +0900 Subject: Use mrb_intern2 --- src/codegen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/codegen.c') diff --git a/src/codegen.c b/src/codegen.c index cb00e2896..8fb1eebe9 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2036,7 +2036,7 @@ codegen(codegen_scope *s, node *tree, int 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_intern(s->mrb, "Kernel")); + 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())); @@ -2044,7 +2044,7 @@ codegen(codegen_scope *s, node *tree, int val) push(); genop(s, MKOP_ABx(OP_STRING, cursp(), off)); pop(); - sym = new_sym(s, mrb_intern(s->mrb, "`")); + 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(); -- cgit v1.2.3