diff --git a/m-core.h b/m-core.h index 79bec524..43f944f5 100644 --- a/m-core.h +++ b/m-core.h @@ -393,6 +393,9 @@ /* Return the input (delay evaluation) */ #define M_ID(...) __VA_ARGS__ +/* Globber the input */ +#define M_EAT(...) + /* M_NARGS: Return number of argument. (don't work for empty arg) */ #define M_NARGS(...) \ @@ -1044,9 +1047,9 @@ m_core_hash (const void *str, size_t length) /* Test if the argument is a valid oplist. NOTE: Incomplete test. */ -#define M_OPLIST_P(a) \ - M_AND(M_PARENTHESIS_P(a), M_INV(M_PARENTHESIS_P (M_OPFLAT a))) - +#define M_OPLIST_P(a) \ + M_AND(M_AND(M_PARENTHESIS_P(a), M_INV(M_PARENTHESIS_P (M_OPFLAT a))), \ + M_EMPTY_P(M_EAT a)) /************************************************************/ diff --git a/tests/test-mcore.c b/tests/test-mcore.c index 90a5c265..fd26bc56 100644 --- a/tests/test-mcore.c +++ b/tests/test-mcore.c @@ -233,6 +233,8 @@ static void test_oplist(void) assert (!M_OPLIST_P()); assert (!M_OPLIST_P((()))); assert (!M_OPLIST_P(INIT(init))); + assert (!M_OPLIST_P((INIT(init)) a)); + assert (!M_OPLIST_P(f(INIT(init)) a)); #define a (INIT(0), CLEAR(clear)) assert (M_TEST_DISABLED_METHOD_P(INIT, a));