Ruby  2.1.10p492(2016-04-01revision54464)
Macros | Functions | Variables
cfunc.c File Reference
#include <ruby/ruby.h>
#include <ruby/util.h>
#include <errno.h>
#include "dl.h"

Go to the source code of this file.

Macros

#define DECL_FUNC_CDECL(f, ret, args, val)   ret (FUNC_CDECL(*(f)))(args) = (ret (FUNC_CDECL(*))(args))(VALUE)(val)
 
#define CALL_CASE
 
#define CASE(n)
 
#define CASE(n)
 
#define CASE(n)
 
#define CASE(n)
 
#define CASE(n)
 
#define CASE(n)
 
#define CASE(n)
 
#define CASE(n)
 

Functions

static VALUE rb_dl_get_last_error (VALUE self)
 
static VALUE rb_dl_set_last_error (VALUE self, VALUE val)
 
static void dlcfunc_mark (void *ptr)
 
static void dlcfunc_free (void *ptr)
 
static size_t dlcfunc_memsize (const void *ptr)
 
VALUE rb_dlcfunc_new (void(*func)(), int type, const char *name, ID calltype)
 
voidrb_dlcfunc2ptr (VALUE val)
 
static VALUE rb_dlcfunc_s_allocate (VALUE klass)
 
int rb_dlcfunc_kind_p (VALUE func)
 
static VALUE rb_dlcfunc_initialize (int argc, VALUE argv[], VALUE self)
 
static VALUE rb_dlcfunc_name (VALUE self)
 
static VALUE rb_dlcfunc_ctype (VALUE self)
 
static VALUE rb_dlcfunc_set_ctype (VALUE self, VALUE ctype)
 
static VALUE rb_dlcfunc_calltype (VALUE self)
 
static VALUE rb_dlcfunc_set_calltype (VALUE self, VALUE sym)
 
static VALUE rb_dlcfunc_ptr (VALUE self)
 
static VALUE rb_dlcfunc_set_ptr (VALUE self, VALUE addr)
 
static VALUE rb_dlcfunc_inspect (VALUE self)
 
static VALUE rb_dlcfunc_call (VALUE self, VALUE ary)
 
static VALUE rb_dlcfunc_to_i (VALUE self)
 
void Init_dlcfunc (void)
 

Variables

VALUE rb_cDLCFunc
 
static ID id_last_error
 
const rb_data_type_t dlcfunc_data_type
 

Macro Definition Documentation

#define CALL_CASE
Value:
switch( RARRAY_LEN(ary) ){ \
CASE(0); break; \
CASE(1); break; CASE(2); break; CASE(3); break; CASE(4); break; CASE(5); break; \
CASE(6); break; CASE(7); break; CASE(8); break; CASE(9); break; CASE(10);break; \
CASE(11);break; CASE(12);break; CASE(13);break; CASE(14);break; CASE(15);break; \
CASE(16);break; CASE(17);break; CASE(18);break; CASE(19);break; CASE(20);break; \
default: rb_raise(rb_eArgError, "too many arguments"); \
}
void rb_raise(VALUE exc, const char *fmt,...)
Definition: error.c:1857
VALUE ary
Definition: enum.c:674
#define RARRAY_LEN(a)
#define CASE(n)
VALUE rb_eArgError
Definition: error.c:549

Definition at line 319 of file cfunc.c.

Referenced by rb_dlcfunc_call().

