Update toolchain keyword list to match design. (#2961)

- `xor` keyword is removed, with `^` used in its place.
- For consistency, also replaced unary `~` with unary `^`, as those
changes come from the same proposal.
- `type` keyword is added.
- To keep existing tests working, parsing support for `type` literal is
added too.
- `is` keyword is removed; we'd already added the `impls` keyword to the
list.
- Several other missing keywords added.
This commit is contained in:
Richard Smith
2023-06-29 04:11:00 +00:00
committed by GitHub
parent cb14ce56a8
commit cb16a1ffca
10 changed files with 160 additions and 21 deletions
+10 -7
View File
@@ -16,12 +16,15 @@ using ::testing::Eq;
TEST(PrecedenceTest, OperatorsAreRecognized) {
EXPECT_TRUE(PrecedenceGroup::ForLeading(TokenKind::Minus).has_value());
EXPECT_TRUE(PrecedenceGroup::ForLeading(TokenKind::Tilde).has_value());
EXPECT_TRUE(PrecedenceGroup::ForLeading(TokenKind::Caret).has_value());
EXPECT_FALSE(PrecedenceGroup::ForLeading(TokenKind::Slash).has_value());
EXPECT_FALSE(PrecedenceGroup::ForLeading(TokenKind::Identifier).has_value());
EXPECT_FALSE(PrecedenceGroup::ForLeading(TokenKind::Tilde).has_value());
EXPECT_TRUE(
PrecedenceGroup::ForTrailing(TokenKind::Minus, false).has_value());
EXPECT_TRUE(
PrecedenceGroup::ForTrailing(TokenKind::Caret, false).has_value());
EXPECT_FALSE(
PrecedenceGroup::ForTrailing(TokenKind::Tilde, false).has_value());
EXPECT_TRUE(PrecedenceGroup::ForTrailing(TokenKind::Slash, true).has_value());
@@ -43,7 +46,7 @@ TEST(PrecedenceTest, InfixVsPostfix) {
EXPECT_TRUE(PrecedenceGroup::ForTrailing(TokenKind::Star, true)->is_binary);
EXPECT_FALSE(PrecedenceGroup::ForTrailing(TokenKind::Star, false)->is_binary);
// Infix `*` can appear in type contexts; binary `*` cannot.
// Postfix `*` can appear in type contexts; infix `*` cannot.
EXPECT_THAT(PrecedenceGroup::GetPriority(
PrecedenceGroup::ForTrailing(TokenKind::Star, true)->level,
PrecedenceGroup::ForType()),
@@ -53,7 +56,7 @@ TEST(PrecedenceTest, InfixVsPostfix) {
PrecedenceGroup::ForType()),
Eq(OperatorPriority::LeftFirst));
// Binary `*` can appear in `+` contexts; binary `*` cannot.
// Infix `*` can appear in `+` contexts; postfix `*` cannot.
EXPECT_THAT(PrecedenceGroup::GetPriority(
PrecedenceGroup::ForTrailing(TokenKind::Star, true)->level,
PrecedenceGroup::ForTrailing(TokenKind::Plus, true)->level),
@@ -112,22 +115,22 @@ TEST(PrecedenceTest, IndirectRelations) {
Eq(OperatorPriority::RightFirst));
EXPECT_THAT(PrecedenceGroup::GetPriority(
*PrecedenceGroup::ForLeading(TokenKind::Tilde),
*PrecedenceGroup::ForLeading(TokenKind::Caret),
PrecedenceGroup::ForTrailing(TokenKind::Equal, true)->level),
Eq(OperatorPriority::LeftFirst));
EXPECT_THAT(PrecedenceGroup::GetPriority(
PrecedenceGroup::ForTrailing(TokenKind::Equal, true)->level,
*PrecedenceGroup::ForLeading(TokenKind::Tilde)),
*PrecedenceGroup::ForLeading(TokenKind::Caret)),
Eq(OperatorPriority::RightFirst));
}
TEST(PrecedenceTest, IncomparableOperators) {
EXPECT_THAT(PrecedenceGroup::GetPriority(
*PrecedenceGroup::ForLeading(TokenKind::Tilde),
*PrecedenceGroup::ForLeading(TokenKind::Caret),
*PrecedenceGroup::ForLeading(TokenKind::Not)),
Eq(OperatorPriority::Ambiguous));
EXPECT_THAT(PrecedenceGroup::GetPriority(
*PrecedenceGroup::ForLeading(TokenKind::Tilde),
*PrecedenceGroup::ForLeading(TokenKind::Caret),
*PrecedenceGroup::ForLeading(TokenKind::Minus)),
Eq(OperatorPriority::Ambiguous));
EXPECT_THAT(PrecedenceGroup::GetPriority(