summaryrefslogtreecommitdiff
path: root/lib/ffi/variadic.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ffi/variadic.rb')
-rw-r--r--lib/ffi/variadic.rb19
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