Refactored enum declaration processing
This commit is contained in:
@@ -341,6 +341,30 @@ static void process_class_declaration(
|
|||||||
ctx->d.classes.emplace_back(std::move(c));
|
ctx->d.classes.emplace_back(std::move(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void process_enum_declaration(
|
||||||
|
cx::cursor cursor, class_ *parent, struct tu_context *ctx)
|
||||||
|
{
|
||||||
|
enum_ e{};
|
||||||
|
e.name = cursor.fully_qualified();
|
||||||
|
e.namespace_ = ctx->namespace_;
|
||||||
|
|
||||||
|
auto enum_ctx = element_visitor_context<enum_>(ctx->d, e);
|
||||||
|
enum_ctx.ctx = ctx;
|
||||||
|
|
||||||
|
clang_visitChildren(cursor.get(), enum_visitor, &enum_ctx);
|
||||||
|
|
||||||
|
if (parent != nullptr) {
|
||||||
|
class_relationship containment;
|
||||||
|
containment.type = relationship_t::kContainment;
|
||||||
|
containment.destination = e.name;
|
||||||
|
parent->relationships.emplace_back(std::move(containment));
|
||||||
|
|
||||||
|
spdlog::debug("Added relationship {} +-- {}", parent->name, e.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx->d.enums.emplace_back(std::move(e));
|
||||||
|
}
|
||||||
|
|
||||||
static class_ build_template_instantiation(cx::cursor cursor, cx::type t)
|
static class_ build_template_instantiation(cx::cursor cursor, cx::type t)
|
||||||
{
|
{
|
||||||
auto template_type = t.type_declaration().specialized_cursor_template();
|
auto template_type = t.type_declaration().specialized_cursor_template();
|
||||||
@@ -472,24 +496,7 @@ static enum CXChildVisitResult class_visitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
visit_if_cursor_valid(cursor, [ctx, is_struct](cx::cursor cursor) {
|
visit_if_cursor_valid(cursor, [ctx, is_struct](cx::cursor cursor) {
|
||||||
enum_ e{};
|
process_enum_declaration(cursor, &ctx->element, ctx->ctx);
|
||||||
e.name = cursor.fully_qualified();
|
|
||||||
e.namespace_ = ctx->ctx->namespace_;
|
|
||||||
|
|
||||||
auto enum_ctx = element_visitor_context<enum_>(ctx->ctx->d, e);
|
|
||||||
enum_ctx.ctx = ctx->ctx;
|
|
||||||
|
|
||||||
clang_visitChildren(cursor.get(), enum_visitor, &enum_ctx);
|
|
||||||
|
|
||||||
class_relationship containment;
|
|
||||||
containment.type = relationship_t::kContainment;
|
|
||||||
containment.destination = e.name;
|
|
||||||
ctx->element.relationships.emplace_back(std::move(containment));
|
|
||||||
|
|
||||||
spdlog::debug(
|
|
||||||
"Added relationship {} +-- {}", ctx->element.name, e.name);
|
|
||||||
|
|
||||||
ctx->ctx->d.enums.emplace_back(std::move(e));
|
|
||||||
});
|
});
|
||||||
ret = CXChildVisit_Continue;
|
ret = CXChildVisit_Continue;
|
||||||
break;
|
break;
|
||||||
@@ -761,16 +768,7 @@ static enum CXChildVisitResult translation_unit_visitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
visit_if_cursor_valid(cursor, [ctx, is_struct](cx::cursor cursor) {
|
visit_if_cursor_valid(cursor, [ctx, is_struct](cx::cursor cursor) {
|
||||||
enum_ e{};
|
process_enum_declaration(cursor, nullptr, ctx);
|
||||||
e.name = cursor.fully_qualified();
|
|
||||||
e.namespace_ = ctx->namespace_;
|
|
||||||
|
|
||||||
auto enum_ctx = element_visitor_context<enum_>(ctx->d, e);
|
|
||||||
enum_ctx.ctx = ctx;
|
|
||||||
|
|
||||||
clang_visitChildren(cursor.get(), enum_visitor, &enum_ctx);
|
|
||||||
|
|
||||||
ctx->d.enums.emplace_back(std::move(e));
|
|
||||||
});
|
});
|
||||||
ret = CXChildVisit_Continue;
|
ret = CXChildVisit_Continue;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user