From 891d5d07ddbe587d605ff4e00538bc05ed482dd3 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 4 Mar 2015 15:37:26 +0100 Subject: [PATCH] Allow braced \u escapes in identifiers We still can't properly recognize code points as ES6-style identifier chars. Issue #214 --- acorn.js | 12 ++++++------ test/tests.js | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/acorn.js b/acorn.js index c6341b605e..d4d7b87008 100644 --- a/acorn.js +++ b/acorn.js @@ -1245,15 +1245,15 @@ } else if (ch === 92) { // "\" containsEsc = true; word += input.slice(chunkStart, tokPos); + var escStart = tokPos; if (input.charCodeAt(++tokPos) != 117) // "u" raise(tokPos, "Expecting Unicode escape sequence \\uXXXX"); ++tokPos; - var esc = readHexChar(4); - var escStr = String.fromCharCode(esc); - if (!escStr) raise(tokPos - 1, "Invalid Unicode escape"); - if (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc))) - raise(tokPos - 4, "Invalid Unicode escape"); - word += escStr; + var esc = readCodePoint(); + if (esc.length != 1 || + !(first ? isIdentifierStart : isIdentifierChar)(esc.charCodeAt(0))) + raise(escStart, "Invalid Unicode escape"); + word += esc; chunkStart = tokPos; } else { break; diff --git a/test/tests.js b/test/tests.js index dfbfda0438..92f23f2ac4 100644 --- a/test/tests.js +++ b/test/tests.js @@ -26869,10 +26869,10 @@ testFail("x\\", "Expecting Unicode escape sequence \\uXXXX (1:2)"); testFail("x\\u005c", - "Invalid Unicode escape (1:3)"); + "Invalid Unicode escape (1:1)"); testFail("x\\u002a", - "Invalid Unicode escape (1:3)"); + "Invalid Unicode escape (1:1)"); testFail("/", "Unterminated regular expression (1:1)"); @@ -27150,13 +27150,13 @@ testFail("\\\\", "Expecting Unicode escape sequence \\uXXXX (1:1)"); testFail("\\u005c", - "Invalid Unicode escape (1:2)"); + "Invalid Unicode escape (1:0)"); testFail("\\x", "Expecting Unicode escape sequence \\uXXXX (1:1)"); testFail("\\u0000", - "Invalid Unicode escape (1:2)"); + "Invalid Unicode escape (1:0)"); testFail("‌ = []", "Unexpected character '‌' (1:0)");