diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-09-19 21:51:53 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-11-19 12:05:46 +0900 |
| commit | ff08856fe314faa4d16b4502c0960a3475387846 (patch) | |
| tree | 5e5bd17dc3d05a9be4c02fe80d3ecfea0ff68269 /src/class.c | |
| parent | afca99a40b8a3415b3a9a0e8fc41c93ddcbb11d8 (diff) | |
| download | mruby-ff08856fe314faa4d16b4502c0960a3475387846.tar.gz mruby-ff08856fe314faa4d16b4502c0960a3475387846.zip | |
Remove implicit conversion using `to_str` method; fix #3854
We have added internal convenience method `__to_str` which
does string type check.
The issue #3854 was fixed but fundamental flaw of lack of stack
depth check along with fibers still remains. Use `MRB_GC_FIXED_ARENA`
for workaround.
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c index 50ab0ea59..90c73104e 100644 --- a/src/class.c +++ b/src/class.c @@ -504,10 +504,17 @@ check_type(mrb_state *mrb, mrb_value val, enum mrb_vtype t, const char *c, const return tmp; } +#define CHECK_TYPE(mrb, val, t, c) do { \ + if (mrb_type(val) != (t)) {\ + mrb_raisef(mrb, E_TYPE_ERROR, "expected %S", mrb_str_new_lit(mrb, c));\ + }\ +} while (0) + static mrb_value to_str(mrb_state *mrb, mrb_value val) { - return check_type(mrb, val, MRB_TT_STRING, "String", "to_str"); + CHECK_TYPE(mrb, val, MRB_TT_STRING, "String"); + return val; } static mrb_value @@ -1972,7 +1979,7 @@ mrb_mod_const_get(mrb_state *mrb, mrb_value mod) } /* const get with class path string */ - path = mrb_string_type(mrb, path); + path = mrb_ensure_string_type(mrb, path); ptr = RSTRING_PTR(path); len = RSTRING_LEN(path); off = 0; |
