Updated attach_function macro to use dynamic number of arguments

This commit is contained in:
Josh Nussbaum
2016-06-13 02:05:15 -04:00
parent b55c4df0be
commit 39b04810e4

View File

@@ -8,15 +8,31 @@ defmodule FFI.Library do
end
defmacro attach_function(name, arguments, return_type) do
argument_names = make_argument_names(arguments)
quote do
def unquote(name)(params) do
def unquote(name)(unquote_splicing(argument_names)) do
definition = {ffi_lib,
unquote(name),
unquote(arguments),
unquote(return_type)}
FFI.call(definition, params)
FFI.call(definition, [unquote_splicing(argument_names)])
end
end
end
defp make_argument_names(arguments) do
arguments
|> Enum.with_index
|> Enum.map(&make_argument_name/1)
end
defp make_argument_name({_type, index}) do
variable_name = [?a + index]
|> to_string
|> String.to_atom
Macro.var(variable_name, nil)
end
end