workaround for insidious bcc bug

[SVN r15212]
This commit is contained in:
Paul Mensonides
2002-09-08 21:15:30 +00:00
parent 393b019394
commit faaa55709b
12 changed files with 328 additions and 296 deletions

View File

@ -26,7 +26,7 @@
# define BOOST_PP_EVIL_ARRAY_SIZE_D(par) BOOST_PP_ARRAY_SIZE_I ## par
# endif
#
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_STRICT
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_STRICT || BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_ARRAY_SIZE_I(array) BOOST_PP_ARRAY_SIZE_X array
# elif BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_MWCW
# define BOOST_PP_ARRAY_SIZE_I(array) BOOST_PP_ARRAY_SIZE_X ## array

View File

@ -24,6 +24,8 @@
#
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_IDEAL
# define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_IS_NULLARY(BOOST_PP_CAT(BOOST_PP_NOT_EQUAL_, x)(0, BOOST_PP_CAT(BOOST_PP_NOT_EQUAL_, y)))
# elif BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# include <boost/preprocessor/comparison/detail/bcc/not_equal.hpp>
# else
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_MWCW
# define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_I(x, y)
@ -38,6 +40,7 @@
#
# define BOOST_PP_NOT_EQUAL_D(d, x, y) BOOST_PP_NOT_EQUAL(x, y)
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, (), y(1, BOOST_PP_NIL))
# define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, (), y(1, BOOST_PP_NIL))
# define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, (), y(1, BOOST_PP_NIL))
@ -295,5 +298,6 @@
# define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, (), y(1, BOOST_PP_NIL))
# define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, (), y(1, BOOST_PP_NIL))
# define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, (), y(1, BOOST_PP_NIL))
# endif
#
# endif

View File

@ -20,7 +20,8 @@
#
# define BOOST_PP_CONFIG_MSVC 0x0004
# define BOOST_PP_CONFIG_MWCW 0x0008
# define BOOST_PP_CONFIG_EDG 0x0010
# define BOOST_PP_CONFIG_BCC 0x0010
# define BOOST_PP_CONFIG_EDG 0x0020
#
# ifndef BOOST_PP_CONFIG_FLAGS
# if defined(__EDG__)
@ -29,6 +30,8 @@
# define BOOST_PP_CONFIG_FLAGS (BOOST_PP_CONFIG_MSVC)
# elif defined(__MWERKS__)
# define BOOST_PP_CONFIG_FLAGS (BOOST_PP_CONFIG_MWCW)
# elif defined(__BORLANDC__)
# define BOOST_PP_CONFIG_FLAGS (BOOST_PP_CONFIG_BCC)
# else
# define BOOST_PP_CONFIG_FLAGS (BOOST_PP_CONFIG_STRICT | BOOST_PP_CONFIG_IDEAL)
# endif

View File

@ -35,6 +35,7 @@
#
# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_EDG
# define BOOST_PP_WHILE_P(n) BOOST_PP_IS_NULLARY(BOOST_PP_WHILE_ID(BOOST_PP_WHILE_FAST_1 BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, ()) BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, (), BOOST_PP_NIL) BOOST_PP_LIST_FOLD_RIGHT_ ## n(BOOST_PP_NIL, (), BOOST_PP_NIL)))
# elif ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_MWCW
@ -49,6 +50,9 @@
# define BOOST_PP_WHILE_FAST_2() BOOST_PP_WHILE_FAST_3
# define BOOST_PP_WHILE_FAST_3() ()
# endif
# else
# include <boost/preprocessor/control/detail/bcc/while_p.hpp>
# endif
#
# define BOOST_PP_WHILE_F(d, _) 0
#

View File

@ -21,12 +21,18 @@
#
# /* BOOST_PP_APPLY */
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_EDG
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_EDG && ~BOOST_PP_CONFIG & BOOST_PP_CONFIG_BCC
# define BOOST_PP_APPLY BOOST_PP_APPLY_I
# else
# define BOOST_PP_APPLY(x) BOOST_PP_APPLY_I(x)
# endif
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_APPLY_I(x) BOOST_PP_EXPR_IIF(BOOST_PP_IS_UNARY(x), BOOST_PP_TUPLE_REM_1 x)
# else
# define BOOST_PP_APPLY_I(x) BOOST_PP_APPLY_ ## x
# define BOOST_PP_APPLY_(x) x
# define BOOST_PP_APPLY_BOOST_PP_NIL
# endif
#
# endif

View File

@ -54,10 +54,21 @@
#
# /* BOOST_PP_LIST_IS_CONS */
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_IS_BINARY(list)
# else
# define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_LIST_IS_CONS_D(list)
# define BOOST_PP_LIST_IS_CONS_D(list) BOOST_PP_LIST_IS_CONS_ ## list
# define BOOST_PP_LIST_IS_CONS_(head, tail) 1
# define BOOST_PP_LIST_IS_CONS_BOOST_PP_NIL 0
# endif
#
# /* BOOST_PP_LIST_IS_NIL */
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_IS_BINARY(list))
# else
# define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_LIST_IS_CONS(list))
# endif
#
# endif

View File

@ -22,7 +22,7 @@
#
# /* BOOST_PP_BOOL */
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_EDG
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_EDG && ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_IDEAL
# define BOOST_PP_BOOL(x) BOOST_PP_COMPL(BOOST_PP_IS_NULLARY(BOOST_PP_CAT(BOOST_PP_BOOL_, x)))
# else

