From: Mihai Bazon Date: Tue, 25 Sep 2012 07:32:14 +0000 (+0300) Subject: it's not safe to assume that property access is side-effect-free X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=ea6d1ea7014352ed81bf8d1fd461727d21ff4d12;p=UglifyJS.git it's not safe to assume that property access is side-effect-free (getters/setters + various browser bugs will trigger side effects; also, an exception is thrown when the expression is undefined) --- diff --git a/lib/compress.js b/lib/compress.js index c6524e09..e7c01ac1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -732,12 +732,15 @@ function Compressor(options, false_by_default) { return true; return false; }); - def(AST_Dot, function(){ - return this.expression.has_side_effects(); - }); - def(AST_Sub, function(){ - return this.expression.has_side_effects() - || this.property.has_side_effects(); + // def(AST_Dot, function(){ + // return this.expression.has_side_effects(); + // }); + // def(AST_Sub, function(){ + // return this.expression.has_side_effects() + // || this.property.has_side_effects(); + // }); + def(AST_PropAccess, function(){ + return true; }); def(AST_Seq, function(){ return this.car.has_side_effects() @@ -1405,9 +1408,9 @@ function Compressor(options, false_by_default) { AST_Seq.DEFMETHOD("optimize", function(compressor){ var self = this; - if (self.cdr instanceof AST_Seq) - self.cdr = self.cdr.optimize(compressor); if (compressor.option("cascade")) { + if (self.cdr instanceof AST_Seq) + self.cdr = self.cdr.optimize(compressor); if (self.car instanceof AST_Assign && !self.car.left.has_side_effects() && self.car.left.equivalent_to(self.cdr)) {