jscrewit 2.41.0 → 3.1.0

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/lib/jscrewit.js CHANGED
@@ -1,4 +1,4 @@
1
- // JScrewIt 2.41.0 – https://jscrew.it
1
+ // JScrewIt 3.0.0 – https://jscrew.it
2
2
 
3
3
  (function () {
4
4
  'use strict';
@@ -22,7 +22,6 @@
22
22
  var _Math_abs = Math.abs;
23
23
  var _Math_max = Math.max;
24
24
  var _Math_min = Math.min;
25
- var _Math_pow = Math.pow;
26
25
 
27
26
  var _Object = Object;
28
27
  var _Object_create$1 = _Object.create;
@@ -85,10 +84,7 @@
85
84
  try
86
85
  {
87
86
  var regExp = _RegExp(pattern, flags);
88
- // In Android Browser 4.0, the RegExp constructor ignores unrecognized flags instead of
89
- // throwing a SyntaxError.
90
- if (regExp.flags === flags)
91
- return regExp;
87
+ return regExp;
92
88
  }
93
89
  catch (error)
94
90
  { }
@@ -281,35 +277,21 @@
281
277
  // ~feature-hub – https://github.com/fasttime/JScrewIt/tree/master/packages/~feature-hub
282
278
 
283
279
 
284
- var LO_INDEX = 0;
285
- var HI_INDEX = 1;
286
- var freezeMask = function (_LoHi) { return Object.freeze(_LoHi); };
287
280
  /** An empty mask. */
288
- var MASK_EMPTY = freezeMask([0, 0]);
281
+ var MASK_EMPTY = 0;
289
282
  /** Determines whether two specified masks are equal. */
290
283
  function maskAreEqual(mask1, mask2) {
291
- var _LoHi1 = mask1;
292
- var _LoHi2 = mask2;
293
- return _LoHi1[LO_INDEX] === _LoHi2[LO_INDEX] && _LoHi1[HI_INDEX] === _LoHi2[HI_INDEX];
284
+ return mask1 === mask2;
294
285
  }
295
286
  /** Determines whether a specified mask includes another one. */
296
287
  function maskIncludes(includingMask, includedMask) {
297
- var includingLoHi = includingMask;
298
- var includedLoHi = includedMask;
299
- var includedLoValue;
300
- var includedHiValue;
301
- var returnValue = (includedLoValue = includedLoHi[LO_INDEX]) === (includedLoValue & includingLoHi[LO_INDEX]) &&
302
- (includedHiValue = includedLoHi[HI_INDEX]) === (includedHiValue & includingLoHi[HI_INDEX]);
288
+ var returnValue = (includingMask & includedMask) === includedMask;
303
289
  return returnValue;
304
290
  }
305
291
  /** Returns a new mask that is the intersection of two specified masks. */
306
292
  function maskIntersection(mask1, mask2) {
307
- var _LoHi1 = mask1;
308
- var _LoHi2 = mask2;
309
- var intersectionLo = _LoHi1[LO_INDEX] & _LoHi2[LO_INDEX];
310
- var intersectionHi = _LoHi1[HI_INDEX] & _LoHi2[HI_INDEX];
311
- var intersectionLoHi = [intersectionLo, intersectionHi];
312
- return freezeMask(intersectionLoHi);
293
+ var intersectionMask = (mask1 & mask2);
294
+ return intersectionMask;
313
295
  }
314
296
  /**
315
297
  * Returns a new non-empty mask that does not intersect the specified mask.
@@ -317,27 +299,18 @@
317
299
  * @throws If the specified mask is full, a `RangeError` is thrown.
318
300
  */
319
301
  function maskNext(mask) {
320
- var _LoHi = mask;
321
- var bitIndex = 0;
322
- for (; _LoHi[bitIndex >> 5] & 1 << (bitIndex & 0x1F); bitIndex++) {
323
- if (bitIndex === 63)
324
- throw RangeError('Mask full');
325
- }
326
- var nextLoHi = [0, 0];
327
- nextLoHi[bitIndex >> 5] = 1 << (bitIndex & 0x1F);
328
- return freezeMask(nextLoHi);
302
+ var nextValue = mask + 1 & ~mask;
303
+ if (!nextValue)
304
+ throw RangeError('Mask full');
305
+ return nextValue;
329
306
  }
330
307
  /** Returns a new mask that is the union of two specified masks. */
331
308
  function maskUnion(mask1, mask2) {
332
- var _LoHi1 = mask1;
333
- var _LoHi2 = mask2;
334
- var unionLo = _LoHi1[LO_INDEX] | _LoHi2[LO_INDEX];
335
- var unionHi = _LoHi1[HI_INDEX] | _LoHi2[HI_INDEX];
336
- var unionLoHi = [unionLo, unionHi];
337
- return freezeMask(unionLoHi);
309
+ var unionMask = (mask1 | mask2);
310
+ return unionMask;
338
311
  }
339
312
 
340
- var keyFor = function (mask) { return "_".concat(mask); };
313
+ var keyFor = function (mask) { return mask; };
341
314
  var MaskIndex = /** @class */ (function () {
342
315
  function MaskIndex() {
343
316
  this._index = Object.create(null);
@@ -467,11 +440,11 @@
467
440
  return mask;
468
441
  }
469
442
  function areCompatible() {
470
- var arg0;
471
- var features = arguments.length === 1 &&
472
- _Array_isArray(arg0 = arguments[0]) ?
473
- arg0 : arguments;
474
- var mask = featureArrayLikeToMask(features);
443
+ var features = [];
444
+ for (var _i = 0; _i < arguments.length; _i++) {
445
+ features[_i] = arguments[_i];
446
+ }
447
+ var mask = featureArrayToMask(features);
475
448
  var compatible = isMaskCompatible(mask);
476
449
  return compatible;
477
450
  }
@@ -532,11 +505,10 @@
532
505
  var description = DESCRIPTION_MAP[name];
533
506
  return description;
534
507
  }
535
- function featureArrayLikeToMask(features) {
508
+ function featureArrayToMask(features) {
536
509
  var mask = MASK_EMPTY;
537
- var length = features.length;
538
- for (var index = 0; index < length; ++index) {
539
- var feature = features[index];
510
+ for (var _i = 0, features_3 = features; _i < features_3.length; _i++) {
511
+ var feature = features_3[_i];
540
512
  var otherMask = maskFromStringOrFeature(feature);
541
513
  mask = maskUnion(mask, otherMask);
542
514
  }
@@ -549,18 +521,15 @@
549
521
  }
550
522
  /**
551
523
  * Node.js custom inspection function.
552
- * Set on `Feature.prototype` with name `"inspect"` for Node.js ≤ 8.6.x and with symbol
553
- * `Symbol.for("nodejs.util.inspect.custom")` for Node.js ≥ 6.6.x.
554
524
  *
555
525
  * @see
556
526
  * {@link https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects} for
557
527
  * further information.
558
528
  */
559
- // opts can be undefined in Node.js 0.10.0.
560
529
  function inspect(depth, opts) {
561
530
  var _a, _b, _c;
562
- var breakLength = (_a = opts === null || opts === void 0 ? void 0 : opts.breakLength) !== null && _a !== void 0 ? _a : 80;
563
- var compact = (_b = opts === null || opts === void 0 ? void 0 : opts.compact) !== null && _b !== void 0 ? _b : true;
531
+ var breakLength = (_a = opts.breakLength) !== null && _a !== void 0 ? _a : 80;
532
+ var compact = (_b = opts.compact) !== null && _b !== void 0 ? _b : true;
564
533
  var name = (_c = this.name) !== null && _c !== void 0 ? _c : joinParts(compact, '<', '', this.canonicalNames, ',', '>', breakLength - 3);
565
534
  var parts = [name];
566
535
  if (this.elementary)
@@ -597,7 +566,7 @@
597
566
  function validMaskFromArrayOrStringOrFeature(feature) {
598
567
  var mask;
599
568
  if (_Array_isArray(feature)) {
600
- mask = featureArrayLikeToMask(feature);
569
+ mask = featureArrayToMask(feature);
601
570
  if (feature.length > 1)
602
571
  validateMask(mask);
603
572
  }
@@ -666,8 +635,6 @@
666
635
  return str;
667
636
  },
668
637
  };
669
- if (utilInspect)
670
- protoSource.inspect = inspect;
671
638
  assignNoEnum(FEATURE_PROTOTYPE, protoSource);
672
639
  }
673
640
  (function () {
@@ -838,10 +805,7 @@
838
805
  assignNoEnum(Feature, constructorSource);
839
806
  }
840
807
  if (utilInspect) {
841
- var inspectKey = utilInspect.custom;
842
- if (inspectKey) {
843
- _Object_defineProperty(FEATURE_PROTOTYPE, inspectKey, { configurable: true, value: inspect, writable: true });
844
- }
808
+ _Object_defineProperty(FEATURE_PROTOTYPE, utilInspect.custom, { configurable: true, value: inspect, writable: true });
845
809
  }
846
810
  var featureNames = _Object_keys(featureInfos);
847
811
  var includeSetMap = createMap();
@@ -949,16 +913,7 @@
949
913
  {
950
914
  function check()
951
915
  {
952
- // self + '' throws an error inside a web worker in Safari 8 and 9.
953
- try
954
- {
955
- var str = self + '';
956
- }
957
- catch (error)
958
- {
959
- return false;
960
- }
961
- var available = regExp.test(str);
916
+ var available = typeof self !== 'undefined' && regExp.test(self + '');
962
917
  return available;
963
918
  }
964
919
 
@@ -997,55 +952,19 @@
997
952
 
998
953
  var featureInfos =
999
954
  {
1000
- ANY_DOCUMENT:
1001
- {
1002
- description:
1003
- 'Existence of the global object document whose string representation starts with ' +
1004
- '"[object " and ends with "Document]".',
1005
- check:
1006
- function ()
1007
- {
1008
- var available =
1009
- typeof document === 'object' && /^\[object [\S\s]*Document]$/.test(document + '');
1010
- return available;
1011
- },
1012
- attributes: { 'web-worker': 'web-worker-restriction' },
1013
- },
1014
- ANY_WINDOW:
1015
- {
1016
- description:
1017
- 'Existence of the global object self whose string representation starts with "[object " ' +
1018
- 'and ends with "Window]".',
1019
- check: makeSelfFeatureCheck(/^\[object [\S\s]*Window]$/),
1020
- includes: ['SELF_OBJ'],
1021
- attributes: { 'web-worker': 'web-worker-restriction' },
1022
- },
1023
955
  ARRAY_ITERATOR:
1024
956
  {
1025
957
  description:
1026
- 'The property that the string representation of Array.prototype.entries() starts with ' +
1027
- '"[object Array" and ends with "]" at index 21 or 22.',
1028
- check:
1029
- function ()
1030
- {
1031
- var available =
1032
- Array.prototype.entries && /^\[object Array[\S\s]{8,9}]$/.test([].entries());
1033
- return available;
1034
- },
1035
- },
1036
- ASYNC_FUNCTION:
1037
- {
1038
- description: 'Support for async functions, which return Promise object.',
958
+ 'The property that the string representation of Array.prototype.entries() evaluates to ' +
959
+ '"[object Array Iterator]".',
1039
960
  check:
1040
961
  function ()
1041
962
  {
1042
- try
963
+ if (Array.prototype.entries)
1043
964
  {
1044
- Function('return async function(){}');
1045
- return true;
965
+ var available = [].entries() + '' === '[object Array Iterator]';
966
+ return available;
1046
967
  }
1047
- catch (error)
1048
- { }
1049
968
  },
1050
969
  },
1051
970
  ARROW:
@@ -1065,24 +984,14 @@
1065
984
  },
1066
985
  AT:
1067
986
  {
1068
- description: 'Existence of the native function Array.prototype.at.',
1069
- check:
1070
- function ()
1071
- {
1072
- var available = Array.prototype.at;
1073
- return available;
1074
- },
1075
- },
1076
- ATOB:
1077
- {
1078
- description: 'Existence of the global functions atob and btoa.',
987
+ description:
988
+ 'Existence of the native functions Array.prototype.at and String.prototype.at.',
1079
989
  check:
1080
990
  function ()
1081
991
  {
1082
- var available = typeof atob === 'function' && typeof btoa === 'function';
992
+ var available = Array.prototype.at && String.prototype.at;
1083
993
  return available;
1084
994
  },
1085
- attributes: { 'web-worker': 'old-safari-restriction' },
1086
995
  },
1087
996
  BARPROP:
1088
997
  {
@@ -1097,23 +1006,6 @@
1097
1006
  },
1098
1007
  attributes: { 'web-worker': 'web-worker-restriction' },
1099
1008
  },
1100
- CALL_ON_GLOBAL:
1101
- {
1102
- description:
1103
- 'The ability to call a function on the global object when invoking ' +
1104
- 'Function.prototype.call without binding.',
1105
- check:
1106
- function ()
1107
- {
1108
- try
1109
- {
1110
- if ([].concat.call()[0])
1111
- return true;
1112
- }
1113
- catch (error)
1114
- { }
1115
- },
1116
- },
1117
1009
  CAPITAL_HTML:
1118
1010
  {
1119
1011
  description:
@@ -1147,51 +1039,21 @@
1147
1039
  var available = typeof console === 'object' && console + '' === '[object Console]';
1148
1040
  return available;
1149
1041
  },
1150
- attributes: { 'web-worker': 'no-console-in-web-worker' },
1151
- },
1152
- CREATE_ELEMENT:
1153
- {
1154
- description: 'Existence of the function document.createElement.',
1155
- aliasFor: 'ANY_DOCUMENT',
1156
1042
  },
1157
1043
  DOCUMENT:
1158
1044
  {
1159
1045
  description:
1160
- 'Existence of the global object document having the string representation "[object ' +
1161
- 'Document]".',
1046
+ 'Existence of the global object document whose string representation starts with ' +
1047
+ '"[object " and ends with "Document]".',
1162
1048
  check:
1163
1049
  function ()
1164
1050
  {
1165
- var available = typeof document === 'object' && document + '' === '[object Document]';
1051
+ var available =
1052
+ typeof document === 'object' && /^\[object [\S\s]*Document]$/.test(document + '');
1166
1053
  return available;
1167
1054
  },
1168
- includes: ['ANY_DOCUMENT'],
1169
- attributes: { 'web-worker': 'web-worker-restriction' },
1170
- },
1171
- DOMWINDOW:
1172
- {
1173
- description:
1174
- 'Existence of the global object self having the string representation "[object ' +
1175
- 'DOMWindow]".',
1176
- check: makeSelfFeatureCheck(/^\[object DOMWindow]$/),
1177
- includes: ['ANY_WINDOW'],
1178
- excludes: ['OBJECT_W_SELF'],
1179
1055
  attributes: { 'web-worker': 'web-worker-restriction' },
1180
1056
  },
1181
- ESC_HTML_ALL:
1182
- {
1183
- description:
1184
- 'The property that double quotation mark, less than and greater than characters in the ' +
1185
- 'argument of String.prototype.fontcolor are escaped into their respective HTML entities.',
1186
- check:
1187
- function ()
1188
- {
1189
- var available = ~''.fontcolor('"<>').indexOf('&quot;&lt;&gt;');
1190
- return available;
1191
- },
1192
- includes: ['ESC_HTML_QUOT'],
1193
- excludes: ['ESC_HTML_QUOT_ONLY'],
1194
- },
1195
1057
  ESC_HTML_QUOT:
1196
1058
  {
1197
1059
  description:
@@ -1204,45 +1066,6 @@
1204
1066
  return available;
1205
1067
  },
1206
1068
  },
1207
- ESC_HTML_QUOT_ONLY:
1208
- {
1209
- description:
1210
- 'The property that only double quotation marks and no other characters in the argument ' +
1211
- 'of String.prototype.fontcolor are escaped into HTML entities.',
1212
- check:
1213
- function ()
1214
- {
1215
- var available = ~''.fontcolor('"<>').indexOf('&quot;<>');
1216
- return available;
1217
- },
1218
- includes: ['ESC_HTML_QUOT'],
1219
- excludes: ['ESC_HTML_ALL'],
1220
- },
1221
- ESC_REGEXP_LF:
1222
- {
1223
- description:
1224
- 'Having regular expressions created with the RegExp constructor use escape sequences ' +
1225
- 'starting with a backslash to format line feed characters ("\\n") in their string ' +
1226
- 'representation.',
1227
- check:
1228
- function ()
1229
- {
1230
- var available = (RegExp('\n') + '')[1] === '\\';
1231
- return available;
1232
- },
1233
- },
1234
- ESC_REGEXP_SLASH:
1235
- {
1236
- description:
1237
- 'Having regular expressions created with the RegExp constructor use escape sequences ' +
1238
- 'starting with a backslash to format slashes ("/") in their string representation.',
1239
- check:
1240
- function ()
1241
- {
1242
- var available = (RegExp('/') + '')[1] === '\\';
1243
- return available;
1244
- },
1245
- },
1246
1069
  FF_SRC:
1247
1070
  {
1248
1071
  description:
@@ -1253,16 +1076,6 @@
1253
1076
  includes: ['NO_IE_SRC', 'NO_V8_SRC'],
1254
1077
  excludes: ['NO_FF_SRC'],
1255
1078
  },
1256
- FILL:
1257
- {
1258
- description: 'Existence of the native function Array.prototype.fill.',
1259
- check:
1260
- function ()
1261
- {
1262
- var available = Array.prototype.fill;
1263
- return available;
1264
- },
1265
- },
1266
1079
  FLAT:
1267
1080
  {
1268
1081
  description: 'Existence of the native function Array.prototype.flat.',
@@ -1273,13 +1086,6 @@
1273
1086
  return available;
1274
1087
  },
1275
1088
  },
1276
- FORMS:
1277
- {
1278
- description:
1279
- 'Existence of the object document.forms with string representation "[object ' +
1280
- 'HTMLCollection]".',
1281
- aliasFor: 'ANY_DOCUMENT',
1282
- },
1283
1089
  FROM_CODE_POINT:
1284
1090
  {
1285
1091
  description: 'Existence of the function String.fromCodePoint.',
@@ -1314,78 +1120,6 @@
1314
1120
  return available;
1315
1121
  },
1316
1122
  },
1317
- GENERIC_ARRAY_TO_STRING:
1318
- {
1319
- description: 'Ability to call Array.prototype.toString with a non-array binding.',
1320
- check:
1321
- function ()
1322
- {
1323
- try
1324
- {
1325
- Array.prototype.toString.call({ });
1326
- return true;
1327
- }
1328
- catch (error)
1329
- { }
1330
- },
1331
- },
1332
- GLOBAL_UNDEFINED:
1333
- {
1334
- description:
1335
- 'Having the global function toString return the string "[object Undefined]" when invoked ' +
1336
- 'without a binding.',
1337
- check:
1338
- function ()
1339
- {
1340
- var getToString = Function('return toString');
1341
- var available = getToString()() === '[object Undefined]';
1342
- return available;
1343
- },
1344
- includes: ['OBJECT_UNDEFINED'],
1345
- },
1346
- GMT:
1347
- {
1348
- description:
1349
- 'Presence of the text "GMT" after the first 25 characters in the string returned by ' +
1350
- 'Date().\n' +
1351
- 'The string representation of dates is implementation dependent, but most engines use a ' +
1352
- 'similar format, making this feature available in all supported engines except Internet ' +
1353
- 'Explorer 9 and 10.',
1354
- check:
1355
- function ()
1356
- {
1357
- var available = /^.{25}GMT/.test(Date());
1358
- return available;
1359
- },
1360
- },
1361
- HISTORY:
1362
- {
1363
- description:
1364
- 'Existence of the global object history having the string representation "[object ' +
1365
- 'History]".',
1366
- check:
1367
- function ()
1368
- {
1369
- var available = typeof history === 'object' && history + '' === '[object History]';
1370
- return available;
1371
- },
1372
- attributes: { 'web-worker': 'web-worker-restriction' },
1373
- },
1374
- HTMLAUDIOELEMENT:
1375
- {
1376
- description:
1377
- 'Existence of the global object Audio whose string representation starts with ' +
1378
- '"function HTMLAudioElement".',
1379
- check:
1380
- function ()
1381
- {
1382
- var available =
1383
- typeof Audio !== 'undefined' && /^function HTMLAudioElement/.test(Audio);
1384
- return available;
1385
- },
1386
- includes: ['NO_IE_SRC'],
1387
- attributes: { 'web-worker': 'web-worker-restriction' },
1388
- },
1389
1123
  IE_SRC:
1390
1124
  {
1391
1125
  description:
@@ -1409,16 +1143,6 @@
1409
1143
  },
1410
1144
  attributes: { 'forced-strict-mode': 'char-increment-restriction' },
1411
1145
  },
1412
- INTL:
1413
- {
1414
- description: 'Existence of the global object Intl.',
1415
- check:
1416
- function ()
1417
- {
1418
- var available = typeof Intl === 'object';
1419
- return available;
1420
- },
1421
- },
1422
1146
  ITERATOR_HELPER:
1423
1147
  {
1424
1148
  description: 'Availability of iterator helpers.',
@@ -1429,16 +1153,6 @@
1429
1153
  return available;
1430
1154
  },
1431
1155
  },
1432
- JAPANESE_INFINITY:
1433
- {
1434
- description: 'Japanese string representation of Infinity ending with "∞".',
1435
- check:
1436
- function ()
1437
- {
1438
- var available = /∞$/.test(Infinity.toLocaleString('ja'));
1439
- return available;
1440
- },
1441
- },
1442
1156
  LOCALE_INFINITY:
1443
1157
  {
1444
1158
  description: 'Language sensitive string representation of Infinity as "∞".',
@@ -1449,23 +1163,6 @@
1449
1163
  return available;
1450
1164
  },
1451
1165
  },
1452
- LOCALE_NUMERALS:
1453
- {
1454
- description:
1455
- 'Features shared by all engines capable of localized number formatting, including output ' +
1456
- 'of Arabic digits, the Arabic decimal separator "٫", the letters in the first word of ' +
1457
- 'the Arabic string representation of NaN ("ليس"), Persian digits and the Persian digit ' +
1458
- 'group separator "٬".',
1459
- check:
1460
- function ()
1461
- {
1462
- var available =
1463
- checkLocaleNumeral('ar', NaN, /^ليس/) &&
1464
- checkLocaleNumeral('ar-td', 234567890.1, /^٢٣٤٬?٥٦٧٬?٨٩٠٫١/) &&
1465
- checkLocaleNumeral('fa', 1234567890, /^۱٬۲۳۴٬۵۶۷٬۸۹۰/);
1466
- return available;
1467
- },
1468
- },
1469
1166
  LOCALE_NUMERALS_BN:
1470
1167
  {
1471
1168
  description: 'Localized number formatting for Bengali.',
@@ -1480,51 +1177,19 @@
1480
1177
  {
1481
1178
  description:
1482
1179
  'Extended localized number formatting.\n' +
1483
- 'This includes all features of LOCALE_NUMERALS plus the output of the first three ' +
1484
- 'letters in the second word of the Arabic string representation of NaN ("رقم"), the ' +
1485
- 'letters in the Russian string representation of NaN ("не\xa0число") and the letters in ' +
1486
- 'the Persian string representation of NaN ("ناعدد").',
1180
+ 'Localized number formatting including the output of the first three letters in the ' +
1181
+ 'second word of the Arabic string representation of NaN ("رقم"), the letters in the ' +
1182
+ 'Russian string representation of NaN ("не\xa0число") and the letters in the Persian ' +
1183
+ 'string representation of NaN ("ناعدد").',
1487
1184
  check:
1488
1185
  function ()
1489
1186
  {
1490
1187
  var available =
1491
1188
  checkLocaleNumeral('ar', NaN, /^ليس.رقم/) &&
1492
- checkLocaleNumeral('ar-td', 234567890.1, /^٢٣٤٬?٥٦٧٬?٨٩٠٫١/) &&
1493
- checkLocaleNumeral('fa', 1234567890, /^۱٬۲۳۴٬۵۶۷٬۸۹۰/) &&
1494
1189
  checkLocaleNumeral('fa', NaN, /^ناعد/) &&
1495
1190
  checkLocaleNumeral('ru', NaN, /^не.число/);
1496
1191
  return available;
1497
1192
  },
1498
- includes: ['LOCALE_NUMERALS'],
1499
- attributes: { 'web-worker': 'locale-numerals-ext-restriction' },
1500
- },
1501
-
1502
- LOCATION:
1503
- {
1504
- description:
1505
- 'Existence of the global object location with the property that ' +
1506
- 'Object.prototype.toString.call(location) evaluates to a string that starts with ' +
1507
- '"[object " and ends with "Location]".',
1508
- check:
1509
- function ()
1510
- {
1511
- var available =
1512
- typeof location === 'object' &&
1513
- /^\[object [\S\s]*Location]$/.test(Object.prototype.toString.call(location));
1514
- return available;
1515
- },
1516
- },
1517
- MOZILLA:
1518
- {
1519
- description:
1520
- 'Existence of user agent string navigator.userAgent that starts with "Mozilla".',
1521
- check:
1522
- function ()
1523
- {
1524
- var available =
1525
- typeof navigator === 'object' && /^Mozilla/.test(navigator.userAgent);
1526
- return available;
1527
- },
1528
1193
  },
1529
1194
  NAME:
1530
1195
  {
@@ -1536,25 +1201,6 @@
1536
1201
  return available;
1537
1202
  },
1538
1203
  },
