cloudstructs 0.9.10 → 0.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3 -3
- package/lib/codecommit-mirror/index.js +2 -2
- package/lib/dmarc/index.js +1 -1
- package/lib/ecs-service-roller/index.js +2 -2
- package/lib/email-receiver/receiver.js +1 -1
- package/lib/mjml-template/index.js +1 -1
- package/lib/saml-identity-provider/index.js +2 -2
- package/lib/slack-app/manifest.js +1 -1
- package/lib/slack-app/slack-app.js +2 -2
- package/lib/slack-events/index.js +1 -1
- package/lib/slack-textract/index.js +1 -1
- package/lib/ssl-server-test/index.js +1 -1
- package/lib/state-machine-cr-provider/index.js +1 -1
- package/lib/static-website/index.js +1 -1
- package/lib/toolkit-cleaner/index.js +1 -1
- package/lib/url-shortener/index.js +1 -1
- package/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js +1 -1
- package/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js +1 -1
- package/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +2 -2
- package/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +1 -1
- package/node_modules/@babel/runtime/helpers/objectWithoutProperties.js +2 -2
- package/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +1 -1
- package/node_modules/@babel/runtime/package.json +1 -1
- package/node_modules/@slack/logger/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/logger/node_modules/@types/node/child_process.d.ts +2 -2
- package/node_modules/@slack/logger/node_modules/@types/node/crypto.d.ts +5 -4
- package/node_modules/@slack/logger/node_modules/@types/node/dns/promises.d.ts +25 -23
- package/node_modules/@slack/logger/node_modules/@types/node/dns.d.ts +23 -23
- package/node_modules/@slack/logger/node_modules/@types/node/events.d.ts +11 -27
- package/node_modules/@slack/logger/node_modules/@types/node/package.json +3 -3
- package/node_modules/@slack/logger/node_modules/@types/node/test.d.ts +13 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +5 -4
- package/node_modules/@slack/web-api/node_modules/@types/node/dns/promises.d.ts +25 -23
- package/node_modules/@slack/web-api/node_modules/@types/node/dns.d.ts +23 -23
- package/node_modules/@slack/web-api/node_modules/@types/node/events.d.ts +11 -27
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +3 -3
- package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +13 -2
- package/node_modules/@types/cacheable-request/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/cacheable-request/node_modules/@types/node/child_process.d.ts +2 -2
- package/node_modules/@types/cacheable-request/node_modules/@types/node/crypto.d.ts +5 -4
- package/node_modules/@types/cacheable-request/node_modules/@types/node/dns/promises.d.ts +25 -23
- package/node_modules/@types/cacheable-request/node_modules/@types/node/dns.d.ts +23 -23
- package/node_modules/@types/cacheable-request/node_modules/@types/node/events.d.ts +11 -27
- package/node_modules/@types/cacheable-request/node_modules/@types/node/package.json +3 -3
- package/node_modules/@types/cacheable-request/node_modules/@types/node/test.d.ts +13 -2
- package/node_modules/@types/is-stream/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/is-stream/node_modules/@types/node/child_process.d.ts +2 -2
- package/node_modules/@types/is-stream/node_modules/@types/node/crypto.d.ts +5 -4
- package/node_modules/@types/is-stream/node_modules/@types/node/dns/promises.d.ts +25 -23
- package/node_modules/@types/is-stream/node_modules/@types/node/dns.d.ts +23 -23
- package/node_modules/@types/is-stream/node_modules/@types/node/events.d.ts +11 -27
- package/node_modules/@types/is-stream/node_modules/@types/node/package.json +3 -3
- package/node_modules/@types/is-stream/node_modules/@types/node/test.d.ts +13 -2
- package/node_modules/@types/keyv/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/keyv/node_modules/@types/node/child_process.d.ts +2 -2
- package/node_modules/@types/keyv/node_modules/@types/node/crypto.d.ts +5 -4
- package/node_modules/@types/keyv/node_modules/@types/node/dns/promises.d.ts +25 -23
- package/node_modules/@types/keyv/node_modules/@types/node/dns.d.ts +23 -23
- package/node_modules/@types/keyv/node_modules/@types/node/events.d.ts +11 -27
- package/node_modules/@types/keyv/node_modules/@types/node/package.json +3 -3
- package/node_modules/@types/keyv/node_modules/@types/node/test.d.ts +13 -2
- package/node_modules/@types/responselike/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/responselike/node_modules/@types/node/child_process.d.ts +2 -2
- package/node_modules/@types/responselike/node_modules/@types/node/crypto.d.ts +5 -4
- package/node_modules/@types/responselike/node_modules/@types/node/dns/promises.d.ts +25 -23
- package/node_modules/@types/responselike/node_modules/@types/node/dns.d.ts +23 -23
- package/node_modules/@types/responselike/node_modules/@types/node/events.d.ts +11 -27
- package/node_modules/@types/responselike/node_modules/@types/node/package.json +3 -3
- package/node_modules/@types/responselike/node_modules/@types/node/test.d.ts +13 -2
- package/node_modules/jackspeak/dist/commonjs/index.js +2 -2
- package/node_modules/jackspeak/dist/commonjs/index.js.map +1 -1
- package/node_modules/jackspeak/dist/esm/index.js +2 -2
- package/node_modules/jackspeak/dist/esm/index.js.map +1 -1
- package/node_modules/jackspeak/package.json +4 -4
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/glob.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/ignore.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/index.d.ts +2 -2
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/index.js +6 -6
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/index.js.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/pattern.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/walker.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/glob.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/ignore.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/ignore.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/index.d.ts +2 -2
- package/node_modules/js-beautify/node_modules/glob/dist/esm/pattern.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/walker.d.ts +0 -1
- package/node_modules/js-beautify/node_modules/glob/dist/esm/walker.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/glob/package.json +5 -4
- package/node_modules/js-beautify/node_modules/minimatch/README.md +1 -1
- package/node_modules/js-beautify/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/minimatch/dist/commonjs/index.js +5 -4
- package/node_modules/js-beautify/node_modules/minimatch/dist/commonjs/index.js.map +1 -1
- package/node_modules/js-beautify/node_modules/minimatch/dist/esm/index.d.ts.map +1 -1
- package/node_modules/js-beautify/node_modules/minimatch/dist/esm/index.js +5 -4
- package/node_modules/js-beautify/node_modules/minimatch/dist/esm/index.js.map +1 -1
- package/node_modules/js-beautify/node_modules/minimatch/package.json +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/glob.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/ignore.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/index.d.ts +2 -2
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/index.js +6 -6
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/index.js.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/pattern.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/walker.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/glob.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/ignore.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/ignore.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/index.d.ts +2 -2
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/pattern.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/walker.d.ts +0 -1
- package/node_modules/mjml-cli/node_modules/glob/dist/esm/walker.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/glob/package.json +5 -4
- package/node_modules/mjml-cli/node_modules/minimatch/README.md +1 -1
- package/node_modules/mjml-cli/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/minimatch/dist/commonjs/index.js +5 -4
- package/node_modules/mjml-cli/node_modules/minimatch/dist/commonjs/index.js.map +1 -1
- package/node_modules/mjml-cli/node_modules/minimatch/dist/esm/index.d.ts.map +1 -1
- package/node_modules/mjml-cli/node_modules/minimatch/dist/esm/index.js +5 -4
- package/node_modules/mjml-cli/node_modules/minimatch/dist/esm/index.js.map +1 -1
- package/node_modules/mjml-cli/node_modules/minimatch/package.json +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/README.md +11 -884
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +486 -65
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +134 -34
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +3 -3
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +486 -65
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +134 -34
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +3 -3
- package/node_modules/path-scurry/node_modules/lru-cache/package.json +8 -9
- package/node_modules/semver/README.md +1 -1
- package/node_modules/semver/classes/range.js +24 -10
- package/node_modules/semver/package.json +1 -1
- package/node_modules/uglify-js/README.md +5 -5
- package/node_modules/uglify-js/lib/ast.js +5 -4
- package/node_modules/uglify-js/lib/compress.js +199 -84
- package/node_modules/uglify-js/lib/output.js +17 -4
- package/node_modules/uglify-js/package.json +1 -1
- package/package.json +20 -20
|
@@ -185,7 +185,7 @@ function Compressor(options, false_by_default) {
|
|
|
185
185
|
};
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
Compressor.prototype = new TreeTransformer(function(node, descend
|
|
188
|
+
Compressor.prototype = new TreeTransformer(function(node, descend) {
|
|
189
189
|
if (node._squeezed) return node;
|
|
190
190
|
var is_scope = node instanceof AST_Scope;
|
|
191
191
|
if (is_scope) {
|
|
@@ -270,7 +270,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
270
270
|
};
|
|
271
271
|
|
|
272
272
|
(function(OPT) {
|
|
273
|
-
OPT(AST_Node, function(self
|
|
273
|
+
OPT(AST_Node, function(self) {
|
|
274
274
|
return self;
|
|
275
275
|
});
|
|
276
276
|
|
|
@@ -638,15 +638,38 @@ Compressor.prototype.compress = function(node) {
|
|
|
638
638
|
}
|
|
639
639
|
|
|
640
640
|
function push(tw, sequential) {
|
|
641
|
+
var defined_ids = Object.create(tw.defined_ids);
|
|
641
642
|
var safe_ids = Object.create(tw.safe_ids);
|
|
642
|
-
if (!sequential)
|
|
643
|
+
if (!sequential) {
|
|
644
|
+
defined_ids.seq = {};
|
|
645
|
+
safe_ids.seq = {};
|
|
646
|
+
}
|
|
647
|
+
tw.defined_ids = defined_ids;
|
|
643
648
|
tw.safe_ids = safe_ids;
|
|
644
649
|
}
|
|
645
650
|
|
|
646
651
|
function pop(tw) {
|
|
652
|
+
tw.defined_ids = Object.getPrototypeOf(tw.defined_ids);
|
|
647
653
|
tw.safe_ids = Object.getPrototypeOf(tw.safe_ids);
|
|
648
654
|
}
|
|
649
655
|
|
|
656
|
+
function access(tw, def) {
|
|
657
|
+
tw.defined_ids[def.id] = tw.defined_ids.seq;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
function assign(tw, def) {
|
|
661
|
+
tw.assigned_ids[def.id] = tw.defined_ids.seq;
|
|
662
|
+
tw.defined_ids[def.id] = false;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
function safe_to_access(tw, def) {
|
|
666
|
+
var seq = tw.defined_ids.seq;
|
|
667
|
+
var defined = tw.defined_ids[def.id];
|
|
668
|
+
if (defined !== seq) return false;
|
|
669
|
+
var assigned = tw.assigned_ids[def.id];
|
|
670
|
+
return !assigned || assigned === seq;
|
|
671
|
+
}
|
|
672
|
+
|
|
650
673
|
function mark(tw, def) {
|
|
651
674
|
tw.safe_ids[def.id] = {};
|
|
652
675
|
}
|
|
@@ -939,9 +962,13 @@ Compressor.prototype.compress = function(node) {
|
|
|
939
962
|
return fixed_node;
|
|
940
963
|
}, visit);
|
|
941
964
|
walk_lambda(fn, tw);
|
|
965
|
+
var defined_ids = tw.defined_ids;
|
|
942
966
|
var safe_ids = tw.safe_ids;
|
|
943
967
|
pop_scope(tw, fn);
|
|
944
|
-
if (!aborts)
|
|
968
|
+
if (!aborts) {
|
|
969
|
+
tw.defined_ids = defined_ids;
|
|
970
|
+
tw.safe_ids = safe_ids;
|
|
971
|
+
}
|
|
945
972
|
return true;
|
|
946
973
|
|
|
947
974
|
function visit(node, fixed) {
|
|
@@ -969,7 +996,6 @@ Compressor.prototype.compress = function(node) {
|
|
|
969
996
|
if (left.equals(right) && !left.has_side_effects(compressor)) {
|
|
970
997
|
right.walk(tw);
|
|
971
998
|
walk_prop(left);
|
|
972
|
-
node.redundant = true;
|
|
973
999
|
return true;
|
|
974
1000
|
}
|
|
975
1001
|
if (ld && right instanceof AST_LambdaExpression) {
|
|
@@ -995,6 +1021,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
995
1021
|
mark_assignment_to_arguments(left);
|
|
996
1022
|
return walk_lazy();
|
|
997
1023
|
}
|
|
1024
|
+
assign(tw, ld);
|
|
998
1025
|
ld.assignments++;
|
|
999
1026
|
var fixed = ld.fixed;
|
|
1000
1027
|
if (is_modified(compressor, tw, node, node, 0)) {
|
|
@@ -1063,6 +1090,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
1063
1090
|
return;
|
|
1064
1091
|
}
|
|
1065
1092
|
var d = sym.definition();
|
|
1093
|
+
assign(tw, d);
|
|
1066
1094
|
d.assignments++;
|
|
1067
1095
|
if (!fixed || sym.in_arg || !safe_to_assign(tw, d)) {
|
|
1068
1096
|
walk();
|
|
@@ -1103,7 +1131,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
1103
1131
|
def(AST_BlockScope, function(tw, descend, compressor) {
|
|
1104
1132
|
reset_block_variables(tw, compressor, this);
|
|
1105
1133
|
});
|
|
1106
|
-
def(AST_Call, function(tw
|
|
1134
|
+
def(AST_Call, function(tw) {
|
|
1107
1135
|
var node = this;
|
|
1108
1136
|
var exp = node.expression;
|
|
1109
1137
|
if (exp instanceof AST_LambdaExpression) {
|
|
@@ -1134,6 +1162,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
1134
1162
|
if (fixed instanceof AST_Lambda) {
|
|
1135
1163
|
mark_fn_def(tw, exp.definition(), fixed);
|
|
1136
1164
|
} else {
|
|
1165
|
+
tw.defined_ids.seq = {};
|
|
1137
1166
|
tw.find_parent(AST_Scope).may_call_this();
|
|
1138
1167
|
}
|
|
1139
1168
|
return true;
|
|
@@ -1238,6 +1267,13 @@ Compressor.prototype.compress = function(node) {
|
|
|
1238
1267
|
tw.in_loop = save_loop;
|
|
1239
1268
|
return true;
|
|
1240
1269
|
});
|
|
1270
|
+
def(AST_Dot, function(tw, descend) {
|
|
1271
|
+
descend();
|
|
1272
|
+
var node = this;
|
|
1273
|
+
var expr = node.expression;
|
|
1274
|
+
if (!node.optional && expr instanceof AST_SymbolRef) access(tw, expr.definition());
|
|
1275
|
+
return true;
|
|
1276
|
+
});
|
|
1241
1277
|
def(AST_For, function(tw, descend, compressor) {
|
|
1242
1278
|
var node = this;
|
|
1243
1279
|
reset_block_variables(tw, compressor, node);
|
|
@@ -1335,12 +1371,18 @@ Compressor.prototype.compress = function(node) {
|
|
|
1335
1371
|
pop_scope(tw, fn);
|
|
1336
1372
|
return true;
|
|
1337
1373
|
});
|
|
1338
|
-
def(AST_Sub, function(tw) {
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1374
|
+
def(AST_Sub, function(tw, descend) {
|
|
1375
|
+
var node = this;
|
|
1376
|
+
var expr = node.expression;
|
|
1377
|
+
if (node.optional) {
|
|
1378
|
+
expr.walk(tw);
|
|
1379
|
+
push(tw, true);
|
|
1380
|
+
node.property.walk(tw);
|
|
1381
|
+
pop(tw);
|
|
1382
|
+
} else {
|
|
1383
|
+
descend();
|
|
1384
|
+
if (expr instanceof AST_SymbolRef) access(tw, expr.definition());
|
|
1385
|
+
}
|
|
1344
1386
|
return true;
|
|
1345
1387
|
});
|
|
1346
1388
|
def(AST_Switch, function(tw, descend, compressor) {
|
|
@@ -1390,6 +1432,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
1390
1432
|
var d = ref.definition();
|
|
1391
1433
|
var fixed = d.fixed || d.last_ref && d.last_ref.fixed;
|
|
1392
1434
|
push_ref(d, ref);
|
|
1435
|
+
if (safe_to_access(tw, d)) ref.defined = true;
|
|
1393
1436
|
if (d.references.length == 1 && !d.fixed && d.orig[0] instanceof AST_SymbolDefun) {
|
|
1394
1437
|
tw.loop_ids[d.id] = tw.in_loop;
|
|
1395
1438
|
}
|
|
@@ -1577,6 +1620,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
1577
1620
|
return node.value || make_node(AST_Undefined, node);
|
|
1578
1621
|
}, function(name, fixed) {
|
|
1579
1622
|
var d = name.definition();
|
|
1623
|
+
assign(tw, d);
|
|
1580
1624
|
if (!d.first_decl && d.references.length == 0) d.first_decl = name;
|
|
1581
1625
|
if (fixed && safe_to_assign(tw, d, true)) {
|
|
1582
1626
|
mark(tw, d);
|
|
@@ -1609,6 +1653,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
1609
1653
|
function reset_flags(node) {
|
|
1610
1654
|
node._squeezed = false;
|
|
1611
1655
|
node._optimized = false;
|
|
1656
|
+
node.single_use = false;
|
|
1612
1657
|
if (node instanceof AST_BlockScope) node._var_names = undefined;
|
|
1613
1658
|
if (node instanceof AST_SymbolRef) node.fixed = undefined;
|
|
1614
1659
|
}
|
|
@@ -1618,6 +1663,10 @@ Compressor.prototype.compress = function(node) {
|
|
|
1618
1663
|
reset_flags(node);
|
|
1619
1664
|
return node.reduce_vars(tw, descend, compressor);
|
|
1620
1665
|
} : reset_flags);
|
|
1666
|
+
// Side-effect tracking on sequential property access
|
|
1667
|
+
tw.assigned_ids = Object.create(null);
|
|
1668
|
+
tw.defined_ids = Object.create(null);
|
|
1669
|
+
tw.defined_ids.seq = {};
|
|
1621
1670
|
// Flow control for visiting lambda definitions
|
|
1622
1671
|
tw.fn_scanning = null;
|
|
1623
1672
|
tw.fn_visited = [];
|
|
@@ -2653,13 +2702,13 @@ Compressor.prototype.compress = function(node) {
|
|
|
2653
2702
|
}
|
|
2654
2703
|
if (node instanceof AST_ObjectIdentity) return symbol_in_lvalues(node, parent);
|
|
2655
2704
|
if (node instanceof AST_PropAccess) {
|
|
2656
|
-
if (side_effects) return true;
|
|
2657
2705
|
var exp = node.expression;
|
|
2658
|
-
if (exp instanceof AST_SymbolRef && is_arguments(exp.definition())) return true;
|
|
2659
2706
|
if (compressor.option("unsafe")) {
|
|
2660
2707
|
if (is_undeclared_ref(exp) && global_names[exp.name]) return false;
|
|
2661
2708
|
if (is_static_fn(exp)) return false;
|
|
2662
2709
|
}
|
|
2710
|
+
if (exp instanceof AST_SymbolRef && is_arguments(exp.definition())) return true;
|
|
2711
|
+
if (side_effects) return true;
|
|
2663
2712
|
if (!well_defined) return true;
|
|
2664
2713
|
if (value_def) return false;
|
|
2665
2714
|
if (!in_try && lhs_local) return false;
|
|
@@ -2668,6 +2717,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
2668
2717
|
}
|
|
2669
2718
|
if (node instanceof AST_Spread) return true;
|
|
2670
2719
|
if (node instanceof AST_SymbolRef) {
|
|
2720
|
+
if (is_undeclared_ref(node) && node.is_declared(compressor)) return false;
|
|
2671
2721
|
if (symbol_in_lvalues(node, parent)) return !is_direct_assignment(node, parent);
|
|
2672
2722
|
if (side_effects && may_modify(node)) return true;
|
|
2673
2723
|
var def = node.definition();
|
|
@@ -2687,8 +2737,10 @@ Compressor.prototype.compress = function(node) {
|
|
|
2687
2737
|
if (sym instanceof AST_PropAccess) return true;
|
|
2688
2738
|
if (check_destructured(sym)) return true;
|
|
2689
2739
|
return sym.match_symbol(function(node) {
|
|
2690
|
-
|
|
2691
|
-
|
|
2740
|
+
if (node instanceof AST_PropAccess) return true;
|
|
2741
|
+
if (node instanceof AST_SymbolRef) {
|
|
2742
|
+
return lvalues.has(node.name) || read_toplevel && compressor.exposed(node.definition());
|
|
2743
|
+
}
|
|
2692
2744
|
}, true);
|
|
2693
2745
|
|
|
2694
2746
|
function reject(node) {
|
|
@@ -3284,10 +3336,14 @@ Compressor.prototype.compress = function(node) {
|
|
|
3284
3336
|
}
|
|
3285
3337
|
|
|
3286
3338
|
function update_symbols(value, node) {
|
|
3339
|
+
var clear_defined = node instanceof AST_SymbolRef && !node.defined;
|
|
3287
3340
|
var scope = node.scope || find_scope(scanner) || block_scope;
|
|
3288
3341
|
value.walk(new TreeWalker(function(node) {
|
|
3289
3342
|
if (node instanceof AST_BlockScope) return true;
|
|
3290
|
-
if (node instanceof AST_Symbol)
|
|
3343
|
+
if (node instanceof AST_Symbol) {
|
|
3344
|
+
if (clear_defined && node instanceof AST_SymbolRef) node.defined = false;
|
|
3345
|
+
node.scope = scope;
|
|
3346
|
+
}
|
|
3291
3347
|
}));
|
|
3292
3348
|
}
|
|
3293
3349
|
|
|
@@ -4300,18 +4356,18 @@ Compressor.prototype.compress = function(node) {
|
|
|
4300
4356
|
if (prop instanceof AST_Node) return;
|
|
4301
4357
|
if (!RE_POSITIVE_INTEGER.test("" + prop)) return;
|
|
4302
4358
|
prop = +prop;
|
|
4303
|
-
var
|
|
4359
|
+
var elements = value.elements;
|
|
4360
|
+
var len = elements.length;
|
|
4304
4361
|
if (prop > len + 4) return;
|
|
4362
|
+
for (var i = Math.min(len, prop + 1); --i >= 0;) {
|
|
4363
|
+
if (elements[i] instanceof AST_Spread) return;
|
|
4364
|
+
}
|
|
4305
4365
|
if (prop < len) {
|
|
4306
|
-
var element =
|
|
4307
|
-
|
|
4308
|
-
value.elements[prop] = node.right;
|
|
4309
|
-
} else {
|
|
4310
|
-
value.elements[prop] = make_sequence(node, [ element, node.right ]).optimize(compressor);
|
|
4311
|
-
}
|
|
4366
|
+
var element = elements[prop].drop_side_effect_free(compressor);
|
|
4367
|
+
elements[prop] = element ? make_sequence(node, [ element, node.right ]) : node.right;
|
|
4312
4368
|
} else {
|
|
4313
|
-
while (prop > len)
|
|
4314
|
-
|
|
4369
|
+
while (prop > len) elements[len++] = make_node(AST_Hole, value);
|
|
4370
|
+
elements[prop] = node.right;
|
|
4315
4371
|
}
|
|
4316
4372
|
return true;
|
|
4317
4373
|
}
|
|
@@ -4712,6 +4768,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
4712
4768
|
return this.tail_node()._dot_throw(compressor);
|
|
4713
4769
|
});
|
|
4714
4770
|
def(AST_SymbolRef, function(compressor, force) {
|
|
4771
|
+
if (this.defined) return false;
|
|
4715
4772
|
if (this.is_undefined) return true;
|
|
4716
4773
|
if (!is_strict(compressor, force)) return false;
|
|
4717
4774
|
if (is_undeclared_ref(this) && this.is_declared(compressor)) return false;
|
|
@@ -6202,26 +6259,8 @@ Compressor.prototype.compress = function(node) {
|
|
|
6202
6259
|
return false;
|
|
6203
6260
|
return true;
|
|
6204
6261
|
}
|
|
6205
|
-
|
|
6206
|
-
|
|
6207
|
-
return all_constant(this.elements, scope);
|
|
6208
|
-
});
|
|
6209
|
-
def(AST_Binary, function(scope) {
|
|
6210
|
-
return this.left.is_constant_expression(scope)
|
|
6211
|
-
&& this.right.is_constant_expression(scope)
|
|
6212
|
-
&& can_drop_op(this);
|
|
6213
|
-
});
|
|
6214
|
-
def(AST_Class, function(scope) {
|
|
6215
|
-
var base = this.extends;
|
|
6216
|
-
if (base && !safe_for_extends(base)) return false;
|
|
6217
|
-
return all_constant(this.properties, scope);
|
|
6218
|
-
});
|
|
6219
|
-
def(AST_ClassProperty, function(scope) {
|
|
6220
|
-
return typeof this.key == "string" && (!this.value || this.value.is_constant_expression(scope));
|
|
6221
|
-
});
|
|
6222
|
-
def(AST_Constant, return_true);
|
|
6223
|
-
def(AST_Lambda, function(scope) {
|
|
6224
|
-
var self = this;
|
|
6262
|
+
|
|
6263
|
+
function walk_scoped(self, scope) {
|
|
6225
6264
|
var result = true;
|
|
6226
6265
|
var scopes = [];
|
|
6227
6266
|
self.walk(new TreeWalker(function(node, descend) {
|
|
@@ -6238,7 +6277,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
6238
6277
|
result = false;
|
|
6239
6278
|
return true;
|
|
6240
6279
|
}
|
|
6241
|
-
if (self.variables.has(node.name)) return true;
|
|
6280
|
+
if (self.variables && self.variables.has(node.name)) return true;
|
|
6242
6281
|
var def = node.definition();
|
|
6243
6282
|
if (member(def.scope, scopes)) return true;
|
|
6244
6283
|
if (scope && !def.redefined()) {
|
|
@@ -6259,10 +6298,38 @@ Compressor.prototype.compress = function(node) {
|
|
|
6259
6298
|
}
|
|
6260
6299
|
}));
|
|
6261
6300
|
return result;
|
|
6301
|
+
}
|
|
6302
|
+
|
|
6303
|
+
def(AST_Node, return_false);
|
|
6304
|
+
def(AST_Array, function(scope) {
|
|
6305
|
+
return all_constant(this.elements, scope);
|
|
6306
|
+
});
|
|
6307
|
+
def(AST_Binary, function(scope) {
|
|
6308
|
+
return this.left.is_constant_expression(scope)
|
|
6309
|
+
&& this.right.is_constant_expression(scope)
|
|
6310
|
+
&& can_drop_op(this);
|
|
6311
|
+
});
|
|
6312
|
+
def(AST_Class, function(scope) {
|
|
6313
|
+
var base = this.extends;
|
|
6314
|
+
if (base && !safe_for_extends(base)) return false;
|
|
6315
|
+
return all_constant(this.properties, scope);
|
|
6316
|
+
});
|
|
6317
|
+
def(AST_ClassProperty, function(scope) {
|
|
6318
|
+
if (typeof this.key != "string") return false;
|
|
6319
|
+
var value = this.value;
|
|
6320
|
+
if (!value) return true;
|
|
6321
|
+
return this.static ? value.is_constant_expression(scope) : walk_scoped(value, scope);
|
|
6322
|
+
});
|
|
6323
|
+
def(AST_Constant, return_true);
|
|
6324
|
+
def(AST_Lambda, function(scope) {
|
|
6325
|
+
return walk_scoped(this, scope);
|
|
6262
6326
|
});
|
|
6263
6327
|
def(AST_Object, function(scope) {
|
|
6264
6328
|
return all_constant(this.properties, scope);
|
|
6265
6329
|
});
|
|
6330
|
+
def(AST_ObjectIdentity, function(scope) {
|
|
6331
|
+
return this.scope.resolve() === scope;
|
|
6332
|
+
});
|
|
6266
6333
|
def(AST_ObjectProperty, function(scope) {
|
|
6267
6334
|
return typeof this.key == "string" && this.value.is_constant_expression(scope);
|
|
6268
6335
|
});
|
|
@@ -7982,8 +8049,14 @@ Compressor.prototype.compress = function(node) {
|
|
|
7982
8049
|
prop.walk(tw);
|
|
7983
8050
|
});
|
|
7984
8051
|
if (node instanceof AST_Assign) {
|
|
7985
|
-
var
|
|
7986
|
-
|
|
8052
|
+
var fixed = sym.fixed_value();
|
|
8053
|
+
var right = get_rhs(node);
|
|
8054
|
+
var safe = fixed && fixed.is_constant();
|
|
8055
|
+
var shared = false;
|
|
8056
|
+
if (init
|
|
8057
|
+
&& node.write_only === true
|
|
8058
|
+
&& (safe || node.left === sym || right.equals(sym))
|
|
8059
|
+
&& !right.has_side_effects(compressor)) {
|
|
7987
8060
|
initializations.add(node_def.id, right);
|
|
7988
8061
|
} else {
|
|
7989
8062
|
right.walk(tw);
|
|
@@ -7993,11 +8066,8 @@ Compressor.prototype.compress = function(node) {
|
|
|
7993
8066
|
if (!node.write_only || shared) {
|
|
7994
8067
|
verify_safe_usage(node_def, sym, value_modified[node_def.id]);
|
|
7995
8068
|
}
|
|
7996
|
-
} else {
|
|
7997
|
-
|
|
7998
|
-
if (!fixed || !fixed.is_constant()) {
|
|
7999
|
-
verify_safe_usage(node_def, value_read[node_def.id], true);
|
|
8000
|
-
}
|
|
8069
|
+
} else if (!safe) {
|
|
8070
|
+
verify_safe_usage(node_def, value_read[node_def.id], true);
|
|
8001
8071
|
}
|
|
8002
8072
|
}
|
|
8003
8073
|
if (track_assigns(node_def, sym) && is_lhs(sym, node) !== sym) add_assigns(node_def, sym);
|
|
@@ -8083,6 +8153,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
8083
8153
|
}
|
|
8084
8154
|
|
|
8085
8155
|
function trim_destructured(node, value, process, drop, root) {
|
|
8156
|
+
var unwind = true;
|
|
8086
8157
|
var trimmer = new TreeTransformer(function(node) {
|
|
8087
8158
|
if (node instanceof AST_DefaultValue) {
|
|
8088
8159
|
if (!(compressor.option("default_values") && value && value.is_defined(compressor))) {
|
|
@@ -8100,21 +8171,27 @@ Compressor.prototype.compress = function(node) {
|
|
|
8100
8171
|
}
|
|
8101
8172
|
if (node instanceof AST_DestructuredArray) {
|
|
8102
8173
|
var save_drop = drop;
|
|
8174
|
+
var save_unwind = unwind;
|
|
8103
8175
|
var save_value = value;
|
|
8104
8176
|
if (value instanceof AST_SymbolRef) {
|
|
8105
8177
|
drop = false;
|
|
8106
8178
|
value = value.fixed_value();
|
|
8107
8179
|
}
|
|
8108
|
-
var native, values;
|
|
8180
|
+
var last_side_effects, native, values;
|
|
8109
8181
|
if (value instanceof AST_Array) {
|
|
8110
8182
|
native = true;
|
|
8111
8183
|
values = value.elements;
|
|
8184
|
+
if (save_unwind) for (last_side_effects = values.length; --last_side_effects >= 0;) {
|
|
8185
|
+
if (values[last_side_effects].has_side_effects(compressor)) break;
|
|
8186
|
+
}
|
|
8112
8187
|
} else {
|
|
8113
8188
|
native = value && value.is_string(compressor);
|
|
8114
8189
|
values = false;
|
|
8190
|
+
last_side_effects = node.elements.length;
|
|
8115
8191
|
}
|
|
8116
8192
|
var elements = [], newValues = drop && [], pos = 0;
|
|
8117
8193
|
node.elements.forEach(function(element, index) {
|
|
8194
|
+
if (save_unwind) unwind = index >= last_side_effects;
|
|
8118
8195
|
value = values && values[index];
|
|
8119
8196
|
if (value instanceof AST_Hole) {
|
|
8120
8197
|
value = null;
|
|
@@ -8157,6 +8234,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
8157
8234
|
}
|
|
8158
8235
|
}
|
|
8159
8236
|
value = save_value;
|
|
8237
|
+
unwind = save_unwind;
|
|
8160
8238
|
drop = save_drop;
|
|
8161
8239
|
if (values && newValues) {
|
|
8162
8240
|
fill_holes(value, newValues);
|
|
@@ -8165,22 +8243,34 @@ Compressor.prototype.compress = function(node) {
|
|
|
8165
8243
|
}
|
|
8166
8244
|
if (!native) {
|
|
8167
8245
|
elements.length = node.elements.length;
|
|
8168
|
-
} else if (!node.rest) switch (elements.length) {
|
|
8246
|
+
} else if (!node.rest) SHORTHAND: switch (elements.length) {
|
|
8169
8247
|
case 0:
|
|
8170
8248
|
if (node === root) break;
|
|
8171
8249
|
if (drop) value = value.drop_side_effect_free(compressor);
|
|
8172
8250
|
return null;
|
|
8173
|
-
|
|
8251
|
+
default:
|
|
8174
8252
|
if (!drop) break;
|
|
8253
|
+
if (!unwind) break;
|
|
8175
8254
|
if (node === root) break;
|
|
8176
|
-
var
|
|
8255
|
+
var pos = elements.length, sym;
|
|
8256
|
+
while (--pos >= 0) {
|
|
8257
|
+
var element = elements[pos];
|
|
8258
|
+
if (element) {
|
|
8259
|
+
sym = element;
|
|
8260
|
+
break;
|
|
8261
|
+
}
|
|
8262
|
+
}
|
|
8263
|
+
if (pos < 0) break;
|
|
8264
|
+
for (var i = pos; --i >= 0;) {
|
|
8265
|
+
if (elements[i]) break SHORTHAND;
|
|
8266
|
+
}
|
|
8177
8267
|
if (sym.has_side_effects(compressor)) break;
|
|
8178
8268
|
if (value.has_side_effects(compressor) && sym.match_symbol(function(node) {
|
|
8179
8269
|
return node instanceof AST_PropAccess;
|
|
8180
8270
|
})) break;
|
|
8181
8271
|
value = make_node(AST_Sub, node, {
|
|
8182
8272
|
expression: value,
|
|
8183
|
-
property: make_node(AST_Number, node, { value:
|
|
8273
|
+
property: make_node(AST_Number, node, { value: pos }),
|
|
8184
8274
|
});
|
|
8185
8275
|
return sym;
|
|
8186
8276
|
}
|
|
@@ -8190,16 +8280,19 @@ Compressor.prototype.compress = function(node) {
|
|
|
8190
8280
|
}
|
|
8191
8281
|
if (node instanceof AST_DestructuredObject) {
|
|
8192
8282
|
var save_drop = drop;
|
|
8283
|
+
var save_unwind = unwind;
|
|
8193
8284
|
var save_value = value;
|
|
8194
8285
|
if (value instanceof AST_SymbolRef) {
|
|
8195
8286
|
drop = false;
|
|
8196
8287
|
value = value.fixed_value();
|
|
8197
8288
|
}
|
|
8198
|
-
var prop_keys, prop_map, values;
|
|
8289
|
+
var last_side_effects, prop_keys, prop_map, values;
|
|
8199
8290
|
if (value instanceof AST_Object) {
|
|
8291
|
+
last_side_effects = -1;
|
|
8200
8292
|
prop_keys = [];
|
|
8201
8293
|
prop_map = new Dictionary();
|
|
8202
8294
|
values = value.properties.map(function(prop, index) {
|
|
8295
|
+
if (save_unwind && prop.has_side_effects(compressor)) last_side_effects = index;
|
|
8203
8296
|
prop = prop.clone();
|
|
8204
8297
|
if (prop instanceof AST_Spread) {
|
|
8205
8298
|
prop_map = false;
|
|
@@ -8215,6 +8308,8 @@ Compressor.prototype.compress = function(node) {
|
|
|
8215
8308
|
}
|
|
8216
8309
|
return prop;
|
|
8217
8310
|
});
|
|
8311
|
+
} else {
|
|
8312
|
+
last_side_effects = node.properties.length;
|
|
8218
8313
|
}
|
|
8219
8314
|
if (node.rest) {
|
|
8220
8315
|
value = false;
|
|
@@ -8237,6 +8332,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
8237
8332
|
return key;
|
|
8238
8333
|
}).forEach(function(key, index) {
|
|
8239
8334
|
var prop = node.properties[index], trimmed;
|
|
8335
|
+
if (save_unwind) unwind = index >= last_side_effects;
|
|
8240
8336
|
if (key instanceof AST_Node) {
|
|
8241
8337
|
drop = false;
|
|
8242
8338
|
value = false;
|
|
@@ -8277,6 +8373,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
8277
8373
|
}
|
|
8278
8374
|
});
|
|
8279
8375
|
value = save_value;
|
|
8376
|
+
unwind = save_unwind;
|
|
8280
8377
|
drop = save_drop;
|
|
8281
8378
|
if (drop_keys && prop_keys) {
|
|
8282
8379
|
value = value.clone();
|
|
@@ -8284,6 +8381,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
8284
8381
|
if (prop instanceof AST_Spread) return prop;
|
|
8285
8382
|
var key = prop_keys[index];
|
|
8286
8383
|
if (key instanceof AST_Node) return prop;
|
|
8384
|
+
if (key === "__proto__") return prop;
|
|
8287
8385
|
if (drop_keys.has(key)) {
|
|
8288
8386
|
var mapped = drop_keys.get(key);
|
|
8289
8387
|
if (!mapped) return prop;
|
|
@@ -8310,6 +8408,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
8310
8408
|
return null;
|
|
8311
8409
|
case 1:
|
|
8312
8410
|
if (!drop) break;
|
|
8411
|
+
if (!unwind) break;
|
|
8313
8412
|
if (node === root) break;
|
|
8314
8413
|
var prop = properties[0];
|
|
8315
8414
|
if (prop.key instanceof AST_Node) break;
|
|
@@ -8317,7 +8416,10 @@ Compressor.prototype.compress = function(node) {
|
|
|
8317
8416
|
if (value.has_side_effects(compressor) && prop.value.match_symbol(function(node) {
|
|
8318
8417
|
return node instanceof AST_PropAccess;
|
|
8319
8418
|
})) break;
|
|
8320
|
-
value = make_node(
|
|
8419
|
+
value = is_identifier_string(prop.key) ? make_node(AST_Dot, node, {
|
|
8420
|
+
expression: value,
|
|
8421
|
+
property: prop.key,
|
|
8422
|
+
}) : make_node(AST_Sub, node, {
|
|
8321
8423
|
expression: value,
|
|
8322
8424
|
property: make_node_from_constant(prop.key, prop),
|
|
8323
8425
|
});
|
|
@@ -8434,7 +8536,8 @@ Compressor.prototype.compress = function(node) {
|
|
|
8434
8536
|
&& self.find_variable(sym.name) === sym.definition();
|
|
8435
8537
|
})) return node;
|
|
8436
8538
|
node.definitions.forEach(function(defn) {
|
|
8437
|
-
|
|
8539
|
+
var name = defn.name.name;
|
|
8540
|
+
if (!vars.has(name)) vars.set(name, defn);
|
|
8438
8541
|
});
|
|
8439
8542
|
var seq = node.to_assignments();
|
|
8440
8543
|
if (p instanceof AST_ForEnumeration && p.init === node) {
|
|
@@ -8461,13 +8564,14 @@ Compressor.prototype.compress = function(node) {
|
|
|
8461
8564
|
return !ref.in_arg;
|
|
8462
8565
|
})) vars.del(argname.name);
|
|
8463
8566
|
});
|
|
8464
|
-
vars.each(function(defn
|
|
8567
|
+
vars.each(function(defn) {
|
|
8568
|
+
var name = defn.name;
|
|
8465
8569
|
defn = defn.clone();
|
|
8466
|
-
defn.name =
|
|
8570
|
+
defn.name = name.clone();
|
|
8467
8571
|
defn.value = null;
|
|
8468
8572
|
defns.push(defn);
|
|
8469
|
-
|
|
8470
|
-
|
|
8573
|
+
var orig = name.definition().orig;
|
|
8574
|
+
orig.splice(orig.indexOf(name), 0, defn.name);
|
|
8471
8575
|
});
|
|
8472
8576
|
if (defns.length > 0) hoisted.push(make_node(AST_Var, self, { definitions: defns }));
|
|
8473
8577
|
}
|
|
@@ -10298,10 +10402,9 @@ Compressor.prototype.compress = function(node) {
|
|
|
10298
10402
|
}
|
|
10299
10403
|
});
|
|
10300
10404
|
def.references.push(name);
|
|
10405
|
+
def.assignments++;
|
|
10301
10406
|
}
|
|
10302
|
-
def.assignments++;
|
|
10303
10407
|
def.eliminated++;
|
|
10304
|
-
def.single_use = false;
|
|
10305
10408
|
return a;
|
|
10306
10409
|
}, []);
|
|
10307
10410
|
if (assignments.length == 0) return null;
|
|
@@ -10924,9 +11027,11 @@ Compressor.prototype.compress = function(node) {
|
|
|
10924
11027
|
&& (value = can_flatten_body(stat))) {
|
|
10925
11028
|
var replacing = exp === fn || def.single_use && def.references.length - def.replaced == 1;
|
|
10926
11029
|
if (can_substitute_directly()) {
|
|
11030
|
+
self._optimized = true;
|
|
11031
|
+
var retValue = value.optimize(compressor).clone(true);
|
|
10927
11032
|
var args = self.args.slice();
|
|
10928
11033
|
var refs = [];
|
|
10929
|
-
|
|
11034
|
+
retValue = retValue.transform(new TreeTransformer(function(node) {
|
|
10930
11035
|
if (node instanceof AST_SymbolRef) {
|
|
10931
11036
|
var def = node.definition();
|
|
10932
11037
|
if (fn.variables.get(node.name) !== def) {
|
|
@@ -11158,6 +11263,10 @@ Compressor.prototype.compress = function(node) {
|
|
|
11158
11263
|
return;
|
|
11159
11264
|
}
|
|
11160
11265
|
if (node instanceof AST_Class) return abort = true;
|
|
11266
|
+
if (node instanceof AST_Destructured) {
|
|
11267
|
+
side_effects = true;
|
|
11268
|
+
return;
|
|
11269
|
+
}
|
|
11161
11270
|
if (node instanceof AST_Scope) return abort = true;
|
|
11162
11271
|
if (avoid && node instanceof AST_Symbol && avoid[node.name]) return abort = true;
|
|
11163
11272
|
if (node instanceof AST_SymbolRef) {
|
|
@@ -12010,7 +12119,11 @@ Compressor.prototype.compress = function(node) {
|
|
|
12010
12119
|
var exprs = [];
|
|
12011
12120
|
if (self.left.evaluate(compressor) instanceof AST_Node) exprs.push(self.left);
|
|
12012
12121
|
if (self.right.evaluate(compressor) instanceof AST_Node) exprs.push(self.right);
|
|
12013
|
-
|
|
12122
|
+
switch (exprs.length) {
|
|
12123
|
+
case 0:
|
|
12124
|
+
return make_node(AST_True, self).optimize(compressor);
|
|
12125
|
+
case 1:
|
|
12126
|
+
exprs[0] = exprs[0].clone();
|
|
12014
12127
|
exprs.push(make_node(AST_True, self));
|
|
12015
12128
|
return make_sequence(self, exprs).optimize(compressor);
|
|
12016
12129
|
}
|
|
@@ -12606,7 +12719,8 @@ Compressor.prototype.compress = function(node) {
|
|
|
12606
12719
|
single_use = false;
|
|
12607
12720
|
} else if (fixed.has_side_effects(compressor)) {
|
|
12608
12721
|
single_use = false;
|
|
12609
|
-
} else if (
|
|
12722
|
+
} else if (fixed instanceof AST_Class
|
|
12723
|
+
&& (compressor.option("ie") || !fixed.is_constant_expression(self.scope))) {
|
|
12610
12724
|
single_use = false;
|
|
12611
12725
|
}
|
|
12612
12726
|
if (single_use) fixed.parent_scope = self.scope;
|
|
@@ -12945,24 +13059,23 @@ Compressor.prototype.compress = function(node) {
|
|
|
12945
13059
|
if (compressor.option("dead_code")) {
|
|
12946
13060
|
if (self.left instanceof AST_PropAccess) {
|
|
12947
13061
|
if (self.operator == "=") {
|
|
12948
|
-
if (self.redundant) {
|
|
12949
|
-
var exprs = [ self.left.expression ];
|
|
12950
|
-
if (self.left instanceof AST_Sub) exprs.push(self.left.property);
|
|
12951
|
-
exprs.push(self.right);
|
|
12952
|
-
return make_sequence(self, exprs).optimize(compressor);
|
|
12953
|
-
}
|
|
12954
|
-
if (self.left.equals(self.right) && !self.left.has_side_effects(compressor)) {
|
|
12955
|
-
return self.right;
|
|
12956
|
-
}
|
|
12957
13062
|
var exp = self.left.expression;
|
|
13063
|
+
if (self.left.equals(self.right)) {
|
|
13064
|
+
var defined = exp.defined;
|
|
13065
|
+
exp.defined = false;
|
|
13066
|
+
var drop_lhs = !self.left.has_side_effects(compressor);
|
|
13067
|
+
exp.defined = defined;
|
|
13068
|
+
if (drop_lhs) return self.right;
|
|
13069
|
+
}
|
|
12958
13070
|
if (exp instanceof AST_Lambda
|
|
12959
13071
|
|| !compressor.has_directive("use strict")
|
|
12960
13072
|
&& exp instanceof AST_Constant
|
|
12961
13073
|
&& !exp.may_throw_on_access(compressor)) {
|
|
12962
|
-
|
|
13074
|
+
var value = self.left instanceof AST_Dot ? self.right : make_sequence(self, [
|
|
12963
13075
|
self.left.property,
|
|
12964
|
-
self.right
|
|
12965
|
-
])
|
|
13076
|
+
self.right,
|
|
13077
|
+
]);
|
|
13078
|
+
return maintain_this_binding(compressor.parent(), self, value).optimize(compressor);
|
|
12966
13079
|
}
|
|
12967
13080
|
}
|
|
12968
13081
|
} else if (self.left instanceof AST_SymbolRef && can_drop_symbol(self.left, compressor)) {
|
|
@@ -14070,6 +14183,7 @@ Compressor.prototype.compress = function(node) {
|
|
|
14070
14183
|
var fn = call.expression;
|
|
14071
14184
|
if (!(fn instanceof AST_LambdaExpression)) return;
|
|
14072
14185
|
if (fn.name) return;
|
|
14186
|
+
if (fn.single_use) return;
|
|
14073
14187
|
if (fn.uses_arguments) return;
|
|
14074
14188
|
if (fn.pinned()) return;
|
|
14075
14189
|
if (is_generator(fn)) return;
|
|
@@ -14162,7 +14276,8 @@ Compressor.prototype.compress = function(node) {
|
|
|
14162
14276
|
stat.walk(new TreeWalker(function(node) {
|
|
14163
14277
|
if (abort) return true;
|
|
14164
14278
|
if (node instanceof AST_Try) {
|
|
14165
|
-
if (node.bfinally
|
|
14279
|
+
if (!node.bfinally) return;
|
|
14280
|
+
if (all(node.body, function(stat) {
|
|
14166
14281
|
stat.walk(find_return);
|
|
14167
14282
|
return !abort;
|
|
14168
14283
|
}) && node.bcatch) node.bcatch.walk(find_return);
|