Fix issue of M_LET with LIST_BIF containers.

This commit is contained in:
Patrick Pelissier committed 2025-07-26 10:44:21 +02:00
1 parent 522f37f66d
commit 2ef7f5b8f0
2 files changed
+16 -12

No files matched your search

+10 -5
View File
@@ -84,6 +84,10 @@
((__VA_ARGS__, M_BASIC_OPLIST ), \
(__VA_ARGS__ )))
/* Define the oplist of a list of the given type.
USAGE: LIST_BIF_OPLIST(name [, oplist_of_the_type]) */
#define M_LIST_BIF_OPLIST(...) M_OPEXTEND(M_LIST_OPLIST(__VA_ARGS__), REVERSE(0))
/* Define an init value to init global variables of type list.
USAGE:
list_t global_variable = LIST_INIT_VALUE();
@@ -144,8 +148,8 @@
IT_INSERT(M_F(name, _insert)), \
IT_REMOVE(M_F(name,_remove)), \
RESET(M_F(name,_reset)), \
PUSH(M_F(name,_push)), \
POP(M_F(name,_pop)), \
PUSH(M_F(name,_push)), \
POP(M_F(name,_pop)), \
PUSH_MOVE(M_F(name,_push_move)), \
POP_MOVE(M_F(name,_pop_move)) \
,SPLICE_BACK(M_F(name,_splice_back)) \
@@ -188,8 +192,8 @@
IT_INSERT(API_0P(M_F(name, _insert))), \
IT_REMOVE(API_0P(M_F(name,_remove))), \
RESET(API_0P(M_F(name,_reset))), \
PUSH(API_0P(M_F(name,_push))), \
POP(API_0P(M_F(name,_pop))), \
PUSH(API_0P(M_F(name,_push))), \
POP(API_0P(M_F(name,_pop))), \
PUSH_MOVE(API_0P(M_F(name,_push_move))), \
POP_MOVE(API_0P(M_F(name,_pop_move))) \
,SPLICE_BACK(M_F(name,_splice_back)) \
@@ -1451,7 +1455,7 @@
M_INLINE void \
M_F(name, _splice_back)(list_t list1, list_t list2, it_t it) \
{ \
/* FIXME back ==> strong */ \
/* FIXME back ==> strong */ \
M_L1ST_DUAL_PUSH_CONTRACT(list1); \
M_L1ST_DUAL_PUSH_CONTRACT(list2); \
M_ASSERT (it->current != NULL); \
@@ -1601,6 +1605,7 @@
#define LIST_BIF_DEF M_LIST_BIF_DEF
#define LIST_BIF_DEF_AS M_LIST_BIF_DEF_AS
#define LIST_OPLIST M_LIST_OPLIST
#define LIST_BIF_OPLIST M_LIST_BIF_OPLIST
#define LIST_INIT_VALUE M_LIST_INIT_VALUE
#define LIST_DUAL_PUSH_INIT_VALUE M_LIST_DUAL_PUSH_INIT_VALUE
#endif
+6 -7
View File
@@ -603,16 +603,15 @@ static void test_bif(void)
assert(d == 2.0);
assert(list2f_double_empty_p(x));
list2f_double_clear(x);
// BUG: M_INIT_WITH_VAI23_FUNC uses _back instead of _strong...
// How to fix? Create common functions also for array...
M_LET( (y, (1.0, 2.0, 3.0, 4.0)), LIST_OPLIST(list2f_double, M_BASIC_OPLIST)) {
M_LET( (y, (1.0, 2.0, 3.0, 4.0)), LIST_BIF_OPLIST(list2f_double, M_BASIC_OPLIST)) {
assert(list2f_double_size(y) == 4);
for(list2f_double_it(it, y); !list2f_double_end_p(it); list2f_double_next(it)){
printf("%f ", *list2f_double_cref(it) );
} printf("\n");
printf("Front=%f\n", *list2f_double_front(y) );
assert(*list2f_double_front(y) == 1.0);
assert(*list2f_double_back(y) == 4.0);
d = 1.0;
for(list2f_double_it(it, y); !list2f_double_end_p(it); list2f_double_next(it)){
assert( *list2f_double_cref(it) == d);
d += 1.0;
}
}
}