]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/spirit/home/x3/support/utility/annotate_on_success.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / spirit / home / x3 / support / utility / annotate_on_success.hpp
CommitLineData
7c673cae
FG
1/*=============================================================================
2 Copyright (c) 2001-2015 Joel de Guzman
3
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6=============================================================================*/
7#if !defined(BOOST_SPIRIT_X3__ANNOTATE_ON_SUCCESS_HPP)
8#define BOOST_SPIRIT_X3__ANNOTATE_ON_SUCCESS_HPP
9
10#include <boost/spirit/home/x3/support/ast/variant.hpp>
11#include <boost/spirit/home/x3/support/context.hpp>
12#include <boost/spirit/home/x3/support/utility/error_reporting.hpp>
13#include <boost/spirit/home/x3/support/utility/lambda_visitor.hpp>
14
15namespace boost { namespace spirit { namespace x3
16{
17 ///////////////////////////////////////////////////////////////////////////
18 // The on_success handler tags the AST with the iterator position
19 // for error handling.
20 //
21 // The on_success handler also ties the AST to a vector of iterator
22 // positions for the purpose of subsequent semantic error handling
23 // when the program is being compiled. See x3::position_cache in
24 // x3/support/ast.
25 //
26 // We'll ask the X3's error_handler utility to do these.
27 ///////////////////////////////////////////////////////////////////////////
28
29 struct annotate_on_success
30 {
31 template <typename Iterator, typename Context, typename... Types>
32 inline void on_success(Iterator const& first, Iterator const& last
33 , variant<Types...>& ast, Context const& context)
34 {
35 ast.apply_visitor(x3::make_lambda_visitor<void>([&](auto& node)
36 {
37 this->on_success(first, last, node, context);
38 }));
39 }
40
41 template <typename T, typename Iterator, typename Context>
42 inline void on_success(Iterator const& first, Iterator const& last
43 , T& ast, Context const& context)
44 {
1e59de90 45 auto& error_handler = x3::get<error_handler_tag>(context).get();
7c673cae
FG
46 error_handler.tag(ast, first, last);
47 }
48 };
49}}}
50
51#endif