Fix issue with GCC attribute syntax
This commit is contained in:
parent
478fd4e90c
commit
da3d515d09
4 changed files with 15 additions and 17 deletions
|
|
@ -561,12 +561,16 @@ namespace
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cpp_attribute_list detail::parse_attributes(detail::cxtoken_stream& stream)
|
cpp_attribute_list detail::parse_attributes(detail::cxtoken_stream& stream, bool skip_anway)
|
||||||
{
|
{
|
||||||
cpp_attribute_list result;
|
cpp_attribute_list result;
|
||||||
|
|
||||||
while (parse_attribute_impl(result, stream))
|
while (parse_attribute_impl(result, stream))
|
||||||
{
|
skip_anway = false;
|
||||||
}
|
|
||||||
|
if (skip_anway)
|
||||||
|
stream.bump();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -191,7 +191,8 @@ namespace cppast
|
||||||
void skip_brackets(cxtoken_stream& stream);
|
void skip_brackets(cxtoken_stream& stream);
|
||||||
|
|
||||||
// parses attributes
|
// parses attributes
|
||||||
cpp_attribute_list parse_attributes(cxtoken_stream& stream);
|
// if skip_anyway is true it will bump even if no attributes have been parsed
|
||||||
|
cpp_attribute_list parse_attributes(cxtoken_stream& stream, bool skip_anyway = false);
|
||||||
|
|
||||||
// converts a token range to a string
|
// converts a token range to a string
|
||||||
cpp_token_string to_string(cxtoken_stream& stream, cxtoken_iterator end);
|
cpp_token_string to_string(cxtoken_stream& stream, cxtoken_iterator end);
|
||||||
|
|
|
||||||
|
|
@ -281,12 +281,9 @@ namespace
|
||||||
result.is_explicit = true;
|
result.is_explicit = true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto attributes = detail::parse_attributes(stream);
|
auto attributes = detail::parse_attributes(stream, true);
|
||||||
if (attributes.empty())
|
result.attributes.insert(result.attributes.end(), attributes.begin(),
|
||||||
stream.bump();
|
attributes.end());
|
||||||
else
|
|
||||||
result.attributes.insert(result.attributes.end(), attributes.begin(),
|
|
||||||
attributes.end());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DEBUG_ASSERT(!stream.done(), detail::parse_error_handler{}, stream.cursor(),
|
DEBUG_ASSERT(!stream.done(), detail::parse_error_handler{}, stream.cursor(),
|
||||||
|
|
@ -296,8 +293,7 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
auto attributes = detail::parse_attributes(stream);
|
auto attributes = detail::parse_attributes(stream);
|
||||||
if (!attributes.empty())
|
result.attributes.insert(result.attributes.end(), attributes.begin(), attributes.end());
|
||||||
result.attributes.insert(result.attributes.end(), attributes.begin(), attributes.end());
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,11 +38,8 @@ std::unique_ptr<cpp_expression> detail::parse_default_value(cpp_attribute_list&
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto cur_attributes = detail::parse_attributes(stream);
|
auto cur_attributes = detail::parse_attributes(stream, true);
|
||||||
if (cur_attributes.empty())
|
attributes.insert(attributes.end(), cur_attributes.begin(), cur_attributes.end());
|
||||||
stream.bump();
|
|
||||||
else
|
|
||||||
attributes.insert(attributes.end(), cur_attributes.begin(), cur_attributes.end());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (has_default)
|
if (has_default)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue