felipealmeida pushed a commit to branch master.

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

commit f05a799daa6ec5e362a4376ee5d2b9ef011cd377
Author: Felipe Magno de Almeida <fel...@expertisesolutions.com.br>
Date:   Wed Oct 25 18:00:50 2017 -0200

    eolian-cxx: Fix multiple definitions in forward declaration
---
 src/lib/eolian_cxx/grammar/class_declaration.hpp | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/lib/eolian_cxx/grammar/class_declaration.hpp 
b/src/lib/eolian_cxx/grammar/class_declaration.hpp
index 7c9957f07d..d448c31074 100644
--- a/src/lib/eolian_cxx/grammar/class_declaration.hpp
+++ b/src/lib/eolian_cxx/grammar/class_declaration.hpp
@@ -21,6 +21,19 @@ struct class_declaration_generator
    bool generate(OutputIterator sink, attributes::klass_def const& cls, 
Context const& context) const
    {
      std::vector<std::string> cpp_namespaces = 
attributes::cpp_namespaces(cls.namespaces);
+
+     std::string guard_symbol;
+
+     if(!as_generator(*(string << "_") << string << "_FWD_GUARD")
+        .generate(std::back_inserter(guard_symbol)
+                  , std::make_tuple(cpp_namespaces, cls.cxx_name), 
add_upper_case_context(context)))
+       return false;
+
+     if(!as_generator(   "#ifndef " << guard_symbol << "\n"
+                      << "#define " << guard_symbol << "\n")
+        .generate(sink, std::make_tuple(), context))
+       return false;
+     
      auto open_namespace = *("namespace " << string << " { ") << "\n";
      if(!as_generator(open_namespace).generate(sink, cpp_namespaces, 
add_lower_case_context(context))) return false;
 
@@ -32,7 +45,7 @@ struct class_declaration_generator
      auto close_namespace = *(lit("} ")) << "\n";
      if(!as_generator(close_namespace).generate(sink, cpp_namespaces, 
context)) return false;
 
-     if(type_traits)
+     // if(type_traits)
        if(!as_generator
           (
            "namespace efl { namespace eo { template<> struct is_eolian_object< 
"
@@ -49,6 +62,10 @@ struct class_declaration_generator
                        , cpp_namespaces, cls.cxx_name, cpp_namespaces, 
cls.cxx_name
                       ), context)) return false;
 
+     if(!as_generator("#endif\n")
+        .generate(sink, std::make_tuple(), context))
+       return false;
+
      
      return true;
    }

-- 


Reply via email to