thiep pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=360ce182efa373598b39225a8458f8e36d110fe1

commit 360ce182efa373598b39225a8458f8e36d110fe1
Author: Thiep Ha <thie...@gmail.com>
Date:   Fri Jan 12 18:45:13 2018 +0900

    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<std::string> opening_statements() const
   {
-     // FIXME: Supports only one function pointer
      std::vector<std::string> 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);
             }

-- 


Reply via email to