From acbf1efad6074545cbdf351736d71f8db2c71add Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Tue, 14 Aug 2018 07:58:37 +0200 Subject: [PATCH] Fix issue: CLEAN method was not properly exported by tuple. --- m-tuple.h | 2 +- tests/test-mtuple.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/m-tuple.h b/m-tuple.h index 79151029..4a9e6f98 100644 --- a/m-tuple.h +++ b/m-tuple.h @@ -475,7 +475,7 @@ namespace m_tuple { M_IF_METHOD_ALL(INIT_MOVE, __VA_ARGS__)(INIT_MOVE(M_C(name, _init_move)),), \ M_IF_METHOD_ALL(MOVE, __VA_ARGS__)(MOVE(M_C(name, _move)),), \ M_IF_METHOD_ALL(SWAP, __VA_ARGS__)(MOVE(M_C(name, _swap)),), \ - M_IF_METHOD_ALL(CLEAN, __VA_ARGS__)(MOVE(M_C(name, _clean)),), \ + M_IF_METHOD_ALL(CLEAN, __VA_ARGS__)(CLEAN(M_C(name, _clean)),), \ M_IF_METHOD(NEW, M_RET_ARG1(__VA_ARGS__,))(NEW(M_DELAY2(M_GET_NEW) M_RET_ARG1(__VA_ARGS__,)),), \ M_IF_METHOD(REALLOC, M_RET_ARG1(__VA_ARGS__,))(REALLOC(M_DELAY2(M_GET_REALLOC) M_RET_ARG1(__VA_ARGS__,)),), \ M_IF_METHOD(DEL, M_RET_ARG1(__VA_ARGS__,))(DEL(M_DELAY2(M_GET_DEL) M_RET_ARG1(__VA_ARGS__,)),), \ diff --git a/tests/test-mtuple.c b/tests/test-mtuple.c index 7bb3afc6..22f1b16b 100644 --- a/tests/test-mtuple.c +++ b/tests/test-mtuple.c @@ -47,6 +47,7 @@ TUPLE_DEF2(pair3, TUPLE_DEF2(pair_str, (vala, string_t, STRING_OPLIST), (valb, string_t, STRING_OPLIST)) +#define M_OPL_pair_str_t() TUPLE_OPLIST(pair_str, STRING_OPLIST, STRING_OPLIST) TUPLE_DEF2(single_str, (vala, string_t, STRING_OPLIST)) @@ -54,6 +55,13 @@ TUPLE_DEF2(pair2_str, (str, string_t), (value, unsigned long)) +// Recursive tuple definition. +TUPLE_DEF2(rtuple, + (ituple, pair_str_t), + (name, string_t)) +#define M_OPL_rtuple_t() TUPLE_OPLIST(rtuple, M_OPL_pair_str_t(), STRING_OPLIST) + + static void check_swap(void) { pair_str_t p1, p2; @@ -82,6 +90,12 @@ static void check_clean(void) assert(string_equal_str_p (p1->vala, "")); single_str_clear(p1); + + M_LET(r, rtuple_t) { + string_set_str(r->name, "Hello"); + rtuple_clean(r); + assert(string_equal_str_p (r->name, "")); + } } static void check_io(void)