terser 5.16.2 → 5.16.4
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/CHANGELOG.md +13 -0
- package/dist/bundle.min.js +286 -223
- package/lib/ast.js +27 -6
- package/lib/compress/index.js +21 -10
- package/lib/compress/inference.js +2 -2
- package/lib/compress/inline.js +119 -114
- package/lib/compress/reduce-vars.js +31 -12
- package/lib/compress/tighten-body.js +11 -7
- package/lib/equivalent-to.js +1 -1
- package/lib/mozilla-ast.js +3 -2
- package/lib/output.js +5 -1
- package/lib/parse.js +20 -1
- package/lib/scope.js +2 -8
- package/lib/size.js +1 -3
- package/lib/transform.js +4 -10
- package/lib/utils/index.js +31 -35
- package/package.json +1 -1
package/lib/parse.js
CHANGED
@@ -152,6 +152,7 @@ import {
|
|
152
152
|
AST_Toplevel,
|
153
153
|
AST_True,
|
154
154
|
AST_Try,
|
155
|
+
AST_TryBlock,
|
155
156
|
AST_UnaryPostfix,
|
156
157
|
AST_UnaryPrefix,
|
157
158
|
AST_Var,
|
@@ -260,6 +261,19 @@ var UNICODE = {
|
|
260
261
|
ID_Continue: /(?:[$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])+/,
|
261
262
|
};
|
262
263
|
|
264
|
+
try {
|
265
|
+
UNICODE = {
|
266
|
+
// https://262.ecma-international.org/13.0/#prod-IdentifierStartChar
|
267
|
+
// $, _, ID_Start
|
268
|
+
ID_Start: new RegExp("[_$\\p{ID_Start}]", "u"),
|
269
|
+
// https://262.ecma-international.org/13.0/#prod-IdentifierPartChar
|
270
|
+
// $, zero-width-joiner, zero-width-non-joiner, ID_Continue
|
271
|
+
ID_Continue: new RegExp("[$\\u200C\\u200D\\p{ID_Continue}]+", "u"),
|
272
|
+
};
|
273
|
+
} catch(e) {
|
274
|
+
// Could not use modern JS \p{...}. UNICODE is already defined above so let's continue
|
275
|
+
}
|
276
|
+
|
263
277
|
function get_full_char(str, pos) {
|
264
278
|
if (is_surrogate_pair_head(str.charCodeAt(pos))) {
|
265
279
|
if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) {
|
@@ -2053,7 +2067,12 @@ function parse($TEXT, options) {
|
|
2053
2067
|
}
|
2054
2068
|
|
2055
2069
|
function try_() {
|
2056
|
-
var body
|
2070
|
+
var body, bcatch = null, bfinally = null;
|
2071
|
+
body = new AST_TryBlock({
|
2072
|
+
start : S.token,
|
2073
|
+
body : block_(),
|
2074
|
+
end : prev(),
|
2075
|
+
});
|
2057
2076
|
if (is("keyword", "catch")) {
|
2058
2077
|
var start = S.token;
|
2059
2078
|
next();
|
package/lib/scope.js
CHANGED
@@ -58,7 +58,6 @@ import {
|
|
58
58
|
AST_Arrow,
|
59
59
|
AST_Block,
|
60
60
|
AST_Call,
|
61
|
-
AST_Catch,
|
62
61
|
AST_Class,
|
63
62
|
AST_Conditional,
|
64
63
|
AST_DefClass,
|
@@ -223,12 +222,7 @@ AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null,
|
|
223
222
|
const save_scope = scope;
|
224
223
|
node.block_scope = scope = new AST_Scope(node);
|
225
224
|
scope._block_scope = true;
|
226
|
-
|
227
|
-
// and its catch and finally branches are children of the AST_Try itself
|
228
|
-
const parent_scope = node instanceof AST_Catch
|
229
|
-
? save_scope.parent_scope
|
230
|
-
: save_scope;
|
231
|
-
scope.init_scope_vars(parent_scope);
|
225
|
+
scope.init_scope_vars(save_scope);
|
232
226
|
scope.uses_with = save_scope.uses_with;
|
233
227
|
scope.uses_eval = save_scope.uses_eval;
|
234
228
|
|
@@ -243,7 +237,7 @@ AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null,
|
|
243
237
|
// AST_Switch has a scope within the body, but it itself "is a block scope"
|
244
238
|
// This means the switched expression has to belong to the outer scope
|
245
239
|
// while the body inside belongs to the switch itself.
|
246
|
-
// This is pretty nasty and warrants an AST change
|
240
|
+
// This is pretty nasty and warrants an AST change
|
247
241
|
const the_block_scope = scope;
|
248
242
|
scope = save_scope;
|
249
243
|
node.expression.walk(tw);
|
package/lib/size.js
CHANGED
@@ -216,9 +216,7 @@ AST_Default.prototype._size = function () {
|
|
216
216
|
return 8 + list_overhead(this.body);
|
217
217
|
};
|
218
218
|
|
219
|
-
AST_Try.prototype._size =
|
220
|
-
return 3 + list_overhead(this.body);
|
221
|
-
};
|
219
|
+
AST_Try.prototype._size = () => 3;
|
222
220
|
|
223
221
|
AST_Catch.prototype._size = function () {
|
224
222
|
let size = 7 + list_overhead(this.body);
|
package/lib/transform.js
CHANGED
@@ -89,7 +89,7 @@ import {
|
|
89
89
|
AST_Yield,
|
90
90
|
} from "./ast.js";
|
91
91
|
import {
|
92
|
-
MAP,
|
92
|
+
MAP as do_list,
|
93
93
|
noop,
|
94
94
|
} from "./utils/index.js";
|
95
95
|
|
@@ -111,12 +111,6 @@ function def_transform(node, descend) {
|
|
111
111
|
});
|
112
112
|
}
|
113
113
|
|
114
|
-
function do_list(list, tw) {
|
115
|
-
return MAP(list, function(node) {
|
116
|
-
return node.transform(tw, true);
|
117
|
-
});
|
118
|
-
}
|
119
|
-
|
120
114
|
def_transform(AST_Node, noop);
|
121
115
|
|
122
116
|
def_transform(AST_LabeledStatement, function(self, tw) {
|
@@ -185,7 +179,7 @@ def_transform(AST_Case, function(self, tw) {
|
|
185
179
|
});
|
186
180
|
|
187
181
|
def_transform(AST_Try, function(self, tw) {
|
188
|
-
self.body =
|
182
|
+
self.body = self.body.transform(tw);
|
189
183
|
if (self.bcatch) self.bcatch = self.bcatch.transform(tw);
|
190
184
|
if (self.bfinally) self.bfinally = self.bfinally.transform(tw);
|
191
185
|
});
|
@@ -210,7 +204,7 @@ def_transform(AST_Destructuring, function(self, tw) {
|
|
210
204
|
|
211
205
|
def_transform(AST_Lambda, function(self, tw) {
|
212
206
|
if (self.name) self.name = self.name.transform(tw);
|
213
|
-
self.argnames = do_list(self.argnames, tw);
|
207
|
+
self.argnames = do_list(self.argnames, tw, /* allow_splicing */ false);
|
214
208
|
if (self.body instanceof AST_Node) {
|
215
209
|
self.body = self.body.transform(tw);
|
216
210
|
} else {
|
@@ -220,7 +214,7 @@ def_transform(AST_Lambda, function(self, tw) {
|
|
220
214
|
|
221
215
|
def_transform(AST_Call, function(self, tw) {
|
222
216
|
self.expression = self.expression.transform(tw);
|
223
|
-
self.args = do_list(self.args, tw);
|
217
|
+
self.args = do_list(self.args, tw, /* allow_splicing */ false);
|
224
218
|
});
|
225
219
|
|
226
220
|
def_transform(AST_Sequence, function(self, tw) {
|
package/lib/utils/index.js
CHANGED
@@ -43,6 +43,8 @@
|
|
43
43
|
|
44
44
|
"use strict";
|
45
45
|
|
46
|
+
import { AST_Node } from "../ast.js";
|
47
|
+
|
46
48
|
function characters(str) {
|
47
49
|
return str.split("");
|
48
50
|
}
|
@@ -96,48 +98,42 @@ function return_this() { return this; }
|
|
96
98
|
function return_null() { return null; }
|
97
99
|
|
98
100
|
var MAP = (function() {
|
99
|
-
function MAP(a,
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
if (
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
101
|
+
function MAP(a, tw, allow_splicing = true) {
|
102
|
+
// Loop but try not to build a new array
|
103
|
+
for (let i = 0; i < a.length; ++i) {
|
104
|
+
let item = a[i];
|
105
|
+
let ret = item.transform(tw, allow_splicing);
|
106
|
+
|
107
|
+
if (ret !== item) {
|
108
|
+
const a1 = a.slice(0, i);
|
109
|
+
|
110
|
+
// Looks like something was transformed. Change the loop.
|
111
|
+
if (ret instanceof AST_Node) {
|
112
|
+
a1.push(ret);
|
113
|
+
} else if (ret instanceof Splice) {
|
114
|
+
a1.push(...ret.v);
|
111
115
|
}
|
112
|
-
|
113
|
-
|
114
|
-
ret
|
115
|
-
|
116
|
-
ret
|
116
|
+
|
117
|
+
while ((item = a[++i])) {
|
118
|
+
const ret = item.transform(tw, true);
|
119
|
+
|
120
|
+
if (ret instanceof AST_Node) {
|
121
|
+
a1.push(ret);
|
122
|
+
} else if (ret instanceof Splice) {
|
123
|
+
a1.push(...ret.v);
|
124
|
+
}
|
117
125
|
}
|
126
|
+
|
127
|
+
return a1;
|
118
128
|
}
|
119
|
-
return is_last;
|
120
|
-
}
|
121
|
-
if (Array.isArray(a)) {
|
122
|
-
if (backwards) {
|
123
|
-
for (i = a.length; --i >= 0;) if (doit()) break;
|
124
|
-
ret.reverse();
|
125
|
-
top.reverse();
|
126
|
-
} else {
|
127
|
-
for (i = 0; i < a.length; ++i) if (doit()) break;
|
128
|
-
}
|
129
|
-
} else {
|
130
|
-
for (i in a) if (HOP(a, i)) if (doit()) break;
|
131
129
|
}
|
132
|
-
|
130
|
+
|
131
|
+
return a;
|
133
132
|
}
|
134
|
-
|
133
|
+
|
135
134
|
MAP.splice = function(val) { return new Splice(val); };
|
136
|
-
MAP.
|
137
|
-
var skip = MAP.skip = {};
|
138
|
-
function AtTop(val) { this.v = val; }
|
135
|
+
MAP.skip = {};
|
139
136
|
function Splice(val) { this.v = val; }
|
140
|
-
function Last(val) { this.v = val; }
|
141
137
|
return MAP;
|
142
138
|
})();
|
143
139
|
|