1539
- NODECONSTRUCTOR:
1540
- {
1541
- description:
1542
- 'Existence of the global object Node having the string representation "[object ' +
1543
- 'NodeConstructor]".',
1544
- check:
1545
- function ()
1546
- {
1547
- var available = typeof Node !== 'undefined' && Node + '' === '[object NodeConstructor]';
1548
- return available;
1549
- },
1550
- attributes: { 'web-worker': 'web-worker-restriction' },
1551
- },
1552
- NODE_NAME:
1553
- {
1554
- description:
1555
- 'Existence of the string document.nodeName that starts with a number sign ("#").',
1556
- aliasFor: 'ANY_DOCUMENT',
1557
- },
1558
1204
  NO_FF_SRC:
1559
1205
  {
1560
1206
  description:
@@ -1583,22 +1229,6 @@
1583
1229
  },
1584
1230
  excludes: ['IE_SRC'],
1585
1231
  },
1586
- NO_OLD_SAFARI_ARRAY_ITERATOR:
1587
- {
1588
- description:
1589
- 'The property that the string representation of Array.prototype.entries() evaluates to ' +
1590
- '"[object Array Iterator]".',
1591
- check:
1592
- function ()
1593
- {
1594
- if (Array.prototype.entries)
1595
- {
1596
- var available = [].entries() + '' === '[object Array Iterator]';
1597
- return available;
1598
- }
1599
- },
1600
- includes: ['ARRAY_ITERATOR'],
1601
- },
1602
1232
  NO_V8_SRC:
1603
1233
  {
1604
1234
  description:
@@ -1625,58 +1255,15 @@
1625
1255
  return available;
1626
1256
  },
1627
1257
  },
1628
- OBJECT_L_LOCATION_CTOR:
1629
- {
1630
- description:
1631
- 'Existence of the global function location.constructor whose string representation ' +
1632
- 'starts with "[object L".',
1633
- check:
1634
- function ()
1635
- {
1636
- var available =
1637
- typeof location === 'object' && /^\[object L/.test(location.constructor);
1638
- return available;
1639
- },
1640
- attributes: { 'web-worker': 'web-worker-restriction' },
1641
- },
1642
- OBJECT_UNDEFINED:
1643
- {
1644
- description:
1645
- 'Having the function Object.prototype.toString return the string "[object Undefined]" ' +
1646
- 'when invoked without a binding.',
1647
- check:
1648
- function ()
1649
- {
1650
- var toString = Object.prototype.toString;
1651
- var available = toString() === '[object Undefined]';
1652
- return available;
1653
- },
1654
- includes: ['UNDEFINED'],
1655
- },
1656
1258
  OBJECT_W_SELF:
1657
1259
  {
1658
1260
  description:
1659
1261
  'The property that the string representation of the global object self starts ' +
1660
1262
  'with "[object W".',
1661
1263
  check: makeSelfFeatureCheck(/^\[object W/),
1662
- includes: ['SELF_OBJ'],
1663
- excludes: ['DOMWINDOW'],
1264
+ includes: ['SELF'],
1664
1265
  attributes: { 'web-worker': 'non-ie-restriction' },
1665
1266
  },
1666
- OLD_SAFARI_LOCATION_CTOR:
1667
- {
1668
- description:
1669
- 'Existence of the global object location.constructor whose string representation starts ' +
1670
- 'with "[object " and ends with "LocationConstructor]".',
1671
- check:
1672
- function ()
1673
- {
1674
- var available =
1675
- typeof location === 'object' &&
1676
- /^\[object [\S\s]*LocationConstructor]$/.test(location.constructor);
1677
- return available;
1678
- },
1679
- },
1680
1267
  PLAIN_INTL:
1681
1268
  {
1682
1269
  description:
@@ -1687,7 +1274,6 @@
1687
1274
  var available = typeof Intl === 'object' && Intl + '' === '[object Object]';
1688
1275
  return available;
1689
1276
  },
1690
- includes: ['INTL'],
1691
1277
  },
1692
1278
  REGEXP_STRING_ITERATOR:
1693
1279
  {
@@ -1702,14 +1288,21 @@
1702
1288
  return available;
1703
1289
  },
1704
1290
  },
1291
+ RUSSIAN_INFINITY:
1292
+ {
1293
+ description: 'Russian string representation of Infinity as "∞".',
1294
+ check:
1295
+ function ()
1296
+ {
1297
+ var available = Infinity.toLocaleString('ru') === '∞';
1298
+ return available;
1299
+ },
1300
+ },
1705
1301
  SELF:
1706
- { aliasFor: 'ANY_WINDOW' },
1707
- SELF_OBJ:
1708
1302
  {
1709
1303
  description:
1710
1304
  'Existence of the global object self whose string representation starts with "[object ".',
1711
- check: makeSelfFeatureCheck(/^\[object /),
1712
- attributes: { 'web-worker': 'safari-bug-21820506' },
1305
+ check: makeSelfFeatureCheck(/^\[object /),
1713
1306
  },
1714
1307
  SHORT_LOCALES:
1715
1308
  {
@@ -1726,7 +1319,6 @@
1726
1319
  localizedNumeral !== NUMBER.toLocaleString('en');
1727
1320
  return available;
1728
1321
  },
1729
- includes: ['LOCALE_NUMERALS'],
1730
1322
  },
1731
1323
  STATUS:
1732
1324
  {
@@ -1739,19 +1331,6 @@
1739
1331
  },
1740
1332
  attributes: { 'web-worker': 'web-worker-restriction' },
1741
1333
  },
1742
- UNDEFINED:
1743
- {
1744
- description:
1745
- 'The property that Object.prototype.toString.call() evaluates to "[object Undefined]".\n' +
1746
- 'This behavior is specified by ECMAScript, and is enforced by all engines except Android ' +
1747
- 'Browser versions prior to 4.1.2, where this feature is not available.',
1748
- check:
1749
- function ()
1750
- {
1751
- var available = Object.prototype.toString.call() === '[object Undefined]';
1752
- return available;
1753
- },
1754
- },
1755
1334
  V8_SRC:
1756
1335
  {
1757
1336
  description:
@@ -1767,7 +1346,7 @@
1767
1346
  description:
1768
1347
  'Existence of the global object self having the string representation "[object Window]".',
1769
1348
  check: makeSelfFeatureCheck(/^\[object Window]$/),
1770
- includes: ['ANY_WINDOW', 'OBJECT_W_SELF'],
1349
+ includes: ['OBJECT_W_SELF'],
1771
1350
  attributes: { 'web-worker': 'web-worker-restriction' },
1772
1351
  },
1773
1352
 
@@ -1781,11 +1360,11 @@
1781
1360
  description:
1782
1361
  'Features available in all browsers.\n' +
1783
1362
  'No support for Node.js.',
1784
- includes: ['ANY_DOCUMENT', 'ANY_WINDOW', 'HISTORY', 'INCR_CHAR', 'MOZILLA', 'STATUS'],
1363
+ includes: ['DOCUMENT', 'INCR_CHAR', 'STATUS', 'WINDOW'],
1785
1364
  attributes:
1786
1365
  {
1787
1366
  'char-increment-restriction': null,
1788
- 'safari-bug-21820506': null,
1367
+ 'non-ie-restriction': null,
1789
1368
  'web-worker-restriction': null,
1790
1369
  },
1791
1370
  },
@@ -1793,101 +1372,34 @@
1793
1372
  {
1794
1373
  description:
1795
1374
  'All new browsers\' features.\n' +
1796
- 'No support for Node.js and older browsers like Internet Explorer, Safari 17.3 or ' +
1797
- 'Android Browser.',
1375
+ 'Not compatible with Node.js, Internet Explorer, and old versions of supported browsers.',
1798
1376
  includes:
1799
1377
  [
1800
- 'ANY_DOCUMENT',
1378
+ 'ARRAY_ITERATOR',
1801
1379
  'ARROW',
1802
- 'ASYNC_FUNCTION',
1803
1380
  'AT',
1804
- 'ATOB',
1805
1381
  'BARPROP',
1806
- 'ESC_HTML_QUOT_ONLY',
1807
- 'ESC_REGEXP_LF',
1808
- 'ESC_REGEXP_SLASH',
1809
- 'FILL',
1382
+ 'DOCUMENT',
1383
+ 'ESC_HTML_QUOT',
1810
1384
  'FLAT',
1811
1385
  'FROM_CODE_POINT',
1812
1386
  'FUNCTION_19_LF',
1813
- 'GENERIC_ARRAY_TO_STRING',
1814
- 'GLOBAL_UNDEFINED',
1815
- 'GMT',
1816
- 'HISTORY',
1817
1387
  'INCR_CHAR',
1818
- 'INTL',
1819
1388
  'ITERATOR_HELPER',
1820
- 'JAPANESE_INFINITY',
1821
1389
  'LOCALE_INFINITY',
1822
1390
  'LOCALE_NUMERALS_EXT',
1823
- 'LOCATION',
1824
- 'MOZILLA',
1825
1391
  'NAME',
1826
1392
  'NO_IE_SRC',
1827
- 'NO_OLD_SAFARI_ARRAY_ITERATOR',
1828
1393
  'REGEXP_STRING_ITERATOR',
1394
+ 'RUSSIAN_INFINITY',
1829
1395
  'STATUS',
1830
1396
  'WINDOW',
1831
1397
  ],
1832
1398
  attributes:
1833
1399
  {
1834
- 'char-increment-restriction': null,
1835
- 'locale-numerals-ext-restriction': null,
1836
- 'non-ie-restriction': null,
1837
- 'web-worker-restriction': null,
1838
- },
1839
- },
1840
- ANDRO_4_0:
1841
- {
1842
- families: ['Android Browser'],
1843
- versions: ['4.0'],
1844
- includes:
1845
- [
1846
- 'ANY_DOCUMENT',
1847
- 'ATOB',
1848
- 'CALL_ON_GLOBAL',
1849
- 'CONSOLE',
1850
- 'DOMWINDOW',
1851
- 'ESC_HTML_ALL',
1852
- 'FUNCTION_22_LF',
1853
- 'GMT',
1854
- 'HISTORY',
1855
- 'INCR_CHAR',
1856
- 'LOCATION',
1857
- 'MOZILLA',
1858
- 'NAME',
1859
- 'STATUS',
1860
- 'V8_SRC',
1861
- ],
1862
- },
1863
- ANDRO_4_1:
1864
- {
1865
- inherits: 'ANDRO_4_0',
1866
- versions: ['4.1-4.3'],
1867
- includes: { CALL_ON_GLOBAL: false, GENERIC_ARRAY_TO_STRING: true, OBJECT_UNDEFINED: true },
1868
- },
1869
- ANDRO_4_4:
1870
- {
1871
- inherits: 'ANDRO_4_1',
1872
- versions: ['4.4'],
1873
- includes:
1874
- {
1875
- BARPROP: true,
1876
- DOMWINDOW: false,
1877
- HTMLAUDIOELEMENT: true,
1878
- JAPANESE_INFINITY: true,
1879
- LOCALE_INFINITY: true,
1880
- LOCALE_NUMERALS_BN: true,
1881
- LOCALE_NUMERALS_EXT: true,
1882
- PLAIN_INTL: true,
1883
- SHORT_LOCALES: true,
1884
- WINDOW: true,
1885
- },
1886
- attributes:
1887
- {
1888
- 'no-console-in-web-worker': null,
1889
- 'non-ie-restriction': null,
1890
- 'web-worker-restriction': null,
1400
+ 'char-increment-restriction': null,
1401
+ 'non-ie-restriction': null,
1402
+ 'web-worker-restriction': null,
1891
1403
  },
1892
1404
  },
1893
1405
  CHROME_PREV:
@@ -1906,35 +1418,23 @@
1906
1418
  versions: ['122-', '122-', '108-'],
1907
1419
  includes:
1908
1420
  [
1909
- 'ANY_DOCUMENT',
1421
+ 'ARRAY_ITERATOR',
1910
1422
  'ARROW',
1911
- 'ASYNC_FUNCTION',
1912
1423
  'AT',
1913
- 'ATOB',
1914
1424
  'BARPROP',
1915
- 'ESC_HTML_QUOT_ONLY',
1916
- 'ESC_REGEXP_LF',
1917
- 'ESC_REGEXP_SLASH',
1918
- 'FILL',
1425
+ 'DOCUMENT',
1426
+ 'ESC_HTML_QUOT',
1919
1427
  'FLAT',
1920
1428
  'FROM_CODE_POINT',
1921
1429
  'FUNCTION_19_LF',
1922
- 'GENERIC_ARRAY_TO_STRING',
1923
- 'GLOBAL_UNDEFINED',
1924
- 'GMT',
1925
- 'HISTORY',
1926
1430
  'INCR_CHAR',
1927
- 'INTL',
1928
1431
  'ITERATOR_HELPER',
1929
- 'JAPANESE_INFINITY',
1930
1432
  'LOCALE_INFINITY',
1931
1433
  'LOCALE_NUMERALS_BN',
1932
1434
  'LOCALE_NUMERALS_EXT',
1933
- 'LOCATION',
1934
- 'MOZILLA',
1935
1435
  'NAME',
1936
- 'NO_OLD_SAFARI_ARRAY_ITERATOR',
1937
1436
  'REGEXP_STRING_ITERATOR',
1437
+ 'RUSSIAN_INFINITY',
1938
1438
  'STATUS',
1939
1439
  'V8_SRC',
1940
1440
  'WINDOW',
@@ -1968,36 +1468,24 @@
1968
1468
  versions: ['90-130'],
1969
1469
  includes:
1970
1470
  [
1971
- 'ANY_DOCUMENT',
1471
+ 'ARRAY_ITERATOR',
1972
1472
  'ARROW',
1973
- 'ASYNC_FUNCTION',
1974
1473
  'AT',
1975
- 'ATOB',
1976
1474
  'BARPROP',
1977
- 'ESC_HTML_QUOT_ONLY',
1978
- 'ESC_REGEXP_LF',
1979
- 'ESC_REGEXP_SLASH',
1475
+ 'DOCUMENT',
1476
+ 'ESC_HTML_QUOT',
1980
1477
  'FF_SRC',
1981
- 'FILL',
1982
1478
  'FLAT',
1983
1479
  'FROM_CODE_POINT',
1984
1480
  'FUNCTION_19_LF',
1985
- 'GENERIC_ARRAY_TO_STRING',
1986
- 'GLOBAL_UNDEFINED',
1987
- 'GMT',
1988
- 'HISTORY',
1989
1481
  'INCR_CHAR',
1990
- 'INTL',
1991
- 'JAPANESE_INFINITY',
1992
1482
  'LOCALE_INFINITY',
1993
1483
  'LOCALE_NUMERALS_BN',
1994
1484
  'LOCALE_NUMERALS_EXT',
1995
- 'LOCATION',
1996
- 'MOZILLA',
1997
1485
  'NAME',
1998
- 'NO_OLD_SAFARI_ARRAY_ITERATOR',
1999
1486
  'OBJECT_ARRAY_ENTRIES_CTOR',
2000
1487
  'REGEXP_STRING_ITERATOR',
1488
+ 'RUSSIAN_INFINITY',
2001
1489
  'SHORT_LOCALES',
2002
1490
  'STATUS',
2003
1491
  'WINDOW',
@@ -2022,158 +1510,76 @@
2022
1510
  versions: ['134-'],
2023
1511
  includes: { SHORT_LOCALES: false },
2024
1512
  },
2025
- IE_9:
1513
+ IE_11:
2026
1514
  {
2027
- families: ['Internet Explorer'],
2028
- versions: ['9'],
1515
+ families: ['Internet Explorer'],
1516
+ versions: ['11'],
2029
1517
  includes:
2030
1518
  [
2031
1519
  'CAPITAL_HTML',
1520
+ 'CONSOLE',
2032
1521
  'DOCUMENT',
2033
- 'ESC_REGEXP_LF',
2034
- 'ESC_REGEXP_SLASH',
2035
1522
  'FUNCTION_22_LF',
2036
- 'GENERIC_ARRAY_TO_STRING',
2037
- 'HISTORY',
2038
1523
  'IE_SRC',
2039
1524
  'INCR_CHAR',
2040
- 'MOZILLA',
2041
- 'OBJECT_L_LOCATION_CTOR',
1525
+ 'PLAIN_INTL',
1526
+ 'SHORT_LOCALES',
2042
1527
  'STATUS',
2043
- 'UNDEFINED',
2044
1528
  'WINDOW',
2045
1529
  ],
1530
+ attributes: { 'char-increment-restriction': null, 'web-worker-restriction': null },
2046
1531
  },
2047
- IE_10:
2048
- {
2049
- inherits: 'IE_9',
2050
- versions: ['10'],
2051
- includes: { ATOB: true, CONSOLE: true, OBJECT_UNDEFINED: true, UNDEFINED: false },
2052
- attributes: { 'char-increment-restriction': null, 'web-worker-restriction': null },
2053
- },
2054
- IE_11:
2055
- {
2056
- inherits: 'IE_10',
2057
- versions: ['11'],
2058
- includes:
2059
- {
2060
- ANY_DOCUMENT: true,
2061
- DOCUMENT: false,
2062
- GMT: true,
2063
- JAPANESE_INFINITY: true,
2064
- LOCALE_NUMERALS: true,
2065
- PLAIN_INTL: true,
2066
- SHORT_LOCALES: true,
2067
- },
2068
- },
2069
- IE_11_WIN_10:
2070
- {
2071
- inherits: 'IE_11',
2072
- versions: ['11'],
2073
- compatibilityTag: 'on Windows 10',
2074
- compatibilityShortTag: 'W10',
2075
- includes:
2076
- {
2077
- LOCALE_INFINITY: true,
2078
- LOCALE_NUMERALS: false,
2079
- LOCALE_NUMERALS_BN: true,
2080
- LOCALE_NUMERALS_EXT: true,
2081
- },
2082
- },
2083
- NODE_0_10:
2084
- {
2085
- families: ['Node.js'],
2086
- versions: ['0.10'],
2087
- includes:
2088
- [
2089
- 'ESC_HTML_ALL',
2090
- 'FUNCTION_22_LF',
2091
- 'GENERIC_ARRAY_TO_STRING',
2092
- 'GLOBAL_UNDEFINED',
2093
- 'GMT',
2094
- 'INCR_CHAR',
2095
- 'NAME',
2096
- 'V8_SRC',
2097
- ],
2098
- },
2099
- NODE_0_12:
2100
- {
2101
- inherits: 'NODE_0_10',
2102
- versions: ['0.12'],
2103
- includes:
2104
- {
2105
- ESC_HTML_ALL: false,
2106
- ESC_HTML_QUOT_ONLY: true,
2107
- JAPANESE_INFINITY: true,
2108
- LOCALE_INFINITY: true,
2109
- NO_OLD_SAFARI_ARRAY_ITERATOR: true,
2110
- OBJECT_ARRAY_ENTRIES_CTOR: true,
2111
- PLAIN_INTL: true,
2112
- },
2113
- },
2114
- NODE_4:
2115
- {
2116
- inherits: 'NODE_0_12',
2117
- versions: ['4'],
2118
- includes: { ARROW: true, ESC_REGEXP_SLASH: true, FILL: true, FROM_CODE_POINT: true },
2119
- },
2120
- NODE_5:
2121
- {
2122
- inherits: 'NODE_4',
2123
- versions: ['5-7.5'],
2124
- attributes: { 'char-increment-restriction': null },
2125
- },
2126
- NODE_7_6:
2127
- {
2128
- inherits: 'NODE_5',
2129
- versions: ['7.6-9'],
2130
- includes: { ASYNC_FUNCTION: true },
2131
- },
2132
- NODE_10:
2133
- {
2134
- inherits: 'NODE_7_6',
2135
- versions: ['10'],
2136
- includes: { FUNCTION_19_LF: true, FUNCTION_22_LF: false },
2137
- },
2138
- NODE_11:
2139
- {
2140
- inherits: 'NODE_10',
2141
- versions: ['11'],
2142
- includes: { FLAT: true },
2143
- },
2144
- NODE_12:
2145
- {
2146
- inherits: 'NODE_11',
2147
- versions: ['12'],
2148
- includes: { ESC_REGEXP_LF: true, REGEXP_STRING_ITERATOR: true },
2149
- },
2150
- NODE_13:
2151
- {
2152
- inherits: 'NODE_12',
2153
- versions: ['13|14'],
2154
- includes: { LOCALE_NUMERALS_BN: true, LOCALE_NUMERALS_EXT: true, SHORT_LOCALES: true },
2155
- },
2156
- NODE_15:
1532
+ IE_11_WIN_8:
2157
1533
  {
2158
- inherits: 'NODE_13',
2159
- versions: ['15'],
2160
- includes: { INTL: true, PLAIN_INTL: false },
1534
+ inherits: 'IE_11',
1535
+ versions: ['11'],
1536
+ compatibilityTag: 'on Windows 8',
1537
+ compatibilityShortTag: 'W8',
1538
+ includes: { RUSSIAN_INFINITY: true },
2161
1539
  },
2162
- NODE_16_0:
1540
+ IE_11_WIN_10:
2163
1541
  {
2164
- inherits: 'NODE_15',
2165
- versions: ['16.0-16.5'],
2166
- includes: { ATOB: true },
1542
+ inherits: 'IE_11',
1543
+ versions: ['11'],
1544
+ compatibilityTag: 'on Windows 10',
1545
+ compatibilityShortTag: 'W10',
1546
+ includes:
1547
+ {
1548
+ LOCALE_INFINITY: true,
1549
+ LOCALE_NUMERALS_BN: true,
1550
+ LOCALE_NUMERALS_EXT: true,
1551
+ RUSSIAN_INFINITY: true,
1552
+ },
2167
1553
  },
2168
- NODE_16_6:
1554
+ NODE_20:
2169
1555
  {
2170
- inherits: 'NODE_16_0',
2171
- versions: ['16.6-21'],
2172
- includes: { AT: true },
1556
+ families: ['Node.js'],
1557
+ versions: ['20-21'],
1558
+ includes:
1559
+ [
1560
+ 'ARRAY_ITERATOR',
1561
+ 'ARROW',
1562
+ 'AT',
1563
+ 'ESC_HTML_QUOT',
1564
+ 'FLAT',
1565
+ 'FROM_CODE_POINT',
1566
+ 'FUNCTION_19_LF',
1567
+ 'INCR_CHAR',
1568
+ 'LOCALE_INFINITY',
1569
+ 'LOCALE_NUMERALS_BN',
1570
+ 'LOCALE_NUMERALS_EXT',
1571
+ 'NAME',
1572
+ 'OBJECT_ARRAY_ENTRIES_CTOR',
1573
+ 'REGEXP_STRING_ITERATOR',
1574
+ 'RUSSIAN_INFINITY',
1575
+ 'SHORT_LOCALES',
1576
+ 'V8_SRC',
1577
+ ],
1578
+ attributes: { 'char-increment-restriction': null },
2173
1579
  },
2174
1580
  NODE_22:
2175
1581
  {
2176
- inherits: 'NODE_16_6',
1582
+ inherits: 'NODE_20',
2177
1583
  versions: ['22.0-22.11|23.0-23.2'],
2178
1584
  includes: { ITERATOR_HELPER: true, OBJECT_ARRAY_ENTRIES_CTOR: false },
2179
1585
  },
@@ -2183,123 +1589,46 @@
2183
1589
  versions: ['22.12-22.14|23.3-'],
2184
1590
  includes: { SHORT_LOCALES: false },
2185
1591
  },
