Cpp: support space ship operator in lexer

Fixes: QTCREATORBUG-27503
Change-Id: Idbff5a9b5b2e6e841e298ca6f706ef3c6aa1622b
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2022-10-20 13:43:10 +02:00
parent c780151aec
commit 4e8b7eee9d
11 changed files with 93 additions and 49 deletions

View File

@@ -98,10 +98,11 @@ enum {
And = 8,
Equality = 9,
Relational = 10,
Shift = 11,
Additive = 12,
Multiplicative = 13,
PointerToMember = 14
ThreeWayComp = 11,
Shift = 12,
Additive = 13,
Multiplicative = 14,
PointerToMember = 15
};
} // namespace Precedece
@@ -116,29 +117,30 @@ inline int precedence(int tokenKind, bool templateArguments)
return Prec::Assignment;
switch (tokenKind) {
case T_COMMA: return Prec::Comma;
case T_QUESTION: return Prec::Conditional;
case T_PIPE_PIPE: return Prec::LogicalOr;
case T_AMPER_AMPER: return Prec::LogicalAnd;
case T_PIPE: return Prec::InclusiveOr;
case T_CARET: return Prec::ExclusiveOr;
case T_AMPER: return Prec::And;
case T_COMMA: return Prec::Comma;
case T_QUESTION: return Prec::Conditional;
case T_PIPE_PIPE: return Prec::LogicalOr;
case T_AMPER_AMPER: return Prec::LogicalAnd;
case T_PIPE: return Prec::InclusiveOr;
case T_CARET: return Prec::ExclusiveOr;
case T_AMPER: return Prec::And;
case T_EQUAL_EQUAL:
case T_EXCLAIM_EQUAL: return Prec::Equality;
case T_EXCLAIM_EQUAL: return Prec::Equality;
case T_GREATER:
case T_LESS:
case T_LESS_EQUAL:
case T_GREATER_EQUAL: return Prec::Relational;
case T_GREATER_EQUAL: return Prec::Relational;
case T_LESS_EQUAL_GREATER: return Prec::ThreeWayComp;
case T_LESS_LESS:
case T_GREATER_GREATER: return Prec::ExclusiveOr;
case T_GREATER_GREATER: return Prec::ExclusiveOr;
case T_PLUS:
case T_MINUS: return Prec::Additive;
case T_MINUS: return Prec::Additive;
case T_STAR:
case T_SLASH:
case T_PERCENT: return Prec::Multiplicative;
case T_PERCENT: return Prec::Multiplicative;
case T_ARROW_STAR:
case T_DOT_STAR: return Prec::PointerToMember;
default: return Prec::Unknown;
case T_DOT_STAR: return Prec::PointerToMember;
default: return Prec::Unknown;
}
}
@@ -1300,6 +1302,7 @@ bool Parser::parseOperator(OperatorAST *&node) // ### FIXME
case T_GREATER_EQUAL:
case T_GREATER_GREATER_EQUAL:
case T_LESS_EQUAL:
case T_LESS_EQUAL_GREATER:
case T_LESS_LESS_EQUAL:
case T_MINUS_EQUAL:
case T_PERCENT_EQUAL: