[cfe-dev] AST Matcher for Decl subclass CilkSpawnDecl
Georg Altmann
georg.altmann at informatik.stud.uni-erlangen.de
Tue Nov 18 06:31:30 PST 2014
Hi,
I am working on a modified version of clang for Intel Cilk Plus, from
https://github.com/cilkplus
based on clang 3.4.
They added
class CilkSpawnDecl : public Decl {
// ...
public:
// ...
/// \brief Returns the associated CapturedStmt.
CapturedStmt *getCapturedStmt() { return CapturedSpawn; }
const CapturedStmt *getCapturedStmt() const { return CapturedSpawn; }
// ...
};
However there don't seem to be any releated AST matchers and I need to match
|-CompoundStmt
| `-CilkSpawnExpr
| |-CilkSpawnDecl
| | `-CapturedStmt
| | |-CapturedDecl
| | | `-ImplicitParamDecl
| | |-ExprWithCleanups
| | | `-CallExpr
------------^ this guy
which does not seem to be possible without a customized matcher for
CilkSpawnDecl.
I would like to define a AST Traversal Matcher, so I can do something
like this
compoundStmt(
has(cilkSpawnExpr(
has(cilkSpawnDecl(
hasCapturedStmt(
^ has(exprWithCleanups(has(callExpr))))))))
`-- How?
I already defined cilkSpawnExpr and cilkSpawnDecl by using
VariadicDynCastAllOfMatcher which is working great.
Yet, I still need hasCapturedStmt and I can't get my head around the AST
matcher internals. I guess, I somehow need to define a matcher that
takes a CilkSpawnDecl node and returns true if getCapturedStmt() != 0, e.g.
match(CilkSpawnDecl const& spawnDecl) {
if (spawnDecl.getCapturedStmt())
return true;
else
return false;
}
But how do I define hasCapturedStmt() so that has(exprWithCleanups(...))
can act on the children of CapturedStmt?
I.e. how does an AST matcher hand down the list of children to the
following matcher expressions?
I looked at the macro AST_MATCHER_P but I'm unsure about ParamType,
ASTMatchFinder and BoundNodesTreeBuilder. Can I use that?
Thanks!
Georg
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20141118/b80cf74c/attachment.sig>
More information about the cfe-dev
mailing list