diff options
| -rw-r--r-- | include/mruby.h | 4 | ||||
| -rw-r--r-- | src/etc.c | 13 |
2 files changed, 16 insertions, 1 deletions
diff --git a/include/mruby.h b/include/mruby.h index 065d835ce..9aa5b2cd3 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -124,9 +124,13 @@ typedef struct { typedef void (*mrb_atexit_func)(struct mrb_state*); +#define MRB_STATE_NO_REGEXP 1 +#define MRB_STATE_REGEXP 2 + typedef struct mrb_state { struct mrb_jmpbuf *jmp; + uint32_t flags; mrb_allocf allocf; /* memory allocation function */ void *allocf_ud; /* auxiliary data of allocf */ @@ -179,7 +179,18 @@ mrb_word_boxing_cptr_value(mrb_state *mrb, void *p) MRB_API mrb_bool mrb_regexp_p(mrb_state *mrb, mrb_value v) { - return mrb_class_defined(mrb, REGEXP_CLASS) && mrb_obj_is_kind_of(mrb, v, mrb_class_get(mrb, REGEXP_CLASS)); + if (mrb->flags & MRB_STATE_NO_REGEXP) { + return FALSE; + } + if ((mrb->flags & MRB_STATE_REGEXP) || mrb_class_defined(mrb, REGEXP_CLASS)) { + mrb->flags |= MRB_STATE_REGEXP; + return mrb_obj_is_kind_of(mrb, v, mrb_class_get(mrb, REGEXP_CLASS)); + } + else { + mrb->flags |= MRB_STATE_REGEXP; + mrb->flags |= MRB_STATE_NO_REGEXP; + } + return FALSE; } #if defined _MSC_VER && _MSC_VER < 1900 |
