123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /*=============================================================================
- Copyright (c) 2001-2007 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- ==============================================================================*/
- #ifndef BOOST_PHOENIX_CORE_LIMITS_HPP
- #define BOOST_PHOENIX_CORE_LIMITS_HPP
- #include <boost/config.hpp>
- #include <boost/detail/workaround.hpp>
- #include <boost/preprocessor/arithmetic/add.hpp>
- #include <boost/preprocessor/inc.hpp>
- #include <boost/preprocessor/dec.hpp>
- #include <boost/preprocessor/stringize.hpp>
- #include <boost/phoenix/version.hpp>
- #include <boost/phoenix/support/preprocessor/round.hpp>
- #if defined(BOOST_PHOENIX_LIMIT)
- # if !defined( BOOST_PROTO_MAX_ARITY )
- # define BOOST_PROTO_MAX_ARITY BOOST_PHOENIX_LIMIT
- # elif (BOOST_PROTO_MAX_ARITY < BOOST_PHOENIX_LIMIT)
- # error "BOOST_PROTO_MAX_ARITY is set too low"
- # endif
- #include <boost/proto/proto_fwd.hpp>
- #else
- #include <boost/proto/proto_fwd.hpp>
- #define BOOST_PHOENIX_LIMIT BOOST_PROTO_MAX_ARITY
- #endif
- #if !defined(PHOENIX_LIMIT)
- #define PHOENIX_LIMIT BOOST_PHOENIX_LIMIT
- #endif
- #define BOOST_PHOENIX_LIMIT_STR BOOST_PP_STRINGIZE(BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT))
- #ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES
- # define BOOST_PHOENIX_NO_VARIADIC_ACTOR
- # define BOOST_PHOENIX_NO_VARIADIC_CALL
- # define BOOST_PHOENIX_NO_VARIADIC_FUNCTION_EQUAL
- # define BOOST_PHOENIX_NO_VARIADIC_FUNCTION_EVAL
- # define BOOST_PHOENIX_NO_VARIADIC_EXPRESSION
- # define BOOST_PHOENIX_NO_VARIADIC_BIND
- # define BOOST_PHOENIX_NO_VARIADIC_SCOPE
- #endif
- #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
- # define BOOST_PHOENIX_NO_VARIADIC_ACTOR
- # define BOOST_PHOENIX_NO_VARIADIC_FUNCTION_EVAL
- #endif
- #if BOOST_WORKAROUND(BOOST_MSVC, == 1800)
- // FIXME: temporary disable on MSVC 2013.
- # define BOOST_PHOENIX_NO_VARIADIC_SCOPE
- #endif
- #ifdef BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS
- // FIXME: Due to proto, some compilers cannot expand parameter pack.
- # define BOOST_PHOENIX_NO_VARIADIC_ACTOR
- # define BOOST_PHOENIX_NO_VARIADIC_CALL
- # define BOOST_PHOENIX_NO_VARIADIC_FUNCTION_EVAL
- # define BOOST_PHOENIX_NO_VARIADIC_EXPRESSION
- # define BOOST_PHOENIX_NO_VARIADIC_BIND
- # define BOOST_PHOENIX_NO_VARIADIC_SCOPE
- #endif
- # define BOOST_PHOENIX_NO_VARIADIC_OBJECT
- # define BOOST_PHOENIX_NO_VARIADIC_OPERATOR
- # define BOOST_PHOENIX_NO_VARIADIC_FUNCTION
- #if !defined(BOOST_PHOENIX_ARG_LIMIT)
- # define BOOST_PHOENIX_ARG_LIMIT BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT)
- #elif (BOOST_PHOENIX_ARG_LIMIT < 5)
- # error "BOOST_PHOENIX_ARG_LIMIT is set too low"
- #elif BOOST_PHOENIX_ARG_LIMIT != BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT) && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #if !defined(BOOST_PHOENIX_ACTOR_LIMIT)
- # define BOOST_PHOENIX_ACTOR_LIMIT BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT)
- #elif (BOOST_PHOENIX_ACTOR_LIMIT > BOOST_PHOENIX_ARG_LIMIT)
- # error "BOOST_PHOENIX_ACTOR_LIMIT > BOOST_PHOENIX_ARG_LIMIT"
- #elif (BOOST_PHOENIX_ACTOR_LIMIT < 3)
- # error "BOOST_PHOENIX_ACTOR_LIMIT is set too low"
- #elif BOOST_PHOENIX_ACTOR_LIMIT != BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT) && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #if !defined(BOOST_PHOENIX_PERFECT_FORWARD_LIMIT)
- # define BOOST_PHOENIX_PERFECT_FORWARD_LIMIT 3
- #elif (BOOST_PHOENIX_PERFECT_FORWARD_LIMIT > BOOST_PHOENIX_ACTOR_LIMIT)
- # error "BOOST_PHOENIX_PERFECT_FORWARD_LIMIT > BOOST_PHOENIX_ACTOR_LIMIT"
- #elif (BOOST_PHOENIX_PERFECT_FORWARD_LIMIT < 3)
- # error "BOOST_PHOENIX_PERFECT_FORWARD_LIMIT is set too low"
- #elif BOOST_PHOENIX_PERFECT_FORWARD_LIMIT != 3 && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #if !defined(BOOST_PHOENIX_COMPOSITE_LIMIT)
- # define BOOST_PHOENIX_COMPOSITE_LIMIT BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT)
- #elif (BOOST_PHOENIX_COMPOSITE_LIMIT < 5)
- # error "BOOST_PHOENIX_COMPOSITE_LIMIT is set too low"
- #elif BOOST_PHOENIX_COMPOSITE_LIMIT != BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT) && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #if !defined(BOOST_PHOENIX_MEMBER_LIMIT)
- # define BOOST_PHOENIX_MEMBER_LIMIT BOOST_PP_DEC(BOOST_PHOENIX_COMPOSITE_LIMIT)
- #elif (BOOST_PHOENIX_MEMBER_LIMIT > BOOST_PHOENIX_COMPOSITE_LIMIT)
- # error "BOOST_PHOENIX_MEMBER_LIMIT > BOOST_PHOENIX_COMPOSITE_LIMIT"
- #elif (BOOST_PHOENIX_MEMBER_LIMIT < 3)
- # error "BOOST_PHOENIX_MEMBER_LIMIT is set too low"
- #elif BOOST_PHOENIX_MEMBER_LIMIT != BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT) && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #if !defined(BOOST_PHOENIX_CATCH_LIMIT)
- # define BOOST_PHOENIX_CATCH_LIMIT BOOST_PHOENIX_COMPOSITE_LIMIT
- #elif (BOOST_PHOENIX_CATCH_LIMIT < 1)
- # error "BOOST_PHOENIX_CATCH_LIMIT is set too low"
- #elif BOOST_PHOENIX_CATCH_LIMIT != BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT) && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #if !defined(BOOST_PHOENIX_DYNAMIC_LIMIT)
- # define BOOST_PHOENIX_DYNAMIC_LIMIT BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT)
- #elif (BOOST_PHOENIX_DYNAMIC_LIMIT < 1)
- # error "BOOST_PHOENIX_DYNAMIC_LIMIT is set too low"
- #elif BOOST_PHOENIX_DYNAMIC_LIMIT != BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT) && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #if !defined(BOOST_PHOENIX_LOCAL_LIMIT)
- # define BOOST_PHOENIX_LOCAL_LIMIT BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT)
- #elif (BOOST_PHOENIX_LOCAL_LIMIT < 3)
- # error "BOOST_PHOENIX_LOCAL_LIMIT is set too low"
- #elif BOOST_PHOENIX_LOCAL_LIMIT != BOOST_PHOENIX_PP_ROUND_UP(BOOST_PHOENIX_LIMIT) && !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
- # define BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES
- #endif
- #endif
|