Skip to content

Commit 69fe457

Browse files
committed
internal: simplify TokenSet implementation
1 parent 8e45912 commit 69fe457

1 file changed

Lines changed: 12 additions & 12 deletions

File tree

‎crates/parser/src/token_set.rs‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ use crate::SyntaxKind;
66
#[derive(Clone,Copy)]
77
pub(crate)structTokenSet([u64;3]);
88

9+
/// `TokenSet`s should only include token `SyntaxKind`s, so the discriminant of any passed/included
10+
/// `SyntaxKind` must *not* be greater than that of the last token `SyntaxKind`.
11+
/// See #17037.
912
constLAST_TOKEN_KIND_DISCRIMINANT:usize = SyntaxKind::SHEBANGasusize;
1013

1114
implTokenSet{
@@ -15,13 +18,13 @@ impl TokenSet {
1518
letmut res = [0;3];
1619
letmut i = 0;
1720
while i < kinds.len(){
18-
letkind = kinds[i];
21+
letdiscriminant = kinds[i]asusize;
1922
debug_assert!(
20-
kind asusize <= LAST_TOKEN_KIND_DISCRIMINANT,
23+
discriminant <= LAST_TOKEN_KIND_DISCRIMINANT,
2124
"Expected a token `SyntaxKind`"
2225
);
23-
let idx = kind asusize / 64;
24-
res[idx] |= mask(kind);
26+
let idx = discriminant / 64;
27+
res[idx] |= 1 << (discriminant % 64);
2528
i += 1;
2629
}
2730
TokenSet(res)
@@ -32,20 +35,17 @@ impl TokenSet {
3235
}
3336

3437
pub(crate)constfncontains(&self,kind:SyntaxKind) -> bool{
38+
let discriminant = kind asusize;
3539
debug_assert!(
36-
kind asusize <= LAST_TOKEN_KIND_DISCRIMINANT,
40+
discriminant <= LAST_TOKEN_KIND_DISCRIMINANT,
3741
"Expected a token `SyntaxKind`"
3842
);
39-
let idx = kind asusize / 64;
40-
self.0[idx]&mask(kind) != 0
43+
let idx = discriminant / 64;
44+
let mask = 1 << (discriminant % 64);
45+
self.0[idx]& mask != 0
4146
}
4247
}
4348

44-
constfnmask(kind:SyntaxKind) -> u64{
45-
debug_assert!(kind asusize <= LAST_TOKEN_KIND_DISCRIMINANT,"Expected a token `SyntaxKind`");
46-
1 << (kind asusize % 64)
47-
}
48-
4949
#[test]
5050
fntoken_set_works_for_tokens(){
5151
usecrate::SyntaxKind::*;

0 commit comments

Comments
 (0)