2186
- SAFARI_7_0:
1592
+ SAFARI_PRE_PREV:
1593
+ {
1594
+ description: describeEngine('the previous to previous version of Safari'),
1595
+ aliasFor: 'SAFARI_17_4',
1596
+ },
1597
+ SAFARI_17_4:
2187
1598
  {
2188
1599
  families: ['Safari'],
2189
- versions: ['7.0'],
1600
+ versions: ['17.4-17.6'],
2190
1601
  includes:
2191
1602
  [
2192
- 'ANY_DOCUMENT',
2193
- 'ATOB',
1603
+ 'ARRAY_ITERATOR',
1604
+ 'ARROW',
1605
+ 'AT',
2194
1606
  'BARPROP',
2195
- 'CONSOLE',
2196
- 'ESC_HTML_QUOT_ONLY',
2197
- 'ESC_REGEXP_LF',
2198
- 'ESC_REGEXP_SLASH',
1607
+ 'DOCUMENT',
1608
+ 'ESC_HTML_QUOT',
2199
1609
  'FF_SRC',
2200
- 'GENERIC_ARRAY_TO_STRING',
2201
- 'GLOBAL_UNDEFINED',
2202
- 'GMT',
2203
- 'HISTORY',
1610
+ 'FLAT',
1611
+ 'FROM_CODE_POINT',
1612
+ 'FUNCTION_19_LF',
2204
1613
  'INCR_CHAR',
2205
- 'LOCATION',
2206
- 'MOZILLA',
1614
+ 'LOCALE_INFINITY',
1615
+ 'LOCALE_NUMERALS_BN',
1616
+ 'LOCALE_NUMERALS_EXT',
2207
1617
  'NAME',
2208
- 'NODECONSTRUCTOR',
2209
- 'OBJECT_L_LOCATION_CTOR',
2210
- 'OLD_SAFARI_LOCATION_CTOR',
1618
+ 'OBJECT_ARRAY_ENTRIES_CTOR',
1619
+ 'REGEXP_STRING_ITERATOR',
1620
+ 'RUSSIAN_INFINITY',
1621
+ 'SHORT_LOCALES',
2211
1622
  'STATUS',
2212
1623
  'WINDOW',
2213
1624
  ],
2214
1625
  attributes:
2215
1626
  {
2216
- 'char-increment-restriction': null,
2217
- 'no-console-in-web-worker': null,
2218
- 'non-ie-restriction': null,
2219
- 'old-safari-restriction': null,
2220
- 'web-worker-restriction': null,
2221
- },
2222
- },
2223
- SAFARI_7_1:
2224
- {
2225
- inherits: 'SAFARI_7_0',
2226
- versions: ['7.1|8'],
2227
- includes: { ARRAY_ITERATOR: true, FILL: true },
2228
- attributes: { 'no-console-in-web-worker': undefined, 'safari-bug-21820506': null },
2229
- },
2230
- SAFARI_9:
2231
- {
2232
- inherits: 'SAFARI_7_1',
2233
- versions: ['9'],
2234
- includes:
2235
- {
2236
- ARRAY_ITERATOR: false,
2237
- FROM_CODE_POINT: true,
2238
- FUNCTION_22_LF: true,
2239
- NO_OLD_SAFARI_ARRAY_ITERATOR: true,
2240
- OBJECT_ARRAY_ENTRIES_CTOR: true,
2241
- },
2242
- },
2243
- SAFARI_10_0:
2244
- {
2245
- inherits: 'SAFARI_9',
2246
- versions: ['10.0'],
2247
- includes:
2248
- {
2249
- ARROW: true,
2250
- JAPANESE_INFINITY: true,
2251
- LOCALE_INFINITY: true,
2252
- LOCALE_NUMERALS_BN: true,
2253
- LOCALE_NUMERALS_EXT: true,
2254
- NODECONSTRUCTOR: false,
2255
- OBJECT_L_LOCATION_CTOR: false,
2256
- OLD_SAFARI_LOCATION_CTOR: false,
2257
- PLAIN_INTL: true,
2258
- SHORT_LOCALES: true,
1627
+ 'char-increment-restriction': null,
1628
+ 'non-ie-restriction': null,
1629
+ 'unstable': null,
1630
+ 'web-worker-restriction': null,
2259
1631
  },
2260
- attributes: { 'old-safari-restriction': undefined, 'safari-bug-21820506': undefined },
2261
- },
2262
- SAFARI_10_1:
2263
- {
2264
- inherits: 'SAFARI_10_0',
2265
- versions: ['10.1|11'],
2266
- includes: { ASYNC_FUNCTION: true },
2267
- },
2268
- SAFARI_12:
2269
- {
2270
- inherits: 'SAFARI_10_1',
2271
- versions: ['12'],
2272
- includes: { FLAT: true },
2273
- },
2274
- SAFARI_13:
2275
- {
2276
- inherits: 'SAFARI_12',
2277
- versions: ['13|14.0.0'],
2278
- includes: { REGEXP_STRING_ITERATOR: true },
2279
- },
2280
- SAFARI_14_0_1:
2281
- {
2282
- inherits: 'SAFARI_13',
2283
- versions: ['14.0.1-14.0.3'],
2284
- includes: { INTL: true, PLAIN_INTL: false },
2285
- },
2286
- SAFARI_14_1:
2287
- {
2288
- inherits: 'SAFARI_14_0_1',
2289
- versions: ['14.1-15.3'],
2290
- includes: { CONSOLE: false },
2291
- },
2292
- SAFARI_15_4:
2293
- {
2294
- inherits: 'SAFARI_14_1',
2295
- versions: ['15.4-17.3'],
2296
- includes: { AT: true },
2297
- },
2298
- SAFARI_17_4:
2299
- {
2300
- inherits: 'SAFARI_15_4',
2301
- versions: ['17.4-17.6'],
2302
- includes: { FUNCTION_19_LF: true, FUNCTION_22_LF: false },
2303
1632
  },
2304
1633
  SAFARI_18_0:
2305
1634
  {
@@ -2307,6 +1636,11 @@
2307
1636
  versions: ['18.0-18.3'],
2308
1637
  includes: { SHORT_LOCALES: false },
2309
1638
  },
1639
+ SAFARI_PREV:
1640
+ {
1641
+ description: describeEngine('the previous to current version of Safari'),
1642
+ aliasFor: 'SAFARI_18_4',
1643
+ },
2310
1644
  SAFARI:
2311
1645
  {
2312
1646
  description: describeEngine('the current stable version of Safari'),
@@ -2318,7 +1652,6 @@
2318
1652
  versions: ['18.4-'],
2319
1653
  includes:
2320
1654
  { ITERATOR_HELPER: true, LOCALE_NUMERALS_BN: false, OBJECT_ARRAY_ENTRIES_CTOR: false },
2321
- attributes: { 'locale-numerals-ext-restriction': null },
2322
1655
  },
2323
1656
  };
