Skip to content

Commit 03e7b90

Browse files
committed
CharacterInfo to handle "identifier start"
1 parent 5dfcb21 commit 03e7b90

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

Sources/SwiftParser/CharacterInfo.swift

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ extension Character {
1818
self.rawValue = rawValue
1919
}
2020

21-
static let IDENT_CONT: Self = .init(rawValue: 0x01)
22-
static let DECIMAL: Self = .init(rawValue: 0x02)
23-
static let HEX: Self = .init(rawValue: 0x04)
24-
static let LETTER: Self = .init(rawValue: 0x08)
21+
static let IDENT_START: Self = .init(rawValue: 0x01)
22+
static let IDENT_CONT: Self = .init(rawValue: 0x02)
23+
static let DECIMAL: Self = .init(rawValue: 0x04)
24+
static let HEX: Self = .init(rawValue: 0x08)
25+
static let LETTER: Self = .init(rawValue: 0x10)
2526
}
2627
}
2728

@@ -34,7 +35,7 @@ extension Unicode.Scalar {
3435
/// to be allowed to appear in a starting position in a programming language
3536
/// identifier.
3637
var isAsciiIdentifierStart: Bool {
37-
self.testCharacterInfo(.IDENT_CONT) && !self.isDigit && self != "$"
38+
self.testCharacterInfo(.IDENT_START)
3839
}
3940

4041
/// A Boolean value indicating whether this scalar is one which is recommended
@@ -69,11 +70,6 @@ extension Unicode.Scalar {
6970
) -> Bool {
7071
let info: Character.Info
7172
switch self.value {
72-
case
73-
// '$', '_'
74-
36, 95:
75-
info = [.IDENT_CONT]
76-
7773
case
7874
// '0'-'9'
7975
48, 49, 50, 51, 52, 53, 54, 55, 56, 57:
@@ -84,7 +80,7 @@ extension Unicode.Scalar {
8480
65, 66, 67, 68, 69, 70,
8581
// 'a'-'f'
8682
97, 98, 99, 100, 101, 102:
87-
info = [.IDENT_CONT, .HEX, .LETTER]
83+
info = [.IDENT_START, .IDENT_CONT, .HEX, .LETTER]
8884

8985
case
9086
// 'G'-'Z'
@@ -93,7 +89,17 @@ extension Unicode.Scalar {
9389
// 'g'-'z'
9490
103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
9591
118, 119, 120, 121, 122:
96-
info = [.IDENT_CONT, .LETTER]
92+
info = [.IDENT_START, .IDENT_CONT, .LETTER]
93+
94+
case
95+
// '_'
96+
95:
97+
info = [.IDENT_START, .IDENT_CONT]
98+
99+
case
100+
// '$'
101+
36:
102+
info = [.IDENT_CONT]
97103

98104
default:
99105
info = []

Sources/SwiftParser/Lexer.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2217,11 +2217,10 @@ extension Unicode.Scalar {
22172217
}
22182218

22192219
var isValidIdentifierStartCodePoint: Bool {
2220-
guard self.isValidIdentifierContinuationCodePoint else {
2221-
return false
2220+
if (self.isASCII) {
2221+
return self.isAsciiIdentifierStart
22222222
}
2223-
2224-
if self.isASCII && (self.isDigit || self == "$") {
2223+
guard self.isValidIdentifierContinuationCodePoint else {
22252224
return false
22262225
}
22272226

0 commit comments

Comments
 (0)