eolian-cxx: Fix compilation errors with new any_value_ptr and mstring types

This commit is contained in:
Felipe Magno de Almeida 2017-09-25 21:57:25 -03:00
parent 39318789a8
commit bb887f9869
3 changed files with 32 additions and 3 deletions

View 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();
}

View 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")
{

View 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*));