2324
1657
  (function ()
@@ -2925,10 +2258,10 @@
2925
2258
 
2926
2259
  var SIMPLE = createEmpty();
2927
2260
 
2261
+ var FORMAT_MAPPER_LONG;
2262
+ var FORMAT_MAPPER_SHORT;
2928
2263
  var FROM_CHAR_CODE;
2929
2264
  var FROM_CHAR_CODE_CALLBACK_FORMATTER;
2930
- var MAPPER_FORMATTER;
2931
- var OPTIMAL_ARG_NAME;
2932
2265
  var OPTIMAL_B;
2933
2266
  var OPTIMAL_RETURN_STRING;
2934
2267
 
@@ -2950,19 +2283,6 @@
2950
2283
  var FB_R_PADDING_SHIFTS;
2951
2284
  var FH_R_PADDING_SHIFTS;
2952
2285
 
2953
- function backslashDefinition()
2954
- {
2955
- var replacement = this._replaceCharByUnescape(0x5C);
2956
- var solution = new SimpleSolution(undefined, replacement, SolutionType.STRING);
2957
- return solution;
2958
- }
2959
-
2960
- function chooseOtherArgName(argName)
2961
- {
2962
- var otherArgName = argName !== 'undefined' ? 'undefined' : 'falsefalse';
2963
- return otherArgName;
2964
- }
2965
-
2966
2286
  function createCharDefinitionInFn(expr, index, paddingEntries)
2967
2287
  {
2968
2288
  function charDefinitionInFn(char)
@@ -3244,98 +2564,49 @@
3244
2564
 
3245
2565
  (function ()
3246
2566
  {
3247
- var ANY_DOCUMENT = Feature.ANY_DOCUMENT;
3248
- var ANY_WINDOW = Feature.ANY_WINDOW;
3249
2567
  var ARRAY_ITERATOR = Feature.ARRAY_ITERATOR;
3250
2568
  var ARROW = Feature.ARROW;
3251
- var ASYNC_FUNCTION = Feature.ASYNC_FUNCTION;
3252
2569
  var AT = Feature.AT;
3253
- var ATOB = Feature.ATOB;
3254
2570
  var BARPROP = Feature.BARPROP;
3255
- var CALL_ON_GLOBAL = Feature.CALL_ON_GLOBAL;
3256
2571
  var CAPITAL_HTML = Feature.CAPITAL_HTML;
3257
2572
  var CONSOLE = Feature.CONSOLE;
3258
- var CREATE_ELEMENT = Feature.CREATE_ELEMENT;
3259
2573
  var DOCUMENT = Feature.DOCUMENT;
3260
- var DOMWINDOW = Feature.DOMWINDOW;
3261
- var ESC_HTML_ALL = Feature.ESC_HTML_ALL;
3262
2574
  var ESC_HTML_QUOT = Feature.ESC_HTML_QUOT;
3263
- var ESC_HTML_QUOT_ONLY = Feature.ESC_HTML_QUOT_ONLY;
3264
- var ESC_REGEXP_LF = Feature.ESC_REGEXP_LF;
3265
- var ESC_REGEXP_SLASH = Feature.ESC_REGEXP_SLASH;
3266
2575
  var FF_SRC = Feature.FF_SRC;
3267
- var FILL = Feature.FILL;
3268
2576
  var FLAT = Feature.FLAT;
3269
- var FORMS = Feature.FORMS;
3270
2577
  var FROM_CODE_POINT = Feature.FROM_CODE_POINT;
3271
2578
  var FUNCTION_19_LF = Feature.FUNCTION_19_LF;
3272
2579
  var FUNCTION_22_LF = Feature.FUNCTION_22_LF;
3273
- var GENERIC_ARRAY_TO_STRING = Feature.GENERIC_ARRAY_TO_STRING;
3274
- var GLOBAL_UNDEFINED = Feature.GLOBAL_UNDEFINED;
3275
- var GMT = Feature.GMT;
3276
- var HISTORY = Feature.HISTORY;
3277
- var HTMLAUDIOELEMENT = Feature.HTMLAUDIOELEMENT;
3278
2580
  var IE_SRC = Feature.IE_SRC;
3279
2581
  var INCR_CHAR = Feature.INCR_CHAR;
3280
- var INTL = Feature.INTL;
3281
2582
  var ITERATOR_HELPER = Feature.ITERATOR_HELPER;
3282
- var JAPANESE_INFINITY = Feature.JAPANESE_INFINITY;
3283
2583
  var LOCALE_INFINITY = Feature.LOCALE_INFINITY;
3284
- var LOCALE_NUMERALS = Feature.LOCALE_NUMERALS;
3285
2584
  var LOCALE_NUMERALS_BN = Feature.LOCALE_NUMERALS_BN;
3286
2585
  var LOCALE_NUMERALS_EXT = Feature.LOCALE_NUMERALS_EXT;
3287
- var LOCATION = Feature.LOCATION;
3288
- var MOZILLA = Feature.MOZILLA;
3289
2586
  var NAME = Feature.NAME;
3290
- var NODECONSTRUCTOR = Feature.NODECONSTRUCTOR;
3291
- var NODE_NAME = Feature.NODE_NAME;
3292
2587
  var NO_FF_SRC = Feature.NO_FF_SRC;
3293
2588
  var NO_IE_SRC = Feature.NO_IE_SRC;
3294
- var NO_OLD_SAFARI_ARRAY_ITERATOR = Feature.NO_OLD_SAFARI_ARRAY_ITERATOR;
3295
2589
  var NO_V8_SRC = Feature.NO_V8_SRC;
3296
2590
  var OBJECT_ARRAY_ENTRIES_CTOR = Feature.OBJECT_ARRAY_ENTRIES_CTOR;
3297
- var OBJECT_L_LOCATION_CTOR = Feature.OBJECT_L_LOCATION_CTOR;
3298
- var OBJECT_UNDEFINED = Feature.OBJECT_UNDEFINED;
3299
2591
  var OBJECT_W_SELF = Feature.OBJECT_W_SELF;
3300
- var OLD_SAFARI_LOCATION_CTOR = Feature.OLD_SAFARI_LOCATION_CTOR;
3301
2592
  var PLAIN_INTL = Feature.PLAIN_INTL;
3302
2593
  var REGEXP_STRING_ITERATOR = Feature.REGEXP_STRING_ITERATOR;
3303
- var SELF_OBJ = Feature.SELF_OBJ;
2594
+ var RUSSIAN_INFINITY = Feature.RUSSIAN_INFINITY;
2595
+ var SELF = Feature.SELF;
3304
2596
  var SHORT_LOCALES = Feature.SHORT_LOCALES;
3305
2597
  var STATUS = Feature.STATUS;
3306
- var UNDEFINED = Feature.UNDEFINED;
3307
2598
  var V8_SRC = Feature.V8_SRC;
3308
2599
  var WINDOW = Feature.WINDOW;
3309
2600
 
3310
- function createCharDefaultDefinition
3311
- (atobOpt, charCodeOpt, escSeqOpt, unescapeOpt)
2601
+ function charDefaultDefinition(char)
3312
2602
  {
3313
- function charDefaultDefinition(char)
3314
- {
3315
- var charCode = char.charCodeAt();
3316
- var solution =
3317
- this._createCharDefaultSolution
3318
- (char, charCode, atobOpt && charCode < 0x100, charCodeOpt, escSeqOpt, unescapeOpt);
3319
- return solution;
3320
- }
3321
-
3322
- return charDefaultDefinition;
2603
+ var solution = this._defaultResolveCharacter(char);
2604
+ return solution;
3323
2605
  }
3324
2606
 
3325
- function defineCharDefault(opts)
2607
+ function defineCharDefault()
3326
2608
  {
3327
- function checkOpt(optName)
3328
- {
3329
- var opt = !(opts && optName in opts) || opts[optName];
3330
- return opt;
3331
- }
3332
-
3333
- var atobOpt = checkOpt('atob');
3334
- var charCodeOpt = checkOpt('charCode');
3335
- var escSeqOpt = checkOpt('escSeq');
3336
- var unescapeOpt = checkOpt('unescape');
3337
- var definition = createCharDefaultDefinition(atobOpt, charCodeOpt, escSeqOpt, unescapeOpt);
3338
- var entry = define(definition);
2609
+ var entry = define(charDefaultDefinition);
3339
2610
  return entry;
3340
2611
  }
3341
2612
 
@@ -3428,7 +2699,7 @@
3428
2699
  else
3429
2700
  expr += '[' + index + ']';
3430
2701
  }
3431
- var entry = define._callWithFeatures(expr, LOCALE_NUMERALS, arguments, 3);
2702
+ var entry = define._callWithFeatures(expr, arguments, 3);
3432
2703
  return entry;
3433
2704
  }
3434
2705
 
@@ -3478,13 +2749,7 @@
3478
2749
 
3479
2750
  BASE64_ALPHABET_HI_4 =
3480
2751
  [
3481
- [
3482
- define('A'),
3483
- define('C', CAPITAL_HTML),
3484
- define('D', CALL_ON_GLOBAL, DOMWINDOW),
3485
- define('A', ARRAY_ITERATOR, CAPITAL_HTML),
3486
- define('A', ARRAY_ITERATOR, CALL_ON_GLOBAL, DOMWINDOW),
3487
- ],
2752
+ [define('A'), define('C', CAPITAL_HTML), define('A', ARRAY_ITERATOR)],
3488
2753
  [
3489
2754
  define('F'),
3490
2755
  define('H', ITERATOR_HELPER),
@@ -3494,18 +2759,7 @@
3494
2759
  'Infinity',
3495
2760
  'NaNfalse',
3496
2761
  [define('S'), define('R', CAPITAL_HTML), define('S', ARRAY_ITERATOR)],
3497
- [
3498
- define('W'),
3499
- define('U', CAPITAL_HTML),
3500
- define('W', ANY_WINDOW, CALL_ON_GLOBAL),
3501
- define('U', CAPITAL_HTML, IE_SRC),
3502
- define('W', CALL_ON_GLOBAL, CAPITAL_HTML, DOMWINDOW),
3503
- define('U', ANY_WINDOW, CALL_ON_GLOBAL, CAPITAL_HTML, NO_IE_SRC),
3504
- define('W', CALL_ON_GLOBAL, CAPITAL_HTML, OBJECT_W_SELF),
3505
- define('W', CALL_ON_GLOBAL, CAPITAL_HTML, DOMWINDOW, NO_IE_SRC),
3506
- define('U', ANY_WINDOW, ARRAY_ITERATOR, CALL_ON_GLOBAL, CAPITAL_HTML),
3507
- define('U', ARRAY_ITERATOR, CALL_ON_GLOBAL, CAPITAL_HTML, OBJECT_W_SELF),
3508
- ],
2762
+ [define('W'), define('U', CAPITAL_HTML)],
3509
2763
  'a',
3510
2764
  'false',
3511
2765
  'i',
@@ -3593,13 +2847,7 @@
3593
2847
  '0A',
3594
2848
  [define('0B'), define('0R', CAPITAL_HTML), define('0B', ARRAY_ITERATOR)],
3595
2849
  '0i',
3596
- [
3597
- define('0j'),
3598
- define('0T', CAPITAL_HTML),
3599
- define('0j', ARRAY_ITERATOR),
3600
- define('0D', CALL_ON_GLOBAL, DOMWINDOW),
3601
- define('0j', ARRAY_ITERATOR, CALL_ON_GLOBAL, DOMWINDOW),
3602
- ],
2850
+ [define('0j'), define('0T', CAPITAL_HTML), define('0j', ARRAY_ITERATOR)],
3603
2851
  '00',
3604
2852
  '01',
3605
2853
  '02',
@@ -3619,17 +2867,7 @@
3619
2867
  CHARACTERS =
3620
2868
  noProto
3621
2869
  ({
3622
- // '\0'…'\x07'
3623
- '\b':
3624
- [
3625
- define('Function("return\\"" + ESCAPING_BACKSLASH + "b\\"")()[0]'),
3626
- defineCharDefault({ escSeq: false }),
3627
- ],
3628
- '\t':
3629
- [
3630
- define('Function("return\\"" + ESCAPING_BACKSLASH + "true\\"")()[0]'),
3631
- defineCharDefault({ escSeq: false }),
3632
- ],
2870
+ // '\0'…'\x09'
3633
2871
  '\n':
3634
2872
  [
3635
2873
  define('(RP_0_S + Function())[23]'),
@@ -3638,25 +2876,10 @@
3638
2876
  define('(RP_0_S + ANY_FUNCTION)[0]', IE_SRC),
3639
2877
  defineCharInFnHead(13, NO_V8_SRC),
3640
2878
  ],
3641
- '\v':
3642
- [
3643
- define('Function("return\\"" + ESCAPING_BACKSLASH + "v\\"")()[0]'),
3644
- defineCharDefault({ escSeq: false }),
3645
- ],
3646
- '\f':
3647
- [
3648
- define('Function("return\\"" + ESCAPING_BACKSLASH + "false\\"")()[0]'),
3649
- defineCharDefault({ escSeq: false }),
3650
- ],
3651
- '\r':
3652
- [
3653
- define('Function("return\\"" + ESCAPING_BACKSLASH + "r\\"")()'),
3654
- defineCharDefault({ escSeq: false }),
3655
- ],
3656
- // '\x0e'…'\x1d'
2879
+ // '\x0b'…'\x1d'
3657
2880
  '\x1e':
3658
2881
  [
3659
- define('(RP_5_A + atob("NaNfalse"))[10]', ATOB),
2882
+ define('(RP_5_A + atob("NaNfalse"))[10]'),
3660
2883
  ],
3661
2884
  // '\x1f'
3662
2885
  ' ':
@@ -3669,9 +2892,6 @@
3669
2892
  define('(RP_1_WA + FILTER)[20]', V8_SRC),
3670
2893
  define('(RP_1_WA + AT)[20]', AT, NO_V8_SRC),
3671
2894
  define('(RP_5_A + AT)[20]', AT, V8_SRC),
3672
- define('(+(RP_0_S + FILL)[0] + FILL)[20]', FILL, NO_FF_SRC),
3673
- define('(RP_5_A + FILL)[20]', FILL, NO_IE_SRC),
3674
- define('(RP_0_S + FILL)[20]', FILL, NO_V8_SRC),
3675
2895
  define('(+(RP_0_S + FLAT)[0] + FLAT)[20]', FLAT, NO_FF_SRC),
3676
2896
  define('(RP_5_A + FLAT)[20]', FLAT, NO_IE_SRC),
3677
2897
  define('(RP_0_S + FLAT)[20]', FLAT, NO_V8_SRC),
@@ -3683,7 +2903,6 @@
3683
2903
  ],
3684
2904
  '#':
3685
2905
  [
3686
- define('document.nodeName[0]', NODE_NAME),
3687
2906
  defineCharDefault(),
3688
2907
  ],
3689
2908
  // '$'
@@ -3691,17 +2910,13 @@
3691
2910
  [
3692
2911
  define('escape(FILTER)[20]'),
3693
2912
  define('escape(0 + AT)[20]', AT),
3694
- define('atob("000l")[2]', ATOB),
3695
- define('escape(FILL)[21]', FILL),
3696
2913
  define('escape(FLAT)[21]', FLAT),
3697
2914
  define('escape(ANY_FUNCTION)[0]', IE_SRC),
2915
+ defineCharDefault(),
3698
2916
  ],
3699
2917
  '&':
3700
2918
  [
3701
- define('"".fontcolor("".italics())[22]', ESC_HTML_ALL),
3702
- define('"".fontcolor("".sub())[20]', ESC_HTML_ALL),
3703
- define('"".fontcolor("\\"")[13]', ESC_HTML_QUOT),
3704
- define('"".fontcolor("".fontcolor([]))[31]', ESC_HTML_QUOT_ONLY),
2919
+ define('"".fontcolor("".fontcolor([]))[31]', ESC_HTML_QUOT),
3705
2920
  defineCharDefault(),
3706
2921
  ],
3707
2922
  // '\''
@@ -3728,18 +2943,10 @@
3728
2943
  define('"true".sub()[10]'),
3729
2944
  ],
3730
2945
  // '0'…'9'
3731
- ':':
3732
- [
3733
- define('(RP_0_S + RegExp())[3]'),
3734
- defineCharDefault(),
3735
- ],
2946
+ // ':'
3736
2947
  ';':
3737
2948
  [
3738
- define('"".fontcolor("".italics())[21]', ESC_HTML_ALL),
3739
- define('"".fontcolor(true + "".sub())[20]', ESC_HTML_ALL),
3740
- define('"".fontcolor("NaN\\"")[21]', ESC_HTML_QUOT),
3741
- define('"".fontcolor("".fontcolor())[30]', ESC_HTML_QUOT_ONLY),
3742
- defineCharDefault(),
2949
+ define('"".fontcolor("".fontcolor())[30]', ESC_HTML_QUOT),
3743
2950
  ],
3744
2951
  '<':
3745
2952
  [
@@ -3774,47 +2981,28 @@
3774
2981
  'C':
3775
2982
  [
3776
2983
  define('escape("".italics())[2]'),
3777
- define('escape("".sub())[2]'),
3778
2984
  define('escape(F_A_L_S_E)[11]'),
3779
- define('atob("00NaNfalse")[1]', ATOB),
3780
2985
  define('(RP_4_A + "".fontcolor())[10]', CAPITAL_HTML),
3781
2986
  define('(RP_3_WA + Function("return console")())[11]', CONSOLE),
3782
- define('(RP_0_S + Node)[12]', NODECONSTRUCTOR),
2987
+ defineCharDefault(),
3783
2988
  ],
3784
2989
  'D':
3785
2990
  [
2991
+ define('btoa("00")[1]'),
3786
2992
  // * The escaped character may be either "]" or "}".
3787
2993
  define('escape((+("1000" + (RP_5_A + FILTER + 0)[40] + 0) + FILTER)[40])[2]'), // *
3788
2994
  define('escape("]")[2]'),
3789
2995
  define('escape("}")[2]'),
3790
- define('(document + RP_0_S)[SLICE_OR_SUBSTR]("-10")[1]', ANY_DOCUMENT),
3791
2996
  define('escape((RP_4_A + [+("1000" + (AT + 0)[31] + 0)] + AT)[40])[2]', AT), // *
3792
- define('btoa("00")[1]', ATOB),
3793
- define('(RP_3_WA + document)[11]', DOCUMENT),
3794
- define('(RP_3_WA + self)[11]', DOMWINDOW),
3795
- define // *
3796
- ('escape((NaN + [+("10" + [(RP_6_S + FILL)[40]] + "000")] + FILL)[40])[2]', FILL),
3797
2997
  define // *
3798
2998
  ('escape((NaN + [+("10" + [(RP_6_S + FLAT)[40]] + "000")] + FLAT)[40])[2]', FLAT),
3799
- define('escape(ARRAY_ITERATOR)[30]', NO_OLD_SAFARI_ARRAY_ITERATOR),
3800
2999
  define('escape(FILTER)[50]', V8_SRC),
3801
- define('(document + [RP_1_WA]).at("-10")', ANY_DOCUMENT, AT),
3802
- define('escape(AT)[61]', AT, IE_SRC),
3803
3000
  define('escape([[]][+(RP_0_S + AT)[0]] + AT)[61]', AT, NO_FF_SRC), // *
3804
- define('escape([NaN][+(RP_1_WA + AT)[20]] + AT)[61]', AT, NO_IE_SRC), // *
3805
- define('escape(true + AT)[50]', AT, V8_SRC),
3806
- define('(RP_3_WA + "".slice.call())[11]', CALL_ON_GLOBAL, DOMWINDOW),
3807
- define('"".sub.call()[13]', CALL_ON_GLOBAL, DOMWINDOW),
3808
- define('escape(FILL)[60]', FF_SRC, FILL),
3809
- define('escape(FLAT)[60]', FF_SRC, FLAT),
3810
3001
  ],
3811
3002
  'E':
3812
3003
  [
3813
- defineCharInFn('RegExp', 12),
3814
- define('btoa("0NaN")[1]', ATOB),
3004
+ define('btoa("0NaN")[1]'),
3815
3005
  define('(RP_5_A + "".link())[10]', CAPITAL_HTML),
3816
- define('(RP_3_WA + Audio)[21]', HTMLAUDIOELEMENT),
3817
- define('(RP_0_S + REGEXP_STRING_ITERATOR)[11]', REGEXP_STRING_ITERATOR),
3818
3006
  ],
3819
3007
  'F':
3820
3008
  [
@@ -3823,27 +3011,19 @@
3823
3011
  ],
3824
3012
  'G':
3825
3013
  [
3826
- define('btoa("0false")[1]', ATOB),
3014
+ define('btoa("0false")[1]'),
3827
3015
  define('"0".big()[10]', CAPITAL_HTML),
3828
- define('(RP_5_A + Date())[30]', GMT),
3829
3016
  ],
3830
3017
  'H':
3831
3018
  [
3832
- define('btoa(true)[1]', ATOB),
3019
+ define('btoa(true)[1]'),
3833
3020
  define('"".link()[3]', CAPITAL_HTML),
3834
- define('(RP_3_WA + document.forms)[11]', FORMS),
3835
- define
3836
- ({ expr: '(RP_3_WA + Function("return history")())[11]', optimize: true }, HISTORY),
3837
- define('(RP_1_WA + Audio)[10]', HTMLAUDIOELEMENT),
3838
3021
  define('(RP_4_A + [].entries().filter(ANY_FUNCTION))[21]', ITERATOR_HELPER),
3839
- define({ expr: '(RP_3_WA + self.history)[11]', optimize: true }, HISTORY, SELF_OBJ),
3840
3022
  ],
3841
3023
  'I': '"Infinity"[0]',
3842
3024
  'J':
3843
3025
  [
3844
- define('"j"[TO_UPPER_CASE]()'),
3845
- define('btoa(true)[2]', ATOB),
3846
- defineCharDefault({ atob: false }),
3026
+ define('btoa(true)[2]'),
3847
3027
  ],
3848
3028
  'K':
3849
3029
  [
@@ -3852,100 +3032,38 @@
3852
3032
  ],
3853
3033
  'L':
3854
3034
  [
3855
- define('btoa(".")[0]', ATOB),
3035
+ define('btoa(".")[0]'),
3856
3036
  define('(RP_3_WA + "".fontcolor())[11]', CAPITAL_HTML),
3857
- define('(RP_0_S + document.forms)[11]', FORMS),
3858
- define('(RP_0_S + Audio)[12]', HTMLAUDIOELEMENT),
3859
- define
3860
- (
3861
- {
3862
- expr:
3863
- 'Function("return toString.call(location)")()[SLICE_OR_SUBSTR]("-10")[1]',
3864
- optimize: true,
3865
- },
3866
- LOCATION
3867
- ),
3868
- define('(RP_3_WA + LOCATION_CONSTRUCTOR)[11]', OBJECT_L_LOCATION_CTOR),
3869
- define
3870
- (
3871
- '(LOCATION_CONSTRUCTOR + RP_0_S)[SLICE_OR_SUBSTR]("-20")[0]',
3872
- OLD_SAFARI_LOCATION_CTOR
3873
- ),
3874
- define
3875
- (
3876
- {
3877
- expr:
3878
- '(Function("return toString.call(location)")() + RP_1_WA).at("-10")',
3879
- optimize: true,
3880
- },
3881
- AT,
3882
- LOCATION
3883
- ),
3884
- define('(LOCATION_CONSTRUCTOR + RP_0_S).at("-20")', AT, OLD_SAFARI_LOCATION_CTOR),
3885
- define
3886
- (
3887
- '[][TO_STRING].call(location)[SLICE_OR_SUBSTR]("-10")[1]',
3888
- GENERIC_ARRAY_TO_STRING,
3889
- LOCATION
3890
- ),
3891
- define
3892
- ('self[TO_STRING].call(location)[SLICE_OR_SUBSTR]("-10")[1]', LOCATION, SELF_OBJ),
3893
- define
3894
- (
3895
- '([][TO_STRING].call(location) + RP_1_WA).at("-10")',
3896
- AT,
3897
- GENERIC_ARRAY_TO_STRING,
3898
- LOCATION
3899
- ),
3900
- define('(self[TO_STRING].call(location) + RP_1_WA).at("-10")', AT, LOCATION, SELF_OBJ),
3901
3037
  ],
3902
3038
  'M':
3903
3039
  [
3904
- define('btoa(0)[0]', ATOB),
3040
+ define('btoa(0)[0]'),
3905
3041
  define('"".small()[2]', CAPITAL_HTML),
3906
- define('(RP_0_S + self)[10]', DOMWINDOW),
3907
- define('(RP_0_S + document.forms)[10]', FORMS),
3908
- define('(RP_4_A + Date())[30]', GMT),
3909
- define('(RP_0_S + Audio)[11]', HTMLAUDIOELEMENT),
3910
- define('USER_AGENT[0]', MOZILLA),
3911
- define('"".slice.call()[10]', CALL_ON_GLOBAL, DOMWINDOW),
3912
- define('(RP_5_A + "".sub.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
3913
3042
  ],
3914
3043
  'N': '"NaN"[0]',
3915
3044
  'O':
3916
3045
  [
3917
3046
  defineCharInFn('Object', 9),
3047
+ define('btoa(NaN)[3]'),
3918
3048
  define('(RP_3_WA + PLAIN_OBJECT)[11]'),
3919
- define('btoa(NaN)[3]', ATOB),
3920
3049
  define('"".fontcolor()[2]', CAPITAL_HTML),
3921
- define('(RP_1_WA + self)[10]', DOMWINDOW),
3922
3050
  define('(RP_3_WA + Intl)[11]', PLAIN_INTL),
3923
- define('(RP_1_WA + "".slice.call())[10]', CALL_ON_GLOBAL, DOMWINDOW),
3924
- define('(RP_6_S + "".sub.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
3925
3051
  ],
3926
3052
  'P':
3927
3053
  [
3928
- define('String.fromCharCode("80")'),
3929
- define('(RP_3_WA + Function("return async function(){}")()())[11]', ASYNC_FUNCTION),
3930
- define('atob("01A")[1]', ATOB),
3931
- define('btoa("".italics())[0]', ATOB),
3054
+ define('btoa("".italics())[0]'),
3932
3055
  define('(RP_0_S + Function("return statusbar")())[11]', BARPROP),
3933
3056
  define('"0".sup()[10]', CAPITAL_HTML),
3934
- define('(RP_0_S + self.statusbar)[11]', BARPROP, SELF_OBJ),
3935
- defineCharDefault({ atob: false, charCode: false }),
3057
+ defineCharDefault(),
3936
3058
  ],
3937
3059
  'Q':
3938
3060
  [
3939
- define('"q"[TO_UPPER_CASE]()'),
3940
- define('btoa(1)[1]', ATOB),
3941
- defineCharDefault({ atob: false }),
3061
+ define('btoa(1)[1]'),
3942
3062
  ],
3943
3063
  'R':
3944
3064
  [
3945
- defineCharInFn('RegExp', 9),
3946
- define('btoa("0true")[2]', ATOB),
3065
+ define('btoa("0true")[2]'),
3947
3066
  define('"".fontcolor()[10]', CAPITAL_HTML),
3948
- define('(RP_3_WA + REGEXP_STRING_ITERATOR)[11]', REGEXP_STRING_ITERATOR),
3949
3067
  ],
3950
3068
  'S':
3951
3069
  [
@@ -3954,115 +3072,49 @@
3954
3072
  ],
3955
3073
  'T':
3956
3074
  [
3957
- define
3958
- (
3959
- {
3960
- expr:
3961
- '(RP_0_S + ' +
3962
- 'Function("try{undefined.false}catch(undefined){return undefined}")())[0]',
3963
- optimize: true,
3964
- }
3965
- ),
3966
- define('btoa(NaN)[0]', ATOB),
3075
+ define('btoa(NaN)[0]'),
3967
3076
  define('"".fontcolor([])[20]', CAPITAL_HTML),
3968
- define('(RP_1_WA + document.forms)[10]', FORMS),
3969
- define('(RP_3_WA + Date())[30]', GMT),
3970
- define('(RP_0_S + Audio)[10]', HTMLAUDIOELEMENT),
3971
- defineCharDefault({ atob: false }),
3972
3077
  ],
3973
3078
  'U':
3974
3079
  [
3975
- define('btoa("1NaN")[1]', ATOB),
3080
+ define('btoa("1NaN")[1]'),
3976
3081
  define('"".sub()[2]', CAPITAL_HTML),
3977
- define
3978
- (
3979
- { expr: '(RP_3_WA + Function("return toString")()())[11]', optimize: true },
3980
- GLOBAL_UNDEFINED
3981
- ),
3982
- define
3983
- (
3984
- { expr: '(RP_3_WA + Function("return{}.toString")()())[11]', optimize: true },
3985
- OBJECT_UNDEFINED
3986
- ),
3987
- define('(RP_3_WA + PLAIN_OBJECT[TO_STRING].call())[11]', UNDEFINED),
3988
- define('(RP_3_WA + ARRAY_ITERATOR[TO_STRING].call())[11]', ARRAY_ITERATOR, UNDEFINED),
3989
- define
3990
- (
3991
- { expr: '(RP_3_WA + Function("return Intl.toString")()())[11]', optimize: true },
3992
- INTL,
3993
- OBJECT_UNDEFINED
3994
- ),
3995
- define('(RP_3_WA + Intl[TO_STRING].call())[11]', INTL, UNDEFINED),
3996
3082
  ],
3997
3083
  'V':
3998
3084
  [
3999
- define('"v"[TO_UPPER_CASE]()'),
4000
- define('btoa(undefined)[10]', ATOB),
4001
- define('(RP_0_S + document.createElement("video"))[12]', CREATE_ELEMENT),
4002
- defineCharDefault({ atob: false }),
3085
+ define('btoa(undefined)[10]'),
4003
3086
  ],
4004
3087
  'W':
4005
3088
  [
4006
- define('"w"[TO_UPPER_CASE]()'),
4007
- define('(self + RP_4_A)[SLICE_OR_SUBSTR]("-11")[0]', ANY_WINDOW),
4008
- define('btoa(undefined)[1]', ATOB),
4009
- define('(RP_0_S + self)[11]', DOMWINDOW),
3089
+ define('btoa(undefined)[1]'),
4010
3090
  define('(RP_3_WA + self)[11]', OBJECT_W_SELF),
4011
- define('(self + RP_4_A).at("-11")', ANY_WINDOW, AT),
4012
- define
4013
- (
4014
- '("".slice.call() + RP_4_A)[SLICE_OR_SUBSTR]("-11")[0]',
4015
- ANY_WINDOW,
4016
- CALL_ON_GLOBAL
4017
- ),
4018
- define
4019
- (
4020
- '"".sub.call()[SLICE_OR_SUBSTR]("-13")[0]',
4021
- ANY_WINDOW,
4022
- CALL_ON_GLOBAL
4023
- ),
4024
- define('"".slice.call()[11]', CALL_ON_GLOBAL, DOMWINDOW),
4025
- define('(RP_4_A + "".sub.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
4026
- define('(RP_3_WA + "".slice.call())[11]', CALL_ON_GLOBAL, WINDOW),
4027
- define('"".sub.call()[13]', CALL_ON_GLOBAL, WINDOW),
4028
- define('("".slice.call() + RP_4_A).at("-11")', ANY_WINDOW, AT, CALL_ON_GLOBAL),
4029
- defineCharDefault({ atob: false }),
4030
3091
  ],
4031
3092
  'X':
4032
3093
  [
4033
- define('"x"[TO_UPPER_CASE]()'),
4034
- define('btoa("1true")[1]', ATOB),
4035
- defineCharDefault({ atob: false }),
3094
+ define('btoa("1true")[1]'),
4036
3095
  ],
4037
3096
  'Y':
4038
3097
  [
4039
- define('"y"[TO_UPPER_CASE]()'),
4040
- define('btoa("a")[0]', ATOB),
4041
- defineCharDefault({ atob: false }),
3098
+ define('btoa("a")[0]'),
4042
3099
  ],
4043
3100
  'Z':
4044
3101
  [
4045
- define('btoa(false)[0]', ATOB),
4046
- define('(RP_3_WA + "".fontsize())[11]', CAPITAL_HTML),
3102
+ define('btoa(false)[0]'),
4047
3103
  ],
4048
3104
  '[':
4049
3105
  [
4050
3106
  defineCharInFnBody(14),
4051
3107
  define('(RP_0_S + ARRAY_ITERATOR)[0]', ARRAY_ITERATOR),
4052
3108
  ],
4053
- '\\':
4054
- [
4055
- define('ESCAPING_BACKSLASH'),
4056
- defineCharDefault({ atob: false, escSeq: false, unescape: false }),
4057
- ],
3109
+ // '\\'
4058
3110
  ']':
4059
3111
  [
4060
3112
  defineCharInFnBody(26),
4061
- define('(RP_0_S + ARRAY_ITERATOR)[22]', NO_OLD_SAFARI_ARRAY_ITERATOR),
3113
+ define('(RP_0_S + ARRAY_ITERATOR)[22]', ARRAY_ITERATOR),
4062
3114
  ],
4063
3115
  '^':
4064
3116
  [
4065
- define('atob("undefined0")[2]', ATOB),
3117
+ define('atob("undefined0")[2]'),
4066
3118
  ],
4067
3119
  // '_'
4068
3120
  // '`'
@@ -4086,18 +3138,17 @@
4086
3138
  ],
4087
3139
  'h':
4088
3140
  [
3141
+ define('btoa("0false")[3]'),
4089
3142
  define('101[TO_STRING]("21")[1]'),
4090
- define('btoa("0false")[3]', ATOB),
4091
3143
  ],
4092
3144
  'i': '([RP_5_A] + undefined)[10]',
4093
3145
  'j':
4094
3146
  [
3147
+ define('(RP_0_S + Intl)[3]'),
4095
3148
  define('(RP_0_S + PLAIN_OBJECT)[10]'),
4096
3149
  define('(RP_0_S + ARRAY_ITERATOR)[3]', ARRAY_ITERATOR),
4097
- define('(RP_0_S + Intl)[3]', INTL),
4098
- define('(RP_0_S + Node)[3]', NODECONSTRUCTOR),
4099
3150
  define('(RP_0_S + Intl)[10]', PLAIN_INTL),
4100
- define('(RP_0_S + self)[3]', SELF_OBJ),
3151
+ define('(RP_0_S + self)[3]', SELF),
4101
3152
  ],
4102
3153
  'k':
4103
3154
  [
@@ -4119,15 +3170,13 @@
4119
3170
  'p':
4120
3171
  [
4121
3172
  define('211[TO_STRING]("31")[1]'),
4122
- define('(RP_3_WA + btoa(undefined))[10]', ATOB),
3173
+ define('(RP_3_WA + btoa(undefined))[10]'),
4123
3174
  define('(RP_0_S + [].entries().filter(ANY_FUNCTION))[20]', ITERATOR_HELPER),
4124
3175
  ],
4125
3176
  'q':
4126
3177
  [
4127
3178
  define('212[TO_STRING]("31")[1]'),
4128
- define('"".fontcolor(0 + "".fontcolor())[30]', ESC_HTML_ALL),
4129
- define('"".fontcolor("0false\\"")[20]', ESC_HTML_QUOT),
4130
- define('"".fontcolor(true + "".fontcolor())[30]', ESC_HTML_QUOT_ONLY),
3179
+ define('"".fontcolor(true + "".fontcolor())[30]', ESC_HTML_QUOT),
4131
3180
  defineCharDefault(),
4132
3181
  ],
4133
3182
  'r': '"true"[1]',
@@ -4141,39 +3190,19 @@
4141
3190
  'w':
4142
3191
  [
4143
3192
  define('32[TO_STRING]("33")'),
4144
- define('(self + RP_0_S)[SLICE_OR_SUBSTR]("-2")[0]', ANY_WINDOW),
4145
- define('atob("undefined0")[1]', ATOB),
4146
- define('(RP_4_A + self)[20]', DOMWINDOW),
3193
+ define('atob("undefined0")[1]'),
4147
3194
  define('(RP_0_S + self)[13]', WINDOW),
4148
- define('(self + RP_0_S).at("-2")', ANY_WINDOW, AT),
4149
- define
4150
- (
4151
- '"".slice.call()[SLICE_OR_SUBSTR]("-2")[0]',
4152
- ANY_WINDOW,
4153
- CALL_ON_GLOBAL
4154
- ),
4155
- define
4156
- (
4157
- '("".sub.call() + RP_3_WA)[SLICE_OR_SUBSTR]("-11")[0]',
4158
- ANY_WINDOW,
4159
- CALL_ON_GLOBAL
4160
- ),
4161
- define('(RP_4_A + "".slice.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
4162
- define('"".sub.call()[21]', CALL_ON_GLOBAL, DOMWINDOW),
4163
- define('"".slice.call()[13]', CALL_ON_GLOBAL, WINDOW),
4164
- define('(RP_3_WA + "".sub.call())[21]', CALL_ON_GLOBAL, WINDOW),
4165
- define('"".slice.call().at("-2")', ANY_WINDOW, AT, CALL_ON_GLOBAL),
4166
3195
  ],
4167
3196
  'x':
4168
3197
  [
3198
+ define('btoa("falsefalse")[10]'),
4169
3199
  define('101[TO_STRING]("34")[1]'),
4170
- define('btoa("falsefalse")[10]', ATOB),
4171
3200
  ],
4172
3201
  'y': '(RP_3_WA + [Infinity])[10]',
4173
3202
  'z':
4174
3203
  [
4175
3204
  define('35[TO_STRING]("36")'),
4176
- define('btoa("falsefalse")[11]', ATOB),
3205
+ define('btoa("falsefalse")[11]'),
4177
3206
  ],
4178
3207
  '{':
4179
3208
  [
@@ -4189,89 +3218,90 @@
4189
3218
 
4190
3219
  '\x8a':
4191
3220
  [
4192
- define('(RP_4_A + atob("NaNundefined"))[10]', ATOB),
3221
+ define('(RP_4_A + atob("NaNundefined"))[10]'),
4193
3222
  ],
4194
3223
  '\x8d':
4195
3224
  [
4196
- define('atob("0NaN")[2]', ATOB),
3225
+ define('atob("0NaN")[2]'),
4197
3226
  ],
4198
3227
  '\x96':
4199
3228
  [
4200
- define('atob("00false")[3]', ATOB),
3229
+ define('atob("00false")[3]'),
4201
3230
  ],
4202
3231
  '\x9e':
4203
3232
  [
4204
- define('atob(true)[2]', ATOB),
3233
+ define('atob(true)[2]'),
4205
3234
  ],
4206
3235
  '£':
4207
3236
  [
4208
- define('atob(NaN)[1]', ATOB),
3237
+ define('atob(NaN)[1]'),
4209
3238
  ],
4210
3239
  '¥':
4211
3240
  [
4212
- define('atob("0false")[2]', ATOB),
3241
+ define('atob("0false")[2]'),
4213
3242
  ],
4214
3243
  '§':
4215
3244
  [
4216
- define('atob("00undefined")[2]', ATOB),
3245
+ define('atob("00undefined")[2]'),
4217
3246
  ],
4218
3247
  '©':
4219
3248
  [
4220
- define('atob("false0")[1]', ATOB),
3249
+ define('atob("false0")[1]'),
4221
3250
  ],
4222
3251
  '±':
4223
3252
  [
4224
- define('atob("0false")[3]', ATOB),
3253
+ define('atob("0false")[3]'),
4225
3254
  ],
4226
3255
  '¶':
4227
3256
  [
4228
- define('atob(true)[0]', ATOB),
3257
+ define('atob(true)[0]'),
4229
3258
  ],
4230
3259
  'º':
4231
3260
  [
4232
- define('atob("undefined0")[0]', ATOB),
3261
+ define('atob("undefined0")[0]'),
4233
3262
  ],
4234
3263
  '»':
4235
3264
  [
4236
- define('atob(true)[1]', ATOB),
3265
+ define('atob(true)[1]'),
4237
3266
  ],
4238
3267
  'Ç':
4239
3268
  [
4240
- define('atob("falsefalsefalse")[10]', ATOB),
3269
+ define('atob("falsefalsefalse")[10]'),
4241
3270
  ],
4242
3271
  'Ú':
4243
3272
  [
4244
- define('atob("0truefalse")[1]', ATOB),
3273
+ define('atob("0truefalse")[1]'),
4245
3274
  ],
4246
3275
  'Ý':
4247
3276
  [
4248
- define('atob("0undefined")[2]', ATOB),
3277
+ define('atob("0undefined")[2]'),
4249
3278
  ],
4250
3279
  'â':
4251
3280
  [
4252
- define('atob("falsefalseundefined")[11]', ATOB),
3281
+ define('atob("falsefalseundefined")[11]'),
4253
3282
  ],
4254
3283
  'é':
4255
3284
  [
4256
- define('atob("0undefined")[1]', ATOB),
3285
+ define('atob("0undefined")[1]'),
4257
3286
  ],
4258
3287
  'î':
4259
3288
  [
4260
- define('atob("0truefalse")[2]', ATOB),
3289
+ define('atob("0truefalse")[2]'),
4261
3290
  ],
4262
3291
  'ö':
4263
3292
  [
4264
- define('atob("0false")[1]', ATOB),
3293
+ define('atob("0false")[1]'),
4265
3294
  ],
4266
3295
  'ø':
4267
3296
  [
4268
- define('atob("undefinedundefined")[10]', ATOB),
3297
+ define('atob("undefinedundefined")[10]'),
4269
3298
  ],
4270
3299
  '∞':
4271
3300
  [
4272
- define('Infinity[TO_LOCALE_STRING]("ja")[SLICE_OR_SUBSTR]("-1")', JAPANESE_INFINITY),
3301
+ define('Infinity[TO_LOCALE_STRING]("ja")[SLICE_OR_SUBSTR]("-1")'),
3302
+ define('Infinity[TO_LOCALE_STRING]("ja").at("-1")', AT),
4273
3303
  define('Infinity[TO_LOCALE_STRING]()', LOCALE_INFINITY),
4274
- define('Infinity[TO_LOCALE_STRING]("ja").at("-1")', JAPANESE_INFINITY, AT),
3304
+ define('Infinity[TO_LOCALE_STRING]("ru")', RUSSIAN_INFINITY),
4275
3305
  defineCharDefault(),
4276
3306
  ],
4277
3307
  });
@@ -4285,7 +3315,7 @@
4285
3315
  String: define('String.name', NAME),
4286
3316
  fromCharCo:
4287
3317
  define({ expr: '"from3har3o".split(3).join("C")', optimize: { complexOpt: false } }),
4288
- mCh: define('atob("bUNo")', Feature.ATOB),
3318
+ mCh: define('atob("bUNo")'),
4289
3319
  });
4290
3320
 
4291
3321
  CONSTANTS =
@@ -4297,33 +3327,18 @@
4297
3327
  [
4298
3328
  define('[].constructor'),
4299
3329
  ],
4300
- Audio:
4301
- [
4302
- define('Function("return Audio")()', HTMLAUDIOELEMENT),
4303
- define('self.Audio', HTMLAUDIOELEMENT, SELF_OBJ),
4304
- ],
4305
3330
  Boolean:
4306
3331
  [
4307
3332
  define('false.constructor'),
4308
3333
  ],
4309
- Date:
4310
- [
4311
- define('Function("return Date")()'),
4312
- define('self.Date', SELF_OBJ),
4313
- ],
4314
3334
  Function:
4315
3335
  [
4316
3336
  define('ANY_FUNCTION.constructor'),
4317
3337
  ],
4318
3338
  Intl:
4319
3339
  [
4320
- define('Function("return Intl")()', INTL),
4321
- define('self.Intl', INTL, SELF_OBJ),
4322
- ],
4323
- Node:
4324
- [
4325
- define('Function("return Node")()', NODECONSTRUCTOR),
4326
- define('self.Node', NODECONSTRUCTOR, SELF_OBJ),
3340
+ define('Function("return Intl")()'),
3341
+ define('self.Intl', SELF),
4327
3342
  ],
4328
3343
  Number:
4329
3344
  [
@@ -4331,8 +3346,8 @@
4331
3346
  ],
4332
3347
  Object:
4333
3348
  [
3349
+ define('Intl.constructor'),
4334
3350
  define('PLAIN_OBJECT.constructor'),
4335
- define('Intl.constructor', INTL),
4336
3351
  define('[].entries().constructor', OBJECT_ARRAY_ENTRIES_CTOR),
4337
3352
  ],
4338
3353
  RegExp:
@@ -4345,38 +3360,32 @@
4345
3360
  ],
4346
3361
  atob:
4347
3362
  [
4348
- define('Function("return atob")()', ATOB),
4349
- define('self.atob', ATOB, SELF_OBJ),
3363
+ define('Function("return atob")()'),
3364
+ define('self.atob', SELF),
4350
3365
  ],
4351
3366
  btoa:
4352
3367
  [
4353
- define('Function("return btoa")()', ATOB),
4354
- define('self.btoa', ATOB, SELF_OBJ),
3368
+ define('Function("return btoa")()'),
3369
+ define('self.btoa', SELF),
4355
3370
  ],
4356
3371
  document:
4357
3372
  [
4358
- define({ expr: 'Function("return document")()', optimize: true }, ANY_DOCUMENT),
4359
- define({ expr: 'self.document', optimize: true }, ANY_DOCUMENT, SELF_OBJ),
3373
+ define({ expr: 'Function("return document")()', optimize: true }, DOCUMENT),
3374
+ define({ expr: 'self.document', optimize: true }, DOCUMENT, SELF),
4360
3375
  ],
4361
3376
  escape:
4362
3377
  [
4363
3378
  define({ expr: 'Function("return escape")()', optimize: true }),
4364
- define({ expr: 'self.escape', optimize: true }, SELF_OBJ),
4365
- ],
4366
- location:
4367
- [
4368
- define('Function("return location")()', LOCATION),
4369
- define('self.location', LOCATION, SELF_OBJ),
3379
+ define({ expr: 'self.escape', optimize: true }, SELF),
4370
3380
  ],
4371
3381
  self:
4372
3382
  [
4373
- define('Function("return self")()', SELF_OBJ),
4374
- define('[].concat.call()[0]', CALL_ON_GLOBAL, SELF_OBJ),
3383
+ define('Function("return self")()', SELF),
4375
3384
  ],
4376
3385
  unescape:
4377
3386
  [
4378
3387
  define({ expr: 'Function("return unescape")()', optimize: true }),
4379
- define({ expr: 'self.unescape', optimize: true }, SELF_OBJ),
3388
+ define({ expr: 'self.unescape', optimize: true }, SELF),
4380
3389
  ],
4381
3390
 
4382
3391
  // Custom definitions
@@ -4385,7 +3394,6 @@
4385
3394
  [
4386
3395
  define('FILTER'),
4387
3396
  define('AT', AT),
4388
- define('FILL', FILL),
4389
3397
  define('FLAT', FLAT),
4390
3398
  ],
4391
3399
  ARRAY_ITERATOR:
@@ -4396,114 +3404,6 @@
4396
3404
  [
4397
3405
  define('[].at', AT),
4398
3406
  ],
4399
- ESCAPING_BACKSLASH:
4400
- [
4401
- define(backslashDefinition),
4402
- define({ expr: 'atob("01y")[1]', solutionType: SolutionType.STRING }, ATOB),
4403
- define
4404
- (
4405
- { expr: '(RP_0_S + RegExp("\\n"))[1]', solutionType: SolutionType.STRING },
4406
- ESC_REGEXP_LF
4407
- ),
4408
- define
4409
- (
4410
- { expr: '(RP_5_A + RegExp("".italics()))[10]', solutionType: SolutionType.STRING },
4411
- ESC_REGEXP_SLASH
4412
- ),
4413
- define
4414
- (
4415
- { expr: '(RP_3_WA + RegExp("".sub()))[10]', solutionType: SolutionType.STRING },
4416
- ESC_REGEXP_SLASH
4417
- ),
4418
- define
4419
- (
4420
- { expr: '(RP_0_S + RegExp(FILTER))[20]', solutionType: SolutionType.STRING },
4421
- ESC_REGEXP_LF,
4422
- FF_SRC
4423
- ),
4424
- define
4425
- (
4426
- { expr: '(RP_0_S + RegExp(Function()))[20]', solutionType: SolutionType.STRING },
4427
- ESC_REGEXP_LF,
4428
- FUNCTION_19_LF
4429
- ),
4430
- define
4431
- (
4432
- { expr: '(RP_5_A + RegExp(Function()))[30]', solutionType: SolutionType.STRING },
4433
- ESC_REGEXP_LF,
4434
- FUNCTION_22_LF
4435
- ),
4436
- define
4437
- (
4438
- { expr: '(RP_0_S + RegExp(ANY_FUNCTION))[1]', solutionType: SolutionType.STRING },
4439
- ESC_REGEXP_LF,
4440
- IE_SRC
4441
- ),
4442
- define
4443
- (
4444
- {
4445
- expr: '(+(RP_0_S + FILTER)[0] + RegExp(FILTER))[23]',
4446
- solutionType: SolutionType.STRING,
4447
- },
4448
- ESC_REGEXP_LF,
4449
- NO_V8_SRC
4450
- ),
4451
- define
4452
- (
4453
- { expr: '(RP_4_A + RegExp(AT))[20]', solutionType: SolutionType.STRING },
4454
- AT,
4455
- ESC_REGEXP_LF,
4456
- FF_SRC
4457
- ),
4458
- define
4459
- (
4460
- {
4461
- expr: '(RP_1_WA + [+(RP_0_S + AT)[0]] + RegExp(AT))[20]',
4462
- solutionType: SolutionType.STRING,
4463
- },
4464
- AT,
4465
- ESC_REGEXP_LF,
4466
- NO_V8_SRC
4467
- ),
4468
- define
4469
- (
4470
- { expr: '(RP_3_WA + RegExp(FILL))[21]', solutionType: SolutionType.STRING },
4471
- ESC_REGEXP_LF,
4472
- FF_SRC,
4473
- FILL
4474
- ),
4475
- define
4476
- (
4477
- { expr: '(RP_3_WA + RegExp(FLAT))[21]', solutionType: SolutionType.STRING },
4478
- ESC_REGEXP_LF,
4479
- FF_SRC,
4480
- FLAT
4481
- ),
4482
- define
4483
- (
4484
- {
4485
- expr: '(+(RP_0_S + FILL)[0] + RegExp(FILL))[21]',
4486
- solutionType: SolutionType.STRING,
4487
- },
4488
- ESC_REGEXP_LF,
4489
- FILL,
4490
- NO_V8_SRC
4491
- ),
4492
- define
4493
- (
4494
- {
4495
- expr: '(+(RP_0_S + FLAT)[0] + RegExp(FLAT))[21]',
4496
- solutionType: SolutionType.STRING,
4497
- },
4498
- ESC_REGEXP_LF,
4499
- FLAT,
4500
- NO_V8_SRC
4501
- ),
4502
- ],
4503
- FILL:
4504
- [
4505
- define('[].fill', FILL),
4506
- ],
4507
3407
  FILTER:
4508
3408
  [
4509
3409
  define('[].filter'),
@@ -4521,13 +3421,6 @@
4521
3421
  define({ expr: '"ar-td"', solutionType: SolutionType.COMBINED_STRING }),
4522
3422
  define({ expr: '"ar"', solutionType: SolutionType.COMBINED_STRING }, SHORT_LOCALES),
4523
3423
  ],
4524
- LOCATION_CONSTRUCTOR:
4525
- [
4526
- define('Function("return location")().constructor', OBJECT_L_LOCATION_CTOR),
4527
- define('Function("return location")().constructor', OLD_SAFARI_LOCATION_CTOR),
4528
- define('self.location.constructor', OBJECT_L_LOCATION_CTOR, SELF_OBJ),
4529
- define('self.location.constructor', OLD_SAFARI_LOCATION_CTOR, SELF_OBJ),
4530
- ],
4531
3424
  PLAIN_OBJECT:
4532
3425
  [
4533
3426
  define('Function("return{}")()'),
@@ -4564,31 +3457,14 @@
4564
3457
  {
4565
3458
  expr: '"toString"',
4566
3459
  optimize: { toStringOpt: false },
4567
- solutionType: SolutionType.COMBINED_STRING,
4568
- }
4569
- ),
4570
- ],
4571
- TO_UPPER_CASE:
4572
- [
4573
- define
4574
- ({ expr: '"toUpperCase"', optimize: true, solutionType: SolutionType.COMBINED_STRING }),
4575
- ],
4576
- USER_AGENT:
4577
- [
4578
- define
4579
- (
4580
- {
4581
- expr: 'Function("return navigator")().userAgent',
4582
- solutionType: SolutionType.STRING,
4583
- },
4584
- MOZILLA
3460
+ solutionType: SolutionType.COMBINED_STRING,
3461
+ }
4585
3462
  ),
3463
+ ],
3464
+ TO_UPPER_CASE:
3465
+ [
4586
3466
  define
4587
- (
4588
- { expr: 'self.navigator.userAgent', solutionType: SolutionType.STRING },
4589
- MOZILLA,
4590
- SELF_OBJ
4591
- ),
3467
+ ({ expr: '"toUpperCase"', optimize: true, solutionType: SolutionType.COMBINED_STRING }),
4592
3468
  ],
4593
3469
 
4594
3470
  // Function body extra padding blocks: prepended to a function to align the function's body
@@ -4601,11 +3477,9 @@
4601
3477
  [
4602
3478
  define('[[true][+(RP_3_WA + FILTER)[30]]]'),
4603
3479
  define('[[true][+(RP_1_WA + AT)[30]]]', AT),
4604
- define('[[true][+(RP_5_A + FILL)[30]]]', FILL),
4605
3480
  define('[[true][+(RP_5_A + FLAT)[30]]]', FLAT),
4606
3481
  define('[[true][+!!++(RP_0_S + FILTER)[20]]]', INCR_CHAR),
4607
3482
  define('[[true][+!!++(RP_1_WA + AT)[20]]]', AT, INCR_CHAR),
4608
- define('[[true][+!!++(RP_0_S + FILL)[20]]]', FILL, INCR_CHAR),
4609
3483
  define('[[true][+!!++(RP_0_S + FLAT)[20]]]', FLAT, INCR_CHAR),
4610
3484
  ],
4611
3485
  FBEP_9_U:
@@ -4615,8 +3489,6 @@
4615
3489
  define
4616
3490
  ({ expr: '[false][+(RP_1_WA + AT)[20]]', solutionType: SolutionType.UNDEFINED }, AT),
4617
3491
  define
4618
- ({ expr: '[false][+(RP_0_S + FILL)[20]]', solutionType: SolutionType.UNDEFINED }, FILL),
4619
- define
4620
3492
  ({ expr: '[false][+(RP_0_S + FLAT)[20]]', solutionType: SolutionType.UNDEFINED }, FLAT),
4621
3493
  ],
4622
3494
  FBEP_10_S:
@@ -4652,14 +3524,6 @@
4652
3524
  AT
4653
3525
  ),
4654
3526
  define
4655
- (
4656
- {
4657
- expr: '+("10" + [(RP_6_S + FILL)[40]] + "00000")',
4658
- solutionType: SolutionType.WEAK_ALGEBRAIC,
4659
- },
4660
- FILL
4661
- ),
4662
- define
4663
3527
  (
4664
3528
  {
4665
3529
  expr: '+("10" + [(RP_6_S + FLAT)[40]] + "00000")',
@@ -4686,14 +3550,6 @@
4686
3550
  AT
4687
3551
  ),
4688
3552
  define
4689
- (
4690
- {
4691
- expr: '+("1000" + (FILL + 0)[33] + "000")',
4692
- solutionType: SolutionType.WEAK_ALGEBRAIC,
4693
- },
4694
- FILL
4695
- ),
4696
- define
4697
3553
  (
4698
3554
  {
4699
3555
  expr: '+("1000" + (FLAT + 0)[33] + "000")',
@@ -4808,564 +3664,143 @@
4808
3664
 
4809
3665
  FH_R_PADDING_SHIFTS = [define(1, IE_SRC), define(0, NO_IE_SRC)];
4810
3666
 
3667
+ var FORMAT_MAPPER_ENTRIES =
3668
+ [
3669
+ define
3670
+ (
3671
+ (function () {
3672
+ var formatMapper =
3673
+ function (accessor)
3674
+ {
3675
+ var mapper =
3676
+ 'Function("return function(falsefalse){return function(undefined){return ' +
3677
+ 'falsefalse' + accessor + '}}")()';
3678
+ return mapper;
3679
+ };
3680
+ formatMapper.argName = 'undefined';
3681
+ return formatMapper;
3682
+ })()
3683
+ ),
3684
+ define
3685
+ (
3686
+ (function () {
3687
+ var formatMapper =
3688
+ function (accessor)
3689
+ {
3690
+ var mapper =
3691
+ 'Function("return function(undefined){return this' + accessor + '}")().bind';
3692
+ return mapper;
3693
+ };
3694
+ formatMapper.argName = 'undefined';
3695
+ return formatMapper;
3696
+ })()
3697
+ ),
3698
+ define
3699
+ (
3700
+ (function () {
3701
+ var formatMapper =
3702
+ function (accessor)
3703
+ {
3704
+ var mapper =
3705
+ 'Function("return function(f){return this' + accessor + '}")().bind';
3706
+ return mapper;
3707
+ };
3708
+ formatMapper.argName = 'f';
3709
+ return formatMapper;
3710
+ })()
3711
+ ),
3712
+ define
3713
+ (
3714
+ (function () {
3715
+ var formatMapper =
3716
+ function (accessor)
3717
+ {
3718
+ var mapper =
3719
+ 'Function("return falsefalse=>undefined=>falsefalse' + accessor + '")()';
3720
+ return mapper;
3721
+ };
3722
+ formatMapper.argName = 'undefined';
3723
+ return formatMapper;
3724
+ })(),
3725
+ ARROW
3726
+ ),
3727
+ ];
3728
+
3729
+ FORMAT_MAPPER_LONG =
3730
+ defineList
3731
+ (
3732
+ FORMAT_MAPPER_ENTRIES,
3733
+ [
3734
+ define(0),
3735
+ define(2, ARRAY_ITERATOR),
3736
+ define(0, NO_FF_SRC),
3737
+ define(0, NO_V8_SRC),
3738
+ define(2, ARRAY_ITERATOR, CAPITAL_HTML),
3739
+ define(0, ARRAY_ITERATOR, AT),
3740
+ define(0, ARRAY_ITERATOR, FLAT),
3741
+ define(0, ARRAY_ITERATOR, NO_IE_SRC),
3742
+ define(0, ARRAY_ITERATOR, CAPITAL_HTML, IE_SRC),
3743
+ define(3),
3744
+ ]
3745
+ );
3746
+
3747
+ FORMAT_MAPPER_SHORT =
3748
+ defineList
3749
+ (
3750
+ FORMAT_MAPPER_ENTRIES,
3751
+ [
3752
+ define(0),
3753
+ define(1, ARRAY_ITERATOR),
3754
+ define(0, NO_FF_SRC),
3755
+ define(0, NO_V8_SRC),
3756
+ define(1, ARRAY_ITERATOR, CAPITAL_HTML),
3757
+ define(0, ARRAY_ITERATOR, AT),
3758
+ define(0, ARRAY_ITERATOR, FLAT),
3759
+ define(0, ARRAY_ITERATOR, NO_IE_SRC),
3760
+ define(0, ARRAY_ITERATOR, CAPITAL_HTML, IE_SRC),
3761
+ define(3),
3762
+ ]
3763
+ );
3764
+
4811
3765
  FROM_CHAR_CODE =
4812
3766
  defineList
4813
3767
  (
4814
3768
  [define('fromCharCode'), define('fromCodePoint', FROM_CODE_POINT)],
4815
3769
  [
4816
3770
  define(0),
4817
- define(1, ASYNC_FUNCTION),
4818
- define(1, ATOB),
4819
- define
4820
- (
4821
- 0,
4822
- ASYNC_FUNCTION,
4823
- CALL_ON_GLOBAL,
4824
- FROM_CODE_POINT,
4825
- INCR_CHAR,
4826
- NAME,
4827
- NODECONSTRUCTOR,
4828
- SELF_OBJ
4829
- ),
4830
- define(1, ASYNC_FUNCTION, NO_FF_SRC),
4831
- define(1, ASYNC_FUNCTION, NO_V8_SRC),
4832
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, NAME),
4833
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, NAME),
4834
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, FILL, NAME),
4835
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, FLAT, NAME),
4836
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, NAME, NO_IE_SRC),
4837
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, NAME, NO_V8_SRC),
4838
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER),
4839
- define
4840
- (
4841
- 0,
4842
- ASYNC_FUNCTION,
4843
- AT,
4844
- CALL_ON_GLOBAL,
4845
- FROM_CODE_POINT,
4846
- NAME,
4847
- NODECONSTRUCTOR,
4848
- SELF_OBJ
4849
- ),
4850
- define(1, ARRAY_ITERATOR, AT, ATOB, IE_SRC, ITERATOR_HELPER),
4851
- define
4852
- (
4853
- 0,
4854
- ASYNC_FUNCTION,
4855
- CALL_ON_GLOBAL,
4856
- FLAT,
4857
- FROM_CODE_POINT,
4858
- NAME,
4859
- NODECONSTRUCTOR,
4860
- SELF_OBJ
4861
- ),
4862
- define
4863
- (1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4864
- define
4865
- (1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4866
- define
4867
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4868
- define
4869
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4870
- define(0, ATOB, FROM_CODE_POINT, INTL, ITERATOR_HELPER),
4871
- define(1, ATOB, FILL, INTL, ITERATOR_HELPER),
4872
- define(1, ATOB, IE_SRC, INTL, ITERATOR_HELPER),
4873
- define(1, ATOB, INTL, ITERATOR_HELPER, NO_IE_SRC),
4874
- define
4875
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FROM_CODE_POINT, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4876
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4877
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4878
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4879
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
4880
- define
4881
- (
4882
- 0,
4883
- ASYNC_FUNCTION,
4884
- CALL_ON_GLOBAL,
4885
- FLAT,
4886
- FROM_CODE_POINT,
4887
- IE_SRC,
4888
- NAME,
4889
- NODECONSTRUCTOR,
4890
- SELF_OBJ
4891
- ),
4892
- define(1, ARRAY_ITERATOR, AT, ATOB, ITERATOR_HELPER, NO_IE_SRC),
4893
- define
4894
- (
4895
- 0,
4896
- ASYNC_FUNCTION,
4897
- CALL_ON_GLOBAL,
4898
- FILL,
4899
- FROM_CODE_POINT,
4900
- NAME,
4901
- NODECONSTRUCTOR,
4902
- SELF_OBJ
4903
- ),
4904
- define
4905
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4906
- define
4907
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4908
- define
4909
- (
4910
- 0,
4911
- ASYNC_FUNCTION,
4912
- CALL_ON_GLOBAL,
4913
- FILL,
4914
- FROM_CODE_POINT,
4915
- IE_SRC,
4916
- NAME,
4917
- NODECONSTRUCTOR,
4918
- SELF_OBJ
4919
- ),
4920
- define(1, AT, ATOB, INTL, ITERATOR_HELPER),
4921
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
4922
- define(1, ARRAY_ITERATOR, ATOB, ITERATOR_HELPER, SELF_OBJ),
4923
- define(1, ATOB, FILL, ITERATOR_HELPER, SELF_OBJ),
4924
- define(1, ATOB, FLAT, INTL, ITERATOR_HELPER),
4925
- define(1, ATOB, FLAT, ITERATOR_HELPER, SELF_OBJ),
4926
- define
4927
- (
4928
- 0,
4929
- ARRAY_ITERATOR,
4930
- ASYNC_FUNCTION,
4931
- CALL_ON_GLOBAL,
4932
- FROM_CODE_POINT,
4933
- NODECONSTRUCTOR,
4934
- SELF_OBJ
4935
- ),
4936
- define
4937
- (1, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NODECONSTRUCTOR, SELF_OBJ),
4938
- define
4939
- (1, ARRAY_ITERATOR, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NODECONSTRUCTOR, SELF_OBJ),
4940
- define
4941
- (
4942
- 1,
4943
- ARRAY_ITERATOR,
4944
- ASYNC_FUNCTION,
4945
- CALL_ON_GLOBAL,
4946
- FILL,
4947
- INCR_CHAR,
4948
- NODECONSTRUCTOR,
4949
- SELF_OBJ
4950
- ),
4951
- define
4952
- (
4953
- 1,
4954
- ARRAY_ITERATOR,
4955
- ASYNC_FUNCTION,
4956
- CALL_ON_GLOBAL,
4957
- FILL,
4958
- NODECONSTRUCTOR,
4959
- NO_FF_SRC,
4960
- SELF_OBJ
4961
- ),
4962
- define
4963
- (
4964
- 0,
4965
- ARRAY_ITERATOR,
4966
- ASYNC_FUNCTION,
4967
- CALL_ON_GLOBAL,
4968
- FROM_CODE_POINT,
4969
- NAME,
4970
- NODECONSTRUCTOR,
4971
- SELF_OBJ
4972
- ),
4973
- define
4974
- (
4975
- 1,
4976
- ARRAY_ITERATOR,
4977
- ASYNC_FUNCTION,
4978
- CALL_ON_GLOBAL,
4979
- FLAT,
4980
- NAME,
4981
- NODECONSTRUCTOR,
4982
- NO_FF_SRC,
4983
- SELF_OBJ
4984
- ),
4985
- define
4986
- (
4987
- 1,
4988
- ARRAY_ITERATOR,
4989
- ASYNC_FUNCTION,
4990
- CALL_ON_GLOBAL,
4991
- FLAT,
4992
- NAME,
4993
- NODECONSTRUCTOR,
4994
- NO_V8_SRC,
4995
- SELF_OBJ
4996
- ),
4997
- define
4998
- (
4999
- 0,
5000
- ARRAY_ITERATOR,
5001
- ASYNC_FUNCTION,
5002
- CALL_ON_GLOBAL,
5003
- FLAT,
5004
- FROM_CODE_POINT,
5005
- IE_SRC,
5006
- NAME,
5007
- NODECONSTRUCTOR,
5008
- SELF_OBJ
5009
- ),
5010
- define
5011
- (
5012
- 1,
5013
- ARRAY_ITERATOR,
5014
- ASYNC_FUNCTION,
5015
- CALL_ON_GLOBAL,
5016
- FILL,
5017
- NODECONSTRUCTOR,
5018
- NO_V8_SRC,
5019
- SELF_OBJ
5020
- ),
5021
- define
5022
- (
5023
- 0,
5024
- ARRAY_ITERATOR,
5025
- ASYNC_FUNCTION,
5026
- CALL_ON_GLOBAL,
5027
- FILL,
5028
- FROM_CODE_POINT,
5029
- IE_SRC,
5030
- NAME,
5031
- NODECONSTRUCTOR,
5032
- SELF_OBJ
5033
- ),
5034
- define
5035
- (
5036
- 1,
5037
- ARRAY_ITERATOR,
5038
- ASYNC_FUNCTION,
5039
- AT,
5040
- CALL_ON_GLOBAL,
5041
- NAME,
5042
- NODECONSTRUCTOR,
5043
- NO_FF_SRC,
5044
- SELF_OBJ
5045
- ),
5046
- define
5047
- (
5048
- 1,
5049
- ARRAY_ITERATOR,
5050
- ASYNC_FUNCTION,
5051
- AT,
5052
- CALL_ON_GLOBAL,
5053
- NAME,
5054
- NODECONSTRUCTOR,
5055
- NO_V8_SRC,
5056
- SELF_OBJ
5057
- ),
5058
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER),
5059
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER),
5060
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NO_V8_SRC),
5061
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER),
5062
- define(1, ASYNC_FUNCTION, IE_SRC, INTL, ITERATOR_HELPER),
5063
- define(1, ASYNC_FUNCTION, FLAT, INTL, ITERATOR_HELPER, NO_V8_SRC),
5064
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5065
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5066
- define
5067
- (0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5068
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, NODECONSTRUCTOR),
5069
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5070
- define(0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5071
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_V8_SRC, SELF_OBJ),
5072
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5073
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NO_V8_SRC, SELF_OBJ),
5074
- define
5075
- (
5076
- 0,
5077
- ASYNC_FUNCTION,
5078
- CALL_ON_GLOBAL,
5079
- FROM_CODE_POINT,
5080
- ITERATOR_HELPER,
5081
- NO_V8_SRC,
5082
- SELF_OBJ
5083
- ),
5084
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NO_IE_SRC),
5085
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NO_IE_SRC),
5086
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5087
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, V8_SRC),
5088
- define(1, ASYNC_FUNCTION, FF_SRC, INTL, ITERATOR_HELPER),
5089
- define(1, ASYNC_FUNCTION, FILL, INTL, ITERATOR_HELPER, NO_IE_SRC),
5090
- define(1, ASYNC_FUNCTION, FLAT, INTL, ITERATOR_HELPER, NO_IE_SRC),
5091
- define
5092
- (0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, NO_IE_SRC),
5093
- define(1, ASYNC_FUNCTION, FF_SRC, ITERATOR_HELPER, SELF_OBJ),
5094
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5095
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5096
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, V8_SRC),
5097
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, NO_IE_SRC),
5098
- define(0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
5099
- define
5100
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FF_SRC, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5101
- define
5102
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ, V8_SRC),
5103
- define
5104
- (
5105
- 0,
5106
- ASYNC_FUNCTION,
5107
- CALL_ON_GLOBAL,
5108
- FILL,
5109
- FROM_CODE_POINT,
5110
- ITERATOR_HELPER,
5111
- NO_IE_SRC,
5112
- SELF_OBJ
5113
- ),
5114
- define
5115
- (
5116
- 0,
5117
- ASYNC_FUNCTION,
5118
- CALL_ON_GLOBAL,
5119
- FLAT,
5120
- FROM_CODE_POINT,
5121
- ITERATOR_HELPER,
5122
- NO_IE_SRC,
5123
- SELF_OBJ
5124
- ),
5125
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5126
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
5127
- define
5128
- (
5129
- 0,
5130
- ASYNC_FUNCTION,
5131
- CALL_ON_GLOBAL,
5132
- FLAT,
5133
- FROM_CODE_POINT,
5134
- ITERATOR_HELPER,
5135
- NAME,
5136
- SELF_OBJ
5137
- ),
5138
- define(1, ATOB, ITERATOR_HELPER, NAME, NO_V8_SRC),
5139
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5140
- define(1, ATOB, INCR_CHAR, ITERATOR_HELPER, NAME),
5141
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, INTL, ITERATOR_HELPER, NAME),
5142
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5143
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, NO_FF_SRC),
5144
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, SELF_OBJ),
5145
- define(0, ATOB, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5146
- define(1, ATOB, FILL, ITERATOR_HELPER, NAME),
5147
- define(1, ATOB, IE_SRC, INTL, ITERATOR_HELPER, NAME),
5148
- define(0, ATOB, FILL, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME),
5149
- define(1, ATOB, FILL, IE_SRC, ITERATOR_HELPER, NAME),
5150
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME),
5151
- define(0, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER, NAME, SELF_OBJ),
5152
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5153
- define(1, ATOB, IE_SRC, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5154
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5155
- define(1, ATOB, FLAT, ITERATOR_HELPER, NAME),
5156
- define(0, ARRAY_ITERATOR, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER),
5157
- define(1, ARRAY_ITERATOR, ATOB, FILL, ITERATOR_HELPER, NO_V8_SRC),
5158
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FILL, ITERATOR_HELPER, SELF_OBJ),
5159
- define
5160
- (0, ARRAY_ITERATOR, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5161
- define(1, ARRAY_ITERATOR, ATOB, FILL, IE_SRC, ITERATOR_HELPER),
5162
- define
5163
- (
5164
- 0,
5165
- ASYNC_FUNCTION,
5166
- CALL_ON_GLOBAL,
5167
- FROM_CODE_POINT,
5168
- NODECONSTRUCTOR,
5169
- NO_IE_SRC,
5170
- SELF_OBJ
5171
- ),
5172
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FF_SRC, FLAT, NODECONSTRUCTOR, SELF_OBJ),
5173
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NODECONSTRUCTOR, SELF_OBJ, V8_SRC),
5174
- define
5175
- (
5176
- 0,
5177
- ASYNC_FUNCTION,
5178
- CALL_ON_GLOBAL,
5179
- FROM_CODE_POINT,
5180
- ITERATOR_HELPER,
5181
- NODECONSTRUCTOR,
5182
- NO_IE_SRC,
5183
- SELF_OBJ
5184
- ),
5185
- define
5186
- (
5187
- 0,
5188
- ASYNC_FUNCTION,
5189
- CALL_ON_GLOBAL,
5190
- FROM_CODE_POINT,
5191
- NAME,
5192
- NODECONSTRUCTOR,
5193
- NO_IE_SRC,
5194
- SELF_OBJ
5195
- ),
5196
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, NODECONSTRUCTOR, SELF_OBJ),
5197
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NODECONSTRUCTOR, SELF_OBJ, V8_SRC),
5198
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
5199
- define(0, ATOB, CALL_ON_GLOBAL, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, SELF_OBJ),
5200
- define(1, ATOB, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5201
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5202
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER),
5203
- define(1, ARRAY_ITERATOR, AT, ATOB, FILL, ITERATOR_HELPER),
5204
- define(1, ARRAY_ITERATOR, ATOB, FILL, ITERATOR_HELPER, NO_IE_SRC),
5205
- define(1, ATOB, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5206
- define(1, ATOB, FILL, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5207
- define
5208
- (0, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5209
- define(1, ASYNC_FUNCTION, AT, IE_SRC, ITERATOR_HELPER),
5210
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER, NO_IE_SRC),
5211
- define
5212
- (
5213
- 0,
5214
- ASYNC_FUNCTION,
5215
- AT,
5216
- CALL_ON_GLOBAL,
5217
- FROM_CODE_POINT,
5218
- ITERATOR_HELPER,
5219
- NODECONSTRUCTOR,
5220
- NO_IE_SRC,
5221
- SELF_OBJ
5222
- ),
5223
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, ITERATOR_HELPER, SELF_OBJ),
5224
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, ITERATOR_HELPER, SELF_OBJ, V8_SRC),
5225
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
5226
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5227
- define(1, ASYNC_FUNCTION, FILL, INCR_CHAR, ITERATOR_HELPER, NAME, NO_V8_SRC),
5228
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5229
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5230
- define
5231
- (0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5232
- define
5233
- (
5234
- 0,
5235
- ASYNC_FUNCTION,
5236
- FILL,
5237
- FROM_CODE_POINT,
5238
- INCR_CHAR,
5239
- ITERATOR_HELPER,
5240
- NAME,
5241
- NODECONSTRUCTOR,
5242
- NO_V8_SRC
5243
- ),
5244
- define
5245
- (
5246
- 0,
5247
- ASYNC_FUNCTION,
5248
- FILL,
5249
- FROM_CODE_POINT,
5250
- INCR_CHAR,
5251
- ITERATOR_HELPER,
5252
- NAME,
5253
- NO_V8_SRC,
5254
- SELF_OBJ
5255
- ),
5256
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, NAME),
5257
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5258
- define
5259
- (
5260
- 0,
5261
- ASYNC_FUNCTION,
5262
- CALL_ON_GLOBAL,
5263
- FROM_CODE_POINT,
5264
- IE_SRC,
5265
- ITERATOR_HELPER,
5266
- NAME,
5267
- SELF_OBJ
5268
- ),
5269
- define(1, ASYNC_FUNCTION, FF_SRC, ITERATOR_HELPER, NAME),
5270
- define
5271
- (
5272
- 0,
5273
- ASYNC_FUNCTION,
5274
- CALL_ON_GLOBAL,
5275
- FF_SRC,
5276
- FROM_CODE_POINT,
5277
- ITERATOR_HELPER,
5278
- NAME,
5279
- SELF_OBJ
5280
- ),
5281
- define
5282
- (0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5283
- define(1, ASYNC_FUNCTION, FLAT, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5284
- define(1, ASYNC_FUNCTION, AT, FLAT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5285
- define
5286
- (
5287
- 0,
5288
- ASYNC_FUNCTION,
5289
- CALL_ON_GLOBAL,
5290
- FLAT,
5291
- FROM_CODE_POINT,
5292
- IE_SRC,
5293
- ITERATOR_HELPER,
5294
- NAME,
5295
- SELF_OBJ
5296
- ),
5297
- define(1, ASYNC_FUNCTION, FF_SRC, FLAT, ITERATOR_HELPER, NAME, SELF_OBJ),
5298
- define
5299
- (
5300
- 0,
5301
- ASYNC_FUNCTION,
5302
- AT,
5303
- CALL_ON_GLOBAL,
5304
- FROM_CODE_POINT,
5305
- ITERATOR_HELPER,
5306
- NAME,
5307
- NO_V8_SRC,
5308
- SELF_OBJ
5309
- ),
5310
- define
5311
- (
5312
- 0,
5313
- ASYNC_FUNCTION,
5314
- CALL_ON_GLOBAL,
5315
- FF_SRC,
5316
- FLAT,
5317
- FROM_CODE_POINT,
5318
- ITERATOR_HELPER,
5319
- NAME,
5320
- SELF_OBJ
5321
- ),
5322
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5323
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5324
- define(0, ARRAY_ITERATOR, ATOB, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
5325
- define(1, ARRAY_ITERATOR, ATOB, FLAT, ITERATOR_HELPER, NO_V8_SRC),
5326
- define
5327
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FLAT, INCR_CHAR, ITERATOR_HELPER, SELF_OBJ),
5328
- define
5329
- (0, ARRAY_ITERATOR, ATOB, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5330
- define(1, ATOB, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5331
- define(1, ARRAY_ITERATOR, AT, ATOB, FLAT, ITERATOR_HELPER),
5332
- define(1, ARRAY_ITERATOR, ATOB, FLAT, IE_SRC, ITERATOR_HELPER),
5333
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5334
- define(1, ARRAY_ITERATOR, ATOB, FLAT, ITERATOR_HELPER, NO_IE_SRC),
5335
- define(1, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5336
- define(1, ATOB, FILL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5337
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, FROM_CODE_POINT, ITERATOR_HELPER),
5338
- define(1, ATOB, ITERATOR_HELPER, NAME, NO_IE_SRC),
5339
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5340
- define(1, ATOB, FILL, ITERATOR_HELPER, NAME, NO_IE_SRC),
5341
- define(1, ATOB, FLAT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5342
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NAME, SELF_OBJ),
5343
- define
5344
- (
5345
- 0,
5346
- ARRAY_ITERATOR,
5347
- ATOB,
5348
- CALL_ON_GLOBAL,
5349
- FLAT,
5350
- FROM_CODE_POINT,
5351
- ITERATOR_HELPER,
5352
- NAME,
5353
- SELF_OBJ
5354
- ),
5355
- define
5356
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5357
- define
5358
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, INCR_CHAR, ITERATOR_HELPER, NAME, SELF_OBJ),
5359
- define
5360
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NAME, NO_IE_SRC, SELF_OBJ),
5361
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_V8_SRC),
5362
- define(1, CAPITAL_HTML),
5363
- define(1, AT, ATOB, ITERATOR_HELPER, SELF_OBJ),
5364
- define(0, ARRAY_ITERATOR, ATOB, CAPITAL_HTML, FROM_CODE_POINT),
5365
- define(1, BARPROP),
3771
+ define(1),
3772
+ define(0, ITERATOR_HELPER),
3773
+ define(0, ARRAY_ITERATOR, CAPITAL_HTML),
3774
+ define(1, ARRAY_ITERATOR, ITERATOR_HELPER),
3775
+ define(1, AT, ITERATOR_HELPER),
3776
+ define(1, BARPROP, ITERATOR_HELPER),
5366
3777
  define(1, CAPITAL_HTML, ITERATOR_HELPER),
5367
- define(1, AT, ATOB, ITERATOR_HELPER, NAME),
5368
- define(0, ARRAY_ITERATOR, ATOB, BARPROP, CAPITAL_HTML, FROM_CODE_POINT),
3778
+ define(1, FLAT, ITERATOR_HELPER),
3779
+ define(1, IE_SRC, ITERATOR_HELPER),
3780
+ define(1, ITERATOR_HELPER, NO_IE_SRC),
3781
+ define(0, ARRAY_ITERATOR, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
3782
+ define(0, ARRAY_ITERATOR, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER),
3783
+ define(1, ARRAY_ITERATOR, BARPROP, IE_SRC, ITERATOR_HELPER),
3784
+ define(1, ARRAY_ITERATOR, CAPITAL_HTML, IE_SRC, ITERATOR_HELPER),
3785
+ define(0, ARRAY_ITERATOR, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
3786
+ define(1, ARRAY_ITERATOR, AT, FLAT, ITERATOR_HELPER),
3787
+ define(1, ARRAY_ITERATOR, AT, IE_SRC, ITERATOR_HELPER),
3788
+ define(1, ARRAY_ITERATOR, AT, ITERATOR_HELPER, NO_IE_SRC),
3789
+ define(1, ARRAY_ITERATOR, BARPROP, FLAT, ITERATOR_HELPER),
3790
+ define(1, ARRAY_ITERATOR, BARPROP, ITERATOR_HELPER, NO_IE_SRC),
3791
+ define(1, ARRAY_ITERATOR, CAPITAL_HTML, FLAT, ITERATOR_HELPER),
3792
+ define(1, ARRAY_ITERATOR, CAPITAL_HTML, ITERATOR_HELPER, NO_IE_SRC),
3793
+ define(0, ARRAY_ITERATOR, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
3794
+ define(1, ARRAY_ITERATOR, AT, ITERATOR_HELPER, NAME),
3795
+ define(1, ARRAY_ITERATOR, BARPROP, ITERATOR_HELPER, NAME),
3796
+ define(1, ARRAY_ITERATOR, CAPITAL_HTML, ITERATOR_HELPER, NAME),
3797
+ define(1, ARRAY_ITERATOR, FLAT, ITERATOR_HELPER, NO_V8_SRC),
3798
+ define(0, ARRAY_ITERATOR, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
3799
+ define(1, ARRAY_ITERATOR, FLAT, IE_SRC, ITERATOR_HELPER),
3800
+ define(1, ARRAY_ITERATOR, FLAT, ITERATOR_HELPER, NO_IE_SRC),
3801
+ define(1, ARRAY_ITERATOR, AT, FLAT, ITERATOR_HELPER, NO_V8_SRC),
3802
+ define(1, ARRAY_ITERATOR, BARPROP, FLAT, ITERATOR_HELPER, NO_V8_SRC),
3803
+ define(1, ARRAY_ITERATOR, CAPITAL_HTML, FLAT, ITERATOR_HELPER, NO_V8_SRC),
5369
3804
  ]
5370
3805
  );
5371
3806
 
@@ -5441,8 +3876,6 @@
5441
3876
  define(0, ARRAY_ITERATOR, CAPITAL_HTML, NO_V8_SRC),
5442
3877
  define(1, ARRAY_ITERATOR, AT, CAPITAL_HTML),
5443
3878
  define(1, ARRAY_ITERATOR, CAPITAL_HTML, FF_SRC, FLAT),
5444
- define(1, ARRAY_ITERATOR, CAPITAL_HTML, FILL, IE_SRC),
5445
- define(1, ARRAY_ITERATOR, CAPITAL_HTML, FILL, NO_IE_SRC),
5446
3879
  define(1, ARRAY_ITERATOR, CAPITAL_HTML, FLAT, IE_SRC),
5447
3880
  define(2, ARRAY_ITERATOR, CAPITAL_HTML),
5448
3881
  define(3, ARRAY_ITERATOR, AT, CAPITAL_HTML, IE_SRC),
@@ -5452,95 +3885,13 @@
5452
3885
  ]
5453
3886
  );
5454
3887
 
5455
- MAPPER_FORMATTER =
5456
- defineList
5457
- (
5458
- [
5459
- define
5460
- (
5461
- function (argName, accessor)
5462
- {
5463
- var otherArgName = chooseOtherArgName(argName);
5464
- var mapper =
5465
- 'Function("return function(' + otherArgName + '){return function(' + argName +
5466
- '){return ' + otherArgName + accessor + '}}")()';
5467
- return mapper;
5468
- }
5469
- ),
5470
- define
5471
- (
5472
- function (argName, accessor)
5473
- {
5474
- var mapper =
5475
- 'Function("return function(' + argName + '){return this' + accessor +
5476
- '}")().bind';
5477
- return mapper;
5478
- }
5479
- ),
5480
- define
5481
- (
5482
- function (argName, accessor)
5483
- {
5484
- var otherArgName = chooseOtherArgName(argName);
5485
- var mapper =
5486
- 'Function("return ' + otherArgName + '=>' + argName + '=>' + otherArgName +
5487
- accessor + '")()';
5488
- return mapper;
5489
- },
5490
- ARROW
5491
- ),
5492
- ],
5493
- [
5494
- define(0),
5495
- define(1, ARRAY_ITERATOR, ATOB),
5496
- define(0, NO_FF_SRC),
5497
- define(0, NO_V8_SRC),
5498
- define(1, ARRAY_ITERATOR, CAPITAL_HTML),
5499
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, SELF_OBJ),
5500
- define(0, ARRAY_ITERATOR, ATOB, FILL),
5501
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, FILL),
5502
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, IE_SRC),
5503
- define(0, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, IE_SRC, SELF_OBJ),
5504
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FILL, SELF_OBJ),
5505
- define(0, ARRAY_ITERATOR, ATOB, NO_IE_SRC),
5506
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, NO_IE_SRC),
5507
- define(0, ARRAY_ITERATOR, ATOB, FILL, IE_SRC),
5508
- define(0, ARRAY_ITERATOR, ATOB, FILL, INCR_CHAR, NO_V8_SRC),
5509
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, NO_IE_SRC, SELF_OBJ),
5510
- define(0, ARRAY_ITERATOR, AT, ATOB),
5511
- define(0, ARRAY_ITERATOR, AT, CAPITAL_HTML),
5512
- define(0, ARRAY_ITERATOR, ATOB, FF_SRC),
5513
- define(0, ARRAY_ITERATOR, ATOB, FLAT),
5514
- define(0, ARRAY_ITERATOR, ATOB, V8_SRC),
5515
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, FLAT),
5516
- define(0, ARRAY_ITERATOR, ATOB, FILL, NO_IE_SRC),
5517
- define(2),
5518
- ]
5519
- );
5520
-
5521
3888
  NATIVE_FUNCTION_INFOS =
