From 360ce182efa373598b39225a8458f8e36d110fe1 Mon Sep 17 00:00:00 2001 From: Thiep Ha Date: Fri, 12 Jan 2018 18:45:13 +0900 Subject: [PATCH] eolian_cxx: support multiple function pointers --- src/lib/eolian_cxx/grammar/converting_argument.hpp | 4 ++-- src/lib/eolian_cxx/grammar/klass_def.hpp | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/eolian_cxx/grammar/converting_argument.hpp b/src/lib/eolian_cxx/grammar/converting_argument.hpp index c419d36b7c..6975743520 100644 --- a/src/lib/eolian_cxx/grammar/converting_argument.hpp +++ b/src/lib/eolian_cxx/grammar/converting_argument.hpp @@ -35,8 +35,8 @@ struct converting_argument_generator attributes::qualifier_def qualifier = param.type.original_type.visit(attributes::get_qualifier_visitor{}); if (param.type.original_type.visit(this->is_function_ptr)) { - // FIXME: This supports only one function pointer. - return as_generator("fw->data_to_c(), fw->func_to_c(), fw->free_to_c()") + return as_generator("fw_" << param.param_name << "->data_to_c(), fw_" << param.param_name << "->func_to_c(), fw_" + << param.param_name << "->free_to_c()") .generate(sink, param, ctx); } else diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp index 16d15b6f24..baaa61382e 100644 --- a/src/lib/eolian_cxx/grammar/klass_def.hpp +++ b/src/lib/eolian_cxx/grammar/klass_def.hpp @@ -703,7 +703,6 @@ struct function_def std::vector opening_statements() const { - // FIXME: Supports only one function pointer std::vector statements; char template_typename = 'F'; for (auto const& param : this->parameters) @@ -714,7 +713,7 @@ struct function_def { char typenam[2] = { 0, }; typenam[0] = template_typename++; - std::string statement = "auto fw = new ::efl::eolian::function_wrapper<"; + std::string statement = "auto fw_" + param.param_name + " = new ::efl::eolian::function_wrapper<"; statement += param.type.c_type + ", " + typenam + ">(" + param.param_name + ");"; statements.push_back(statement); }