eolian: remove all duplicated affix

Summary:
Currently eolian abbreviates when only the last word of class name and
the first word of method name are same, but this patch abbreviates
generated c name of function to remove all duplicated affix.
For example, "efl_io_closer_fd_closer_fd_set" will be "efl_io_closer_fd_set".

Reviewers: jpeg

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D4430

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Jee-Yong Um 2016-11-28 10:55:27 -08:00 committed by Cedric BAIL
parent 30693b8487
commit 0e2a2cbacf
12 changed files with 73 additions and 49 deletions

View File

@ -32,12 +32,12 @@ _efl_io_closer_fd_closer_fd_get(Eo *o EINA_UNUSED, Efl_Io_Closer_Fd_Data *pd)
EOLIAN static Eina_Error
_efl_io_closer_fd_efl_io_closer_close(Eo *o, Efl_Io_Closer_Fd_Data *pd EINA_UNUSED)
{
int fd = efl_io_closer_fd_closer_fd_get(o);
int fd = efl_io_closer_fd_get(o);
Eina_Error err = 0;
EINA_SAFETY_ON_TRUE_RETURN_VAL(fd < 0, EBADF);
efl_io_closer_fd_closer_fd_set(o, -1);
efl_io_closer_fd_set(o, -1);
if (close(fd) < 0) err = errno;
efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL);
return err;
@ -46,7 +46,7 @@ _efl_io_closer_fd_efl_io_closer_close(Eo *o, Efl_Io_Closer_Fd_Data *pd EINA_UNUS
EOLIAN static Eina_Bool
_efl_io_closer_fd_efl_io_closer_closed_get(Eo *o, Efl_Io_Closer_Fd_Data *pd EINA_UNUSED)
{
return efl_io_closer_fd_closer_fd_get(o) < 0;
return efl_io_closer_fd_get(o) < 0;
}
EOLIAN static Eina_Bool
@ -62,7 +62,7 @@ _efl_io_closer_fd_efl_io_closer_close_on_exec_set(Eo *o, Efl_Io_Closer_Fd_Data *
pd->close_on_exec = close_on_exec;
fd = efl_io_closer_fd_closer_fd_get(o);
fd = efl_io_closer_fd_get(o);
if (fd < 0) return EINA_TRUE; /* postpone until fd_set(), users
* must apply MANUALLY if it's not
* already set!
@ -98,7 +98,7 @@ _efl_io_closer_fd_efl_io_closer_close_on_exec_get(Eo *o, Efl_Io_Closer_Fd_Data *
#else
int flags, fd;
fd = efl_io_closer_fd_closer_fd_get(o);
fd = efl_io_closer_fd_get(o);
if (fd < 0) return pd->close_on_exec;
/* if there is a fd, always query it directly as it may be modified

View File

@ -63,11 +63,11 @@ EOLIAN static void
_efl_io_file_efl_loop_fd_fd_file_set(Eo *o, Efl_Io_File_Data *pd, int fd)
{
efl_loop_fd_file_set(efl_super(o, MY_CLASS), fd);
efl_io_positioner_fd_positioner_fd_set(o, fd);
efl_io_sizer_fd_sizer_fd_set(o, fd);
efl_io_reader_fd_reader_fd_set(o, fd);
efl_io_writer_fd_writer_fd_set(o, fd);
efl_io_closer_fd_closer_fd_set(o, fd);
efl_io_positioner_fd_set(o, fd);
efl_io_sizer_fd_set(o, fd);
efl_io_reader_fd_set(o, fd);
efl_io_writer_fd_set(o, fd);
efl_io_closer_fd_set(o, fd);
if (fd >= 0) _efl_io_file_state_update(o, pd);
}

View File

@ -41,7 +41,7 @@ _efl_io_positioner_whence_convert(Efl_Io_Positioner_Whence whence)
EOLIAN static Eina_Error
_efl_io_positioner_fd_efl_io_positioner_seek(Eo *o, Efl_Io_Positioner_Fd_Data *pd EINA_UNUSED, int64_t offset, Efl_Io_Positioner_Whence whence)
{
int fd = efl_io_positioner_fd_positioner_fd_get(o);
int fd = efl_io_positioner_fd_get(o);
if (lseek(fd, (off_t)offset, _efl_io_positioner_whence_convert(whence)) < 0)
return errno;
efl_event_callback_call(o, EFL_IO_POSITIONER_EVENT_POSITION_CHANGED, NULL);
@ -51,7 +51,7 @@ _efl_io_positioner_fd_efl_io_positioner_seek(Eo *o, Efl_Io_Positioner_Fd_Data *p
EOLIAN static uint64_t
_efl_io_positioner_fd_efl_io_positioner_position_get(Eo *o, Efl_Io_Positioner_Fd_Data *pd EINA_UNUSED)
{
int fd = efl_io_positioner_fd_positioner_fd_get(o);
int fd = efl_io_positioner_fd_get(o);
off_t offset;
EINA_SAFETY_ON_TRUE_RETURN_VAL(fd < 0, 0);

View File

@ -32,7 +32,7 @@ _efl_io_reader_fd_reader_fd_get(Eo *o EINA_UNUSED, Efl_Io_Reader_Fd_Data *pd)
EOLIAN static Eina_Error
_efl_io_reader_fd_efl_io_reader_read(Eo *o, Efl_Io_Reader_Fd_Data *pd EINA_UNUSED, Eina_Rw_Slice *rw_slice)
{
int fd = efl_io_reader_fd_reader_fd_get(o);
int fd = efl_io_reader_fd_get(o);
ssize_t r;
EINA_SAFETY_ON_NULL_RETURN_VAL(rw_slice, EINVAL);
@ -75,7 +75,7 @@ _efl_io_reader_fd_efl_io_reader_can_read_get(Eo *o EINA_UNUSED, Efl_Io_Reader_Fd
EOLIAN static void
_efl_io_reader_fd_efl_io_reader_can_read_set(Eo *o, Efl_Io_Reader_Fd_Data *pd, Eina_Bool can_read)
{
EINA_SAFETY_ON_TRUE_RETURN(efl_io_reader_fd_reader_fd_get(o) < 0);
EINA_SAFETY_ON_TRUE_RETURN(efl_io_reader_fd_get(o) < 0);
if (pd->can_read == can_read) return;
pd->can_read = can_read;
efl_event_callback_call(o, EFL_IO_READER_EVENT_CAN_READ_CHANGED, NULL);
@ -90,7 +90,7 @@ _efl_io_reader_fd_efl_io_reader_eos_get(Eo *o EINA_UNUSED, Efl_Io_Reader_Fd_Data
EOLIAN static void
_efl_io_reader_fd_efl_io_reader_eos_set(Eo *o, Efl_Io_Reader_Fd_Data *pd, Eina_Bool is_eos)
{
EINA_SAFETY_ON_TRUE_RETURN(efl_io_reader_fd_reader_fd_get(o) < 0);
EINA_SAFETY_ON_TRUE_RETURN(efl_io_reader_fd_get(o) < 0);
if (pd->eos == is_eos) return;
pd->eos = is_eos;
if (is_eos)

View File

@ -29,7 +29,7 @@ _efl_io_sizer_fd_sizer_fd_get(Eo *o EINA_UNUSED, Efl_Io_Sizer_Fd_Data *pd)
EOLIAN static Eina_Error
_efl_io_sizer_fd_efl_io_sizer_resize(Eo *o, Efl_Io_Sizer_Fd_Data *pd EINA_UNUSED, uint64_t size)
{
int fd = efl_io_sizer_fd_sizer_fd_get(o);
int fd = efl_io_sizer_fd_get(o);
if (ftruncate(fd, size) < 0) return errno;
efl_event_callback_call(o, EFL_IO_SIZER_EVENT_SIZE_CHANGED, NULL);
return 0;
@ -38,7 +38,7 @@ _efl_io_sizer_fd_efl_io_sizer_resize(Eo *o, Efl_Io_Sizer_Fd_Data *pd EINA_UNUSED
EOLIAN static uint64_t
_efl_io_sizer_fd_efl_io_sizer_size_get(Eo *o, Efl_Io_Sizer_Fd_Data *pd EINA_UNUSED)
{
int fd = efl_io_sizer_fd_sizer_fd_get(o);
int fd = efl_io_sizer_fd_get(o);
struct stat st;
int r;

View File

@ -26,7 +26,7 @@ EOLIAN static void
_efl_io_stderr_efl_loop_fd_fd_set(Eo *o, void *pd EINA_UNUSED, int fd)
{
efl_loop_fd_file_set(efl_super(o, MY_CLASS), fd);
efl_io_writer_fd_writer_fd_set(o, fd);
efl_io_writer_fd_set(o, fd);
}
EOLIAN static Efl_Object *

View File

@ -28,7 +28,7 @@ EOLIAN static void
_efl_io_stdin_efl_loop_fd_fd_set(Eo *o, void *pd EINA_UNUSED, int fd)
{
efl_loop_fd_file_set(efl_super(o, MY_CLASS), fd);
efl_io_reader_fd_reader_fd_set(o, fd);
efl_io_reader_fd_set(o, fd);
}
EOLIAN static Efl_Object *

View File

@ -26,7 +26,7 @@ EOLIAN static void
_efl_io_stdout_efl_loop_fd_fd_set(Eo *o, void *pd EINA_UNUSED, int fd)
{
efl_loop_fd_file_set(efl_super(o, MY_CLASS), fd);
efl_io_writer_fd_writer_fd_set(o, fd);
efl_io_writer_fd_set(o, fd);
}
EOLIAN static Efl_Object *

View File

@ -31,7 +31,7 @@ _efl_io_writer_fd_writer_fd_get(Eo *o EINA_UNUSED, Efl_Io_Writer_Fd_Data *pd)
EOLIAN static Eina_Error
_efl_io_writer_fd_efl_io_writer_write(Eo *o, Efl_Io_Writer_Fd_Data *pd EINA_UNUSED, Eina_Slice *ro_slice, Eina_Slice *remaining)
{
int fd = efl_io_writer_fd_writer_fd_get(o);
int fd = efl_io_writer_fd_get(o);
ssize_t r;
EINA_SAFETY_ON_NULL_RETURN_VAL(ro_slice, EINVAL);
@ -79,7 +79,7 @@ _efl_io_writer_fd_efl_io_writer_can_write_get(Eo *o EINA_UNUSED, Efl_Io_Writer_F
EOLIAN static void
_efl_io_writer_fd_efl_io_writer_can_write_set(Eo *o, Efl_Io_Writer_Fd_Data *pd, Eina_Bool can_write)
{
EINA_SAFETY_ON_TRUE_RETURN(efl_io_writer_fd_writer_fd_get(o) < 0);
EINA_SAFETY_ON_TRUE_RETURN(efl_io_writer_fd_get(o) < 0);
if (pd->can_write == can_write) return;
pd->can_write = can_write;
efl_event_callback_call(o, EFL_IO_WRITER_EVENT_CAN_WRITE_CHANGED, NULL);

View File

@ -100,9 +100,9 @@ static void
_efl_net_socket_fd_set(Eo *o, Efl_Net_Socket_Fd_Data *pd, SOCKET fd)
{
Eina_Bool close_on_exec = efl_io_closer_close_on_exec_get(o); /* get cached value, otherwise will query from set fd */
efl_io_reader_fd_reader_fd_set(o, fd);
efl_io_writer_fd_writer_fd_set(o, fd);
efl_io_closer_fd_closer_fd_set(o, fd);
efl_io_reader_fd_set(o, fd);
efl_io_writer_fd_set(o, fd);
efl_io_closer_fd_set(o, fd);
/* apply postponed values */
efl_io_closer_close_on_exec_set(o, close_on_exec);
@ -116,9 +116,9 @@ _efl_net_socket_fd_set(Eo *o, Efl_Net_Socket_Fd_Data *pd, SOCKET fd)
static void
_efl_net_socket_fd_unset(Eo *o)
{
efl_io_reader_fd_reader_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_io_writer_fd_writer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_io_closer_fd_closer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_io_reader_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_io_writer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_io_closer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_net_socket_address_local_set(o, NULL);
efl_net_socket_address_remote_set(o, NULL);
@ -148,7 +148,7 @@ _efl_net_socket_fd_efl_loop_fd_fd_set(Eo *o, Efl_Net_Socket_Fd_Data *pd, int pfd
EOLIAN static Eina_Error
_efl_net_socket_fd_efl_io_closer_close(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UNUSED)
{
SOCKET fd = efl_io_closer_fd_closer_fd_get(o);
SOCKET fd = efl_io_closer_fd_get(o);
Eina_Error ret = 0;
EINA_SAFETY_ON_TRUE_RETURN_VAL(efl_io_closer_closed_get(o), EBADF);
@ -158,12 +158,12 @@ _efl_net_socket_fd_efl_io_closer_close(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UN
efl_io_reader_eos_set(o, EINA_TRUE);
/* skip _efl_net_socket_fd_efl_loop_fd_fd_set() since we want to
* retain efl_io_closer_fd_closer_fd_get() so close(super()) works
* retain efl_io_closer_fd_get() so close(super()) works
* and we emit the events with proper addresses.
*/
efl_loop_fd_set(efl_super(o, MY_CLASS), SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_io_closer_fd_closer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
efl_io_closer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
if (closesocket(fd) != 0) ret = efl_net_socket_error_get();
efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL);
@ -176,13 +176,13 @@ _efl_net_socket_fd_efl_io_closer_close(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UN
EOLIAN static Eina_Bool
_efl_net_socket_fd_efl_io_closer_closed_get(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UNUSED)
{
return (SOCKET)efl_io_closer_fd_closer_fd_get(o) == INVALID_SOCKET;
return (SOCKET)efl_io_closer_fd_get(o) == INVALID_SOCKET;
}
EOLIAN static Eina_Error
_efl_net_socket_fd_efl_io_reader_read(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UNUSED, Eina_Rw_Slice *rw_slice)
{
SOCKET fd = efl_io_reader_fd_reader_fd_get(o);
SOCKET fd = efl_io_reader_fd_get(o);
ssize_t r;
EINA_SAFETY_ON_NULL_RETURN_VAL(rw_slice, EINVAL);
@ -256,7 +256,7 @@ _efl_net_socket_fd_efl_io_reader_eos_set(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_
EOLIAN static Eina_Error
_efl_net_socket_fd_efl_io_writer_write(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UNUSED, Eina_Slice *ro_slice, Eina_Slice *remaining)
{
SOCKET fd = efl_io_writer_fd_writer_fd_get(o);
SOCKET fd = efl_io_writer_fd_get(o);
ssize_t r;
EINA_SAFETY_ON_NULL_RETURN_VAL(ro_slice, EINVAL);

View File

@ -508,7 +508,7 @@ _efl_net_socket_udp_efl_object_destructor(Eo *o, Efl_Net_Socket_Udp_Data *pd)
EOLIAN static Eina_Error
_efl_net_socket_udp_efl_io_reader_read(Eo *o, Efl_Net_Socket_Udp_Data *pd, Eina_Rw_Slice *rw_slice)
{
SOCKET fd = efl_io_reader_fd_reader_fd_get(o);
SOCKET fd = efl_io_reader_fd_get(o);
ssize_t r;
EINA_SAFETY_ON_NULL_RETURN_VAL(rw_slice, EINVAL);
@ -587,7 +587,7 @@ _efl_net_socket_udp_efl_io_reader_read(Eo *o, Efl_Net_Socket_Udp_Data *pd, Eina_
EOLIAN static Eina_Error
_efl_net_socket_udp_efl_io_writer_write(Eo *o, Efl_Net_Socket_Udp_Data *pd, Eina_Slice *ro_slice, Eina_Slice *remaining)
{
SOCKET fd = efl_io_writer_fd_writer_fd_get(o);
SOCKET fd = efl_io_writer_fd_get(o);
ssize_t r;
EINA_SAFETY_ON_NULL_RETURN_VAL(ro_slice, EINVAL);

View File

@ -45,6 +45,39 @@ _get_eo_prefix(const Eolian_Function *foo_id, char *buf, Eina_Bool use_legacy)
return buf;
}
static char *
_get_abbreviated_name(const char *prefix, const char *fname)
{
Eina_Strbuf *buf = eina_strbuf_new();
const char *last_p = strrchr(prefix, '_');
last_p = (last_p) ? (last_p + 1) : prefix;
const char *tmp = strstr(fname, last_p);
int len = strlen(last_p);
if ((tmp) &&
((tmp == fname) || (*(tmp - 1) == '_')) &&
((*(tmp + len) == '\0') || (*(tmp + len) == '_')))
{
int plen = strlen(prefix);
len += (tmp - fname);
if ((plen >= len) && !strncmp(prefix + plen - len, fname, len))
{
eina_strbuf_append_n(buf, prefix, plen - len);
}
}
if (eina_strbuf_length_get(buf) == 0)
eina_strbuf_append_printf(buf, "%s_", prefix);
eina_strbuf_append(buf, fname);
char *ret = eina_strbuf_string_steal(buf);
eina_strbuf_free(buf);
return ret;
}
EAPI Eina_Stringshare *
eolian_function_full_c_name_get(const Eolian_Function *foo_id,
Eolian_Function_Type ftype,
@ -80,18 +113,10 @@ eolian_function_full_c_name_get(const Eolian_Function *foo_id,
return NULL;
const char *funcn = eolian_function_name_get(foo_id);
const char *last_p = strrchr(prefix, '_');
const char *func_p = strchr(funcn, '_');
Eina_Strbuf *buf = eina_strbuf_new();
Eina_Stringshare *ret;
int len;
if (!last_p) last_p = prefix;
else last_p++;
if (!func_p) len = strlen(funcn);
else len = func_p - funcn;
if (use_legacy || (int)strlen(last_p) != len || strncmp(last_p, funcn, len))
if (use_legacy)
{
eina_strbuf_append(buf, prefix);
eina_strbuf_append_char(buf, '_');
@ -107,10 +132,9 @@ eolian_function_full_c_name_get(const Eolian_Function *foo_id,
return ret;
}
if (last_p != prefix)
eina_strbuf_append_n(buf, prefix, last_p - prefix); /* includes _ */
eina_strbuf_append(buf, funcn);
char *abbr = _get_abbreviated_name(prefix, funcn);
eina_strbuf_append(buf, abbr);
free(abbr);
if ((ftype == EOLIAN_PROP_GET) || (ftype == EOLIAN_PROPERTY))
eina_strbuf_append(buf, "_get");