| Index: tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| diff --git a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| index 93ecb224069515013ae7c434539593cb5368f87a..25a056902c500b64afbd2f8a4413967bf5b0581e 100644
|
| --- a/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| +++ b/tools/clang/rewrite_to_chrome_style/RewriteToChromeStyle.cpp
|
| @@ -383,6 +383,7 @@ struct TargetNodeTraits<clang::NamedDecl> {
|
| static clang::SourceLocation GetLoc(const clang::NamedDecl& decl) {
|
| return decl.getLocation();
|
| }
|
| + static const char* GetType() { return "NamedDecl"; }
|
| };
|
| const char TargetNodeTraits<clang::NamedDecl>::kName[] = "decl";
|
|
|
| @@ -392,6 +393,7 @@ struct TargetNodeTraits<clang::MemberExpr> {
|
| static clang::SourceLocation GetLoc(const clang::MemberExpr& expr) {
|
| return expr.getMemberLoc();
|
| }
|
| + static const char* GetType() { return "MemberExpr"; }
|
| };
|
| const char TargetNodeTraits<clang::MemberExpr>::kName[] = "expr";
|
|
|
| @@ -401,6 +403,7 @@ struct TargetNodeTraits<clang::DeclRefExpr> {
|
| static clang::SourceLocation GetLoc(const clang::DeclRefExpr& expr) {
|
| return expr.getLocation();
|
| }
|
| + static const char* GetType() { return "DeclRefExpr"; }
|
| };
|
| const char TargetNodeTraits<clang::DeclRefExpr>::kName[] = "expr";
|
|
|
| @@ -411,6 +414,7 @@ struct TargetNodeTraits<clang::CXXCtorInitializer> {
|
| assert(init.isWritten());
|
| return init.getSourceLocation();
|
| }
|
| + static const char* GetType() { return "CXXCtorInitializer"; }
|
| };
|
| const char TargetNodeTraits<clang::CXXCtorInitializer>::kName[] = "initializer";
|
|
|
| @@ -460,6 +464,7 @@ using FieldDeclRewriter = RewriterBase<clang::FieldDecl, clang::NamedDecl>;
|
| using VarDeclRewriter = RewriterBase<clang::VarDecl, clang::NamedDecl>;
|
| using MemberRewriter = RewriterBase<clang::FieldDecl, clang::MemberExpr>;
|
| using DeclRefRewriter = RewriterBase<clang::VarDecl, clang::DeclRefExpr>;
|
| +using FieldDeclRefRewriter = RewriterBase<clang::FieldDecl, clang::DeclRefExpr>;
|
| using FunctionDeclRewriter =
|
| RewriterBase<clang::FunctionDecl, clang::NamedDecl>;
|
| using FunctionRefRewriter =
|
| @@ -559,6 +564,19 @@ int main(int argc, const char* argv[]) {
|
| EnumConstantDeclRefRewriter enum_member_ref_rewriter(&replacements);
|
| match_finder.addMatcher(enum_member_ref_matcher, &enum_member_ref_rewriter);
|
|
|
| + // Member references in a non-member context ========
|
| + // Given
|
| + // struct S {
|
| + // typedef int U::*UnspecifiedBoolType;
|
| + // operator UnspecifiedBoolType() { return s_ ? &U::s_ : 0; }
|
| + // int s_;
|
| + // };
|
| + // matches |&U::s_| but not |s_|.
|
| + auto member_ref_matcher = id("expr", declRefExpr(to(field_decl_matcher)));
|
| +
|
| + FieldDeclRefRewriter member_ref_rewriter(&replacements);
|
| + match_finder.addMatcher(member_ref_matcher, &member_ref_rewriter);
|
| +
|
| // Non-method function declarations ========
|
| // Given
|
| // void f();
|
|
|