mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
* error.c (rb_check_typed_struct): new function to check typed
struct. * include/ruby/ruby.h (Check_TypedStruct, Data_Get_TypedStruct): new macro to check typed struct. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23981 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
0f2d1527ab
commit
7bb9cc23a1
3 changed files with 34 additions and 0 deletions
20
error.c
20
error.c
|
@ -316,6 +316,26 @@ rb_check_type(VALUE x, int t)
|
|||
}
|
||||
}
|
||||
|
||||
void *
|
||||
rb_check_typed_struct(VALUE obj, const rb_data_type_t *data_type)
|
||||
{
|
||||
const char *etype;
|
||||
static const char mesg[] = "wrong argument type %s (expected %s)";
|
||||
|
||||
if (SPECIAL_CONST_P(obj) || BUILTIN_TYPE(obj) != T_DATA) {
|
||||
Check_Type(obj, T_DATA);
|
||||
}
|
||||
if (!RTYPEDDATA_P(obj)) {
|
||||
etype = rb_obj_classname(obj);
|
||||
rb_raise(rb_eTypeError, mesg, etype, data_type->name);
|
||||
}
|
||||
else if (RTYPEDDATA_TYPE(obj) != data_type) {
|
||||
etype = RTYPEDDATA_TYPE(obj)->name;
|
||||
rb_raise(rb_eTypeError, mesg, etype, data_type->name);
|
||||
}
|
||||
return DATA_PTR(obj);
|
||||
}
|
||||
|
||||
/* exception classes */
|
||||
#include <errno.h>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue