mirror of
https://github.com/boostorg/parser.git
synced 2026-01-24 18:12:32 +00:00
Preserve the Attribute template parameter in char_parser::operator().
This commit is contained in:
@@ -182,24 +182,24 @@ namespace boost { namespace parser { namespace detail {
|
||||
std::ostream & os,
|
||||
int components = 0);
|
||||
|
||||
template<typename Context, typename Expected>
|
||||
template<typename Context, typename Expected, typename AttributeType>
|
||||
void parser_name(
|
||||
Context const & context,
|
||||
char_parser<Expected> const & parser,
|
||||
char_parser<Expected, AttributeType> const & parser,
|
||||
std::ostream & os,
|
||||
int components = 0);
|
||||
|
||||
template<typename Context>
|
||||
template<typename Context, typename AttributeType>
|
||||
void parser_name(
|
||||
Context const & context,
|
||||
char_parser<nope> const & parser,
|
||||
char_parser<nope, AttributeType> const & parser,
|
||||
std::ostream & os,
|
||||
int components = 0);
|
||||
|
||||
template<typename Context, typename Expected>
|
||||
template<typename Context, typename Expected, typename AttributeType>
|
||||
void parser_name(
|
||||
Context const & context,
|
||||
omit_parser<char_parser<Expected>> const & parser,
|
||||
omit_parser<char_parser<Expected, AttributeType>> const & parser,
|
||||
std::ostream & os,
|
||||
int components = 0);
|
||||
|
||||
|
||||
@@ -393,10 +393,10 @@ namespace boost { namespace parser { namespace detail {
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Context, typename Expected>
|
||||
template<typename Context, typename Expected, typename AttributeType>
|
||||
void parser_name(
|
||||
Context const & context,
|
||||
char_parser<Expected> const & parser,
|
||||
char_parser<Expected, AttributeType> const & parser,
|
||||
std::ostream & os,
|
||||
int components)
|
||||
{
|
||||
@@ -404,20 +404,20 @@ namespace boost { namespace parser { namespace detail {
|
||||
context, os, parser.expected_);
|
||||
}
|
||||
|
||||
template<typename Context>
|
||||
template<typename Context, typename AttributeType>
|
||||
void parser_name(
|
||||
Context const & context,
|
||||
char_parser<nope> const & parser,
|
||||
char_parser<nope, AttributeType> const & parser,
|
||||
std::ostream & os,
|
||||
int components)
|
||||
{
|
||||
os << "char_";
|
||||
}
|
||||
|
||||
template<typename Context, typename Expected>
|
||||
template<typename Context, typename Expected, typename AttributeType>
|
||||
void parser_name(
|
||||
Context const & context,
|
||||
omit_parser<char_parser<Expected>> const & parser,
|
||||
omit_parser<char_parser<Expected, AttributeType>> const & parser,
|
||||
std::ostream & os,
|
||||
int components)
|
||||
{
|
||||
|
||||
@@ -4026,8 +4026,8 @@ namespace boost { namespace parser {
|
||||
std::is_same<Expected, detail::nope>{},
|
||||
"If you're seeing this, you tried to chain calls on char_, "
|
||||
"like 'char_('a')('b')'. Quit it!'");
|
||||
return parser_interface<char_parser<T>>{
|
||||
char_parser<T>{std::move(x)}};
|
||||
return parser_interface<char_parser<T, AttributeType>>{
|
||||
char_parser<T, AttributeType>{std::move(x)}};
|
||||
}
|
||||
|
||||
// TODO: Document this conversion to string_view.
|
||||
@@ -4039,7 +4039,7 @@ namespace boost { namespace parser {
|
||||
"like 'char_(\"chars\")(\"chars\")'. Quit it!'");
|
||||
std::string_view const range(s);
|
||||
using char_range_t = detail::char_range<std::string_view>;
|
||||
using char_parser_t = char_parser<char_range_t>;
|
||||
using char_parser_t = char_parser<char_range_t, AttributeType>;
|
||||
return parser_interface<char_parser_t>(
|
||||
char_parser_t(char_range_t(range.begin(), range.end())));
|
||||
}
|
||||
@@ -4051,10 +4051,10 @@ namespace boost { namespace parser {
|
||||
std::is_same<Expected, detail::nope>{},
|
||||
"If you're seeing this, you tried to chain calls on char_, "
|
||||
"like 'char_('a', 'b')('c', 'd')'. Quit it!'");
|
||||
using pair_type = detail::char_pair<LoType, HiType>;
|
||||
return parser_interface<char_parser<pair_type>>(
|
||||
char_parser<pair_type>(
|
||||
pair_type{std::move(lo), std::move(hi)}));
|
||||
using char_pair_t = detail::char_pair<LoType, HiType>;
|
||||
using char_parser_t = char_parser<char_pair_t, AttributeType>;
|
||||
return parser_interface<char_parser_t>(
|
||||
char_parser_t(char_pair_t{std::move(lo), std::move(hi)}));
|
||||
}
|
||||
|
||||
template<typename Range>
|
||||
@@ -4070,7 +4070,7 @@ namespace boost { namespace parser {
|
||||
"like 'char_(char-set)(char-set)'. Quit it!'");
|
||||
auto range = make_range(r.begin(), r.end());
|
||||
using char_range_t = detail::char_range<decltype(range)>;
|
||||
using char_parser_t = char_parser<char_range_t>;
|
||||
using char_parser_t = char_parser<char_range_t, AttributeType>;
|
||||
return parser_interface<char_parser_t>(
|
||||
char_parser_t(char_range_t(range.begin(), range.end())));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user