diff --git a/lib/output.js b/lib/output.js index 0dba8d016..c2c2b3a5c 100644 --- a/lib/output.js +++ b/lib/output.js @@ -285,8 +285,8 @@ function OutputStream(options) { var OUTPUT = new Rope(); let printed_comments = new Set(); - var to_utf8 = options.ascii_only ? function(str, identifier) { - if (options.ecma >= 2015 && !options.safari10) { + var to_utf8 = options.ascii_only ? function(str, identifier = false, regexp = false) { + if (options.ecma >= 2015 && !options.safari10 && !regexp) { str = str.replace(/[\ud800-\udbff][\udc00-\udfff]/g, function(ch) { var code = get_full_char_code(ch, 0).toString(16); return "\\u{" + code + "}"; @@ -2213,7 +2213,7 @@ function OutputStream(options) { flags = flags ? sort_regexp_flags(flags) : ""; source = source.replace(r_slash_script, slash_script_replace); - output.print(output.to_utf8(`/${source}/${flags}`)); + output.print(output.to_utf8(`/${source}/${flags}`, false, true)); const parent = output.parent(); if ( diff --git a/test/compress.js b/test/compress.js index 8c17c219f..3c18be427 100644 --- a/test/compress.js +++ b/test/compress.js @@ -100,7 +100,7 @@ async function run_compress_tests() { log_start_file(file); async function test_case(test) { log_test(test.name); - var output_options = test.beautify || {}; + var output_options = test.beautify || test.format || {}; var expect; if (test.expect) { expect = make_code(as_toplevel(test.expect, test.mangle), output_options); diff --git a/test/compress/unicode.js b/test/compress/unicode.js index 36e3e1568..7b6ee1a75 100644 --- a/test/compress/unicode.js +++ b/test/compress/unicode.js @@ -189,3 +189,16 @@ issue_3271: { } expect_stdout: "[ 195, 169 ]" } + +issue_1147: { + format = { + ecma: 2015, + ascii_only: true, + safari10: false + } + input: { + console.log(/📞/.test("📞")) + } + expect_exact: 'console.log(/\\ud83d\\udcde/.test("\\u{1f4de}"));' + expect_stdout: "true" +}