diff --git a/src/language/__tests__/lexer-test.ts b/src/language/__tests__/lexer-test.ts index 173d7176cb..1e925f73cc 100644 --- a/src/language/__tests__/lexer-test.ts +++ b/src/language/__tests__/lexer-test.ts @@ -1040,6 +1040,21 @@ describe('Lexer', () => { locations: [{ line: 1, column: 1 }], }); + expectSyntaxError('\uD83D\uDE00').to.deep.equal({ + message: 'Syntax Error: Unexpected character: U+1F600.', + locations: [{ line: 1, column: 1 }], + }); + + expectSyntaxError('\uD800\uDC00').to.deep.equal({ + message: 'Syntax Error: Unexpected character: U+10000.', + locations: [{ line: 1, column: 1 }], + }); + + expectSyntaxError('\uDBFF\uDFFF').to.deep.equal({ + message: 'Syntax Error: Unexpected character: U+10FFFF.', + locations: [{ line: 1, column: 1 }], + }); + expectSyntaxError('\uDEAD').to.deep.equal({ message: 'Syntax Error: Invalid character: U+DEAD.', locations: [{ line: 1, column: 1 }], diff --git a/src/language/lexer.ts b/src/language/lexer.ts index c6f24092e5..d5d0fbb442 100644 --- a/src/language/lexer.ts +++ b/src/language/lexer.ts @@ -152,7 +152,7 @@ function encodeSurrogatePair(point: number): string { } function decodeSurrogatePair(leading: number, trailing: number): number { - return 0x10000 | ((leading & 0x03ff) << 10) | (trailing & 0x03ff); + return 0x10000 + (((leading & 0x03ff) << 10) | (trailing & 0x03ff)); } /**