fiddle icon indicating copy to clipboard operation
fiddle copied to clipboard

Fiddle Closure ABI

Open sancarn opened this issue 6 years ago • 1 comments

Include information about what an ABI is in docs regarding Fiddle Closure constructor, perhaps even include definitions below in Fiddle::ABI?

typedef enum ffi_abi {
#if defined(X86_WIN64)
  FFI_FIRST_ABI = 0,
  FFI_WIN64,            /* sizeof(long double) == 8  - microsoft compilers */
  FFI_GNUW64,           /* sizeof(long double) == 16 - GNU compilers */
  FFI_LAST_ABI,
#ifdef __GNUC__
  FFI_DEFAULT_ABI = FFI_GNUW64
#else  
  FFI_DEFAULT_ABI = FFI_WIN64
#endif  

#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN))
  FFI_FIRST_ABI = 1,
  FFI_UNIX64,
  FFI_WIN64,
  FFI_EFI64 = FFI_WIN64,
  FFI_GNUW64,
  FFI_LAST_ABI,
  FFI_DEFAULT_ABI = FFI_UNIX64

#elif defined(X86_WIN32)
  FFI_FIRST_ABI = 0,
  FFI_SYSV      = 1,
  FFI_STDCALL   = 2,
  FFI_THISCALL  = 3,
  FFI_FASTCALL  = 4,
  FFI_MS_CDECL  = 5,
  FFI_PASCAL    = 6,
  FFI_REGISTER  = 7,
  FFI_LAST_ABI,
  FFI_DEFAULT_ABI = FFI_MS_CDECL
#else
  FFI_FIRST_ABI = 0,
  FFI_SYSV      = 1,
  FFI_THISCALL  = 3,
  FFI_FASTCALL  = 4,
  FFI_STDCALL   = 5,
  FFI_PASCAL    = 6,
  FFI_REGISTER  = 7,
  FFI_MS_CDECL  = 8,
  FFI_LAST_ABI,
  FFI_DEFAULT_ABI = FFI_SYSV
#endif
} ffi_abi;
#endif

sancarn avatar Jun 20 '18 16:06 sancarn

That being said I couldn't actually instantiate any other ABIs either, so I guess they aren't implemented in cygwin? Or maybe I'm just using the Closure class incorrectly...?

begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],0);puts 0;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],1);puts 1;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],2);puts 2;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],3);puts 3;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],4);puts 4;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],5);puts 5;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],6);puts 6;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],7);puts 7;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],8);puts 8;rescue;end
begin;Class.new(Fiddle::Closure){}.new(Fiddle::TYPE_VOID, [],9);puts 9;rescue;end

sancarn avatar Jun 20 '18 16:06 sancarn