5522
3889
  [
5523
3890
  define({ expr: 'FILTER', shift: 6 }),
5524
- define({ expr: 'FILL', shift: 4 }, FILL),
5525
3891
  define({ expr: 'FLAT', shift: 4 }, FLAT),
5526
3892
  define({ expr: 'AT', shift: 2 }, AT),
5527
3893
  ];
5528
3894
 
5529
- OPTIMAL_ARG_NAME =
5530
- defineList
5531
- (
5532
- [define('f'), define('undefined')],
5533
- [
5534
- define(0),
5535
- define(1, AT),
5536
- define(0, FLAT),
5537
- define(1, FILL, IE_SRC),
5538
- define(1, FILL, NO_IE_SRC),
5539
- define(0, FILL, FLAT, IE_SRC),
5540
- define(0, FILL, FLAT, NO_IE_SRC),
5541
- ]
5542
- );
5543
-
5544
3895
  OPTIMAL_B = defineList([define('B'), define('b')], [define(0), define(1, ARRAY_ITERATOR)]);
5545
3896
 
5546
3897
  OPTIMAL_RETURN_STRING =
@@ -5558,8 +3909,6 @@
5558
3909
  define(0, ARRAY_ITERATOR, CAPITAL_HTML, NO_V8_SRC),
5559
3910
  define(1, ARRAY_ITERATOR, AT, CAPITAL_HTML),
