pasring postconditions

This commit is contained in:
Lorenzo Caminiti 2015-01-28 12:54:40 -08:00
parent 6eb853bfb8
commit 30e2c73725
3 changed files with 22 additions and 21 deletions

View File

@ -2,7 +2,7 @@
#ifndef BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_HPP_
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_HPP_
#include <boost/contract/ext_/preprocessor/traits/func/postcondition.hpp>
#include <boost/contract/ext_/preprocessor/traits/func/postconditions.hpp>
#include <boost/contract/ext_/preprocessor/traits/func/virt.hpp>
#include <boost/contract/ext_/preprocessor/traits/func/except.hpp>
#include <boost/contract/ext_/preprocessor/traits/func/ref.hpp>
@ -30,14 +30,14 @@
#if defined(BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_INDEX_TEST) && \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_INDEX_TEST < \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_POSTCONDITION_INDEX
# define BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_POSTCONDITION_PARSE_D( \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_POSTCONDITIONS_INDEX
# define BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_POSTCONDITIONS_PARSE_D( \
d, decl_traits) \
decl_traits
#else
# define BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_POSTCONDITION_PARSE_( \
# define BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_POSTCONDITIONS_PARSE_( \
d, decl_traits) \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_PARSE_D(d, decl_traits)
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_PARSE_D(d, decl_traits)
#endif
#if defined(BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_INDEX_TEST) && \
@ -197,7 +197,7 @@
// Implementation: These macros order must match INDEX values (see index.hpp).
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_PARSE_D(d, decl) \
BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_DONE_( \
BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_POSTCONDITION_PARSE_(d, \
BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_POSTCONDITIONS_PARSE_(d, \
BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_VIRT_PARSE_( \
BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_TRAILING_RETURN_PARSE_(d, \
BOOST_CONTRACT_EXT_PP_TRAITS_FUNC_EXCEPT_PARSE_( \

View File

@ -44,7 +44,7 @@
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_VIRT_INDEX \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_OVERRIDE_INDEX
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_POSTCONDITION_INDEX 22
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_POSTCONDITIONS_INDEX 22
// Must be greater than all indexes (i.e., very last one).
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_MAX_INDEX 23

View File

@ -1,6 +1,6 @@
#ifndef BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_HPP_
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_HPP_
#ifndef BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_HPP_
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_HPP_
#include <boost/contract/ext_/preprocessor/traits/assertions.hpp>
#include <boost/contract/ext_/preprocessor/keyword/contract/postcondition.hpp>
@ -20,18 +20,18 @@
// caller).
// Extra level of indirection needed for proper macro expansion (on MSVC).
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_EXPAND_TRAITS_( \
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_EXPAND_TRAITS_( \
decl_traits) \
BOOST_PP_TUPLE_ELEM(2, 1, decl_traits)
// Precondition: decl = `(,,,) ...` from `postcondition(,,,) ...` originally in
// decl. This macro will also parse `(,,,)` into a pp-seq of assertion traits.
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_(d, decl, traits) \
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_(d, decl, traits) \
( \
BOOST_PP_TUPLE_EAT(0) decl, \
BOOST_CONTRACT_EXT_PP_TRAITS_PUSH_BACK( \
traits, \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_EXPAND_TRAITS_( \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_EXPAND_TRAITS_( \
BOOST_CONTRACT_EXT_PP_ASSERTIONS_TRAITS_PARSE_D(d, \
BOOST_PP_EXPAND( \
BOOST_CONTRACT_EXT_PP_VARIADIC_ENUM_TO_SEQ \
@ -39,40 +39,41 @@
) \
) \
) \
BOOST_PP_EMPTY \
) \
)
// Precondition: decl = `postcondition(,,,) ...`.
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_YES_(d, decl, traits) \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_(d, \
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_YES_(d, decl, traits) \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_(d, \
BOOST_CONTRACT_EXT_PP_KEYWORD_POSTCONDITION_REMOVE_FRONT(decl), \
traits \
)
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_NO_( \
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_NO_( \
unused, decl, traits) \
(decl, BOOST_CONTRACT_EXT_PP_TRAITS_PUSH_BACK(traits, BOOST_PP_EMPTY))
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_PARSE_ARGS_( \
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_PARSE_ARGS_( \
d, decl, traits) \
BOOST_PP_IIF(BOOST_CONTRACT_EXT_PP_KEYWORD_IS_POSTCONDITION_FRONT(decl), \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_YES_ \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_YES_ \
, \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_NO_ \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_NO_ \
)(d, decl, traits)
/* PUBLIC */
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_PARSE_D( \
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_PARSE_D( \
d, decl_traits) \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION_PARSE_ARGS_(d, \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS_PARSE_ARGS_(d, \
BOOST_PP_TUPLE_ELEM(2, 0, decl_traits), \
BOOST_PP_TUPLE_ELEM(2, 1, decl_traits) \
)
// Expand to pp-seq of postcondition assertion traits to be inspected via
// ASSERTION_TRAITS macro, or to EMPTY() if no postconditions.
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITION(traits) \
#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_POSTCONDITIONS(traits) \
BOOST_CONTRACT_EXT_PP_TRAITS_ELEM( \
BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_POSTCONDITIONS_INDEX, traits \
)()