summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2017-09-25 21:57:25 -0300
committerFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2017-09-25 21:57:25 -0300
commitbb887f9869c3dd9eca72c8e65f335d148f9dbdd3 (patch)
tree7b4e33f6e249d59963cd58a81f9c78b82f653c7f
parent39318789a88cf5e3930c9ed6e9d437aa374ce7ad (diff)
downloadefl-bb887f9869c3dd9eca72c8e65f335d148f9dbdd3.tar.gz
eolian-cxx: Fix compilation errors with new any_value_ptr and mstring types
-rw-r--r--src/bindings/cxx/eo_cxx/eo_cxx_interop.hh6
-rw-r--r--src/lib/eolian_cxx/grammar/type_impl.hpp25
-rw-r--r--src/tests/eolian_cxx/name1_name2_type_generation.c4
3 files changed, 32 insertions, 3 deletions
diff --git a/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh b/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh
index d5f31d351c..2f9b6382b3 100644
--- a/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh
+++ b/src/bindings/cxx/eo_cxx/eo_cxx_interop.hh
@@ -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();
}
diff --git a/src/lib/eolian_cxx/grammar/type_impl.hpp b/src/lib/eolian_cxx/grammar/type_impl.hpp
index bb61980dd9..fb78c1e51b 100644
--- a/src/lib/eolian_cxx/grammar/type_impl.hpp
+++ b/src/lib/eolian_cxx/grammar/type_impl.hpp
@@ -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")
{
diff --git a/src/tests/eolian_cxx/name1_name2_type_generation.c b/src/tests/eolian_cxx/name1_name2_type_generation.c
index 26dc899d5c..2517bcdd85 100644
--- a/src/tests/eolian_cxx/name1_name2_type_generation.c
+++ b/src/tests/eolian_cxx/name1_name2_type_generation.c
@@ -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*));