MLIR  19.0.0git
Query.h
Go to the documentation of this file.
1 //===--- Query.h ------------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef MLIR_TOOLS_MLIRQUERY_QUERY_H
10 #define MLIR_TOOLS_MLIRQUERY_QUERY_H
11 
12 #include "Matcher/VariantValue.h"
14 #include "llvm/ADT/IntrusiveRefCntPtr.h"
15 #include "llvm/ADT/StringRef.h"
16 #include "llvm/LineEditor/LineEditor.h"
17 #include <string>
18 
19 namespace mlir::query {
20 
21 enum class QueryKind { Invalid, NoOp, Help, Match, Quit };
22 
23 class QuerySession;
24 
25 struct Query : llvm::RefCountedBase<Query> {
27  virtual ~Query();
28 
29  // Perform the query on qs and print output to os.
30  virtual mlir::LogicalResult run(llvm::raw_ostream &os,
31  QuerySession &qs) const = 0;
32 
33  llvm::StringRef remainingContent;
34  const QueryKind kind;
35 };
36 
37 typedef llvm::IntrusiveRefCntPtr<Query> QueryRef;
38 
39 QueryRef parse(llvm::StringRef line, const QuerySession &qs);
40 
41 std::vector<llvm::LineEditor::Completion>
42 complete(llvm::StringRef line, size_t pos, const QuerySession &qs);
43 
44 // Any query which resulted in a parse error. The error message is in ErrStr.
45 struct InvalidQuery : Query {
46  InvalidQuery(const llvm::Twine &errStr)
47  : Query(QueryKind::Invalid), errStr(errStr.str()) {}
48  mlir::LogicalResult run(llvm::raw_ostream &os,
49  QuerySession &qs) const override;
50 
51  std::string errStr;
52 
53  static bool classof(const Query *query) {
54  return query->kind == QueryKind::Invalid;
55  }
56 };
57 
58 // No-op query (i.e. a blank line).
59 struct NoOpQuery : Query {
61  mlir::LogicalResult run(llvm::raw_ostream &os,
62  QuerySession &qs) const override;
63 
64  static bool classof(const Query *query) {
65  return query->kind == QueryKind::NoOp;
66  }
67 };
68 
69 // Query for "help".
70 struct HelpQuery : Query {
72  mlir::LogicalResult run(llvm::raw_ostream &os,
73  QuerySession &qs) const override;
74 
75  static bool classof(const Query *query) {
76  return query->kind == QueryKind::Help;
77  }
78 };
79 
80 // Query for "quit".
81 struct QuitQuery : Query {
83  mlir::LogicalResult run(llvm::raw_ostream &os,
84  QuerySession &qs) const override;
85 
86  static bool classof(const Query *query) {
87  return query->kind == QueryKind::Quit;
88  }
89 };
90 
91 // Query for "match MATCHER".
92 struct MatchQuery : Query {
93  MatchQuery(llvm::StringRef source, const matcher::DynMatcher &matcher)
95  mlir::LogicalResult run(llvm::raw_ostream &os,
96  QuerySession &qs) const override;
97 
99 
100  llvm::StringRef source;
101 
102  static bool classof(const Query *query) {
103  return query->kind == QueryKind::Match;
104  }
105 };
106 
107 } // namespace mlir::query
108 
109 #endif
QueryRef parse(llvm::StringRef line, const QuerySession &qs)
Definition: Query.cpp:21
llvm::IntrusiveRefCntPtr< Query > QueryRef
Definition: Query.h:37
std::vector< llvm::LineEditor::Completion > complete(llvm::StringRef line, size_t pos, const QuerySession &qs)
Definition: Query.cpp:26
This class represents an efficient way to signal success or failure.
Definition: LogicalResult.h:26
mlir::LogicalResult run(llvm::raw_ostream &os, QuerySession &qs) const override
Definition: Query.cpp:116
static bool classof(const Query *query)
Definition: Query.h:75
static bool classof(const Query *query)
Definition: Query.h:53
InvalidQuery(const llvm::Twine &errStr)
Definition: Query.h:46
std::string errStr
Definition: Query.h:51
mlir::LogicalResult run(llvm::raw_ostream &os, QuerySession &qs) const override
Definition: Query.cpp:105
MatchQuery(llvm::StringRef source, const matcher::DynMatcher &matcher)
Definition: Query.h:93
mlir::LogicalResult run(llvm::raw_ostream &os, QuerySession &qs) const override
Definition: Query.cpp:132
llvm::StringRef source
Definition: Query.h:100
const matcher::DynMatcher matcher
Definition: Query.h:98
static bool classof(const Query *query)
Definition: Query.h:102
static bool classof(const Query *query)
Definition: Query.h:64
mlir::LogicalResult run(llvm::raw_ostream &os, QuerySession &qs) const override
Definition: Query.cpp:111
Query(QueryKind kind)
Definition: Query.h:26
llvm::StringRef remainingContent
Definition: Query.h:33
const QueryKind kind
Definition: Query.h:34
virtual mlir::LogicalResult run(llvm::raw_ostream &os, QuerySession &qs) const =0
mlir::LogicalResult run(llvm::raw_ostream &os, QuerySession &qs) const override
Definition: Query.cpp:126
static bool classof(const Query *query)
Definition: Query.h:86