summaryrefslogtreecommitdiffhomepage
path: root/src/codegen.c
diff options
context:
space:
mode:
authormattn <[email protected]>2013-02-15 04:38:27 +0900
committermattn <[email protected]>2013-02-15 04:38:27 +0900
commitb1a5146ea8f8665df5edf2b26dcadc028d7929f7 (patch)
tree0712ef0ebbc5254528c7eaad88b8535f58607db0 /src/codegen.c
parent8578cd622ba6644a0421bcb35e44e0f7b2927a54 (diff)
downloadmruby-b1a5146ea8f8665df5edf2b26dcadc028d7929f7.tar.gz
mruby-b1a5146ea8f8665df5edf2b26dcadc028d7929f7.zip
Pluggable Regexp
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/codegen.c b/src/codegen.c
index 1f6d16477..a3e2995a0 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -1910,6 +1910,23 @@ codegen(codegen_scope *s, node *tree, int val)
}
break;
+ case NODE_REGX:
+ if (val) {
+ char *p = (char*)tree->car;
+ size_t len = (intptr_t)tree->cdr;
+ int ai = mrb_gc_arena_save(s->mrb);
+ struct RClass* c = mrb_class_get(s->mrb, "Regexp");
+ mrb_value args[1];
+ args[0] = mrb_str_new(s->mrb, p, len);
+ int off = new_lit(s,
+ mrb_class_new_instance(s->mrb, 1, args, c));
+
+ mrb_gc_arena_restore(s->mrb, ai);
+ genop(s, MKOP_ABx(OP_STRING, cursp(), off));
+ push();
+ }
+ break;
+
case NODE_SYM:
if (val) {
int sym = new_sym(s, sym(tree));