31
31
#include " llvm/Support/ScopedPrinter.h"
32
32
#include " llvm/TableGen/Error.h"
33
33
#include " llvm/TableGen/Parser.h"
34
- #include < string>
35
34
#include < optional>
35
+ #include < string>
36
36
37
37
using namespace mlir ;
38
38
using namespace mlir ::pdll;
@@ -324,6 +324,7 @@ class Parser {
324
324
FailureOr<ast::Expr *> parseInlineConstraintLambdaExpr ();
325
325
FailureOr<ast::Expr *> parseInlineRewriteLambdaExpr ();
326
326
FailureOr<ast::Expr *> parseMemberAccessExpr (ast::Expr *parentExpr);
327
+ FailureOr<ast::Expr *> parseNegatedExpr ();
327
328
FailureOr<ast::OpNameDecl *> parseOperationName (bool allowEmptyName = false );
328
329
FailureOr<ast::OpNameDecl *> parseWrappedOperationName (bool allowEmptyName);
329
330
FailureOr<ast::Expr *>
@@ -1830,6 +1831,9 @@ FailureOr<ast::Expr *> Parser::parseExpr() {
1830
1831
case Token::l_square:
1831
1832
lhsExpr = parseArrayAttrExpr ();
1832
1833
break ;
1834
+ case Token::exclam:
1835
+ lhsExpr = parseNegatedExpr ();
1836
+ break ;
1833
1837
case Token::string_block:
1834
1838
return emitError (" expected expression. If you are trying to create an "
1835
1839
" ArrayAttr, use a space between `[` and `{`." );
@@ -1845,11 +1849,11 @@ FailureOr<ast::Expr *> Parser::parseExpr() {
1845
1849
case Token::dot:
1846
1850
lhsExpr = parseMemberAccessExpr (*lhsExpr);
1847
1851
break ;
1848
- case Token::exclam:
1849
- // TODO: Fx: This parses the "!" as suffix instead of prefix.
1850
- consumeToken (Token::exclam);
1851
- lhsExpr = parseCallExpr (*lhsExpr, /* isNegated = */ true );
1852
- break ;
1852
+ // case Token::exclam:
1853
+ // // TODO: Fx: This parses the "!" as suffix instead of prefix.
1854
+ // consumeToken(Token::exclam);
1855
+ // lhsExpr = parseCallExpr(*lhsExpr, /*isNegated = */ true);
1856
+ // break;
1853
1857
case Token::l_paren:
1854
1858
lhsExpr = parseCallExpr (*lhsExpr);
1855
1859
break ;
@@ -2068,6 +2072,16 @@ FailureOr<ast::Expr *> Parser::parseMemberAccessExpr(ast::Expr *parentExpr) {
2068
2072
return createMemberAccessExpr (parentExpr, memberName, loc);
2069
2073
}
2070
2074
2075
+ FailureOr<ast::Expr *> Parser::parseNegatedExpr () {
2076
+ consumeToken (Token::exclam);
2077
+ if (!curToken.is (Token::identifier))
2078
+ return emitError (" expected native constraint" );
2079
+ FailureOr<ast::Expr *> identifierExpr = parseIdentifierExpr ();
2080
+ if (failed (identifierExpr))
2081
+ return failure ();
2082
+ return parseCallExpr (*identifierExpr, /* isNegated = */ true );
2083
+ }
2084
+
2071
2085
FailureOr<ast::OpNameDecl *> Parser::parseOperationName (bool allowEmptyName) {
2072
2086
SMRange loc = curToken.getLoc ();
2073
2087
0 commit comments