aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard van Velzen <rvanvelzen@experty.com>2015-08-25 10:53:35 +0200
committerRichard van Velzen <rvanvelzen@experty.com>2015-08-25 10:53:35 +0200
commite3bd223dac41ed8fcbbc3a139d78c68bcd50f628 (patch)
tree486c1aa88830dde09bd308dbbbc84bec809995cf
parent6c8db6eae108b0b3d672b8b3ae01a4603a9f4533 (diff)
downloadtracifyjs-e3bd223dac41ed8fcbbc3a139d78c68bcd50f628.tar.gz
tracifyjs-e3bd223dac41ed8fcbbc3a139d78c68bcd50f628.zip
Don't change sequences that influence lexical binding in calls
Fixes #782
-rw-r--r--lib/compress.js14
-rw-r--r--test/compress/issue-782.js23
2 files changed, 28 insertions, 9 deletions
diff --git a/lib/compress.js b/lib/compress.js
index ac306fc3..51dd66f8 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1910,15 +1910,11 @@ merge(Compressor.prototype, {
if (!compressor.option("side_effects"))
return self;
if (!self.car.has_side_effects(compressor)) {
- // we shouldn't compress (1,eval)(something) to
- // eval(something) because that changes the meaning of
- // eval (becomes lexical instead of global).
- var p;
- if (!(self.cdr instanceof AST_SymbolRef
- && self.cdr.name == "eval"
- && self.cdr.undeclared()
- && (p = compressor.parent()) instanceof AST_Call
- && p.expression === self)) {
+ // we shouldn't compress (1,func)(something) to
+ // func(something) because that changes the meaning of
+ // the func (becomes lexical instead of global).
+ var p = compressor.parent();
+ if (!(p instanceof AST_Call && p.expression === self)) {
return self.cdr;
}
}
diff --git a/test/compress/issue-782.js b/test/compress/issue-782.js
new file mode 100644
index 00000000..cce15fd1
--- /dev/null
+++ b/test/compress/issue-782.js
@@ -0,0 +1,23 @@
+remove_redundant_sequence_items: {
+ options = { side_effects: true };
+ input: {
+ (0, 1, logThis)();
+ (0, 1, _decorators.logThis)();
+ }
+ expect: {
+ (0, logThis)();
+ (0, _decorators.logThis)();
+ }
+}
+
+dont_remove_lexical_binding_sequence: {
+ options = { side_effects: true };
+ input: {
+ (0, logThis)();
+ (0, _decorators.logThis)();
+ }
+ expect: {
+ (0, logThis)();
+ (0, _decorators.logThis)();
+ }
+}