Fix parsing of default value

It is now always unexposed, but works better.
This commit is contained in:
Jonathan Müller 2017-03-30 13:11:21 +02:00
commit 9a0ac36715
12 changed files with 99 additions and 100 deletions

View file

@ -15,24 +15,10 @@ namespace
std::unique_ptr<cpp_function_parameter> parse_parameter(const detail::parse_context& context,
const CXCursor& cur)
{
auto name = detail::get_cursor_name(cur);
auto type = detail::parse_type(context, cur, clang_getCursorType(cur));
auto is_decltype = type->kind() == cpp_type_kind::decltype_t;
auto name = detail::get_cursor_name(cur);
auto type = detail::parse_type(context, cur, clang_getCursorType(cur));
std::unique_ptr<cpp_expression> default_value;
detail::visit_children(cur, [&](const CXCursor& child) {
if (!clang_isExpression(clang_getCursorKind(child)))
return;
else if (is_decltype)
// skip first expression then
is_decltype = false;
else
{
DEBUG_ASSERT(!default_value, detail::parse_error_handler{}, child,
"unexpected child cursor of function parameter");
default_value = detail::parse_expression(context, child);
}
});
auto default_value = detail::parse_default_value(context, cur, name.c_str());
if (name.empty())
return cpp_function_parameter::build(std::move(type), std::move(default_value));