Skip to content

Commit 4e1a818

Browse files
authored
Merge pull request #1430 from hamishknight/misc
2 parents f340316 + a9c5d95 commit 4e1a818

File tree

3 files changed

+18
-25
lines changed

3 files changed

+18
-25
lines changed

Sources/SwiftParser/Lexer/Cursor.swift

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -649,26 +649,6 @@ extension Lexer.Cursor {
649649
return nil
650650
}
651651

652-
/// If this is the opening delimiter of a raw string literal, return the number
653-
/// of `#` in the raw string delimiter.
654-
/// Assumes that the parser is currently pointing at the character after the first `#`.
655-
/// In other words, the first `#` is expected to already be consumed.
656-
mutating func legacyAdvanceIfOpeningRawStringDelimiter() -> Int? {
657-
assert(self.previous == UInt8(ascii: "#"))
658-
659-
var tmp = self
660-
var length = 1
661-
while tmp.advance(matching: "#") {
662-
length += 1
663-
}
664-
665-
if tmp.is(at: #"""#) {
666-
self = tmp
667-
return length
668-
}
669-
return nil
670-
}
671-
672652
/// If we are positioned at the start of a multiline string delimiter, consume
673653
/// that delimiter and return `true`, otherwise return `false`.
674654
///
@@ -1515,8 +1495,6 @@ extension Lexer.Cursor {
15151495
/// Lexes a single character in a string literal, handling escape sequences
15161496
/// like `\n` or `\u{1234}` as a a single character.
15171497
mutating func lexCharacterInStringLiteral(stringLiteralKind: StringLiteralKind, delimiterLength: Int) -> CharacterLex {
1518-
let charStart = self
1519-
15201498
switch self.peek() {
15211499
case UInt8(ascii: #"""#):
15221500
let quote = Unicode.Scalar(self.advance()!)
@@ -1578,8 +1556,6 @@ extension Lexer.Cursor {
15781556
return .error(kind)
15791557
}
15801558
default:
1581-
_ = self.advance()
1582-
self = charStart
15831559
guard let charValue = self.advanceValidatingUTF8Character() else {
15841560
return .error(.invalidUtf8)
15851561
}

Sources/SwiftParser/Lexer/UnicodeScalarExtensions.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ extension Unicode.Scalar {
181181
if encodedBytes == 1 || !Unicode.Scalar(curByte).isStartOfUTF8Character {
182182
// Skip until we get the start of another character. This is guaranteed to
183183
// at least stop at the nul at the end of the buffer.
184-
while let peeked = peek(), Unicode.Scalar(peeked).isStartOfUTF8Character {
184+
while let peeked = peek(), !Unicode.Scalar(peeked).isStartOfUTF8Character {
185185
_ = advance()
186186
}
187187
return nil

Tests/SwiftParserTest/LexerTests.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,23 @@ public class LexerTests: XCTestCase {
886886
}
887887
}
888888

889+
func testInvalidUtf8_3() {
890+
let sourceBytes: [UInt8] = [0xfd, 0x41] // 0x41 == "A"
891+
892+
lex(sourceBytes) { lexemes in
893+
guard lexemes.count == 2 else {
894+
return XCTFail("Expected 2 lexemes, got \(lexemes.count)")
895+
}
896+
AssertRawBytesLexeme(
897+
lexemes[0],
898+
kind: .identifier,
899+
leadingTrivia: [0xfd],
900+
text: [0x41],
901+
error: TokenDiagnostic(.invalidUtf8, byteOffset: 0)
902+
)
903+
}
904+
}
905+
889906
func testInterpolatedString() {
890907
AssertLexemes(
891908
#"""

0 commit comments

Comments
 (0)