5560
3911
  define(1, ARRAY_ITERATOR, CAPITAL_HTML, FF_SRC, FLAT),
5561
- define(1, ARRAY_ITERATOR, CAPITAL_HTML, FILL, IE_SRC),
5562
- define(1, ARRAY_ITERATOR, CAPITAL_HTML, FILL, NO_IE_SRC),
5563
3912
  define(1, ARRAY_ITERATOR, CAPITAL_HTML, FLAT, IE_SRC),
5564
3913
  define(2),
5565
3914
  ]
@@ -6101,16 +4450,15 @@
6101
4450
  HexIntegerLiteral: '0[Xx]#HexDigit+',
6102
4451
  NumericLiteral: '#HexIntegerLiteral|#DecimalLiteral',
6103
4452
  Separator: '#SeparatorChar|//.*(?!.)|/\\*[\\s\\S]*?\\*/',
6104
- // U+180E is recognized as a separator in older browsers.
6105
- // U+FEFF is missed by /\s/ in Android Browser < 4.1.x.
6106
- SeparatorChar: '(?!\u180E)[\\s\uFEFF]',
4453
+ // U+180E is recognized as a separator in Internet Explorer.
4454
+ SeparatorChar: '(?!\u180E)\\s',
6107
4455
  SingleQuotedString: '\'(?:#EscapeSequence|(?![\'\\\\]).)*\'',
