eolian-cxx: Fix compilation errors with new any_value_ptr and mstring types
authorFelipe Magno de Almeida <felipe@expertisesolutions.com.br>
Tue, 26 Sep 2017 00:57:25 +0000 (21:57 -0300)
committerFelipe Magno de Almeida <felipe@expertisesolutions.com.br>
Tue, 26 Sep 2017 00:57:25 +0000 (21:57 -0300)
src/bindings/cxx/eo_cxx/eo_cxx_interop.hh
src/lib/eolian_cxx/grammar/type_impl.hpp
src/tests/eolian_cxx/name1_name2_type_generation.c

index d5f31d3..2f9b638 100644 (file)
@@ -394,7 +394,11 @@ inline char* convert_to_c_impl( ::efl::eina::string_view v, tag<char*, ::efl::ei
   std::strcpy(string, v.c_str());
   return string;
 }
-inline char** convert_to_c_impl(efl::eina::string_view* /*view*/, tag<char **, efl::eina::string_view*>)
+inline char** convert_to_c_impl(efl::eina::string_view& /*view*/, tag<char **, efl::eina::string_view, true>)
+{
+  std::abort();
+}
+inline const char** convert_to_c_impl(efl::eina::string_view& /*view*/, tag<const char **, efl::eina::string_view, true>)
 {
   std::abort();
 }
index bb61980..fb78c1e 100644 (file)
@@ -110,6 +110,24 @@ struct visitor_generate
                 r.base_qualifier.qualifier ^= qualifier_info::is_ref;
                 return replace_base_type(r, " ::efl::eina::string_view");
               }}
+           , {"mstring", false, nullptr, nullptr, [&]
+              {
+                regular_type_def r = regular;
+                r.base_qualifier.qualifier |= qualifier_info::is_ref;
+                // r.base_qualifier.qualifier ^= qualifier_info::is_const;
+                if(is_out || is_return)
+                  return replace_base_type(r, " ::std::string");
+                return replace_base_type(r, " ::efl::eina::string_view");
+              }}
+           , {"mstring", true, nullptr, nullptr, [&]
+              {
+                regular_type_def r = regular;
+                r.base_qualifier.qualifier ^= qualifier_info::is_ref;
+                // r.base_qualifier.qualifier ^= qualifier_info::is_const;
+                if(is_out || is_return)
+                  return replace_base_type(r, " ::std::string");
+                return replace_base_type(r, " ::efl::eina::string_view");
+              }}
            , {"stringshare", nullptr, nullptr, nullptr, [&]
               {
                 regular_type_def r = regular;
@@ -124,6 +142,13 @@ struct visitor_generate
            , {"any_value", false, nullptr, nullptr, [&]
               { return regular_type_def{" ::efl::eina::value_view", regular.base_qualifier, {}};
               }}
+           , {"any_value_ptr", true, nullptr, nullptr, [&]
+              {
+                return regular_type_def{" ::efl::eina::value", regular.base_qualifier ^ qualifier_info::is_ref, {}};
+              }}
+           , {"any_value_ptr", false, nullptr, nullptr, [&]
+              { return regular_type_def{" ::efl::eina::value_view", regular.base_qualifier ^ qualifier_info::is_ref, {}};
+              }}
         };
       if(regular.base_type == "void_ptr")
         {
index 26dc899..2517bcd 100644 (file)
@@ -102,7 +102,7 @@ void _name1_name2_type_generation_instringshareown(Eo *obj EINA_UNUSED, Type_Gen
   eina_stringshare_del(v);
 }
 
-void _name1_name2_type_generation_instringptrown(Eo *obj EINA_UNUSED, Type_Generation_Data *pd EINA_UNUSED, char * *v)
+void _name1_name2_type_generation_instringptrown(Eo *obj EINA_UNUSED, Type_Generation_Data *pd EINA_UNUSED, const char * *v)
 {
   ck_assert_str_eq(*v, "foobar");
   free((void*)*v);
@@ -197,7 +197,7 @@ char * _name1_name2_type_generation_returnstringown(Eo *obj EINA_UNUSED, Type_Ge
   return p;
 }
 
-char * * _name1_name2_type_generation_returnstringownptr(Eo *obj EINA_UNUSED, Type_Generation_Data *pd EINA_UNUSED)
+const char * * _name1_name2_type_generation_returnstringownptr(Eo *obj EINA_UNUSED, Type_Generation_Data *pd EINA_UNUSED)
 {
   const char foobar[] = "foobar";
   char** p1 = malloc(sizeof(const char*));