From 3bf6197803e2bca33a3d651c3a1b525b5fda49ce Mon Sep 17 00:00:00 2001 From: Christoph Zwerschke Date: Tue, 28 Sep 2021 22:21:51 +0200 Subject: [PATCH] lexer: fix expression to decode surrogate pairs --- src/language/__tests__/lexer-test.ts | 15 +++++++++++++++ src/language/lexer.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/language/__tests__/lexer-test.ts b/src/language/__tests__/lexer-test.ts index 173d7176cb1..1e925f73cc3 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 c6f24092e5d..4821ed765c7 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); } /**