[PATCH] D61335: [LibTooling] Add support to Transformer for composing rules as an ordered choice.

Yitzhak Mandelbaum via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri May 3 08:42:00 PDT 2019


ymandel added a comment.

In D61335#1489680 <https://reviews.llvm.org/D61335#1489680>, @ilya-biryukov wrote:

> > As for naming, agreed, but does that concern drop away once we have only a single RewriteRule definition?
>
> Sure, that won't be an issue.
>
> The use-cases make sense, thanks for the examples. Could you add one or two to the code? Would probably make sense to express them in code as matchers, rather than explaining what we're trying to do in a natural language.


Sounds good, will do.

> Let's proceed with making `RewriteRule` the vocabulary type that we use for transformations like this if we both agree that's a good idea.
>  There are obviously multiple ways to tackle this, which one you had in mind?

Something like this, although if you have a better name than `RewriteAction` I'm open to alternatives. e.g. `RewriteCase`?

  struct RewriteAction {
    SmallVector<ASTEdit, 1> Edits;
    TextGenerator Explanation;
  };
  
  struct RewriteRule {
    ast_matchers::internal::DynTypedMatcher Matcher;
    std::vector<RewriteAction> Actions;
    static constexpr llvm::StringLiteral RootId = "___root___";
  };

Or, nest the definition:

  struct RewriteRule {
    struct Action {
      SmallVector<ASTEdit, 1> Edits;
      TextGenerator Explanation;
    };
  
    ast_matchers::internal::DynTypedMatcher Matcher;
    std::vector<Action> Actions;
  
    static constexpr llvm::StringLiteral RootId = "___root___";
  };


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D61335/new/

https://reviews.llvm.org/D61335





More information about the cfe-commits mailing list