diff options
Diffstat (limited to 'lib/ffi/variadic.rb')
-rw-r--r-- | lib/ffi/variadic.rb | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/ffi/variadic.rb b/lib/ffi/variadic.rb index 743ce7f..42c5549 100644 --- a/lib/ffi/variadic.rb +++ b/lib/ffi/variadic.rb @@ -55,15 +55,20 @@ module FFI 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 + @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})) code invoker end + + def param_types + [*@fixed, Type::Builtin::VARARGS] + end end end |