From b1a5146ea8f8665df5edf2b26dcadc028d7929f7 Mon Sep 17 00:00:00 2001 From: mattn Date: Fri, 15 Feb 2013 04:38:27 +0900 Subject: Pluggable Regexp --- src/codegen.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/codegen.c') 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)); -- cgit v1.2.3