6108
4456
  UnicodeEscapeSequence: '\\\\u#HexDigit{4}',
6109
4457
  };
6110
4458
 
6111
4459
  var tokenCache = createEmpty();
6112
4460
 
6113
- // Reserved words and that cannot be written with escape sequences.
4461
+ // Reserved words that cannot be written with escape sequences.
6114
4462
  var INESCAPABLE_WORDS = ['false', 'null', 'true'];
6115
4463
 
6116
4464
  // This list includes reserved words and identifiers that would cause a change in a script's
@@ -6213,17 +4561,6 @@
6213
4561
  var SCREW_AS_STRING = 1;
6214
4562
  var SCREW_AS_BONDED_STRING = 2;
6215
4563
 
6216
- function gather(buffer, offset, count, groupBond, groupForceString)
6217
- {
6218
- var end = offset + count;
6219
- var groupSolutions = buffer._solutions.slice(offset, end);
6220
- var optimizerList = buffer._optimizerList;
6221
- if (optimizerList.length)
6222
- optimizeSolutions(optimizerList, groupSolutions, groupBond, groupForceString);
6223
- var str = gatherGroup(groupSolutions, groupBond, groupForceString);
6224
- return str;
6225
- }
6226
-
6227
4564
  function gatherGroup(solutions, bond, forceString)
6228
4565
  {
6229
4566
  var solution = new DynamicSolution();
@@ -6248,10 +4585,8 @@
6248
4585
  return str;
6249
4586
  }
6250
4587
 
6251
- function ScrewBuffer(screwMode, groupThreshold, optimizerList)
4588
+ function ScrewBuffer(screwMode, optimizerList)
6252
4589
  {
6253
- this._groupThreshold = groupThreshold;
6254
- this._maxSolutionCount = _Math_pow(2, groupThreshold - 1);
6255
4590
  this._optimizerList = optimizerList;
6256
4591
  this._screwMode = screwMode;
6257
4592
  this._solutions = [];
@@ -6270,8 +4605,6 @@
6270
4605
  function (solution)
6271
4606
  {
6272
4607
  var solutions = this._solutions;
6273
- if (solutions.length >= this._maxSolutionCount)
6274
- return false;
6275
4608
  solutions.push(solution);
6276
4609
  var appendLength = solution.appendLength;
6277
4610
  this._optimizerList.forEach
@@ -6284,62 +4617,18 @@
6284
4617
  }
6285
4618
  );
6286
4619
  this._length += appendLength;
6287
- return true;
6288
4620
  },
6289
- toString:
6290
- function ()
6291
- {
6292
- function collectOut(offset, count, maxGroupCount, groupBond)
6293
- {
6294
- var str;
6295
- if (count <= groupSize + 1)
6296
- str = gather(buffer, offset, count, groupBond);
6297
- else
6298
- {
6299
- maxGroupCount /= 2;
6300
- var halfCount = groupSize * maxGroupCount;
6301
- var capacity = 2 * halfCount - count;
6302
- var leftEndCount =
6303
- _Math_max
6304
- (
6305
- halfCount - capacity + capacity % (groupSize - 1),
6306
- (maxGroupCount / 2 ^ 0) * (groupSize + 1)
6307
- );
6308
- str =
6309
- collectOut(offset, leftEndCount, maxGroupCount) +
6310
- '+' +
6311
- collectOut(offset + leftEndCount, count - leftEndCount, maxGroupCount, true);
6312
- if (groupBond)
6313
- str = '(' + str + ')';
6314
- }
6315
- return str;
6316
- }
6317
-
6318
- var str;
6319
- var solutionCount = this._solutions.length;
6320
- var groupThreshold = this._groupThreshold;
4621
+ toString:
4622
+ function ()
4623
+ {
6321
4624
  var screwMode = this._screwMode;
6322
4625
  var bond = screwMode === SCREW_AS_BONDED_STRING;
6323
- if (solutionCount <= groupThreshold)
6324
- {
6325
- var forceString = screwMode !== SCREW_NORMAL;
6326
- str = gather(this, 0, solutionCount, bond, forceString);
6327
- }
6328
- else
6329
- {
6330
- var groupSize = groupThreshold;
6331
- var maxGroupCount = 2;
6332
- for (;;)
6333
- {
6334
- --groupSize;
6335
- var maxSolutionCountForDepth = groupSize * maxGroupCount;
6336
- if (solutionCount <= maxSolutionCountForDepth)
6337
- break;
6338
- maxGroupCount *= 2;
6339
- }
6340
- var buffer = this;
6341
- str = collectOut(0, solutionCount, maxGroupCount, bond);
6342
- }
4626
+ var forceString = screwMode !== SCREW_NORMAL;
4627
+ var groupSolutions = this._solutions.slice();
4628
+ var optimizerList = this._optimizerList;
4629
+ if (optimizerList.length)
4630
+ optimizeSolutions(optimizerList, groupSolutions, bond, forceString);
4631
+ var str = gatherGroup(groupSolutions, bond, forceString);
6343
4632
  return str;
6344
4633
  },
6345
4634
  }
@@ -6606,7 +4895,7 @@
6606
4895
  appendIndexer = false;
6607
4896
  toStringOpt = false;
6608
4897
  }
6609
- var expr = 'Function("return\\"" + ESCAPING_BACKSLASH + "' + escCode + '\\"")()';
4898
+ var expr = 'Function("return\\"\\\\' + escCode + '\\"")()';
6610
4899
  if (appendIndexer)
6611
4900
  expr += '[0]';
6612
4901
  var replacement = this.replaceExpr(expr, { default: false, toStringOpt: toStringOpt });
@@ -6651,8 +4940,6 @@
6651
4940
  return replacement;
6652
4941
  }
6653
4942
 
6654
- var ATOB_MASK = Feature.ATOB.mask;
6655
-
6656
4943
  var STATIC_CHAR_CACHE = createEmpty();
6657
4944
  var STATIC_CONST_CACHE = createEmpty();
6658
4945
  var STATIC_ENCODER = new Encoder(MASK_EMPTY);
@@ -6699,14 +4986,6 @@
6699
4986
  }
6700
4987
  }
6701
4988
 
6702
- function defaultResolveCharacter(encoder, char)
6703
- {
6704
- var charCode = char.charCodeAt();
6705
- var atobOpt = charCode < 0x100;
6706
- var solution = encoder._createCharDefaultSolution(char, charCode, atobOpt, true, true, true);
6707
- return solution;
6708
- }
6709
-
6710
4989
  function findOptimalSolution(encoder, source, entries, defaultSolutionType)
6711
4990
  {
6712
4991
  var optimalSolution;
@@ -6929,8 +5208,6 @@
6929
5208
  function (str, index)
6930
5209
  {
6931
5210
  regExp.lastIndex = index;
6932
- // String.prototype.match doesn't work well with sticky regular expressions in Node.js <
6933
- // 6.5.
6934
5211
  var match = regExp.exec(str);
6935
5212
  if (match)
6936
5213
  return match[0];
@@ -6961,37 +5238,44 @@
6961
5238
  function (char, charCode, atobOpt, charCodeOpt, escSeqOpt, unescapeOpt)
6962
5239
  {
6963
5240
  var solution;
6964
- if (atobOpt && this.hasFeatures(ATOB_MASK))
5241
+ var solutions = [];
5242
+ if (atobOpt)
6965
5243
  {
6966
5244
  solution =
6967
5245
  resolveCharByDefaultMethod(this, char, charCode, replaceCharByAtob, 'atob');
5246
+ solutions.push(solution);
6968
5247
  }
6969
- else
5248
+ if (charCodeOpt)
6970
5249
  {
6971
- var solutions = [];
6972
- if (charCodeOpt)
6973
- {
6974
- solution =
6975
- resolveCharByDefaultMethod
6976
- (this, char, charCode, replaceCharByCharCode, 'char-code');
6977
- solutions.push(solution);
6978
- }
6979
- if (escSeqOpt)
6980
- {
6981
- solution =
6982
- resolveCharByDefaultMethod
6983
- (this, char, charCode, replaceCharByEscSeq, 'esc-seq');
6984
- solutions.push(solution);
6985
- }
6986
- if (unescapeOpt)
6987
- {
6988
- solution =
6989
- resolveCharByDefaultMethod
6990
- (this, char, charCode, replaceCharByUnescape, 'unescape');
6991
- solutions.push(solution);
6992
- }
6993
- solution = shortestOf.apply(null, solutions);
5250
+ solution =
5251
+ resolveCharByDefaultMethod
5252
+ (this, char, charCode, replaceCharByCharCode, 'char-code');
5253
+ solutions.push(solution);
5254
+ }
5255
+ if (escSeqOpt)
5256
+ {
5257
+ solution =
5258
+ resolveCharByDefaultMethod(this, char, charCode, replaceCharByEscSeq, 'esc-seq');
5259
+ solutions.push(solution);
5260
+ }
5261
+ if (unescapeOpt)
5262
+ {
5263
+ solution =
5264
+ resolveCharByDefaultMethod(this, char, charCode, replaceCharByUnescape, 'unescape');
5265
+ solutions.push(solution);
6994
5266
  }
5267
+ solution = shortestOf.apply(null, solutions);
5268
+ return solution;
5269
+ },
5270
+
5271
+ _defaultResolveCharacter:
5272
+ function (char)
5273
+ {
5274
+ var charCode = char.charCodeAt();
5275
+ var atobOpt = charCode < 0x100;
5276
+ var stdOpt = !atobOpt;
5277
+ var solution =
5278
+ this._createCharDefaultSolution(char, charCode, atobOpt, stdOpt, stdOpt, stdOpt);
6995
5279
  return solution;
6996
5280
  },
6997
5281
 
@@ -7125,18 +5409,6 @@
7125
5409
  return included;
7126
5410
  },
7127
5411
 
7128
- // The maximum value that can be safely used as the first group threshold of a ScrewBuffer.
7129
- // "Safely" means such that the extreme decoding test is passed in all engines.
7130
- // This value is typically limited by the free memory available on the stack, and since the
7131
- // memory layout of the stack changes at runtime in an unstable way, the maximum safe value
7132
- // cannot be determined exactly.
7133
- // The lowest recorded value so far is 1844, measured in an Android Browser 4.2.2 running on
7134
- // an Intel Atom emulator.
7135
- // Internet Explorer on Windows Phone occasionally failed the extreme decoding test in a
7136
- // non-reproducible manner, although the issue seems to be related to the output size rather
7137
- // than the grouping threshold setting.
7138
- maxGroupThreshold: 1800,
7139
-
7140
5412
  replaceExpr:
7141
5413
  function (expr, optimize)
7142
5414
  {
@@ -7220,7 +5492,7 @@
7220
5492
  options = options || { };
7221
5493
  var optimizerList = this._getOptimizerList(str, options.optimize);
7222
5494
  var screwMode = options.screwMode || SCREW_NORMAL;
7223
- var buffer = new ScrewBuffer(screwMode, this.maxGroupThreshold, optimizerList);
5495
+ var buffer = new ScrewBuffer(screwMode, optimizerList);
7224
5496
  var firstSolution = options.firstSolution;
7225
5497
  var maxLength = options.maxLength;
7226
5498
  if (firstSolution)
@@ -7244,7 +5516,8 @@
7244
5516
  var char = str[index++];
7245
5517
  solution = this.resolveCharacter(char);
7246
5518
  }
7247
- if (!buffer.append(solution) || buffer.length > maxLength)
5519
+ buffer.append(solution);
5520
+ if (buffer.length > maxLength)
7248
5521
  return;
7249
5522
  }
7250
5523
  var replacement = _String$1(buffer);
@@ -7302,7 +5575,7 @@
7302
5575
  if (entries)
7303
5576
  solution = findOptimalSolution(this, char, entries);
7304
5577
  if (!solution)
7305
- solution = defaultResolveCharacter(this, char);
5578
+ solution = this._defaultResolveCharacter(char);
7306
5579
  }
7307
5580
  else
7308
5581
  {
@@ -7474,6 +5747,238 @@
7474
5747
  return figurator;
7475
5748
  }
7476
5749
 
5750
+ /**
5751
+ * An object that exposes properties used to split a string into an array of strings or to join
5752
+ * array elements into a string.
5753
+ *
5754
+ * @typedef Delimiter
5755
+ *
5756
+ * @property {string} separator
5757
+ * An express-parsable expression used as an argument for `String.prototype.split` to split a string
5758
+ * into an array of strings.
5759
+ *
5760
+ * @property {string} joiner
5761
+ * The joiner can be any string. A joiner is inserted between adjacent strings in an array in order
5762
+ * to join them into a single string.
5763
+ */
5764
+
5765
+ function replaceJoinedArrayString(array, joiner, maxLength)
5766
+ {
5767
+ var str = array.join(joiner);
5768
+ var options = { maxLength: maxLength, screwMode: SCREW_AS_BONDED_STRING };
5769
+ var replacement = replaceStaticString(str, options);
5770
+ return replacement;
5771
+ }
5772
+
5773
+ function undefinedAsString(replacement)
5774
+ {
5775
+ if (replacement === '[][[]]')
5776
+ replacement += '+[]';
5777
+ return replacement;
5778
+ }
5779
+
5780
+ /**
5781
+ * Replaces a given array of strings with equivalent JSFuck code.
5782
+ *
5783
+ * Array elements may only contain characters with static definitions in their string
5784
+ * representations.
5785
+ *
5786
+ * @function Encoder#replaceStringArray
5787
+ *
5788
+ * @param {string[]} array
5789
+ * The string array to replace. Empty arrays are not supported.
5790
+ *
5791
+ * @param {Delimiter[]} insertions
5792
+ * An array of delimiters of which at most one will be used to compose a joined string and split it
5793
+ * into an array of strings.
5794
+ *
5795
+ * The encoder can pick an insertion and insert a joiner between any two adjacent elements to mark
5796
+ * the boundary between them. The separator is then used to split the concatenated string back into
5797
+ * its elements.
5798
+ *
5799
+ * @param {Delimiter[]|null} [substitutions]
5800
+ * An array of delimiters, specifying substitutions to be applied to the input elements.
5801
+ *
5802
+ * All substitutions are applied on each element of the input array, in the order they are
5803
+ * specified.
5804
+ *
5805
+ * Substitutions are expensive in two ways: they create additional overhead and prevent certain
5806
+ * optimizations for short arrays to be made. To allow all optimizations to be performed, omit this
5807
+ * argument or set it to null instead of specifying an empty array.
5808
+ *
5809
+ * @param {boolean} [allowZeroForEmptyElements=false]
5810
+ * Indicates whether empty string elements in the input array may be replaced with zeros.
5811
+ *
5812
+ * @param {boolean} [forceString=false]
5813
+ * Indicates whether the elements in the replacement expression should evaluate to strings.
5814
+ *
5815
+ * If this argument is falsy, the elements in the replacement expression may not be equal to those
5816
+ * in the input array, but will have the same string representation.
5817
+ *
5818
+ * Regardless of this argument, the string representation of the value of the whole replacement
5819
+ * expression will be always the same as the string representation of the input array after applying
5820
+ * substitutions (including optional empty string to zero replacements) to its elements.
5821
+ *
5822
+ * @param {number} [maxLength=(NaN)]
5823
+ * The maximum length of the replacement expression.
5824
+ *
5825
+ * If the replacement expression exceeds the specified length, the return value is `undefined`.
5826
+ *
5827
+ * If this parameter is `NaN`, then no length limit is imposed.
5828
+ *
5829
+ * @returns {string|undefined}
5830
+ * The replacement string or `undefined`.
5831
+ */
5832
+ function replaceStringArray
5833
+ (array, insertions, substitutions, allowZeroForEmptyElements, forceString, maxLength)
5834
+ {
5835
+ var replacement;
5836
+ var count = array.length;
5837
+ // Don't even try the split approach for two or less elements if the concat approach can be
5838
+ // applied.
5839
+ if (substitutions || count > 2)
5840
+ {
5841
+ var preReplacement =
5842
+ function ()
5843
+ {
5844
+ // Length of the shortest string replacement "([]+[])".
5845
+ var STRING_REPLACEMENT_MIN_LENGTH = 7;
5846
+
5847
+ // This is for the overhead of "[" + "](" + ")" plus the length of the shortest
5848
+ // separator replacement "[]".
5849
+ var SEPARATOR_MIN_OVERHEAD = 6;
5850
+
5851
+ // This is for the overhead of "[" + "](" + ")" plus the length of the shortest
5852
+ // joiner replacement "[]".
5853
+ var JOINER_MIN_OVERHEAD = 6;
5854
+
5855
+ var joinCount = substitutions ? substitutions.length : 0;
5856
+ var splitCount = joinCount + 1;
5857
+ var maxSplitReplacementLength =
5858
+ (maxLength - STRING_REPLACEMENT_MIN_LENGTH) / splitCount - SEPARATOR_MIN_OVERHEAD;
5859
+ var splitReplacement =
5860
+ this.replaceString('split', { maxLength: maxSplitReplacementLength, optimize: true });
5861
+ if (!splitReplacement)
5862
+ return;
5863
+ var preReplacement = '';
5864
+ if (joinCount)
5865
+ {
5866
+ var maxJoinReplacementLength =
5867
+ (
5868
+ maxLength - STRING_REPLACEMENT_MIN_LENGTH -
5869
+ splitCount * (splitReplacement.length + SEPARATOR_MIN_OVERHEAD)
5870
+ ) /
5871
+ joinCount -
5872
+ JOINER_MIN_OVERHEAD;
5873
+ var joinReplacement =
5874
+ this.replaceString('join', { maxLength: maxJoinReplacementLength });
5875
+ if (!joinReplacement)
5876
+ return;
5877
+ substitutions.forEach
5878
+ (
5879
+ function (substitution)
5880
+ {
5881
+ var separatorReplacement =
5882
+ undefinedAsString(this.replaceExpr(substitution.separator));
5883
+ var joinerReplacement =
5884
+ undefinedAsString(this.replaceString(substitution.joiner));
5885
+ preReplacement +=
5886
+ '[' + splitReplacement + '](' + separatorReplacement + ')[' +
5887
+ joinReplacement + '](' + joinerReplacement + ')';
5888
+ },
5889
+ this
5890
+ );
5891
+ }
5892
+ preReplacement += '[' + splitReplacement + ']';
5893
+ return preReplacement;
5894
+ }
5895
+ .call(this);
5896
+ }
5897
+ if (!substitutions && count > 1)
5898
+ {
5899
+ var concatReplacement =
5900
+ this.replaceString('concat', { maxLength: maxLength, optimize: true });
5901
+ }
5902
+ if (preReplacement)
5903
+ // Approach 1: (array[0] + joiner + array[1] + joiner + array[2]...).split(separator)
5904
+ {
5905
+ // 2 is for the additional overhead of "(" + ")".
5906
+ var maxBulkLength = maxLength - (preReplacement.length + 2);
5907
+ var optimalStrReplacement;
5908
+ var optimalSeparatorReplacement;
5909
+ insertions.forEach
5910
+ (
5911
+ function (insertion)
5912
+ {
5913
+ var strReplacement =
5914
+ replaceJoinedArrayString(array, insertion.joiner, maxBulkLength);
5915
+ if (!strReplacement)
5916
+ return;
5917
+ var separatorReplacement = undefinedAsString(this.replaceExpr(insertion.separator));
5918
+ var bulkLength = strReplacement.length + separatorReplacement.length;
5919
+ if (!(bulkLength > maxBulkLength))
5920
+ {
5921
+ maxBulkLength = bulkLength;
5922
+ optimalStrReplacement = strReplacement;
5923
+ optimalSeparatorReplacement = separatorReplacement;
5924
+ }
5925
+ },
5926
+ this
5927
+ );
5928
+ if (optimalStrReplacement)
5929
+ {
5930
+ replacement =
5931
+ optimalStrReplacement + preReplacement + '(' + optimalSeparatorReplacement + ')';
5932
+ maxLength = replacement.length - 1;
5933
+ }
5934
+ }
5935
+ if
5936
+ (
5937
+ !substitutions &&
5938
+ (
5939
+ count <= 1 ||
5940
+ concatReplacement &&
5941
+ // 4 is the length of the shortest possible replacement "[[]]".
5942
+ // 7 is the length of the shortest possible additional overhead for each following array
5943
+ // element, as in "[" + "](+[])" or "[" + "](![])".
5944
+ !(4 + (concatReplacement.length + 7) * (count - 1) > maxLength)
5945
+ )
5946
+ )
5947
+ // Approach 2: [array[0]].concat(array[1]).concat(array[2])...
5948
+ {
5949
+ var arrayReplacement;
5950
+ var options = { screwMode: forceString ? SCREW_AS_STRING : SCREW_NORMAL };
5951
+ if
5952
+ (
5953
+ !array.some
5954
+ (
5955
+ function (element)
5956
+ {
5957
+ var elementReplacement =
5958
+ undefinedAsString(replaceStaticString(element, options));
5959
+ if (arrayReplacement)
5960
+ {
5961
+ if (elementReplacement === '[]')
5962
+ elementReplacement = allowZeroForEmptyElements ? '+[]' : '[[]]';
5963
+ arrayReplacement +=
5964
+ '[' + concatReplacement + '](' + elementReplacement + ')';
5965
+ }
5966
+ else
5967
+ arrayReplacement = '[' + elementReplacement + ']';
5968
+ var result = arrayReplacement.length > maxLength;
5969
+ return result;
5970
+ }
5971
+ )
5972
+ )
5973
+ replacement = arrayReplacement;
5974
+ }
5975
+ return replacement;
5976
+ }
5977
+
5978
+ var ENCODING_TYPE_COMBINED = 'combined';
5979
+ var ENCODING_TYPE_EXPRESSION = 'expression';
5980
+ var ENCODING_TYPE_TEXT = 'text';
5981
+
7477
5982
  var FALSE_FREE_DELIMITER = { joiner: 'false', separator: 'false' };
7478
5983
  var FALSE_TRUE_DELIMITER = { joiner: '', separator: 'Function("return/(?=false|true)/")()' };
7479
5984
 
@@ -7556,7 +6061,7 @@
7556
6061
  }
7557
6062
 
7558
6063
  function createCharKeyArrayString
7559
- (encoder, input, charMap, insertions, substitutions, forceString, maxLength)
6064
+ (encoder, input, charMap, insertions, substitutions, areKeysFigures, maxLength)
7560
6065
  {
7561
6066
  var charKeyArray =
7562
6067
  _Array_prototype_map_call
@@ -7569,7 +6074,8 @@
7569
6074
  }
7570
6075
  );
7571
6076
  var charKeyArrayStr =
7572
- encoder.replaceStringArray(charKeyArray, insertions, substitutions, forceString, maxLength);
6077
+ encoder.replaceStringArray
6078
+ (charKeyArray, insertions, substitutions, !areKeysFigures, areKeysFigures, maxLength);
7573
6079
  return charKeyArrayStr;
7574
6080
  }
7575
6081
 
@@ -7755,10 +6261,17 @@
7755
6261
  var figureMaxLength = maxLength - legend.length;
7756
6262
  var figureLegend =
7757
6263
  encoder.replaceStringArray
7758
- (figures, figureLegendInsertions, null, true, figureMaxLength - minCharIndexArrayStrLength);
6264
+ (
6265
+ figures,
6266
+ figureLegendInsertions,
6267
+ null,
6268
+ false,
6269
+ true,
6270
+ figureMaxLength - minCharIndexArrayStrLength
6271
+ );
7759
6272
  if (!figureLegend)
7760
6273
  return;
7761
- var keyFigureArrayStr =
6274
+ var charIndexFigureArrayStr =
7762
6275
  createCharKeyArrayString
7763
6276
  (
7764
6277
  encoder,
@@ -7769,14 +6282,14 @@
7769
6282
  true,
7770
6283
  figureMaxLength - figureLegend.length
7771
6284
  );