View File

@ -28,11 +28,15 @@
# endif
#
# define BOOST_PP_FOR BOOST_PP_CAT(BOOST_PP_FOR_, BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256))
# define BOOST_PP_FOR_P(n) BOOST_PP_IS_NULLARY(BOOST_PP_FOR_ ## n(1, BOOST_PP_FOR_SR_P, BOOST_PP_FOR_SR_O, BOOST_PP_FOR_SR_M))
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_FOR_P(n) BOOST_PP_IS_NULLARY(BOOST_PP_FOR_ ## n(1, BOOST_PP_FOR_SR_P, BOOST_PP_FOR_SR_O, BOOST_PP_FOR_SR_M))
# define BOOST_PP_FOR_SR_P(r, s) s
# define BOOST_PP_FOR_SR_O(r, s) 0
# define BOOST_PP_FOR_SR_M(r, s) ()
# else
# include <boost/preprocessor/repetition/detail/bcc/for_p.hpp>
# endif
#
# define BOOST_PP_FOR_257(s, p, o, m) BOOST_PP_ERROR(0x0002)
#

View File

@ -29,8 +29,17 @@
#
# define BOOST_PP_REPEAT BOOST_PP_CAT(BOOST_PP_REPEAT_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
#
# if ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_REPEAT_P(n) BOOST_PP_IS_NULLARY(BOOST_PP_REPEAT_ ## n(1, BOOST_PP_REPEAT_M, BOOST_PP_NIL))
# define BOOST_PP_REPEAT_M(z, n, _) ()
# else
# define BOOST_PP_REPEAT_P(n) BOOST_PP_CAT(BOOST_PP_HACKED_REPEAT_, BOOST_PP_REPEAT_ ## n(1, BOOST_PP_REPEAT_M, BOOST_PP_NIL))
# define BOOST_PP_REPEAT_M(z, n, _) BOOST_PP_NIL
# define BOOST_PP_HACKED_REPEAT_BOOST_PP_NIL 1
# define BOOST_PP_HACKED_REPEAT_BOOST_PP_REPEAT_1(c, m, d) 0
# define BOOST_PP_HACKED_REPEAT_BOOST_PP_REPEAT_2(c, m, d) 0
# define BOOST_PP_HACKED_REPEAT_BOOST_PP_REPEAT_3(c, m, d) 0
# endif
#
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_IDEAL
# define BOOST_PP_REPEAT_1(c, m, d) BOOST_PP_CAT(BOOST_PP_REPEAT_1_, c)(m, d)

View File

@ -21,9 +21,10 @@
#
# /* BOOST_PP_TUPLE_ELEM */
#
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_IDEAL
# define BOOST_PP_TUPLE_ELEM(size, i, tuple) BOOST_PP_TUPLE_ELEM_D(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_EX_, size) tuple, i)
# define BOOST_PP_TUPLE_ELEM_D(tuple, i) BOOST_PP_TUPLE_ELEM_ ## i tuple
# if BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_IDEAL || BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_BCC
# define BOOST_PP_TUPLE_ELEM(size, i, tuple) BOOST_PP_TUPLE_ELEM_D(size, i, tuple)
# define BOOST_PP_TUPLE_ELEM_D(size, i, tuple) BOOST_PP_TUPLE_ELEM_D_II(BOOST_PP_TUPLE_ELEM_EX_ ## size tuple, i)
# define BOOST_PP_TUPLE_ELEM_D_II(tuple, i) BOOST_PP_TUPLE_ELEM_ ## i tuple
# elif ~BOOST_PP_CONFIG_FLAGS & BOOST_PP_CONFIG_MWCW
# define BOOST_PP_TUPLE_ELEM(size, index, tuple) BOOST_PP_TUPLE_ELEM_I(size, index, tuple)
# define BOOST_PP_TUPLE_ELEM_I(size, i, tuple) BOOST_PP_TUPLE_ELEM_II(BOOST_PP_TUPLE_ELEM_EX_ ## size, i, tuple)

View File

@ -20,17 +20,7 @@
BEGIN BOOST_PP_ARRAY_ELEM(1, ARRAY) == 1 END
BEGIN BOOST_PP_ARRAY_ELEM(2, (5, (0, 1, 2, 3, 4))) == 2 END
# define P1 (3,
# define P2 (
# define P3 0, 1
# define P4 , 2)
# define P5 )
BEGIN BOOST_PP_ARRAY_ELEM(0, P1 P2 P3 P4 P5) == 0 END
// size
BEGIN BOOST_PP_ARRAY_SIZE(ARRAY) == 3 END
BEGIN BOOST_PP_ARRAY_SIZE((5, (0, 1, 2, 3, 4))) == 5 END
BEGIN BOOST_PP_ARRAY_SIZE(P1 P2 P3 P4 P5) == 5 END

View File

@ -24,7 +24,7 @@
# define BOOST_PP_LOCAL_LIMITS (5, 1)
# include BOOST_PP_LOCAL_ITERATE()
#
# define BOOST_PP_INDIRECT_SELF "iteration.cpp" // <libs/preprocessor/regression/iteration.cpp>
# define BOOST_PP_INDIRECT_SELF <libs/preprocessor/regression/iteration.cpp>
# include BOOST_PP_INCLUDE_SELF()
#
# else