mirror of
https://github.com/JakeHillion/object-introspection.git
synced 2024-09-19 11:09:05 +01:00
Keep template parameters for pass-through types (#486)
Summary: Implement the pass-through feature in ClangTypeParser (keeping template parameters for specified types0. Reviewed By: JakeHillion Differential Revision: D53815662
This commit is contained in:
parent
34a35cd418
commit
1ba742b433
@ -88,6 +88,7 @@ class ConsumerContext {
|
|||||||
std::optional<bool> pic;
|
std::optional<bool> pic;
|
||||||
const std::vector<std::unique_ptr<ContainerInfo>>& containerInfos;
|
const std::vector<std::unique_ptr<ContainerInfo>>& containerInfos;
|
||||||
std::set<std::string_view> typesToStub;
|
std::set<std::string_view> typesToStub;
|
||||||
|
std::set<std::string_view> mustProcessTemplateParams;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
clang::Sema* sema = nullptr;
|
clang::Sema* sema = nullptr;
|
||||||
@ -142,6 +143,9 @@ int OIGenerator::generate(clang::tooling::CompilationDatabase& db,
|
|||||||
ctx.typesToStub.insert(stubType);
|
ctx.typesToStub.insert(stubType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const auto& cInfo : generatorConfig.passThroughTypes)
|
||||||
|
ctx.mustProcessTemplateParams.insert(cInfo.typeName);
|
||||||
|
|
||||||
CreateTypeGraphActionFactory factory{ctx};
|
CreateTypeGraphActionFactory factory{ctx};
|
||||||
|
|
||||||
clang::tooling::ClangTool tool{db, sourcePaths};
|
clang::tooling::ClangTool tool{db, sourcePaths};
|
||||||
@ -249,6 +253,7 @@ class CreateTypeGraphConsumer : public clang::ASTConsumer {
|
|||||||
|
|
||||||
type_graph::ClangTypeParserOptions opts;
|
type_graph::ClangTypeParserOptions opts;
|
||||||
opts.typesToStub = ctx.typesToStub;
|
opts.typesToStub = ctx.typesToStub;
|
||||||
|
opts.mustProcessTemplateParams = ctx.mustProcessTemplateParams;
|
||||||
|
|
||||||
type_graph::ClangTypeParser parser{ctx.typeGraph, ctx.containerInfos, opts};
|
type_graph::ClangTypeParser parser{ctx.typeGraph, ctx.containerInfos, opts};
|
||||||
|
|
||||||
|
@ -211,10 +211,11 @@ Type& ClangTypeParser::enumerateClass(const clang::RecordType& ty) {
|
|||||||
ty, kind, std::move(name), std::move(fqName), size, virtuality);
|
ty, kind, std::move(name), std::move(fqName), size, virtuality);
|
||||||
c.setAlign(ast->getTypeAlign(clang::QualType(&ty, 0)) / 8);
|
c.setAlign(ast->getTypeAlign(clang::QualType(&ty, 0)) / 8);
|
||||||
|
|
||||||
enumerateClassTemplateParams(ty, c.templateParams);
|
if (options_.mustProcessTemplateParams.contains(fqnWithoutTemplateParams))
|
||||||
|
enumerateClassTemplateParams(ty, c.templateParams);
|
||||||
|
|
||||||
// enumerateClassParents(ty, c.parents);
|
// enumerateClassParents(ty, c.parents);
|
||||||
enumerateClassMembers(ty, c.members);
|
enumerateClassMembers(ty, c.members);
|
||||||
// enumerateClassFunctions(type, c.functions);
|
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,7 @@ struct ClangTypeParserOptions {
|
|||||||
bool chaseRawPointers = false;
|
bool chaseRawPointers = false;
|
||||||
bool readEnumValues = false;
|
bool readEnumValues = false;
|
||||||
std::set<std::string_view> typesToStub;
|
std::set<std::string_view> typesToStub;
|
||||||
|
std::set<std::string_view> mustProcessTemplateParams;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user