rb_check_typeddata: do not goto into a branch
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
This commit is contained in:
parent
c47b805d8c
commit
a2677815f5
Notes:
git
2020-06-29 11:07:07 +09:00
26
error.c
26
error.c
@ -908,23 +908,23 @@ rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type)
|
|||||||
const char *etype;
|
const char *etype;
|
||||||
|
|
||||||
if (!RB_TYPE_P(obj, T_DATA)) {
|
if (!RB_TYPE_P(obj, T_DATA)) {
|
||||||
wrong_type:
|
etype = builtin_class_name(obj);
|
||||||
etype = builtin_class_name(obj);
|
|
||||||
if (!etype)
|
|
||||||
rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (expected %s)",
|
|
||||||
rb_obj_class(obj), data_type->wrap_struct_name);
|
|
||||||
wrong_datatype:
|
|
||||||
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
|
|
||||||
etype, data_type->wrap_struct_name);
|
|
||||||
}
|
}
|
||||||
if (!RTYPEDDATA_P(obj)) {
|
else if (!RTYPEDDATA_P(obj)) {
|
||||||
goto wrong_type;
|
etype = builtin_class_name(obj);
|
||||||
}
|
}
|
||||||
else if (!rb_typeddata_inherited_p(RTYPEDDATA_TYPE(obj), data_type)) {
|
else if (!rb_typeddata_inherited_p(RTYPEDDATA_TYPE(obj), data_type)) {
|
||||||
etype = RTYPEDDATA_TYPE(obj)->wrap_struct_name;
|
etype = RTYPEDDATA_TYPE(obj)->wrap_struct_name;
|
||||||
goto wrong_datatype;
|
|
||||||
}
|
}
|
||||||
return DATA_PTR(obj);
|
else {
|
||||||
|
return DATA_PTR(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* rb_obj_classname() cannot be used. A class name can be non-ASCII. */
|
||||||
|
const char *expected = data_type->wrap_struct_name;
|
||||||
|
VALUE actual = (etype) ? rb_str_new_cstr(etype) : rb_obj_class(obj);
|
||||||
|
rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (expected %s)",
|
||||||
|
actual, expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* exception classes */
|
/* exception classes */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user