diff --git a/lib/compress.js b/lib/compress.js index f168b942..f6bf3d05 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -83,6 +83,7 @@ function Compressor(options, false_by_default) { unsafe_comps : false, unsafe_math : false, unsafe_proto : false, + unsafe_regexp : false, unused : !false_by_default, warnings : false, }, true); @@ -3765,7 +3766,7 @@ merge(Compressor.prototype, { if (fixed) { if (d.should_replace === undefined) { var init = fixed.evaluate(compressor); - if (init !== fixed) { + if (init !== fixed && (compressor.option("unsafe_regexp") || !(init instanceof RegExp))) { init = make_node_from_constant(init, fixed); var value_length = init.optimize(compressor).print_to_string().length; var fn; diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js index b8077564..a1e3d0be 100644 --- a/test/compress/evaluate.js +++ b/test/compress/evaluate.js @@ -990,3 +990,50 @@ Infinity_NaN_undefined_LHS: { "}", ] } + +issue_1964_1: { + options = { + evaluate: true, + reduce_vars: true, + unsafe_regexp: false, + unused: true, + } + input: { + function f() { + var long_variable_name = /\s/; + return "a b c".split(long_variable_name)[1]; + } + console.log(f()); + } + expect: { + function f() { + var long_variable_name = /\s/; + return "a b c".split(long_variable_name)[1]; + } + console.log(f()); + } + expect_stdout: "b" +} + +issue_1964_2: { + options = { + evaluate: true, + reduce_vars: true, + unsafe_regexp: true, + unused: true, + } + input: { + function f() { + var long_variable_name = /\s/; + return "a b c".split(long_variable_name)[1]; + } + console.log(f()); + } + expect: { + function f() { + return "a b c".split(/\s/)[1]; + } + console.log(f()); + } + expect_stdout: "b" +}