示例#1
0
static inline freefunc_t
get_freefunc(VALUE func)
{
    if (NIL_P(func)) {
	return NULL;
    }
    if (rb_dlcfunc_kind_p(func)) {
	return (freefunc_t)(VALUE)RCFUNC_DATA(func)->ptr;
    }
    return (freefunc_t)(VALUE)NUM2PTR(rb_Integer(func));
}
示例#2
0
文件: cptr.c 项目: ArekX/RAGE
static inline freefunc_t
get_freefunc(VALUE func, volatile VALUE *wrap)
{
    VALUE addrnum;
    if (NIL_P(func)) {
	*wrap = 0;
	return NULL;
    }
    if (rb_dlcfunc_kind_p(func)) {
	*wrap = func;
	return (freefunc_t)(VALUE)RCFUNC_DATA(func)->ptr;
    }
    addrnum = rb_Integer(func);
    *wrap = (addrnum != func) ? func : 0;
    return (freefunc_t)(VALUE)NUM2PTR(addrnum);
}