@@ -324,11 +324,13 @@ bool Parser::parseMatcherExpressionImpl(VariantValue *Value) {
324324 }
325325
326326 bool extractFunction = false ;
327+ StringRef functionName;
327328 if (Tokenizer->peekNextToken ().Kind == TokenInfo::TK_Period) {
328329 // Parse ".extract()"
329330 Tokenizer->consumeNextToken (); // consume the period.
330331 const TokenInfo ExtractToken = Tokenizer->consumeNextToken ();
331332 const TokenInfo OpenToken = Tokenizer->consumeNextToken ();
333+ const TokenInfo NameToken = Tokenizer->consumeNextToken ();
332334 const TokenInfo CloseToken = Tokenizer->consumeNextToken ();
333335
334336 // TODO: We could use different error codes for each/some to be more
@@ -342,18 +344,25 @@ bool Parser::parseMatcherExpressionImpl(VariantValue *Value) {
342344 Error->addError (OpenToken.Range , Error->ET_ParserMalformedBindExpr );
343345 return false ;
344346 }
347+ if (NameToken.Kind != TokenInfo::TK_Literal ||
348+ !NameToken.Value .isString ()) {
349+ Error->addError (NameToken.Range , Error->ET_ParserMalformedBindExpr );
350+ return false ;
351+ }
345352 if (CloseToken.Kind != TokenInfo::TK_CloseParen) {
346353 Error->addError (CloseToken.Range , Error->ET_ParserMalformedBindExpr );
347354 return false ;
348355 }
356+ functionName = NameToken.Value .getString ();
349357 extractFunction = true ;
358+ LLVM_DEBUG (DBGS () << " Function Name: " << functionName << " \n " );
350359 }
351360
352361 // Merge the start and end infos.
353362 SourceRange MatcherRange = NameToken.Range ;
354363 MatcherRange.End = EndToken.Range .End ;
355- DynMatcher *Result = S->actOnMatcherExpression (NameToken. Text , MatcherRange,
356- extractFunction, Args, Error);
364+ DynMatcher *Result = S->actOnMatcherExpression (
365+ NameToken. Text , MatcherRange, extractFunction, functionName , Args, Error);
357366
358367 if (Result == nullptr ) {
359368 // TODO: Add appropriate error.
@@ -415,10 +424,11 @@ class RegistrySema : public Parser::Sema {
415424 DynMatcher *actOnMatcherExpression (StringRef MatcherName,
416425 const SourceRange &NameRange,
417426 bool ExtractFunction,
427+ StringRef FunctionName,
418428 ArrayRef<ParserValue> Args,
419429 Diagnostics *Error) override {
420- return Registry::constructMatcherWrapper (MatcherName, NameRange,
421- ExtractFunction, Args, Error);
430+ return Registry::constructMatcherWrapper (
431+ MatcherName, NameRange, ExtractFunction, FunctionName , Args, Error);
422432 }
423433};
424434
0 commit comments