@@ -9345,14 +9345,21 @@ Compressor.prototype.compress = function(node) {
9345
9345
return expressions === this.expressions ? this : make_sequence(this, expressions);
9346
9346
});
9347
9347
def(AST_Sub, function(compressor, first_in_statement) {
9348
- var expr = this.expression;
9349
- if (expr.may_throw_on_access(compressor)) return this;
9350
- var prop = this.property;
9351
- expr = expr.drop_side_effect_free(compressor, first_in_statement);
9352
- if (!expr) return prop.drop_side_effect_free(compressor, first_in_statement);
9348
+ var self = this;
9349
+ var expr = self.expression;
9350
+ if (expr.may_throw_on_access(compressor)) return self;
9351
+ var prop = self.property;
9352
+ var optional = self.optional;
9353
+ if (!optional) {
9354
+ expr = expr.drop_side_effect_free(compressor, first_in_statement);
9355
+ if (!expr) return prop.drop_side_effect_free(compressor, first_in_statement);
9356
+ }
9353
9357
prop = prop.drop_side_effect_free(compressor);
9354
9358
if (!prop) return expr;
9355
- return make_sequence(this, [ expr, prop ]);
9359
+ if (!optional) return make_sequence(self, [ expr, prop ]);
9360
+ self = self.clone();
9361
+ self.property = prop;
9362
+ return self;
9356
9363
});
9357
9364
def(AST_SymbolRef, function(compressor) {
9358
9365
return this.is_declared(compressor) && can_drop_symbol(this, compressor) ? null : this;
0 commit comments