diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-07-02 19:41:40 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-07-02 19:41:40 +0900 |
| commit | 0d54dbb2644b468e255564cfdbb5c435e1e3686f (patch) | |
| tree | c07762eca978060002b6103bc1febce552de7e07 /src | |
| parent | 38a10e8a98bdaeab8e8bd4a34e65fcc4a3c775e2 (diff) | |
| download | mruby-0d54dbb2644b468e255564cfdbb5c435e1e3686f.tar.gz mruby-0d54dbb2644b468e255564cfdbb5c435e1e3686f.zip | |
Fix and refine error message in `mrb_obj_to_sym()`
Before this patch:
$ bin/mruby -e '1.respond_to?(2)' #=> nil is not a symbol
After this patch (same as Ruby):
$ bin/mruby -e '1.respond_to?(2)' #=> 2 is not a symbol nor a string
Diffstat (limited to 'src')
| -rw-r--r-- | src/etc.c | 22 |
1 files changed, 4 insertions, 18 deletions
@@ -65,24 +65,10 @@ mrb_data_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) MRB_API mrb_sym mrb_obj_to_sym(mrb_state *mrb, mrb_value name) { - mrb_sym id; - - switch (mrb_type(name)) { - default: - name = mrb_check_string_type(mrb, name); - if (mrb_nil_p(name)) { - name = mrb_inspect(mrb, name); - mrb_raisef(mrb, E_TYPE_ERROR, "%S is not a symbol", name); - /* not reached */ - } - /* fall through */ - case MRB_TT_STRING: - name = mrb_str_intern(mrb, name); - /* fall through */ - case MRB_TT_SYMBOL: - id = mrb_symbol(name); - } - return id; + if (mrb_symbol_p(name)) return mrb_symbol(name); + if (mrb_string_p(name)) return mrb_intern_str(mrb, name); + mrb_raisef(mrb, E_TYPE_ERROR, "%S is not a symbol nor a string", mrb_inspect(mrb, name)); + return 0; /* not reached */ } MRB_API mrb_int |
