diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 4 | ||||
| -rw-r--r-- | src/symbol.c | 30 |
2 files changed, 29 insertions, 5 deletions
diff --git a/src/class.c b/src/class.c index e8f9b7638..bbf64e8ea 100644 --- a/src/class.c +++ b/src/class.c @@ -575,7 +575,7 @@ mrb_vm_define_class(mrb_state *mrb, mrb_value outer, mrb_value super, mrb_sym id MRB_API mrb_bool mrb_class_defined(mrb_state *mrb, const char *name) { - mrb_sym sym = mrb_check_intern_cstr(mrb, name); + mrb_sym sym = mrb_intern_check_cstr(mrb, name); if (!sym) return FALSE; return mrb_const_defined(mrb, mrb_obj_value(mrb->object_class), sym); } @@ -589,7 +589,7 @@ mrb_class_defined_id(mrb_state *mrb, mrb_sym name) MRB_API mrb_bool mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name) { - mrb_sym sym = mrb_check_intern_cstr(mrb, name); + mrb_sym sym = mrb_intern_check_cstr(mrb, name); if (!sym) return FALSE; return mrb_const_defined_at(mrb, mrb_obj_value(outer), sym); } diff --git a/src/symbol.c b/src/symbol.c index 9683d2f72..18ea49da5 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -268,7 +268,7 @@ mrb_intern_str(mrb_state *mrb, mrb_value str) } MRB_API mrb_sym -mrb_check_intern(mrb_state *mrb, const char *name, size_t len) +mrb_intern_check(mrb_state *mrb, const char *name, size_t len) { mrb_sym sym; @@ -278,16 +278,40 @@ mrb_check_intern(mrb_state *mrb, const char *name, size_t len) return 0; } +MRB_API mrb_value +mrb_check_intern(mrb_state *mrb, const char *name, size_t len) +{ + mrb_sym sym = mrb_intern_check(mrb, name, len); + if (sym == 0) return mrb_nil_value(); + return mrb_symbol_value(sym); +} + MRB_API mrb_sym +mrb_intern_check_cstr(mrb_state *mrb, const char *name) +{ + return mrb_intern_check(mrb, name, strlen(name)); +} + +MRB_API mrb_value mrb_check_intern_cstr(mrb_state *mrb, const char *name) { - return mrb_check_intern(mrb, name, strlen(name)); + mrb_sym sym = mrb_intern_check_cstr(mrb, name); + if (sym == 0) return mrb_nil_value(); + return mrb_symbol_value(sym); } MRB_API mrb_sym +mrb_intern_check_str(mrb_state *mrb, mrb_value str) +{ + return mrb_intern_check(mrb, RSTRING_PTR(str), RSTRING_LEN(str)); +} + +MRB_API mrb_value mrb_check_intern_str(mrb_state *mrb, mrb_value str) { - return mrb_check_intern(mrb, RSTRING_PTR(str), RSTRING_LEN(str)); + mrb_sym sym = mrb_intern_check_str(mrb, str); + if (sym == 0) return mrb_nil_value(); + return mrb_symbol_value(sym); } static const char* |