#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,void,DLSTACK_PROTO##n,cfunc->ptr); \
f(DLSTACK_ARGS##n(stack)); \
}
#define Qnil
Definition: enum.c:67
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,void*,DLSTACK_PROTO##n,cfunc->ptr); \
ret = f(DLSTACK_ARGS##n(stack)); \
result = PTR2NUM(ret); \
}
int ret
Definition: tcltklib.c:285
#define PTR2NUM(x)
Definition: dl.h:168
VP_EXPORT void
Definition: bigdecimal.c:5207
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,char,DLSTACK_PROTO##n,cfunc->ptr); \
char ret; \
ret = f(DLSTACK_ARGS##n(stack)); \
result = CHR2FIX(ret); \
}
int ret
Definition: tcltklib.c:285
#define CHR2FIX(x)
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,short,DLSTACK_PROTO##n,cfunc->ptr); \
short ret; \
ret = f(DLSTACK_ARGS##n(stack)); \
result = INT2NUM((int)ret); \
}
int ret
Definition: tcltklib.c:285
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
#define INT2NUM(x)
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,int,DLSTACK_PROTO##n,cfunc->ptr); \
ret = f(DLSTACK_ARGS##n(stack)); \
result = INT2NUM(ret); \
}
VP_EXPORT int
Definition: bigdecimal.c:5172
int ret
Definition: tcltklib.c:285
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
#define INT2NUM(x)
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,long,DLSTACK_PROTO##n,cfunc->ptr); \
long ret; \
ret = f(DLSTACK_ARGS##n(stack)); \
result = LONG2NUM(ret); \
}
int ret
Definition: tcltklib.c:285
#define LONG2NUM(x)
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,float,DLSTACK_PROTO##n,cfunc->ptr); \
float ret; \
ret = f(DLSTACK_ARGS##n(stack)); \
}
int ret
Definition: tcltklib.c:285
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
#define rb_float_new(d)
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define CASE (   n)
Value:
case n: { \
DECL_FUNC_CDECL(f,double,DLSTACK_PROTO##n,cfunc->ptr); \
double ret; \
ret = f(DLSTACK_ARGS##n(stack)); \
}
int ret
Definition: tcltklib.c:285
#define DLSTACK_ARGS(stack)
Definition: dl.h:42
#define f
#define rb_float_new(d)
data n
Definition: enum.c:860
#define DLSTACK_PROTO
Definition: dl.h:37
#define DECL_FUNC_CDECL(f, ret, args, val)
Definition: cfunc.c:312
volatile VALUE result
Definition: enum.c:1989
#define DECL_FUNC_CDECL (   f,
  ret,
  args,
  val 
)    ret (FUNC_CDECL(*(f)))(args) = (ret (FUNC_CDECL(*))(args))(VALUE)(val)

Definition at line 312 of file cfunc.c.

Function Documentation

static void dlcfunc_free ( void ptr)
static

Definition at line 55 of file cfunc.c.

References data, cfunc_data::name, ptr, and xfree.

static void dlcfunc_mark ( void ptr)
static

Definition at line 46 of file cfunc.c.

References data, ptr, rb_gc_mark(), and cfunc_data::wrap.

static size_t dlcfunc_memsize ( const void ptr)
static

Definition at line 65 of file cfunc.c.

References data, cfunc_data::name, ptr, size, and strlen().

void Init_dlcfunc ( void  )
static VALUE rb_dl_get_last_error ( VALUE  self)
static

Definition at line 15 of file cfunc.c.

References id_last_error, rb_thread_current(), and rb_thread_local_aref().

Referenced by Init_dlcfunc().

static VALUE rb_dl_set_last_error ( VALUE  self,
VALUE  val 
)
static

Definition at line 21 of file cfunc.c.

References id_last_error, Qnil, rb_thread_current(), and rb_thread_local_aset().

Referenced by rb_dlcfunc_call().

void* rb_dlcfunc2ptr ( VALUE  val)
static VALUE rb_dlcfunc_call ( VALUE  self,
VALUE  ary 
)
static
static VALUE rb_dlcfunc_calltype ( VALUE  self)
static

Definition at line 230 of file cfunc.c.

References cfunc_data::calltype, ID2SYM, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_ctype ( VALUE  self)
static

Definition at line 199 of file cfunc.c.

References INT2NUM, cfunc_data::type, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_initialize ( int  argc,
VALUE  argv[],
VALUE  self 
)
static
static VALUE rb_dlcfunc_inspect ( VALUE  self)
static
int rb_dlcfunc_kind_p ( VALUE  func)

Definition at line 139 of file cfunc.c.

References rb_typeddata_is_kind_of().

Referenced by get_freefunc().

static VALUE rb_dlcfunc_name ( VALUE  self)
static

Definition at line 183 of file cfunc.c.

References cfunc_data::name, Qnil, rb_tainted_str_new2, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

VALUE rb_dlcfunc_new ( void(*)()  func,
int  type,
const char *  name,
ID  calltype 
)
static VALUE rb_dlcfunc_ptr ( VALUE  self)
static

Definition at line 261 of file cfunc.c.

References cfunc_data::ptr, PTR2NUM, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_s_allocate ( VALUE  klass)
static
static VALUE rb_dlcfunc_set_calltype ( VALUE  self,
VALUE  sym 
)
static

Definition at line 245 of file cfunc.c.

References cfunc_data::calltype, sym, SYM2ID, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_set_ctype ( VALUE  self,
VALUE  ctype 
)
static

Definition at line 214 of file cfunc.c.

References NUM2INT, cfunc_data::type, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_set_ptr ( VALUE  self,
VALUE  addr 
)
static

Definition at line 276 of file cfunc.c.

References NUM2PTR, cfunc_data::ptr, Qnil, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_to_i ( VALUE  self)
static

Definition at line 615 of file cfunc.c.

References cfunc_data::ptr, PTR2NUM, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

Variable Documentation

const rb_data_type_t dlcfunc_data_type
Initial value:
= {
"dl/cfunc",
}
static void dlcfunc_free(void *ptr)
Definition: cfunc.c:55
static void dlcfunc_mark(void *ptr)
Definition: cfunc.c:46
static size_t dlcfunc_memsize(const void *ptr)
Definition: cfunc.c:65

Definition at line 78 of file cfunc.c.

ID id_last_error
static

Definition at line 12 of file cfunc.c.

Referenced by Init_dlcfunc(), rb_dl_get_last_error(), and rb_dl_set_last_error().

VALUE rb_cDLCFunc

Definition at line 10 of file cfunc.c.

Referenced by Init_dlcfunc(), and rb_dlcfunc_new().