@@ -84,6 +84,8 @@ class Parser {
8484 // process tokens.
8585 class RegistrySema : public Parser ::Sema {
8686 public:
87+ RegistrySema (const RegistryMaps ®istryData)
88+ : registryData(registryData) {}
8789 ~RegistrySema () override ;
8890
8991 std::optional<MatcherCtor>
@@ -99,60 +101,55 @@ class Parser {
99101
100102 std::vector<MatcherCompletion>
101103 getMatcherCompletions (llvm::ArrayRef<ArgKind> acceptedTypes) override ;
104+
105+ private:
106+ const RegistryMaps ®istryData;
102107 };
103108
104109 using NamedValueMap = llvm::StringMap<VariantValue>;
105110
106111 // Methods to parse a matcher expression and return a DynMatcher object,
107112 // transferring ownership to the caller.
108113 static std::optional<DynMatcher>
109- parseMatcherExpression (llvm::StringRef &matcherCode, Sema *sema,
114+ parseMatcherExpression (llvm::StringRef &matcherCode,
115+ const RegistryMaps ®istryData,
110116 const NamedValueMap *namedValues, Diagnostics *error);
111117 static std::optional<DynMatcher>
112- parseMatcherExpression (llvm::StringRef &matcherCode, Sema *sema,
113- Diagnostics *error) {
114- return parseMatcherExpression (matcherCode, sema, nullptr , error);
115- }
116- static std::optional<DynMatcher>
117- parseMatcherExpression (llvm::StringRef &matcherCode, Diagnostics *error) {
118- return parseMatcherExpression (matcherCode, nullptr , error);
118+ parseMatcherExpression (llvm::StringRef &matcherCode,
119+ const RegistryMaps ®istryData, Diagnostics *error) {
120+ return parseMatcherExpression (matcherCode, registryData, nullptr , error);
119121 }
120122
121123 // Methods to parse any expression supported by this parser.
122- static bool parseExpression (llvm::StringRef &code, Sema *sema,
124+ static bool parseExpression (llvm::StringRef &code,
125+ const RegistryMaps ®istryData,
123126 const NamedValueMap *namedValues,
124127 VariantValue *value, Diagnostics *error);
125128
126- static bool parseExpression (llvm::StringRef &code, Sema *sema,
129+ static bool parseExpression (llvm::StringRef &code,
130+ const RegistryMaps ®istryData,
127131 VariantValue *value, Diagnostics *error) {
128- return parseExpression (code, sema, nullptr , value, error);
129- }
130- static bool parseExpression (llvm::StringRef &code, VariantValue *value,
131- Diagnostics *error) {
132- return parseExpression (code, nullptr , value, error);
132+ return parseExpression (code, registryData, nullptr , value, error);
133133 }
134134
135135 // Methods to complete an expression at a given offset.
136136 static std::vector<MatcherCompletion>
137137 completeExpression (llvm::StringRef &code, unsigned completionOffset,
138- Sema *sema, const NamedValueMap *namedValues);
138+ const RegistryMaps ®istryData,
139+ const NamedValueMap *namedValues);
139140 static std::vector<MatcherCompletion>
140141 completeExpression (llvm::StringRef &code, unsigned completionOffset,
141- Sema *sema) {
142- return completeExpression (code, completionOffset, sema, nullptr );
143- }
144- static std::vector<MatcherCompletion>
145- completeExpression (llvm::StringRef &code, unsigned completionOffset) {
146- return completeExpression (code, completionOffset, nullptr );
142+ const RegistryMaps ®istryData) {
143+ return completeExpression (code, completionOffset, registryData, nullptr );
147144 }
148145
149146private:
150147 class CodeTokenizer ;
151148 struct ScopedContextEntry ;
152149 struct TokenInfo ;
153150
154- Parser (CodeTokenizer *tokenizer, Sema *sema, const NamedValueMap *namedValues ,
155- Diagnostics *error);
151+ Parser (CodeTokenizer *tokenizer, const RegistryMaps ®istryData ,
152+ const NamedValueMap *namedValues, Diagnostics *error);
156153
157154 bool parseExpressionImpl (VariantValue *value);
158155
@@ -174,7 +171,7 @@ class Parser {
174171 getNamedValueCompletions (ArrayRef<ArgKind> acceptedTypes);
175172
176173 CodeTokenizer *const tokenizer;
177- Sema * const sema;
174+ std::unique_ptr<RegistrySema> sema;
178175 const NamedValueMap *const namedValues;
179176 Diagnostics *const error;
180177
0 commit comments