7772
- if (!keyFigureArrayStr)
6285
+ if (!charIndexFigureArrayStr)
7773
6286
  return;
7774
- var formatter = encoder.findDefinition(MAPPER_FORMATTER);
7775
- var argName = 'undefined';
6287
+ var formatMapper = encoder.findDefinition(FORMAT_MAPPER_SHORT);
6288
+ var argName = formatMapper.argName;
7776
6289
  var accessor = '.indexOf(' + argName + ')';
7777
- var mapper = formatter(argName, accessor);
6290
+ var mapper = formatMapper(accessor);
7778
6291
  var charIndexArrayStr =
7779
- createJSFuckArrayMapping(encoder, keyFigureArrayStr, mapper, figureLegend);
6292
+ createJSFuckArrayMapping(encoder, charIndexFigureArrayStr, mapper, figureLegend);
7780
6293
  var output = encoder.createDictEncoding(legend, charIndexArrayStr, maxLength);
7781
6294
  return output;
7782
6295
  }
@@ -7803,29 +6316,7 @@
7803
6316
  function encodeText(encoder, input, screwMode, unitPath, maxLength)
7804
6317
  {
7805
6318
  var output =
7806
- callStrategies
7807
- (
7808
- encoder,
7809
- input,
7810
- { screwMode: screwMode },
7811
- [
7812
- 'byDenseFigures',
7813
- 'bySparseFigures',
7814
- 'byDictRadix5AmendedBy3',
7815
- 'byDictRadix4AmendedBy2',
7816
- 'byDictRadix4AmendedBy1',
7817
- 'byDictRadix5',
7818
- 'byDictRadix3AmendedBy1',
7819
- 'byDictRadix4',
7820
- 'byDict',
7821
- 'byCodePointsRadix4',
7822
- 'byCharCodesRadix4',
7823
- 'byCodePoints',
7824
- 'byCharCodes',
7825
- 'plain',
7826
- ],
7827
- unitPath
7828
- );
6319
+ callStrategies(encoder, input, { screwMode: screwMode }, TEXT_STRATEGY_NAMES, unitPath);
7829
6320
  if (output != null && !(output.length > maxLength))
7830
6321
  return output;
7831
6322
  }
@@ -7935,13 +6426,6 @@
7935
6426
  return strCodes;
7936
6427
  }
7937
6428
 
7938
- function undefinedAsString(replacement)
7939
- {
7940
- if (replacement === '[][[]]')
7941
- replacement += '+[]';
7942
- return replacement;
7943
- }
7944
-
7945
6429
  function wrapWithCall(str)
7946
6430
  {
7947
6431
  var output = this.resolveConstant('Function').replacement + '(' + str + ')()';
@@ -7963,12 +6447,10 @@
7963
6447
 
7964
6448
  (function ()
7965
6449
  {
7966
- function defineStrategy(strategy, minInputLength, expressionMode, featureObj)
6450
+ function defineStrategy(strategy, encodingType, minInputLength, featureObj)
7967
6451
  {
6452
+ strategy.encodingType = encodingType;
7968
6453
  strategy.minInputLength = minInputLength;
7969
- if (expressionMode === undefined)
7970
- expressionMode = false;
7971
- strategy.expressionMode = expressionMode;
7972
6454
  if (featureObj === undefined)
7973
6455
  featureObj = Feature.DEFAULT;
7974
6456
  strategy.mask = featureObj.mask;
@@ -8002,6 +6484,7 @@
8002
6484
  var output = this._encodeByCharCodes(inputData, undefined, maxLength);
8003
6485
  return output;
8004
6486
  },
6487
+ ENCODING_TYPE_TEXT,
8005
6488
  2
8006
6489
  ),
8007
6490
 
@@ -8022,6 +6505,7 @@
8022
6505
  var output = this._encodeByCharCodes(inputData, 4, maxLength);
8023
6506
  return output;
8024
6507
  },
6508
+ ENCODING_TYPE_TEXT,
8025
6509
  25
8026
6510
  ),
8027
6511
 
@@ -8041,8 +6525,8 @@
8041
6525
  var output = this._encodeByCodePoints(inputData, undefined, maxLength);
8042
6526
  return output;
8043
6527
  },
6528
+ ENCODING_TYPE_TEXT,
8044
6529
  3,
8045
- undefined,
8046
6530
  Feature.FROM_CODE_POINT
8047
6531
  ),
8048
6532
 
@@ -8062,8 +6546,8 @@
8062
6546
  var output = this._encodeByCodePoints(inputData, 4, maxLength);
8063
6547
  return output;
8064
6548
  },
8065
- 30,
8066
- undefined,
6549
+ ENCODING_TYPE_TEXT,
6550
+ 29,
8067
6551
  Feature.FROM_CODE_POINT
8068
6552
  ),
8069
6553
 
@@ -8085,20 +6569,21 @@
8085
6569
  var output = this._encodeByDenseFigures(inputData, maxLength);
8086
6570
  return output;
8087
6571
  },
8088
- 1888
6572
+ ENCODING_TYPE_TEXT,
6573
+ 1881
8089
6574
  ),
8090
6575
 
8091
6576
  /* -------------------------------------------------------------------------------------- *\
8092
6577
 
8093
- Encodes "NINE" as:
6578
+ Encodes "FIFTY" as:
8094
6579
 
8095
- "false2falsefalse1".split(false).map("".charAt.bind("NEI")).join([])
6580
+ "false1falsefalse2false3".split(false).map("".charAt.bind("FITY")).join([])
8096
6581
 
8097
6582
  (split strategy)
8098
6583
 
8099
6584
  Or:
8100
6585
 
8101
- [0].concat(2).concat(0).concat(1).map("".charAt.bind("NEI")).join([])
6586
+ [[]].concat(1).concat(0).concat(2).concat(3).map("".charAt.bind("FITY")).join([])
8102
6587
 
8103
6588
  (concat strategy)
8104
6589
 
@@ -8112,7 +6597,8 @@
8112
6597
  var output = this._encodeByDict(inputData, undefined, undefined, maxLength);
8113
6598
  return output;
8114
6599
  },
8115
- 2
6600
+ ENCODING_TYPE_TEXT,
6601
+ 3
8116
6602
  ),
8117
6603
 
8118
6604
  /* -------------------------------------------------------------------------------------- *\
@@ -8141,7 +6627,8 @@
8141
6627
  var output = this._encodeByDict(inputData, 3, 1, maxLength);
8142
6628
  return output;
8143
6629
  },
8144
- 136
6630
+ ENCODING_TYPE_TEXT,
6631
+ 134
8145
6632
  ),
8146
6633
 
8147
6634
  /* -------------------------------------------------------------------------------------- *\
@@ -8177,7 +6664,8 @@
8177
6664
  var output = this._encodeByDict(inputData, 4, 0, maxLength);
8178
6665
  return output;
8179
6666
  },
8180
- 160
6667
+ ENCODING_TYPE_TEXT,
6668
+ 112
8181
6669
  ),
8182
6670
 
8183
6671
  /* -------------------------------------------------------------------------------------- *\
@@ -8206,7 +6694,8 @@
8206
6694
  var output = this._encodeByDict(inputData, 4, 1, maxLength);
8207
6695
  return output;
8208
6696
  },
8209
- 218
6697
+ ENCODING_TYPE_TEXT,
6698
+ 118
8210
6699
  ),
8211
6700
 
8212
6701
  /* -------------------------------------------------------------------------------------- *\
@@ -8237,7 +6726,8 @@
8237
6726
  var output = this._encodeByDict(inputData, 4, 2, maxLength);
8238
6727
  return output;
8239
6728
  },
8240
- 263
6729
+ ENCODING_TYPE_TEXT,
6730
+ 178
8241
6731
  ),
8242
6732
 
8243
6733
  /* -------------------------------------------------------------------------------------- *\
@@ -8274,7 +6764,41 @@
8274
6764
  var output = this._encodeByDict(inputData, 5, 0, maxLength);
8275
6765
  return output;
8276
6766
  },
8277
- 223
6767
+ ENCODING_TYPE_TEXT,
6768
+ 172
6769
+ ),
6770
+
6771
+ /* -------------------------------------------------------------------------------------- *\
6772
+
6773
+ Encodes "SIXTEEN" as:
6774
+
6775
+ "1false0false10false2falsetruefalsetruefalseundefined".split(true).join(3).split("undefined"
6776
+ ).join(4).split(false).map(Function(
6777
+ "return function(undefined){return this[parseInt(undefined,5)]}")().bind("ISTENX")).join([])
6778
+
6779
+ (simple)
6780
+
6781
+ Or:
6782
+
6783
+ "1falsetruefalse10false2falsefalsefalseundefined".split(true).join(3).split("undefined").
6784
+ join(4).split(false).map(Function(
6785
+ "return function(undefined){return this[parseInt(+undefined,5)]}")().bind("ESTINX")).join([]
6786
+ )
6787
+
6788
+ (with coercion)
6789
+
6790
+ \* -------------------------------------------------------------------------------------- */
6791
+
6792
+ byDictRadix5AmendedBy2:
6793
+ defineStrategy
6794
+ (
6795
+ function (inputData, maxLength)
6796
+ {
6797
+ var output = this._encodeByDict(inputData, 5, 2, maxLength);
6798
+ return output;
6799
+ },
6800
+ ENCODING_TYPE_TEXT,
6801
+ 193
8278
6802
  ),
8279
6803
 
8280
6804
  /* -------------------------------------------------------------------------------------- *\
@@ -8306,7 +6830,8 @@
8306
6830
  var output = this._encodeByDict(inputData, 5, 3, maxLength);
8307
6831
  return output;
8308
6832
  },
8309
- 570
6833
+ ENCODING_TYPE_TEXT,
6834
+ 506
8310
6835
  ),
8311
6836
 
8312
6837
  /* -------------------------------------------------------------------------------------- *\
@@ -8327,6 +6852,7 @@
8327
6852
  var output = this._encodeBySparseFigures(inputData, maxLength);
8328
6853
  return output;
8329
6854
  },
6855
+ ENCODING_TYPE_TEXT,
8330
6856
  347
8331
6857
  ),
8332
6858
 
@@ -8345,8 +6871,8 @@
8345
6871
  var output = this._encodeExpress(input, maxLength);
8346
6872
  return output;
8347
6873
  },
8348
- undefined,
8349
- true
6874
+ ENCODING_TYPE_EXPRESSION,
6875
+ 0
8350
6876
  ),
8351
6877
 
8352
6878
  /* -------------------------------------------------------------------------------------- *\
@@ -8365,7 +6891,9 @@
8365
6891
  { maxLength: maxLength, optimize: true, screwMode: inputData.screwMode };
8366
6892
  var output = this.replaceString(input, options);
8367
6893
  return output;
8368
- }
6894
+ },
6895
+ ENCODING_TYPE_TEXT,
6896
+ 0
8369
6897
  ),
8370
6898
 
8371
6899
  /* -------------------------------------------------------------------------------------- *\
@@ -8383,12 +6911,34 @@
8383
6911
  var wrapper = inputData.wrapper;
8384
6912
  var output = encodeAndWrapText(this, input, wrapper, undefined, maxLength);
8385
6913
  return output;
8386
- }
6914
+ },
6915
+ ENCODING_TYPE_COMBINED,
6916
+ 0
8387
6917
  ),
8388
6918
  };
8389
6919
  }
8390
6920
  )();
8391
6921
 
6922
+ var TEXT_STRATEGY_NAMES =
6923
+ _Object_keys$1(STRATEGIES).filter
6924
+ (
6925
+ function (strategyName)
6926
+ {
6927
+ var returnValue = STRATEGIES[strategyName].encodingType === ENCODING_TYPE_TEXT;
6928
+ return returnValue;
6929
+ }
6930
+ )
6931
+ .sort
6932
+ (
6933
+ function (strategyName1, strategyName2)
6934
+ {
6935
+ var minInputLength1 = STRATEGIES[strategyName1].minInputLength;
6936
+ var minInputLength2 = STRATEGIES[strategyName2].minInputLength;
6937
+ var diff = minInputLength2 - minInputLength1;
6938
+ return diff;
6939
+ }
6940
+ );
6941
+
8392
6942
  assignNoEnum$1
8393
6943
  (
8394
6944
  Encoder.prototype,
@@ -8546,7 +7096,7 @@
8546
7096
  return output;
8547
7097
  },
8548
7098
 
8549
- _maxDecodableArgs: 65533, // Limit imposed by Internet Explorer.
7099
+ _maxDecodableArgs: 65533, // Limit imposed by Internet Explorer.
8550
7100
 
8551
7101
  createDictEncoding:
8552
7102
  function (legend, charIndexArrayStr, maxLength, radix, coerceToInt)
@@ -8554,11 +7104,11 @@
8554
7104
  var mapper;
8555
7105
  if (radix)
8556
7106
  {
8557
- var formatter = this.findDefinition(MAPPER_FORMATTER);
8558
- var argName = this.findDefinition(OPTIMAL_ARG_NAME);
7107
+ var formatMapper = this.findDefinition(FORMAT_MAPPER_LONG);
7108
+ var argName = formatMapper.argName;
8559
7109
  var parseIntArg = (coerceToInt ? '+' : '') + argName;
8560
7110
  var accessor = '[parseInt(' + parseIntArg + ',' + radix + ')]';
8561
- mapper = formatter(argName, accessor);
7111
+ mapper = formatMapper(accessor);
8562
7112
  }
8563
7113
  else
8564
7114
  mapper = '"".charAt.bind';
@@ -8575,232 +7125,11 @@
8575
7125
  function (array, maxLength)
8576
7126
  {
8577
7127
  var result =
8578
- this.replaceStringArray(array, [FALSE_FREE_DELIMITER], null, false, maxLength);
7128
+ this.replaceStringArray(array, [FALSE_FREE_DELIMITER], null, false, false, maxLength);
8579
7129
  return result;
8580
7130
  },
8581
7131
 
8582
- replaceJoinedArrayString:
8583
- function (str, maxLength)
8584
- {
8585
- var options = { maxLength: maxLength, screwMode: SCREW_AS_BONDED_STRING };
8586
- var replacement = replaceStaticString(str, options);
8587
- return replacement;
8588
- },
8589
-
8590
- /**
8591
- * An object that exposes properties used to split a string into an array of strings or to
8592
- * join array elements into a string.
8593
- *
8594
- * @typedef Delimiter
8595
- *
8596
- * @property {string} separator
8597
- * An express-parsable expression used as an argument for `String.prototype.split` to split
8598
- * a string into an array of strings.
8599
- *
8600
- * @property {number} joiner
8601
- * The joiner can be any string. A joiner is inserted between adjacent strings in an array
8602
- * in order to join them into a single string.
8603
- */
8604
-
8605
- /**
8606
- * Replaces a given array of strings with equivalent JSFuck code.
8607
- *
8608
- * Array elements may only contain characters with static definitions in their string
8609
- * representations.
8610
- *
8611
- * @function Encoder#replaceStringArray
8612
- *
8613
- * @param {string[]} array
8614
- * The string array to replace. Empty arrays are not supported.
8615
- *
8616
- * @param {Delimiter[]} insertions
8617
- * An array of delimiters of which at most one will be used to compose a joined string and
8618
- * split it into an array of strings.
8619
- *
8620
- * The encoder can pick an insertion and insert a joiner between any two adjacent elements
8621
- * to mark the boundary between them. The separator is then used to split the concatenated
8622
- * string back into its elements.
8623
- *
8624
- * @param {Delimiter[]|null} [substitutions]
8625
- * An array of delimiters, specifying substitutions to be applied to the input elements.
8626
- *
8627
- * All substitutions are applied on each element of the input array, in the order they are
8628
- * specified.
8629
- *
8630
- * Substitutions are expensive in two ways: they create additional overhead and prevent
8631
- * certain optimizations for short arrays to be made. To allow all optimizations to be
8632
- * performed, omit this argument or set it to null instead of specifying an empty array.
8633
- *
8634
- * @param {boolean} [forceString=false]
8635
- * Indicates whether the elements in the replacement expression should evaluate to strings.
8636
- *
8637
- * If this argument is falsy, the elements in the replacement expression may not be equal to
8638
- * those in the input array, but will have the same string representation.
8639
- *
8640
- * Regardless of this argument, the string representation of the value of the whole
8641
- * replacement expression will be always the same as the string representation of the input
8642
- * array.
8643
- *
8644
- * @param {number} [maxLength=(NaN)]
8645
- * The maximum length of the replacement expression.
8646
- *
8647
- * If the replacement expression exceeds the specified length, the return value is
8648
- * `undefined`.
8649
- *
8650
- * If this parameter is `NaN`, then no length limit is imposed.
8651
- *
8652
- * @returns {string|undefined}
8653
- * The replacement string or `undefined`.
8654
- */
8655
- replaceStringArray:
8656
- function (array, insertions, substitutions, forceString, maxLength)
8657
- {
8658
- var replacement;
8659
- var count = array.length;
8660
- // Don't even try the split approach for 3 or less elements if the concat approach can
8661
- // be applied.
8662
- if (substitutions || count > 3)
8663
- {
8664
- var preReplacement =
8665
- function ()
8666
- {
8667
- // Length of the shortest string replacement "([]+[])".
8668
- var STRING_REPLACEMENT_MIN_LENGTH = 7;
8669
-
8670
- // This is for the overhead of "[" + "](" + ")" plus the length of the shortest
8671
- // separator replacement "[]".
8672
- var SEPARATOR_MIN_OVERHEAD = 6;
8673
-
8674
- // This is for the overhead of "[" + "](" + ")" plus the length of the shortest
8675
- // joiner replacement "[]".
8676
- var JOINER_MIN_OVERHEAD = 6;
8677
-
8678
- var joinCount = substitutions ? substitutions.length : 0;
8679
- var splitCount = joinCount + 1;
8680
- var maxSplitReplacementLength =
8681
- (maxLength - STRING_REPLACEMENT_MIN_LENGTH) / splitCount -
8682
- SEPARATOR_MIN_OVERHEAD;
8683
- var splitReplacement =
8684
- this.replaceString
8685
- ('split', { maxLength: maxSplitReplacementLength, optimize: true });
8686
- if (!splitReplacement)
8687
- return;
8688
- var preReplacement = '';
8689
- if (joinCount)
8690
- {
8691
- var maxJoinReplacementLength =
8692
- (
8693
- maxLength - STRING_REPLACEMENT_MIN_LENGTH -
8694
- splitCount * (splitReplacement.length + SEPARATOR_MIN_OVERHEAD)
8695
- ) /
8696
- joinCount -
8697
- JOINER_MIN_OVERHEAD;
8698
- var joinReplacement =
8699
- this.replaceString('join', { maxLength: maxJoinReplacementLength });
8700
- if (!joinReplacement)
8701
- return;
8702
- substitutions.forEach
8703
- (
8704
- function (substitution)
8705
- {
8706
- var separatorReplacement =
8707
- undefinedAsString(this.replaceExpr(substitution.separator));
8708
- var joinerReplacement =
8709
- undefinedAsString(this.replaceString(substitution.joiner));
8710
- preReplacement +=
8711
- '[' + splitReplacement + '](' + separatorReplacement + ')[' +
8712
- joinReplacement + '](' + joinerReplacement + ')';
8713
- },
8714
- this
8715
- );
8716
- }
8717
- preReplacement += '[' + splitReplacement + ']';
8718
- return preReplacement;
8719
- }
8720
- .call(this);
8721
- }
8722
- if (!substitutions && count > 1)
8723
- {
8724
- var concatReplacement =
8725
- this.replaceString('concat', { maxLength: maxLength, optimize: true });
8726
- }
8727
- if (preReplacement)
8728
- // Approach 1: (array[0] + joiner + array[1] + joiner + array[2]...).split(separator)
8729
- {
8730
- // 2 is for the additional overhead of "(" + ")".
8731
- var maxBulkLength = maxLength - (preReplacement.length + 2);
8732
- var optimalStrReplacement;
8733
- var optimalSeparatorReplacement;
8734
- insertions.forEach
8735
- (
8736
- function (insertion)
8737
- {
8738
- var str = array.join(insertion.joiner);
8739
- var strReplacement = this.replaceJoinedArrayString(str, maxBulkLength);
8740
- if (!strReplacement)
8741
- return;
8742
- var separatorReplacement =
8743
- undefinedAsString(this.replaceExpr(insertion.separator));
8744
- var bulkLength = strReplacement.length + separatorReplacement.length;
8745
- if (!(bulkLength > maxBulkLength))
8746
- {
8747
- maxBulkLength = bulkLength;
8748
- optimalStrReplacement = strReplacement;
8749
- optimalSeparatorReplacement = separatorReplacement;
8750
- }
8751
- },
8752
- this
8753
- );
8754
- if (optimalStrReplacement)
8755
- {
8756
- replacement =
8757
- optimalStrReplacement + preReplacement + '(' + optimalSeparatorReplacement +
8758
- ')';
8759
- maxLength = replacement.length - 1;
8760
- }
8761
- }
8762
- if
8763
- (
8764
- !substitutions &&
8765
- (
8766
- count <= 1 ||
8767
- concatReplacement &&
8768
- // 4 is the length of the shortest possible replacement "[[]]".
8769
- // 7 is the length of the shortest possible additional overhead for each
8770
- // following array element, as in "[" + "](+[])" or "[" + "](![])".
8771
- !(4 + (concatReplacement.length + 7) * (count - 1) > maxLength)
8772
- )
8773
- )
8774
- // Approach 2: [array[0]].concat(array[1]).concat(array[2])...
8775
- {
8776
- var arrayReplacement;
8777
- var options = { screwMode: forceString ? SCREW_AS_STRING : SCREW_NORMAL };
8778
- if
8779
- (
8780
- !array.some
8781
- (
8782
- function (element)
8783
- {
8784
- var elementReplacement =
8785
- undefinedAsString(replaceStaticString(element, options));
8786
- if (arrayReplacement)
8787
- {
8788
- if (elementReplacement === '[]')
8789
- elementReplacement = '[[]]';
8790
- arrayReplacement +=
8791
- '[' + concatReplacement + '](' + elementReplacement + ')';
8792
- }
8793
- else
8794
- arrayReplacement = '[' + elementReplacement + ']';
8795
- var result = arrayReplacement.length > maxLength;
8796
- return result;
8797
- }
8798
- )
8799
- )
8800
- replacement = arrayReplacement;
8801
- }
8802
- return replacement;
8803
- },
7132
+ replaceStringArray: replaceStringArray,
8804
7133
  }
8805
7134
  );
8806
7135
 
@@ -9684,9 +8013,9 @@
9684
8013
  return entry;
9685
8014
  }
9686
8015
 
9687
- function createScrewBuffer(screwMode, groupThreshold, optimizerList)
8016
+ function createScrewBuffer(screwMode, optimizerList)
9688
8017
  {
9689
- var buffer = new ScrewBuffer(screwMode, groupThreshold, optimizerList);
8018
+ var buffer = new ScrewBuffer(screwMode, optimizerList);
9690
8019
  return buffer;
9691
8020
  }
9692
8021
 
@@ -9770,10 +8099,10 @@
9770
8099
  ENTRIES[name + ':available'] = entries.available;
9771
8100
  }
9772
8101
 
8102
+ exposeEntries('FORMAT_MAPPER_LONG', FORMAT_MAPPER_LONG);
8103
+ exposeEntries('FORMAT_MAPPER_SHORT', FORMAT_MAPPER_SHORT);
9773
8104
  exposeEntries('FROM_CHAR_CODE', FROM_CHAR_CODE);
9774
8105
  exposeEntries('FROM_CHAR_CODE_CALLBACK_FORMATTER', FROM_CHAR_CODE_CALLBACK_FORMATTER);
9775
- exposeEntries('MAPPER_FORMATTER', MAPPER_FORMATTER);
9776
- exposeEntries('OPTIMAL_ARG_NAME', OPTIMAL_ARG_NAME);
9777
8106
  exposeEntries('OPTIMAL_B', OPTIMAL_B);
9778
8107
  exposeEntries('OPTIMAL_RETURN_STRING', OPTIMAL_RETURN_STRING);
9779
8108
  }