// The Construct // // Copyright (C) The Construct Developers, Authors & Contributors // Copyright (C) 2016-2020 Jason Volk // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice is present in all copies. The // full license for this software is available in the LICENSE file. #pragma once #define HAVE_IRCD_SPIRIT_SPIRIT_H namespace ircd { namespace spirit __attribute__((visibility("default"))) { IRCD_EXCEPTION(ircd::error, error); }} namespace ircd { namespace spirit __attribute__((visibility("internal"))) { namespace phx = boost::phoenix; namespace proto = boost::proto; namespace fusion = boost::fusion; namespace spirit = boost::spirit; namespace ascii = spirit::ascii; namespace karma = spirit::karma; namespace qi = spirit::qi; using _val_type = phx::actor>; using _r0_type = phx::actor>; using _r1_type = phx::actor>; using _r2_type = phx::actor>; using _r3_type = phx::actor>; using spirit::unused_type; using spirit::auto_; using spirit::_pass; using spirit::_val; using spirit::inf; using qi::locals; using qi::_a_type; using qi::_r1_type; using qi::attr_cast; using qi::attr; using qi::_a; using qi::raw; using qi::omit; using qi::matches; using qi::hold; using qi::eoi; using qi::eps; using qi::expect; using qi::repeat; using qi::lit; using qi::char_; using qi::byte_; using qi::string; using qi::short_; using qi::ushort_; using qi::word; using qi::big_word; using qi::little_word; using qi::int_; using qi::uint_; using qi::dword; using qi::big_dword; using qi::little_dword; using qi::long_; using qi::ulong_; using qi::qword; using qi::big_qword; using qi::little_qword; using qi::float_; using qi::bin_float; using qi::big_bin_float; using qi::little_bin_float; using qi::double_; using qi::bin_double; using qi::big_bin_double; using qi::little_bin_double; using spirit::repository::qi::seek; using karma::attr_cast; using karma::lit; using karma::char_; using karma::long_; using karma::double_; using karma::bool_; using karma::eps; using karma::maxwidth; using karma::buffer; using karma::skip; namespace local { using qi::_0; using qi::_1; using qi::_2; using qi::_3; } template auto & attr_at(semantic_context&&); template auto & local_at(semantic_context&&); }} template inline auto & ircd::spirit::local_at(semantic_context&& c) { return boost::fusion::at_c(c.locals); } template inline auto & ircd::spirit::attr_at(semantic_context&& c) { return boost::fusion::at_c(c.attributes); }