diff --git a/lib/ffi/library.ex b/lib/ffi/library.ex index 40ee9a1..a5f9567 100644 --- a/lib/ffi/library.ex +++ b/lib/ffi/library.ex @@ -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