Boost logo

Boost Users :

From: Andreas Sæbjørnsen (andreas.saebjoernsen_at_[hidden])
Date: 2006-06-16 21:18:20


>
> Hmmm. The 'warning_directive' preprocess_exception is recoverable. That
> means you may simply continue to iterate after catching this type of
> exception (see the wave driver how this may be achieved). That's the
> reason
> why I made the warning to throw an exception (same as #error). I'm not
> sure
> if we really should change this behaviour (even more as the driver
> currently
> depends on that).
>
> OTOH I like your idea to add a on_warning() pp hook function (same should
> be
> added for #error as well). What do you think, what if we use the return
> value of the on_warning() pp hook to decide, whether to throw the
> exception?
> This way we could keep the default behaviour (throwing) but you could
> enforce the non-throwing behaviour simply by returning false.

I think using the return value form on_warning() or on_hook() to decide if
an exception
should be thrown is an excellent idea. That would fit very well with my
needs.

Regards
Andreas

>
> > Thanks
> > Andreas
> >
> >
> > #if BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE != 0
> > //////////////////////////////////////////////////////////////
> > /////////////////
> > //
> > // on_warning(): handle #warning directives
> > //
> > //////////////////////////////////////////////////////////////
> > /////////////////
> > template <typename ContextT>
> > inline void
> > pp_iterator_functor<ContextT>::on_warning(
> > typename parse_tree_type::const_iterator const &begin,
> > typename parse_tree_type::const_iterator const &end)
> > {
> > BOOST_ASSERT(ctx.get_if_block_status());
> >
> >
> >
> > // preprocess the given sequence into the provided list
> > token_sequence_type expanded;
> > get_token_value<result_type, parse_node_type> get_value;
> >
> >
> >
> > typename ref_transform_iterator_generator<
> > get_token_value<result_type, parse_node_type>,
> > typename parse_tree_type::const_iterator
> > >::type first = make_ref_transform_iterator(begin, get_value);
> >
> >
> >
> > #if BOOST_WAVE_PREPROCESS_ERROR_MESSAGE_BODY != 0
> > // preprocess the body of this #warning message
> > token_sequence_type toexpand;
> >
> >
> >
> > std::copy(first, make_ref_transform_iterator(end, get_value),
> > std::inserter(toexpand, toexpand.end()));
> >
> >
> >
> > typename token_sequence_type::iterator begin2 = toexpand.begin();
> > ctx.expand_whole_tokensequence(begin2, toexpand.end(), expanded,
> > false);
> > #else
> > // simply copy the body of this #warning message to the
> > issued diagnostic
> > // message
> > std::copy(first, make_ref_transform_iterator(end, get_value),
> > std::inserter(expanded, expanded.end()));
> > #endif
> > //AS(051706) Added an extra hook to send the warning directive
> > std::cout << "The warning is: " <<
> > boost::wave::util::impl::as_string(expanded).c_str()
> > << std::endl;
> > ctx.get_hooks().on_warning(toexpand);
> >
> >
> >
> > //AS(051606) Do not treat warning directives as errors
> > #if 0
> > // report the corresponding error
> > BOOST_WAVE_THROW(preprocess_exception, warning_directive,
> > boost::wave::util::impl::as_string(expanded).c_str(),
> > act_pos);
> > #endif
> >
> >
> >
> > }
> > #endif // BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE != 0
> >
> >
> >
> >
> >
> >
> >
> >
> > Regards Hartmut
> >
> >
> > _______________________________________________
> > Boost-users mailing list
> > Boost-users_at_[hidden]
> > http://lists.boost.org/mailman/listinfo.cgi/boost-users
> >
> >
> >
> >
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net