diff --git a/lib/parse.js b/lib/parse.js index a7202ccb9d..b5abf0d7d1 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -161,10 +161,10 @@ function decode_escape_sequence(seq) { case "t": return "\t"; case "u": var code; - if (seq.length == 5) { - code = seq.slice(1); - } else if (seq[1] == "{" && seq.slice(-1) == "}") { + if (seq[1] == "{" && seq.slice(-1) == "}") { code = seq.slice(2, -1); + } else if (seq.length == 5) { + code = seq.slice(1); } else { return; } diff --git a/test/compress/unicode.js b/test/compress/unicode.js index be86ccd84c..b08b22a9b9 100644 --- a/test/compress/unicode.js +++ b/test/compress/unicode.js @@ -50,7 +50,7 @@ unicode_parse_variables: { } } -unicode_escaped_identifier: { +unicode_escaped_identifier_1: { input: { var \u0061 = "\ud800\udc00"; console.log(a); @@ -59,6 +59,17 @@ unicode_escaped_identifier: { expect_stdout: "\ud800\udc00" } +unicode_escaped_identifier_2: { + input: { + var \u{61} = "foo"; + var \u{10000} = "bar"; + console.log(a, \u{10000}); + } + expect_exact: 'var a="foo";var \u{10000}="bar";console.log(a,\u{10000});' + expect_stdout: "foo bar" + node_version: ">=4" +} + unicode_identifier_ascii_only: { beautify = { ascii_only: true,