| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Changes Blink-style names to Chrome-style names. Currently transforms: | 5 // Changes Blink-style names to Chrome-style names. Currently transforms: |
| 6 // fields: | 6 // fields: |
| 7 // int m_operationCount => int operation_count_ | 7 // int m_operationCount => int operation_count_ |
| 8 // variables (including parameters): | 8 // variables (including parameters): |
| 9 // int mySuperVariable => int my_super_variable | 9 // int mySuperVariable => int my_super_variable |
| 10 // constants: | 10 // constants: |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 | 376 |
| 377 template <typename Type> | 377 template <typename Type> |
| 378 struct TargetNodeTraits; | 378 struct TargetNodeTraits; |
| 379 | 379 |
| 380 template <> | 380 template <> |
| 381 struct TargetNodeTraits<clang::NamedDecl> { | 381 struct TargetNodeTraits<clang::NamedDecl> { |
| 382 static const char kName[]; | 382 static const char kName[]; |
| 383 static clang::SourceLocation GetLoc(const clang::NamedDecl& decl) { | 383 static clang::SourceLocation GetLoc(const clang::NamedDecl& decl) { |
| 384 return decl.getLocation(); | 384 return decl.getLocation(); |
| 385 } | 385 } |
| 386 static const char* GetType() { return "NamedDecl"; } |
| 386 }; | 387 }; |
| 387 const char TargetNodeTraits<clang::NamedDecl>::kName[] = "decl"; | 388 const char TargetNodeTraits<clang::NamedDecl>::kName[] = "decl"; |
| 388 | 389 |
| 389 template <> | 390 template <> |
| 390 struct TargetNodeTraits<clang::MemberExpr> { | 391 struct TargetNodeTraits<clang::MemberExpr> { |
| 391 static const char kName[]; | 392 static const char kName[]; |
| 392 static clang::SourceLocation GetLoc(const clang::MemberExpr& expr) { | 393 static clang::SourceLocation GetLoc(const clang::MemberExpr& expr) { |
| 393 return expr.getMemberLoc(); | 394 return expr.getMemberLoc(); |
| 394 } | 395 } |
| 396 static const char* GetType() { return "MemberExpr"; } |
| 395 }; | 397 }; |
| 396 const char TargetNodeTraits<clang::MemberExpr>::kName[] = "expr"; | 398 const char TargetNodeTraits<clang::MemberExpr>::kName[] = "expr"; |
| 397 | 399 |
| 398 template <> | 400 template <> |
| 399 struct TargetNodeTraits<clang::DeclRefExpr> { | 401 struct TargetNodeTraits<clang::DeclRefExpr> { |
| 400 static const char kName[]; | 402 static const char kName[]; |
| 401 static clang::SourceLocation GetLoc(const clang::DeclRefExpr& expr) { | 403 static clang::SourceLocation GetLoc(const clang::DeclRefExpr& expr) { |
| 402 return expr.getLocation(); | 404 return expr.getLocation(); |
| 403 } | 405 } |
| 406 static const char* GetType() { return "DeclRefExpr"; } |
| 404 }; | 407 }; |
| 405 const char TargetNodeTraits<clang::DeclRefExpr>::kName[] = "expr"; | 408 const char TargetNodeTraits<clang::DeclRefExpr>::kName[] = "expr"; |
| 406 | 409 |
| 407 template <> | 410 template <> |
| 408 struct TargetNodeTraits<clang::CXXCtorInitializer> { | 411 struct TargetNodeTraits<clang::CXXCtorInitializer> { |
| 409 static const char kName[]; | 412 static const char kName[]; |
| 410 static clang::SourceLocation GetLoc(const clang::CXXCtorInitializer& init) { | 413 static clang::SourceLocation GetLoc(const clang::CXXCtorInitializer& init) { |
| 411 assert(init.isWritten()); | 414 assert(init.isWritten()); |
| 412 return init.getSourceLocation(); | 415 return init.getSourceLocation(); |
| 413 } | 416 } |
| 417 static const char* GetType() { return "CXXCtorInitializer"; } |
| 414 }; | 418 }; |
| 415 const char TargetNodeTraits<clang::CXXCtorInitializer>::kName[] = "initializer"; | 419 const char TargetNodeTraits<clang::CXXCtorInitializer>::kName[] = "initializer"; |
| 416 | 420 |
| 417 template <typename DeclNode, typename TargetNode> | 421 template <typename DeclNode, typename TargetNode> |
| 418 class RewriterBase : public MatchFinder::MatchCallback { | 422 class RewriterBase : public MatchFinder::MatchCallback { |
| 419 public: | 423 public: |
| 420 explicit RewriterBase(Replacements* replacements) | 424 explicit RewriterBase(Replacements* replacements) |
| 421 : replacements_(replacements) {} | 425 : replacements_(replacements) {} |
| 422 | 426 |
| 423 void run(const MatchFinder::MatchResult& result) override { | 427 void run(const MatchFinder::MatchResult& result) override { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 453 | 457 |
| 454 private: | 458 private: |
| 455 Replacements* const replacements_; | 459 Replacements* const replacements_; |
| 456 std::unordered_map<std::string, std::string> replacement_names_; | 460 std::unordered_map<std::string, std::string> replacement_names_; |
| 457 }; | 461 }; |
| 458 | 462 |
| 459 using FieldDeclRewriter = RewriterBase<clang::FieldDecl, clang::NamedDecl>; | 463 using FieldDeclRewriter = RewriterBase<clang::FieldDecl, clang::NamedDecl>; |
| 460 using VarDeclRewriter = RewriterBase<clang::VarDecl, clang::NamedDecl>; | 464 using VarDeclRewriter = RewriterBase<clang::VarDecl, clang::NamedDecl>; |
| 461 using MemberRewriter = RewriterBase<clang::FieldDecl, clang::MemberExpr>; | 465 using MemberRewriter = RewriterBase<clang::FieldDecl, clang::MemberExpr>; |
| 462 using DeclRefRewriter = RewriterBase<clang::VarDecl, clang::DeclRefExpr>; | 466 using DeclRefRewriter = RewriterBase<clang::VarDecl, clang::DeclRefExpr>; |
| 467 using FieldDeclRefRewriter = RewriterBase<clang::FieldDecl, clang::DeclRefExpr>; |
| 463 using FunctionDeclRewriter = | 468 using FunctionDeclRewriter = |
| 464 RewriterBase<clang::FunctionDecl, clang::NamedDecl>; | 469 RewriterBase<clang::FunctionDecl, clang::NamedDecl>; |
| 465 using FunctionRefRewriter = | 470 using FunctionRefRewriter = |
| 466 RewriterBase<clang::FunctionDecl, clang::DeclRefExpr>; | 471 RewriterBase<clang::FunctionDecl, clang::DeclRefExpr>; |
| 467 using ConstructorInitializerRewriter = | 472 using ConstructorInitializerRewriter = |
| 468 RewriterBase<clang::FieldDecl, clang::CXXCtorInitializer>; | 473 RewriterBase<clang::FieldDecl, clang::CXXCtorInitializer>; |
| 469 | 474 |
| 470 using MethodDeclRewriter = RewriterBase<clang::CXXMethodDecl, clang::NamedDecl>; | 475 using MethodDeclRewriter = RewriterBase<clang::CXXMethodDecl, clang::NamedDecl>; |
| 471 using MethodRefRewriter = | 476 using MethodRefRewriter = |
| 472 RewriterBase<clang::CXXMethodDecl, clang::DeclRefExpr>; | 477 RewriterBase<clang::CXXMethodDecl, clang::DeclRefExpr>; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 | 557 |
| 553 MemberRewriter member_rewriter(&replacements); | 558 MemberRewriter member_rewriter(&replacements); |
| 554 match_finder.addMatcher(member_matcher, &member_rewriter); | 559 match_finder.addMatcher(member_matcher, &member_rewriter); |
| 555 | 560 |
| 556 DeclRefRewriter decl_ref_rewriter(&replacements); | 561 DeclRefRewriter decl_ref_rewriter(&replacements); |
| 557 match_finder.addMatcher(decl_ref_matcher, &decl_ref_rewriter); | 562 match_finder.addMatcher(decl_ref_matcher, &decl_ref_rewriter); |
| 558 | 563 |
| 559 EnumConstantDeclRefRewriter enum_member_ref_rewriter(&replacements); | 564 EnumConstantDeclRefRewriter enum_member_ref_rewriter(&replacements); |
| 560 match_finder.addMatcher(enum_member_ref_matcher, &enum_member_ref_rewriter); | 565 match_finder.addMatcher(enum_member_ref_matcher, &enum_member_ref_rewriter); |
| 561 | 566 |
| 567 // Member references in a non-member context ======== |
| 568 // Given |
| 569 // struct S { |
| 570 // typedef int U::*UnspecifiedBoolType; |
| 571 // operator UnspecifiedBoolType() { return s_ ? &U::s_ : 0; } |
| 572 // int s_; |
| 573 // }; |
| 574 // matches |&U::s_| but not |s_|. |
| 575 auto member_ref_matcher = id("expr", declRefExpr(to(field_decl_matcher))); |
| 576 |
| 577 FieldDeclRefRewriter member_ref_rewriter(&replacements); |
| 578 match_finder.addMatcher(member_ref_matcher, &member_ref_rewriter); |
| 579 |
| 562 // Non-method function declarations ======== | 580 // Non-method function declarations ======== |
| 563 // Given | 581 // Given |
| 564 // void f(); | 582 // void f(); |
| 565 // struct S { | 583 // struct S { |
| 566 // void g(); | 584 // void g(); |
| 567 // }; | 585 // }; |
| 568 // matches |f| but not |g|. | 586 // matches |f| but not |g|. |
| 569 auto function_decl_matcher = id( | 587 auto function_decl_matcher = id( |
| 570 "decl", | 588 "decl", |
| 571 functionDecl( | 589 functionDecl( |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 for (const auto& r : replacements) { | 730 for (const auto& r : replacements) { |
| 713 std::string replacement_text = r.getReplacementText().str(); | 731 std::string replacement_text = r.getReplacementText().str(); |
| 714 std::replace(replacement_text.begin(), replacement_text.end(), '\n', '\0'); | 732 std::replace(replacement_text.begin(), replacement_text.end(), '\n', '\0'); |
| 715 llvm::outs() << "r:::" << r.getFilePath() << ":::" << r.getOffset() | 733 llvm::outs() << "r:::" << r.getFilePath() << ":::" << r.getOffset() |
| 716 << ":::" << r.getLength() << ":::" << replacement_text << "\n"; | 734 << ":::" << r.getLength() << ":::" << replacement_text << "\n"; |
| 717 } | 735 } |
| 718 llvm::outs() << "==== END EDITS ====\n"; | 736 llvm::outs() << "==== END EDITS ====\n"; |
| 719 | 737 |
| 720 return 0; | 738 return 0; |
| 721 } | 739 } |
| OLD | NEW |