mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
cache mrb_regexp_p(); ref #980
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user