parse extended Unicode literal correctly (#4792)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 17 Mar 2021 02:34:50 +0000 (02:34 +0000)
committerGitHub <noreply@github.com>
Wed, 17 Mar 2021 02:34:50 +0000 (10:34 +0800)
lib/parse.js
test/compress/unicode.js

index a7202cc..b5abf0d 100644 (file)
@@ -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;
         }
index be86ccd..b08b22a 100644 (file)
@@ -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,