clang - Appropriate AST Matcher for class parent declaration -


given class hierarchy:

class {}; class b {}; class c : public {}; class d : public c {}; 

i'm trying refactor class c inherit class b rather class a. can definition statement using recorddecl:

recorddecl(hasname("c"), isdefinition()).bind("myclass") 

with associated matchcallback, can dump() class verify matched right node. have not found way bind instead public a or, better, a.

what appropriate ast matcher capture either public a or a class c?

edit:

the output of clang -ast-dump filtered class c in situation show similar following:

cxxrecorddecl [address] <line numbers> <loc> class c definition |- public 'class a' |- cxxrecorddecl [address 2] <columns> <loc> implicit referenced class c 

it's if there no ast node type represent parent class declarations in ast-dump.

i found link providing context how drill down. notably, 1 tutorial suggested using recorddecl in match handler returned node vs. reference using cxxrecorddecl. if output each base in match handler:

if (const cxxrecord *entitybase = result.nodes.getnodeas<clang::cxxrecorddecl>("entitybase")) {     (auto &p : entitybase->bases()) {         p.dump();     } } 

we find reference class recordtype referred cxxrecord. using clang-query, did not find way chain match recordtype(...) conducive pulling public a or a. instead, solution became similar this:

std::string qual = "public "; std::string parentname = "a"; std::string parenttype = "class " + parentname; if (0 == parenttype.compare(p.gettype().getasstring())) {     replacement rep(*(result.sourcemanager),         p.getlocstart().getlocwithoffset(qual.length()),         parentname.length(),         "b");     replace->insert(rep); } 

i'm not marking answer yet in case has way use recordtype snag base class reference directly rather iterating , checking base class type names, shown above.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -