diff options
author | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-05-08 13:21:33 +0200 |
---|---|---|
committer | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-05-08 13:21:33 +0200 |
commit | c6b7139d0394638ef51b451b81dcd2ffefb94160 (patch) | |
tree | f1513b0afc5ef798382100a53c3191ff52e66d3e /lib/ffi/variadic.rb | |
parent | c1e6a14476e210efeac79aa260c2eb2d1d98a580 (diff) | |
parent | 938b5d8590361acf871fddb9149fe725f65d781f (diff) | |
download | ffi-c6b7139d0394638ef51b451b81dcd2ffefb94160.tar.gz |
Merge branch 'ractor'
Diffstat (limited to 'lib/ffi/variadic.rb')
-rw-r--r-- | lib/ffi/variadic.rb | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/lib/ffi/variadic.rb b/lib/ffi/variadic.rb index 743ce7f..ee33409 100644 --- a/lib/ffi/variadic.rb +++ b/lib/ffi/variadic.rb @@ -54,16 +54,27 @@ module FFI invoker = self params = "*args" call = "call" - mod.module_eval <<-code - @@#{mname} = invoker - def self.#{mname}(#{params}) - @@#{mname}.#{call}(#{params}) - end - def #{mname}(#{params}) - @@#{mname}.#{call}(#{params}) - end + mname = mname.to_sym + mod.module_eval <<-code, __FILE__, __LINE__ + @ffi_functions = {} unless defined?(@ffi_functions) + @ffi_functions[#{mname.inspect}] = invoker + + def self.#{mname}(#{params}) + @ffi_functions[#{mname.inspect}].#{call}(#{params}) + end + + define_method(#{mname.inspect}, &method(#{mname.inspect})) code invoker end + + # Retrieve Array of parameter types + # + # This method returns an Array of FFI types accepted as function parameters. + # + # @return [Array<FFI::Type>] + def param_types + [*@fixed, Type::Builtin::VARARGS] + end end end |