Skip to content

Commit 71f6797

Browse files
authored
[Lexer] Handle UTF8 characters in dollar identifier (swiftlang#32961)
1 parent 63593d1 commit 71f6797

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

lib/Parse/Lexer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -921,15 +921,15 @@ void Lexer::lexDollarIdent() {
921921
return formToken(tok::sil_dollar, tokStart);
922922

923923
bool isAllDigits = true;
924-
for (;; ++CurPtr) {
924+
while (true) {
925925
if (isDigit(*CurPtr)) {
926-
// continue
927-
} else if (clang::isIdentifierHead(*CurPtr, /*dollar*/true)) {
926+
++CurPtr;
927+
continue;
928+
} else if (advanceIfValidContinuationOfIdentifier(CurPtr, BufferEnd)) {
928929
isAllDigits = false;
929-
// continue
930-
} else {
931-
break;
930+
continue;
932931
}
932+
break;
933933
}
934934

935935
if (CurPtr == tokStart + 1) {

test/Parse/dollar_identifier.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,16 @@ func $declareWithDollar() { // expected-error{{cannot declare entity named '$dec
7070
$a: Int, // expected-error{{cannot declare entity named '$a'}}
7171
$b c: Int) { } // expected-error{{cannot declare entity named '$b'}}
7272
}
73+
74+
// SR-13232
75+
@propertyWrapper
76+
struct Wrapper {
77+
var wrappedValue: Int
78+
var projectedValue: String { String(wrappedValue) }
79+
}
80+
81+
struct S {
82+
@Wrapper var café = 42
83+
}
84+
85+
let _ = S().$café // Okay

0 commit comments

Comments
 (0)