X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FParsedCommand.mpp;h=f1d68339f0f960952914dda09eb6fc6d9c64e649;hb=8e708e9784c76461252c3bdf646d291c593a49be;hp=3d998c42b7d74a92740010d08709989291e7c0c9;hpb=61bbb1c1ec66b1a41951fc971d0325095e17e7a9;p=senf.git diff --git a/Console/ParsedCommand.mpp b/Console/ParsedCommand.mpp index 3d998c4..f1d6833 100644 --- a/Console/ParsedCommand.mpp +++ b/Console/ParsedCommand.mpp @@ -135,11 +135,15 @@ v_execute(std::ostream & os, ParseCommandInfo const & command) riterator const i_end (boost::rend(command.arguments())); # define mpp_l(z,n,d) \ - if (i == i_end) \ - throw SyntaxErrorException("invalid number of arguments"); \ mpp_ArgTypeN(n) mpp_ArgN(n) (arg< mpp_ArgTypeN(n) >( n ).defaultValue); \ - if (! arg(n).hasDefault || nDefaults-- <= 0) \ - ArgumentTraits< mpp_ArgTypeN(n) >::parse( *(i++), mpp_ArgN(n) ); + if (! arg(n).hasDefault || nDefaults-- <= 0) { \ + if (i == i_end) \ + throw SyntaxErrorException("invalid number of arguments"); \ + if (arg< mpp_ArgTypeN(n) >(n).parser) \ + arg< mpp_ArgTypeN(n) >(n).parser( *(i++), mpp_ArgN(n) ); \ + else \ + ArgumentTraits< mpp_ArgTypeN(n) >::parse( *(i++), mpp_ArgN(n) ); \ + } # define mpp_l_(z,n,d) mpp_l(z, BOOST_PP_SUB(BOOST_PP_DEC(BOOST_PP_ITERATION()), n), d) BOOST_PP_REPEAT( BOOST_PP_ITERATION(), mpp_l_, _ ) # undef mpp_l