Defines | Functions | Variables

ext/dl/cfunc.c File Reference

#include <ruby.h>
#include <errno.h>
#include "dl.h"
Include dependency graph for cfunc.c:

Go to the source code of this file.

Defines

#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

VALUE rb_big2ulong_pack (VALUE x)
static VALUE rb_dl_get_last_error (VALUE self)
static VALUE rb_dl_set_last_error (VALUE self, VALUE val)
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)
void * rb_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

Define 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"); \
}

Definition at line 309 of file cfunc.c.

#define CASE (   n  ) 
Value:
case n: { \
            DECL_FUNC_CDECL(f,double,DLSTACK_PROTO##n,cfunc->ptr); \
            double ret; \
            ret = f(DLSTACK_ARGS##n(stack)); \
            result = rb_float_new(ret); \
}
#define CASE (   n  ) 
Value:
case n: { \
            DECL_FUNC_CDECL(f,float,DLSTACK_PROTO##n,cfunc->ptr); \
            float ret; \
            ret = f(DLSTACK_ARGS##n(stack)); \
            result = rb_float_new(ret); \
}
#define CASE (   n  ) 
Value:
case n: { \
            DECL_FUNC_CDECL(f,void*,DLSTACK_PROTO##n,cfunc->ptr); \
            void * ret; \
            ret = f(DLSTACK_ARGS##n(stack)); \
            result = PTR2NUM(ret); \
}
#define CASE (   n  ) 
Value:
case n: { \
            DECL_FUNC_CDECL(f,int,DLSTACK_PROTO##n,cfunc->ptr); \
            int ret; \
            ret = f(DLSTACK_ARGS##n(stack)); \
            result = INT2NUM(ret); \
}
#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); \
}
#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); \
}
#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); \
}
#define CASE (   n  ) 
Value:
case n: { \
            DECL_FUNC_CDECL(f,void,DLSTACK_PROTO##n,cfunc->ptr); \
            f(DLSTACK_ARGS##n(stack)); \
            result = Qnil; \
}
#define DECL_FUNC_CDECL (   f,
  ret,
  args,
  val 
)    ret (FUNC_CDECL(*f))(args) = (ret (FUNC_CDECL(*))(args))(VALUE)(val)

Definition at line 302 of file cfunc.c.


Function Documentation

static void dlcfunc_free ( void *  ptr  )  [static]

Definition at line 48 of file cfunc.c.

References cfunc_data::name, and xfree().

static size_t dlcfunc_memsize ( const void *  ptr  )  [static]

Definition at line 58 of file cfunc.c.

References cfunc_data::name, and size.

void Init_dlcfunc ( void   ) 
VALUE rb_big2ulong_pack ( VALUE  x  ) 

Definition at line 1164 of file bignum.c.

References big2ulong(), FALSE, and RBIGNUM_SIGN.

Referenced by rb_dlcfunc_call().

static VALUE rb_dl_get_last_error ( VALUE  self  )  [static]

Definition at line 16 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 22 of file cfunc.c.

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

Referenced by rb_dlcfunc_call().

void* rb_dlcfunc2ptr ( VALUE  val  ) 

Definition at line 98 of file cfunc.c.

References DATA_PTR, func, cfunc_data::ptr, Qnil, rb_eTypeError, rb_raise(), and rb_typeddata_is_kind_of().

static VALUE rb_dlcfunc_call ( VALUE  self,
VALUE  ary 
) [static]
static VALUE rb_dlcfunc_calltype ( VALUE  self  )  [static]

Definition at line 222 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 191 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 133 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 175 of file cfunc.c.

References cfunc_data::name, 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 253 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 237 of file cfunc.c.

References cfunc_data::calltype, SYM2ID, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_set_ctype ( VALUE  self,
VALUE  ctype 
) [static]

Definition at line 206 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 268 of file cfunc.c.

References NUM2PTR, cfunc_data::ptr, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().

static VALUE rb_dlcfunc_to_i ( VALUE  self  )  [static]

Definition at line 592 of file cfunc.c.

References cfunc_data::ptr, PTR2NUM, and TypedData_Get_Struct.

Referenced by Init_dlcfunc().


Variable Documentation

Initial value:
 {
    "dl/cfunc",
    0, dlcfunc_free, dlcfunc_memsize,
}

Definition at line 71 of file cfunc.c.

ID id_last_error [static]

Definition at line 13 of file cfunc.c.

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

Definition at line 11 of file cfunc.c.

Referenced by Init_dlcfunc(), and rb_dlcfunc_new().