jscrewit 2.40.0 → 3.0.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.40.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
1055
  attributes: { 'web-worker': 'web-worker-restriction' },
1170
1056
  },
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
- attributes: { 'web-worker': 'web-worker-restriction' },
1180
- },
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:
@@ -1273,13 +1096,6 @@
1273
1096
  return available;
1274
1097
  },
1275
1098
  },
1276
- FORMS:
1277
- {
1278
- description:
1279
- 'Existence of the object document.forms with string representation "[object ' +
1280
- 'HTMLCollection]".',
1281
- aliasFor: 'ANY_DOCUMENT',
1282
- },
1283
1099
  FROM_CODE_POINT:
1284
1100
  {
1285
1101
  description: 'Existence of the function String.fromCodePoint.',
@@ -1314,78 +1130,6 @@
1314
1130
  return available;
1315
1131
  },
1316
1132
  },
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
1133
  IE_SRC:
1390
1134
  {
1391
1135
  description:
@@ -1409,16 +1153,6 @@
1409
1153
  },
1410
1154
  attributes: { 'forced-strict-mode': 'char-increment-restriction' },
1411
1155
  },
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
1156
  ITERATOR_HELPER:
1423
1157
  {
1424
1158
  description: 'Availability of iterator helpers.',
@@ -1429,16 +1163,6 @@
1429
1163
  return available;
1430
1164
  },
1431
1165
  },
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
1166
  LOCALE_INFINITY:
1443
1167
  {
1444
1168
  description: 'Language sensitive string representation of Infinity as "∞".',
@@ -1449,23 +1173,6 @@
1449
1173
  return available;
1450
1174
  },
1451
1175
  },
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
1176
  LOCALE_NUMERALS_BN:
1470
1177
  {
1471
1178
  description: 'Localized number formatting for Bengali.',
@@ -1480,51 +1187,19 @@
1480
1187
  {
1481
1188
  description:
1482
1189
  '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 ("ناعدد").',
1190
+ 'Localized number formatting including the output of the first three letters in the ' +
1191
+ 'second word of the Arabic string representation of NaN ("رقم"), the letters in the ' +
1192
+ 'Russian string representation of NaN ("не\xa0число") and the letters in the Persian ' +
1193
+ 'string representation of NaN ("ناعدد").',
1487
1194
  check:
1488
1195
  function ()
1489
1196
  {
1490
1197
  var available =
1491
1198
  checkLocaleNumeral('ar', NaN, /^ليس.رقم/) &&
1492
- checkLocaleNumeral('ar-td', 234567890.1, /^٢٣٤٬?٥٦٧٬?٨٩٠٫١/) &&
1493
- checkLocaleNumeral('fa', 1234567890, /^۱٬۲۳۴٬۵۶۷٬۸۹۰/) &&
1494
1199
  checkLocaleNumeral('fa', NaN, /^ناعد/) &&
1495
1200
  checkLocaleNumeral('ru', NaN, /^не.число/);
1496
1201
  return available;
1497
1202
  },
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
1203
  },
1529
1204
  NAME:
1530
1205
  {
@@ -1536,25 +1211,6 @@
1536
1211
  return available;
1537
1212
  },
1538
1213
  },
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
1214
  NO_FF_SRC:
1559
1215
  {
1560
1216
  description:
@@ -1583,22 +1239,6 @@
1583
1239
  },
1584
1240
  excludes: ['IE_SRC'],
1585
1241
  },
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
1242
  NO_V8_SRC:
1603
1243
  {
1604
1244
  description:
@@ -1625,58 +1265,15 @@
1625
1265
  return available;
1626
1266
  },
1627
1267
  },
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
1268
  OBJECT_W_SELF:
1657
1269
  {
1658
1270
  description:
1659
1271
  'The property that the string representation of the global object self starts ' +
1660
1272
  'with "[object W".',
1661
1273
  check: makeSelfFeatureCheck(/^\[object W/),
1662
- includes: ['SELF_OBJ'],
1663
- excludes: ['DOMWINDOW'],
1274
+ includes: ['SELF'],
1664
1275
  attributes: { 'web-worker': 'non-ie-restriction' },
1665
1276
  },
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
1277
  PLAIN_INTL:
1681
1278
  {
1682
1279
  description:
@@ -1687,7 +1284,6 @@
1687
1284
  var available = typeof Intl === 'object' && Intl + '' === '[object Object]';
1688
1285
  return available;
1689
1286
  },
1690
- includes: ['INTL'],
1691
1287
  },
1692
1288
  REGEXP_STRING_ITERATOR:
1693
1289
  {
@@ -1703,13 +1299,10 @@
1703
1299
  },
1704
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',
1382
+ 'DOCUMENT',
1383
+ 'ESC_HTML_QUOT',
1809
1384
  'FILL',
1810
1385
  'FLAT',
1811
1386
  'FROM_CODE_POINT',
1812
1387
  'FUNCTION_19_LF',
1813
- 'GENERIC_ARRAY_TO_STRING',
1814
- 'GLOBAL_UNDEFINED',
1815
- 'GMT',
1816
- 'HISTORY',
1817
1388
  'INCR_CHAR',
1818
- 'INTL',
1819
1389
  'ITERATOR_HELPER',
1820
- 'JAPANESE_INFINITY',
1821
1390
  'LOCALE_INFINITY',
1822
1391
  'LOCALE_NUMERALS_EXT',
1823
- 'LOCATION',
1824
- 'MOZILLA',
1825
1392
  'NAME',
1826
1393
  'NO_IE_SRC',
1827
- 'NO_OLD_SAFARI_ARRAY_ITERATOR',
1828
1394
  'REGEXP_STRING_ITERATOR',
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,34 +1418,22 @@
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',
1425
+ 'DOCUMENT',
1426
+ 'ESC_HTML_QUOT',
1918
1427
  'FILL',
1919
1428
  'FLAT',
1920
1429
  'FROM_CODE_POINT',
1921
1430
  'FUNCTION_19_LF',
1922
- 'GENERIC_ARRAY_TO_STRING',
1923
- 'GLOBAL_UNDEFINED',
1924
- 'GMT',
1925
- 'HISTORY',
1926
1431
  'INCR_CHAR',
1927
- 'INTL',
1928
1432
  'ITERATOR_HELPER',
1929
- 'JAPANESE_INFINITY',
1930
1433
  'LOCALE_INFINITY',
1931
1434
  'LOCALE_NUMERALS_BN',
1932
1435
  'LOCALE_NUMERALS_EXT',
1933
- 'LOCATION',
1934
- 'MOZILLA',
1935
1436
  'NAME',
1936
- 'NO_OLD_SAFARI_ARRAY_ITERATOR',
1937
1437
  'REGEXP_STRING_ITERATOR',
1938
1438
  'STATUS',
1939
1439
  'V8_SRC',
@@ -1968,34 +1468,22 @@
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
1478
  'FILL',
1982
1479
  'FLAT',
1983
1480
  'FROM_CODE_POINT',
1984
1481
  'FUNCTION_19_LF',
1985
- 'GENERIC_ARRAY_TO_STRING',
1986
- 'GLOBAL_UNDEFINED',
1987
- 'GMT',
1988
- 'HISTORY',
1989
1482
  'INCR_CHAR',
1990
- 'INTL',
1991
- 'JAPANESE_INFINITY',
1992
1483
  'LOCALE_INFINITY',
1993
1484
  'LOCALE_NUMERALS_BN',
1994
1485
  'LOCALE_NUMERALS_EXT',
1995
- 'LOCATION',
1996
- 'MOZILLA',
1997
1486
  'NAME',
1998
- 'NO_OLD_SAFARI_ARRAY_ITERATOR',
1999
1487
  'OBJECT_ARRAY_ENTRIES_CTOR',
2000
1488
  'REGEXP_STRING_ITERATOR',
2001
1489
  'SHORT_LOCALES',
@@ -2022,50 +1510,25 @@
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
  ],
2046
- },
2047
- IE_10:
2048
- {
2049
- inherits: 'IE_9',
2050
- versions: ['10'],
2051
- includes: { ATOB: true, CONSOLE: true, OBJECT_UNDEFINED: true, UNDEFINED: false },
2052
1530
  attributes: { 'char-increment-restriction': null, 'web-worker-restriction': null },
2053
1531
  },
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
1532
  IE_11_WIN_10:
2070
1533
  {
2071
1534
  inherits: 'IE_11',
@@ -2075,105 +1538,39 @@
2075
1538
  includes:
2076
1539
  {
2077
1540
  LOCALE_INFINITY: true,
2078
- LOCALE_NUMERALS: false,
2079
1541
  LOCALE_NUMERALS_BN: true,
2080
1542
  LOCALE_NUMERALS_EXT: true,
2081
1543
  },
2082
1544
  },
2083
- NODE_0_10:
1545
+ NODE_20:
2084
1546
  {
2085
- families: ['Node.js'],
2086
- versions: ['0.10'],
1547
+ families: ['Node.js'],
1548
+ versions: ['20-21'],
2087
1549
  includes:
2088
1550
  [
2089
- 'ESC_HTML_ALL',
2090
- 'FUNCTION_22_LF',
2091
- 'GENERIC_ARRAY_TO_STRING',
2092
- 'GLOBAL_UNDEFINED',
2093
- 'GMT',
1551
+ 'ARRAY_ITERATOR',
1552
+ 'ARROW',
1553
+ 'AT',
1554
+ 'ESC_HTML_QUOT',
1555
+ 'FILL',
1556
+ 'FLAT',
1557
+ 'FROM_CODE_POINT',
1558
+ 'FUNCTION_19_LF',
2094
1559
  'INCR_CHAR',
1560
+ 'LOCALE_INFINITY',
1561
+ 'LOCALE_NUMERALS_BN',
1562
+ 'LOCALE_NUMERALS_EXT',
2095
1563
  'NAME',
1564
+ 'OBJECT_ARRAY_ENTRIES_CTOR',
1565
+ 'REGEXP_STRING_ITERATOR',
1566
+ 'SHORT_LOCALES',
2096
1567
  'V8_SRC',
2097
1568
  ],
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
1569
  attributes: { 'char-increment-restriction': null },
2125
1570
  },
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:
2157
- {
2158
- inherits: 'NODE_13',
2159
- versions: ['15'],
2160
- includes: { INTL: true, PLAIN_INTL: false },
2161
- },
2162
- NODE_16_0:
2163
- {
2164
- inherits: 'NODE_15',
2165
- versions: ['16.0-16.5'],
2166
- includes: { ATOB: true },
2167
- },
2168
- NODE_16_6:
2169
- {
2170
- inherits: 'NODE_16_0',
2171
- versions: ['16.6-21'],
2172
- includes: { AT: true },
2173
- },
2174
1571
  NODE_22:
2175
1572
  {
2176
- inherits: 'NODE_16_6',
1573
+ inherits: 'NODE_20',
2177
1574
  versions: ['22.0-22.11|23.0-23.2'],
2178
1575
  includes: { ITERATOR_HELPER: true, OBJECT_ARRAY_ENTRIES_CTOR: false },
2179
1576
  },
@@ -2183,123 +1580,46 @@
2183
1580
  versions: ['22.12-22.14|23.3-'],
2184
1581
  includes: { SHORT_LOCALES: false },
2185
1582
  },
2186
- SAFARI_7_0:
1583
+ SAFARI_PRE_PREV:
1584
+ {
1585
+ description: describeEngine('the previous to previous version of Safari'),
1586
+ aliasFor: 'SAFARI_17_4',
1587
+ },
1588
+ SAFARI_17_4:
2187
1589
  {
2188
1590
  families: ['Safari'],
2189
- versions: ['7.0'],
1591
+ versions: ['17.4-17.6'],
2190
1592
  includes:
2191
1593
  [
2192
- 'ANY_DOCUMENT',
2193
- 'ATOB',
1594
+ 'ARRAY_ITERATOR',
1595
+ 'ARROW',
1596
+ 'AT',
2194
1597
  'BARPROP',
2195
- 'CONSOLE',
2196
- 'ESC_HTML_QUOT_ONLY',
2197
- 'ESC_REGEXP_LF',
2198
- 'ESC_REGEXP_SLASH',
1598
+ 'DOCUMENT',
1599
+ 'ESC_HTML_QUOT',
2199
1600
  'FF_SRC',
2200
- 'GENERIC_ARRAY_TO_STRING',
2201
- 'GLOBAL_UNDEFINED',
2202
- 'GMT',
2203
- 'HISTORY',
1601
+ 'FILL',
1602
+ 'FLAT',
1603
+ 'FROM_CODE_POINT',
1604
+ 'FUNCTION_19_LF',
2204
1605
  'INCR_CHAR',
2205
- 'LOCATION',
2206
- 'MOZILLA',
1606
+ 'LOCALE_INFINITY',
1607
+ 'LOCALE_NUMERALS_BN',
1608
+ 'LOCALE_NUMERALS_EXT',
2207
1609
  'NAME',
2208
- 'NODECONSTRUCTOR',
2209
- 'OBJECT_L_LOCATION_CTOR',
2210
- 'OLD_SAFARI_LOCATION_CTOR',
1610
+ 'OBJECT_ARRAY_ENTRIES_CTOR',
1611
+ 'REGEXP_STRING_ITERATOR',
1612
+ 'SHORT_LOCALES',
2211
1613
  'STATUS',
2212
1614
  'WINDOW',
2213
1615
  ],
2214
1616
  attributes:
2215
1617
  {
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,
1618
+ 'char-increment-restriction': null,
1619
+ 'non-ie-restriction': null,
1620
+ 'unstable': null,
1621
+ 'web-worker-restriction': null,
2259
1622
  },
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
1623
  },
2304
1624
  SAFARI_18_0:
2305
1625
  {
@@ -2307,6 +1627,11 @@
2307
1627
  versions: ['18.0-18.3'],
2308
1628
  includes: { SHORT_LOCALES: false },
2309
1629
  },
1630
+ SAFARI_PREV:
1631
+ {
1632
+ description: describeEngine('the previous to current version of Safari'),
1633
+ aliasFor: 'SAFARI_18_4',
1634
+ },
2310
1635
  SAFARI:
2311
1636
  {
2312
1637
  description: describeEngine('the current stable version of Safari'),
@@ -2318,7 +1643,6 @@
2318
1643
  versions: ['18.4-'],
2319
1644
  includes:
2320
1645
  { ITERATOR_HELPER: true, LOCALE_NUMERALS_BN: false, OBJECT_ARRAY_ENTRIES_CTOR: false },
2321
- attributes: { 'locale-numerals-ext-restriction': null },
2322
1646
  },
2323
1647
  };
2324
1648
  (function ()
@@ -2950,13 +2274,6 @@
2950
2274
  var FB_R_PADDING_SHIFTS;
2951
2275
  var FH_R_PADDING_SHIFTS;
2952
2276
 
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
2277
  function chooseOtherArgName(argName)
2961
2278
  {
2962
2279
  var otherArgName = argName !== 'undefined' ? 'undefined' : 'falsefalse';
@@ -3244,98 +2561,49 @@
3244
2561
 
3245
2562
  (function ()
3246
2563
  {
3247
- var ANY_DOCUMENT = Feature.ANY_DOCUMENT;
3248
- var ANY_WINDOW = Feature.ANY_WINDOW;
3249
2564
  var ARRAY_ITERATOR = Feature.ARRAY_ITERATOR;
3250
2565
  var ARROW = Feature.ARROW;
3251
- var ASYNC_FUNCTION = Feature.ASYNC_FUNCTION;
3252
2566
  var AT = Feature.AT;
3253
- var ATOB = Feature.ATOB;
3254
2567
  var BARPROP = Feature.BARPROP;
3255
- var CALL_ON_GLOBAL = Feature.CALL_ON_GLOBAL;
3256
2568
  var CAPITAL_HTML = Feature.CAPITAL_HTML;
3257
2569
  var CONSOLE = Feature.CONSOLE;
3258
- var CREATE_ELEMENT = Feature.CREATE_ELEMENT;
3259
2570
  var DOCUMENT = Feature.DOCUMENT;
3260
- var DOMWINDOW = Feature.DOMWINDOW;
3261
- var ESC_HTML_ALL = Feature.ESC_HTML_ALL;
3262
2571
  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
2572
  var FF_SRC = Feature.FF_SRC;
3267
2573
  var FILL = Feature.FILL;
3268
2574
  var FLAT = Feature.FLAT;
3269
- var FORMS = Feature.FORMS;
3270
2575
  var FROM_CODE_POINT = Feature.FROM_CODE_POINT;
3271
2576
  var FUNCTION_19_LF = Feature.FUNCTION_19_LF;
3272
2577
  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
2578
  var IE_SRC = Feature.IE_SRC;
3279
2579
  var INCR_CHAR = Feature.INCR_CHAR;
3280
- var INTL = Feature.INTL;
3281
2580
  var ITERATOR_HELPER = Feature.ITERATOR_HELPER;
3282
- var JAPANESE_INFINITY = Feature.JAPANESE_INFINITY;
3283
2581
  var LOCALE_INFINITY = Feature.LOCALE_INFINITY;
3284
- var LOCALE_NUMERALS = Feature.LOCALE_NUMERALS;
3285
2582
  var LOCALE_NUMERALS_BN = Feature.LOCALE_NUMERALS_BN;
3286
2583
  var LOCALE_NUMERALS_EXT = Feature.LOCALE_NUMERALS_EXT;
3287
- var LOCATION = Feature.LOCATION;
3288
- var MOZILLA = Feature.MOZILLA;
3289
2584
  var NAME = Feature.NAME;
3290
- var NODECONSTRUCTOR = Feature.NODECONSTRUCTOR;
3291
- var NODE_NAME = Feature.NODE_NAME;
3292
2585
  var NO_FF_SRC = Feature.NO_FF_SRC;
3293
2586
  var NO_IE_SRC = Feature.NO_IE_SRC;
3294
- var NO_OLD_SAFARI_ARRAY_ITERATOR = Feature.NO_OLD_SAFARI_ARRAY_ITERATOR;
3295
2587
  var NO_V8_SRC = Feature.NO_V8_SRC;
3296
2588
  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
2589
  var OBJECT_W_SELF = Feature.OBJECT_W_SELF;
3300
- var OLD_SAFARI_LOCATION_CTOR = Feature.OLD_SAFARI_LOCATION_CTOR;
3301
2590
  var PLAIN_INTL = Feature.PLAIN_INTL;
3302
2591
  var REGEXP_STRING_ITERATOR = Feature.REGEXP_STRING_ITERATOR;
3303
- var SELF_OBJ = Feature.SELF_OBJ;
2592
+ var SELF = Feature.SELF;
3304
2593
  var SHORT_LOCALES = Feature.SHORT_LOCALES;
3305
2594
  var STATUS = Feature.STATUS;
3306
- var UNDEFINED = Feature.UNDEFINED;
3307
2595
  var V8_SRC = Feature.V8_SRC;
3308
2596
  var WINDOW = Feature.WINDOW;
3309
2597
 
3310
- function createCharDefaultDefinition
3311
- (atobOpt, charCodeOpt, escSeqOpt, unescapeOpt)
2598
+ function charDefaultDefinition(char)
3312
2599
  {
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;
2600
+ var solution = this._defaultResolveCharacter(char);
2601
+ return solution;
3323
2602
  }
3324
2603
 
3325
- function defineCharDefault(opts)
2604
+ function defineCharDefault()
3326
2605
  {
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);
2606
+ var entry = define(charDefaultDefinition);
3339
2607
  return entry;
3340
2608
  }
3341
2609
 
@@ -3428,7 +2696,7 @@
3428
2696
  else
3429
2697
  expr += '[' + index + ']';
3430
2698
  }
3431
- var entry = define._callWithFeatures(expr, LOCALE_NUMERALS, arguments, 3);
2699
+ var entry = define._callWithFeatures(expr, arguments, 3);
3432
2700
  return entry;
3433
2701
  }
3434
2702
 
@@ -3478,13 +2746,7 @@
3478
2746
 
3479
2747
  BASE64_ALPHABET_HI_4 =
3480
2748
  [
3481
- [
3482
- define('A'),
3483
- define('D', CALL_ON_GLOBAL, DOMWINDOW),
3484
- define('C', CAPITAL_HTML),
3485
- define('A', ARRAY_ITERATOR, CAPITAL_HTML),
3486
- define('A', ARRAY_ITERATOR, CALL_ON_GLOBAL, DOMWINDOW),
3487
- ],
2749
+ [define('A'), define('C', CAPITAL_HTML), define('A', ARRAY_ITERATOR)],
3488
2750
  [
3489
2751
  define('F'),
3490
2752
  define('H', ITERATOR_HELPER),
@@ -3494,13 +2756,7 @@
3494
2756
  'Infinity',
3495
2757
  'NaNfalse',
3496
2758
  [define('S'), define('R', CAPITAL_HTML), define('S', ARRAY_ITERATOR)],
3497
- [
3498
- define('W'),
3499
- define('U', CAPITAL_HTML),
3500
- define('W', CALL_ON_GLOBAL, DOMWINDOW),
3501
- define('W', CALL_ON_GLOBAL, OBJECT_W_SELF),
3502
- define('U', ARRAY_ITERATOR, CAPITAL_HTML),
3503
- ],
2759
+ [define('W'), define('U', CAPITAL_HTML)],
3504
2760
  'a',
3505
2761
  'false',
3506
2762
  'i',
@@ -3608,17 +2864,7 @@
3608
2864
  CHARACTERS =
3609
2865
  noProto
3610
2866
  ({
3611
- // '\0'…'\x07'
3612
- '\b':
3613
- [
3614
- define('Function("return\\"" + ESCAPING_BACKSLASH + "b\\"")()[0]'),
3615
- defineCharDefault({ escSeq: false }),
3616
- ],
3617
- '\t':
3618
- [
3619
- define('Function("return\\"" + ESCAPING_BACKSLASH + "true\\"")()[0]'),
3620
- defineCharDefault({ escSeq: false }),
3621
- ],
2867
+ // '\0'…'\x09'
3622
2868
  '\n':
3623
2869
  [
3624
2870
  define('(RP_0_S + Function())[23]'),
@@ -3627,25 +2873,10 @@
3627
2873
  define('(RP_0_S + ANY_FUNCTION)[0]', IE_SRC),
3628
2874
  defineCharInFnHead(13, NO_V8_SRC),
3629
2875
  ],
3630
- '\v':
3631
- [
3632
- define('Function("return\\"" + ESCAPING_BACKSLASH + "v\\"")()[0]'),
3633
- defineCharDefault({ escSeq: false }),
3634
- ],
3635
- '\f':
3636
- [
3637
- define('Function("return\\"" + ESCAPING_BACKSLASH + "false\\"")()[0]'),
3638
- defineCharDefault({ escSeq: false }),
3639
- ],
3640
- '\r':
3641
- [
3642
- define('Function("return\\"" + ESCAPING_BACKSLASH + "r\\"")()'),
3643
- defineCharDefault({ escSeq: false }),
3644
- ],
3645
- // '\x0e'…'\x1d'
2876
+ // '\x0b'…'\x1d'
3646
2877
  '\x1e':
3647
2878
  [
3648
- define('(RP_5_A + atob("NaNfalse"))[10]', ATOB),
2879
+ define('(RP_5_A + atob("NaNfalse"))[10]'),
3649
2880
  ],
3650
2881
  // '\x1f'
3651
2882
  ' ':
@@ -3672,7 +2903,6 @@
3672
2903
  ],
3673
2904
  '#':
3674
2905
  [
3675
- define('document.nodeName[0]', NODE_NAME),
3676
2906
  defineCharDefault(),
3677
2907
  ],
3678
2908
  // '$'
@@ -3680,17 +2910,14 @@
3680
2910
  [
3681
2911
  define('escape(FILTER)[20]'),
3682
2912
  define('escape(0 + AT)[20]', AT),
3683
- define('atob("000l")[2]', ATOB),
3684
2913
  define('escape(FILL)[21]', FILL),
3685
2914
  define('escape(FLAT)[21]', FLAT),
3686
2915
  define('escape(ANY_FUNCTION)[0]', IE_SRC),
2916
+ defineCharDefault(),
3687
2917
  ],
3688
2918
  '&':
3689
2919
  [
3690
- define('"".fontcolor("".italics())[22]', ESC_HTML_ALL),
3691
- define('"".fontcolor("".sub())[20]', ESC_HTML_ALL),
3692
- define('"".fontcolor("\\"")[13]', ESC_HTML_QUOT),
3693
- define('"".fontcolor("".fontcolor([]))[31]', ESC_HTML_QUOT_ONLY),
2920
+ define('"".fontcolor("".fontcolor([]))[31]', ESC_HTML_QUOT),
3694
2921
  defineCharDefault(),
3695
2922
  ],
3696
2923
  // '\''
@@ -3717,18 +2944,10 @@
3717
2944
  define('"true".sub()[10]'),
3718
2945
  ],
3719
2946
  // '0'…'9'
3720
- ':':
3721
- [
3722
- define('(RP_0_S + RegExp())[3]'),
3723
- defineCharDefault(),
3724
- ],
2947
+ // ':'
3725
2948
  ';':
3726
2949
  [
3727
- define('"".fontcolor("".italics())[21]', ESC_HTML_ALL),
3728
- define('"".fontcolor(true + "".sub())[20]', ESC_HTML_ALL),
3729
- define('"".fontcolor("NaN\\"")[21]', ESC_HTML_QUOT),
3730
- define('"".fontcolor("".fontcolor())[30]', ESC_HTML_QUOT_ONLY),
3731
- defineCharDefault(),
2950
+ define('"".fontcolor("".fontcolor())[30]', ESC_HTML_QUOT),
3732
2951
  ],
3733
2952
  '<':
3734
2953
  [
@@ -3763,45 +2982,31 @@
3763
2982
  'C':
3764
2983
  [
3765
2984
  define('escape("".italics())[2]'),
3766
- define('escape("".sub())[2]'),
3767
2985
  define('escape(F_A_L_S_E)[11]'),
3768
- define('atob("00NaNfalse")[1]', ATOB),
3769
2986
  define('(RP_4_A + "".fontcolor())[10]', CAPITAL_HTML),
3770
2987
  define('(RP_3_WA + Function("return console")())[11]', CONSOLE),
3771
- define('(RP_0_S + Node)[12]', NODECONSTRUCTOR),
2988
+ defineCharDefault(),
3772
2989
  ],
3773
2990
  'D':
3774
2991
  [
2992
+ define('btoa("00")[1]'),
3775
2993
  // * The escaped character may be either "]" or "}".
3776
2994
  define('escape((+("1000" + (RP_5_A + FILTER + 0)[40] + 0) + FILTER)[40])[2]'), // *
3777
2995
  define('escape("]")[2]'),
3778
2996
  define('escape("}")[2]'),
3779
- define('(document + RP_0_S)[SLICE_OR_SUBSTR]("-10")[1]', ANY_DOCUMENT),
3780
2997
  define('escape((RP_4_A + [+("1000" + (AT + 0)[31] + 0)] + AT)[40])[2]', AT), // *
3781
- define('btoa("00")[1]', ATOB),
3782
- define('(RP_3_WA + document)[11]', DOCUMENT),
3783
- define('(RP_3_WA + self)[11]', DOMWINDOW),
3784
2998
  define // *
3785
2999
  ('escape((NaN + [+("10" + [(RP_6_S + FILL)[40]] + "000")] + FILL)[40])[2]', FILL),
3786
3000
  define // *
3787
3001
  ('escape((NaN + [+("10" + [(RP_6_S + FLAT)[40]] + "000")] + FLAT)[40])[2]', FLAT),
3788
- define('escape(ARRAY_ITERATOR)[30]', NO_OLD_SAFARI_ARRAY_ITERATOR),
3789
3002
  define('escape(FILTER)[50]', V8_SRC),
3790
- define('(document + [RP_1_WA]).at("-10")', ANY_DOCUMENT, AT),
3791
- define('escape(AT)[61]', AT, IE_SRC),
3792
3003
  define('escape([[]][+(RP_0_S + AT)[0]] + AT)[61]', AT, NO_FF_SRC), // *
3793
- define('escape([NaN][+(RP_1_WA + AT)[20]] + AT)[61]', AT, NO_IE_SRC), // *
3794
- define('escape(true + AT)[50]', AT, V8_SRC),
3795
3004
  define('escape(FILL)[60]', FF_SRC, FILL),
3796
- define('escape(FLAT)[60]', FF_SRC, FLAT),
3797
3005
  ],
3798
3006
  'E':
3799
3007
  [
3800
- defineCharInFn('RegExp', 12),
3801
- define('btoa("0NaN")[1]', ATOB),
3008
+ define('btoa("0NaN")[1]'),
3802
3009
  define('(RP_5_A + "".link())[10]', CAPITAL_HTML),
3803
- define('(RP_3_WA + Audio)[21]', HTMLAUDIOELEMENT),
3804
- define('(RP_0_S + REGEXP_STRING_ITERATOR)[11]', REGEXP_STRING_ITERATOR),
3805
3010
  ],
3806
3011
  'F':
3807
3012
  [
@@ -3810,27 +3015,19 @@
3810
3015
  ],
3811
3016
  'G':
3812
3017
  [
3813
- define('btoa("0false")[1]', ATOB),
3018
+ define('btoa("0false")[1]'),
3814
3019
  define('"0".big()[10]', CAPITAL_HTML),
3815
- define('(RP_5_A + Date())[30]', GMT),
3816
3020
  ],
3817
3021
  'H':
3818
3022
  [
3819
- define('btoa(true)[1]', ATOB),
3023
+ define('btoa(true)[1]'),
3820
3024
  define('"".link()[3]', CAPITAL_HTML),
3821
- define('(RP_3_WA + document.forms)[11]', FORMS),
3822
- define
3823
- ({ expr: '(RP_3_WA + Function("return history")())[11]', optimize: true }, HISTORY),
3824
- define('(RP_1_WA + Audio)[10]', HTMLAUDIOELEMENT),
3825
3025
  define('(RP_4_A + [].entries().filter(ANY_FUNCTION))[21]', ITERATOR_HELPER),
3826
- define({ expr: '(RP_3_WA + self.history)[11]', optimize: true }, HISTORY, SELF_OBJ),
3827
3026
  ],
3828
3027
  'I': '"Infinity"[0]',
3829
3028
  'J':
3830
3029
  [
3831
- define('"j"[TO_UPPER_CASE]()'),
3832
- define('btoa(true)[2]', ATOB),
3833
- defineCharDefault({ atob: false }),
3030
+ define('btoa(true)[2]'),
3834
3031
  ],
3835
3032
  'K':
3836
3033
  [
@@ -3839,96 +3036,38 @@
3839
3036
  ],
3840
3037
  'L':
3841
3038
  [
3842
- define('btoa(".")[0]', ATOB),
3039
+ define('btoa(".")[0]'),
3843
3040
  define('(RP_3_WA + "".fontcolor())[11]', CAPITAL_HTML),
3844
- define('(RP_0_S + document.forms)[11]', FORMS),
3845
- define('(RP_0_S + Audio)[12]', HTMLAUDIOELEMENT),
3846
- define
3847
- (
3848
- {
3849
- expr:
3850
- 'Function("return toString.call(location)")()[SLICE_OR_SUBSTR]("-10")[1]',
3851
- optimize: true,
3852
- },
3853
- LOCATION
3854
- ),
3855
- define('(RP_3_WA + LOCATION_CONSTRUCTOR)[11]', OBJECT_L_LOCATION_CTOR),
3856
- define
3857
- (
3858
- '(LOCATION_CONSTRUCTOR + RP_0_S)[SLICE_OR_SUBSTR]("-20")[0]',
3859
- OLD_SAFARI_LOCATION_CTOR
3860
- ),
3861
- define
3862
- (
3863
- {
3864
- expr:
3865
- '(Function("return toString.call(location)")() + RP_1_WA).at("-10")',
3866
- optimize: true,
3867
- },
3868
- AT,
3869
- LOCATION
3870
- ),
3871
- define('(LOCATION_CONSTRUCTOR + RP_0_S).at("-20")', AT, OLD_SAFARI_LOCATION_CTOR),
3872
- define
3873
- (
3874
- '[][TO_STRING].call(location)[SLICE_OR_SUBSTR]("-10")[1]',
3875
- GENERIC_ARRAY_TO_STRING,
3876
- LOCATION
3877
- ),
3878
- define
3879
- ('self[TO_STRING].call(location)[SLICE_OR_SUBSTR]("-10")[1]', LOCATION, SELF_OBJ),
3880
- define
3881
- (
3882
- '([][TO_STRING].call(location) + RP_1_WA).at("-10")',
3883
- AT,
3884
- GENERIC_ARRAY_TO_STRING,
3885
- LOCATION
3886
- ),
3887
- define('(self[TO_STRING].call(location) + RP_1_WA).at("-10")', AT, LOCATION, SELF_OBJ),
3888
3041
  ],
3889
3042
  'M':
3890
3043
  [
3891
- define('btoa(0)[0]', ATOB),
3044
+ define('btoa(0)[0]'),
3892
3045
  define('"".small()[2]', CAPITAL_HTML),
3893
- define('(RP_0_S + self)[10]', DOMWINDOW),
3894
- define('(RP_0_S + document.forms)[10]', FORMS),
3895
- define('(RP_4_A + Date())[30]', GMT),
3896
- define('(RP_0_S + Audio)[11]', HTMLAUDIOELEMENT),
3897
- define('USER_AGENT[0]', MOZILLA),
3898
3046
  ],
3899
3047
  'N': '"NaN"[0]',
3900
3048
  'O':
3901
3049
  [
3902
3050
  defineCharInFn('Object', 9),
3051
+ define('btoa(NaN)[3]'),
3903
3052
  define('(RP_3_WA + PLAIN_OBJECT)[11]'),
3904
- define('btoa(NaN)[3]', ATOB),
3905
3053
  define('"".fontcolor()[2]', CAPITAL_HTML),
3906
- define('(RP_1_WA + self)[10]', DOMWINDOW),
3907
3054
  define('(RP_3_WA + Intl)[11]', PLAIN_INTL),
3908
3055
  ],
3909
3056
  'P':
3910
3057
  [
3911
- define('String.fromCharCode("80")'),
3912
- define('(RP_3_WA + Function("return async function(){}")()())[11]', ASYNC_FUNCTION),
3913
- define('atob("01A")[1]', ATOB),
3914
- define('btoa("".italics())[0]', ATOB),
3058
+ define('btoa("".italics())[0]'),
3915
3059
  define('(RP_0_S + Function("return statusbar")())[11]', BARPROP),
3916
3060
  define('"0".sup()[10]', CAPITAL_HTML),
3917
- define('(RP_0_S + self.statusbar)[11]', BARPROP, SELF_OBJ),
3918
- defineCharDefault({ atob: false, charCode: false }),
3061
+ defineCharDefault(),
3919
3062
  ],
3920
3063
  'Q':
3921
3064
  [
3922
- define('"q"[TO_UPPER_CASE]()'),
3923
- define('btoa(1)[1]', ATOB),
3924
- defineCharDefault({ atob: false }),
3065
+ define('btoa(1)[1]'),
3925
3066
  ],
3926
3067
  'R':
3927
3068
  [
3928
- defineCharInFn('RegExp', 9),
3929
- define('btoa("0true")[2]', ATOB),
3069
+ define('btoa("0true")[2]'),
3930
3070
  define('"".fontcolor()[10]', CAPITAL_HTML),
3931
- define('(RP_3_WA + REGEXP_STRING_ITERATOR)[11]', REGEXP_STRING_ITERATOR),
3932
3071
  ],
3933
3072
  'S':
3934
3073
  [
@@ -3937,98 +3076,49 @@
3937
3076
  ],
3938
3077
  'T':
3939
3078
  [
3940
- define
3941
- (
3942
- {
3943
- expr:
3944
- '(RP_0_S + ' +
3945
- 'Function("try{undefined.false}catch(undefined){return undefined}")())[0]',
3946
- optimize: true,
3947
- }
3948
- ),
3949
- define('btoa(NaN)[0]', ATOB),
3079
+ define('btoa(NaN)[0]'),
3950
3080
  define('"".fontcolor([])[20]', CAPITAL_HTML),
3951
- define('(RP_1_WA + document.forms)[10]', FORMS),
3952
- define('(RP_3_WA + Date())[30]', GMT),
3953
- define('(RP_0_S + Audio)[10]', HTMLAUDIOELEMENT),
3954
- defineCharDefault({ atob: false }),
3955
3081
  ],
3956
3082
  'U':
3957
3083
  [
3958
- define('btoa("1NaN")[1]', ATOB),
3084
+ define('btoa("1NaN")[1]'),
3959
3085
  define('"".sub()[2]', CAPITAL_HTML),
3960
- define
3961
- (
3962
- { expr: '(RP_3_WA + Function("return toString")()())[11]', optimize: true },
3963
- GLOBAL_UNDEFINED
3964
- ),
3965
- define
3966
- (
3967
- { expr: '(RP_3_WA + Function("return{}.toString")()())[11]', optimize: true },
3968
- OBJECT_UNDEFINED
3969
- ),
3970
- define('(RP_3_WA + PLAIN_OBJECT[TO_STRING].call())[11]', UNDEFINED),
3971
- define('(RP_3_WA + ARRAY_ITERATOR[TO_STRING].call())[11]', ARRAY_ITERATOR, UNDEFINED),
3972
- define
3973
- (
3974
- { expr: '(RP_3_WA + Function("return Intl.toString")()())[11]', optimize: true },
3975
- INTL,
3976
- OBJECT_UNDEFINED
3977
- ),
3978
- define('(RP_3_WA + Intl[TO_STRING].call())[11]', INTL, UNDEFINED),
3979
3086
  ],
3980
3087
  'V':
3981
3088
  [
3982
- define('"v"[TO_UPPER_CASE]()'),
3983
- define('btoa(undefined)[10]', ATOB),
3984
- define('(RP_0_S + document.createElement("video"))[12]', CREATE_ELEMENT),
3985
- defineCharDefault({ atob: false }),
3089
+ define('btoa(undefined)[10]'),
3986
3090
  ],
3987
3091
  'W':
3988
3092
  [
3989
- define('"w"[TO_UPPER_CASE]()'),
3990
- define('(self + RP_4_A)[SLICE_OR_SUBSTR]("-11")[0]', ANY_WINDOW),
3991
- define('btoa(undefined)[1]', ATOB),
3992
- define('(RP_0_S + self)[11]', DOMWINDOW),
3093
+ define('btoa(undefined)[1]'),
3993
3094
  define('(RP_3_WA + self)[11]', OBJECT_W_SELF),
3994
- define('(self + RP_4_A).at("-11")', ANY_WINDOW, AT),
3995
- defineCharDefault({ atob: false }),
3996
3095
  ],
3997
3096
  'X':
3998
3097
  [
3999
- define('"x"[TO_UPPER_CASE]()'),
4000
- define('btoa("1true")[1]', ATOB),
4001
- defineCharDefault({ atob: false }),
3098
+ define('btoa("1true")[1]'),
4002
3099
  ],
4003
3100
  'Y':
4004
3101
  [
4005
- define('"y"[TO_UPPER_CASE]()'),
4006
- define('btoa("a")[0]', ATOB),
4007
- defineCharDefault({ atob: false }),
3102
+ define('btoa("a")[0]'),
4008
3103
  ],
4009
3104
  'Z':
4010
3105
  [
4011
- define('btoa(false)[0]', ATOB),
4012
- define('(RP_3_WA + "".fontsize())[11]', CAPITAL_HTML),
3106
+ define('btoa(false)[0]'),
4013
3107
  ],
4014
3108
  '[':
4015
3109
  [
4016
3110
  defineCharInFnBody(14),
4017
3111
  define('(RP_0_S + ARRAY_ITERATOR)[0]', ARRAY_ITERATOR),
4018
3112
  ],
4019
- '\\':
4020
- [
4021
- define('ESCAPING_BACKSLASH'),
4022
- defineCharDefault({ atob: false, escSeq: false, unescape: false }),
4023
- ],
3113
+ // '\\'
4024
3114
  ']':
4025
3115
  [
4026
3116
  defineCharInFnBody(26),
4027
- define('(RP_0_S + ARRAY_ITERATOR)[22]', NO_OLD_SAFARI_ARRAY_ITERATOR),
3117
+ define('(RP_0_S + ARRAY_ITERATOR)[22]', ARRAY_ITERATOR),
4028
3118
  ],
4029
3119
  '^':
4030
3120
  [
4031
- define('atob("undefined0")[2]', ATOB),
3121
+ define('atob("undefined0")[2]'),
4032
3122
  ],
4033
3123
  // '_'
4034
3124
  // '`'
@@ -4052,18 +3142,17 @@
4052
3142
  ],
4053
3143
  'h':
4054
3144
  [
3145
+ define('btoa("0false")[3]'),
4055
3146
  define('101[TO_STRING]("21")[1]'),
4056
- define('btoa("0false")[3]', ATOB),
4057
3147
  ],
4058
3148
  'i': '([RP_5_A] + undefined)[10]',
4059
3149
  'j':
4060
3150
  [
3151
+ define('(RP_0_S + Intl)[3]'),
4061
3152
  define('(RP_0_S + PLAIN_OBJECT)[10]'),
4062
3153
  define('(RP_0_S + ARRAY_ITERATOR)[3]', ARRAY_ITERATOR),
4063
- define('(RP_0_S + Intl)[3]', INTL),
4064
- define('(RP_0_S + Node)[3]', NODECONSTRUCTOR),
4065
3154
  define('(RP_0_S + Intl)[10]', PLAIN_INTL),
4066
- define('(RP_0_S + self)[3]', SELF_OBJ),
3155
+ define('(RP_0_S + self)[3]', SELF),
4067
3156
  ],
4068
3157
  'k':
4069
3158
  [
@@ -4085,15 +3174,13 @@
4085
3174
  'p':
4086
3175
  [
4087
3176
  define('211[TO_STRING]("31")[1]'),
4088
- define('(RP_3_WA + btoa(undefined))[10]', ATOB),
3177
+ define('(RP_3_WA + btoa(undefined))[10]'),
4089
3178
  define('(RP_0_S + [].entries().filter(ANY_FUNCTION))[20]', ITERATOR_HELPER),
4090
3179
  ],
4091
3180
  'q':
4092
3181
  [
4093
3182
  define('212[TO_STRING]("31")[1]'),
4094
- define('"".fontcolor(0 + "".fontcolor())[30]', ESC_HTML_ALL),
4095
- define('"".fontcolor("0false\\"")[20]', ESC_HTML_QUOT),
4096
- define('"".fontcolor(true + "".fontcolor())[30]', ESC_HTML_QUOT_ONLY),
3183
+ define('"".fontcolor(true + "".fontcolor())[30]', ESC_HTML_QUOT),
4097
3184
  defineCharDefault(),
4098
3185
  ],
4099
3186
  'r': '"true"[1]',
@@ -4107,22 +3194,19 @@
4107
3194
  'w':
4108
3195
  [
4109
3196
  define('32[TO_STRING]("33")'),
4110
- define('(self + RP_0_S)[SLICE_OR_SUBSTR]("-2")[0]', ANY_WINDOW),
4111
- define('atob("undefined0")[1]', ATOB),
4112
- define('(RP_4_A + self)[20]', DOMWINDOW),
3197
+ define('atob("undefined0")[1]'),
4113
3198
  define('(RP_0_S + self)[13]', WINDOW),
4114
- define('(self + RP_0_S).at("-2")', ANY_WINDOW, AT),
4115
3199
  ],
4116
3200
  'x':
4117
3201
  [
3202
+ define('btoa("falsefalse")[10]'),
4118
3203
  define('101[TO_STRING]("34")[1]'),
4119
- define('btoa("falsefalse")[10]', ATOB),
4120
3204
  ],
4121
3205
  'y': '(RP_3_WA + [Infinity])[10]',
4122
3206
  'z':
4123
3207
  [
4124
3208
  define('35[TO_STRING]("36")'),
4125
- define('btoa("falsefalse")[11]', ATOB),
3209
+ define('btoa("falsefalse")[11]'),
4126
3210
  ],
4127
3211
  '{':
4128
3212
  [
@@ -4138,89 +3222,89 @@
4138
3222
 
4139
3223
  '\x8a':
4140
3224
  [
4141
- define('(RP_4_A + atob("NaNundefined"))[10]', ATOB),
3225
+ define('(RP_4_A + atob("NaNundefined"))[10]'),
4142
3226
  ],
4143
3227
  '\x8d':
4144
3228
  [
4145
- define('atob("0NaN")[2]', ATOB),
3229
+ define('atob("0NaN")[2]'),
4146
3230
  ],
4147
3231
  '\x96':
4148
3232
  [
4149
- define('atob("00false")[3]', ATOB),
3233
+ define('atob("00false")[3]'),
4150
3234
  ],
4151
3235
  '\x9e':
4152
3236
  [
4153
- define('atob(true)[2]', ATOB),
3237
+ define('atob(true)[2]'),
4154
3238
  ],
4155
3239
  '£':
4156
3240
  [
4157
- define('atob(NaN)[1]', ATOB),
3241
+ define('atob(NaN)[1]'),
4158
3242
  ],
4159
3243
  '¥':
4160
3244
  [
4161
- define('atob("0false")[2]', ATOB),
3245
+ define('atob("0false")[2]'),
4162
3246
  ],
4163
3247
  '§':
4164
3248
  [
4165
- define('atob("00undefined")[2]', ATOB),
3249
+ define('atob("00undefined")[2]'),
4166
3250
  ],
4167
3251
  '©':
4168
3252
  [
4169
- define('atob("false0")[1]', ATOB),
3253
+ define('atob("false0")[1]'),
4170
3254
  ],
4171
3255
  '±':
4172
3256
  [
4173
- define('atob("0false")[3]', ATOB),
3257
+ define('atob("0false")[3]'),
4174
3258
  ],
4175
3259
  '¶':
4176
3260
  [
4177
- define('atob(true)[0]', ATOB),
3261
+ define('atob(true)[0]'),
4178
3262
  ],
4179
3263
  'º':
4180
3264
  [
4181
- define('atob("undefined0")[0]', ATOB),
3265
+ define('atob("undefined0")[0]'),
4182
3266
  ],
4183
3267
  '»':
4184
3268
  [
4185
- define('atob(true)[1]', ATOB),
3269
+ define('atob(true)[1]'),
4186
3270
  ],
4187
3271
  'Ç':
4188
3272
  [
4189
- define('atob("falsefalsefalse")[10]', ATOB),
3273
+ define('atob("falsefalsefalse")[10]'),
4190
3274
  ],
4191
3275
  'Ú':
4192
3276
  [
4193
- define('atob("0truefalse")[1]', ATOB),
3277
+ define('atob("0truefalse")[1]'),
4194
3278
  ],
4195
3279
  'Ý':
4196
3280
  [
4197
- define('atob("0undefined")[2]', ATOB),
3281
+ define('atob("0undefined")[2]'),
4198
3282
  ],
4199
3283
  'â':
4200
3284
  [
4201
- define('atob("falsefalseundefined")[11]', ATOB),
3285
+ define('atob("falsefalseundefined")[11]'),
4202
3286
  ],
4203
3287
  'é':
4204
3288
  [
4205
- define('atob("0undefined")[1]', ATOB),
3289
+ define('atob("0undefined")[1]'),
4206
3290
  ],
4207
3291
  'î':
4208
3292
  [
4209
- define('atob("0truefalse")[2]', ATOB),
3293
+ define('atob("0truefalse")[2]'),
4210
3294
  ],
4211
3295
  'ö':
4212
3296
  [
4213
- define('atob("0false")[1]', ATOB),
3297
+ define('atob("0false")[1]'),
4214
3298
  ],
4215
3299
  'ø':
4216
3300
  [
4217
- define('atob("undefinedundefined")[10]', ATOB),
3301
+ define('atob("undefinedundefined")[10]'),
4218
3302
  ],
4219
3303
  '∞':
4220
3304
  [
3305
+ define('Infinity[TO_LOCALE_STRING]("ja")[SLICE_OR_SUBSTR]("-1")'),
3306
+ define('Infinity[TO_LOCALE_STRING]("ja").at("-1")', AT),
4221
3307
  define('Infinity[TO_LOCALE_STRING]()', LOCALE_INFINITY),
4222
- define('Infinity[TO_LOCALE_STRING]("ja")[SLICE_OR_SUBSTR]("-1")', JAPANESE_INFINITY),
4223
- define('Infinity[TO_LOCALE_STRING]("ja").at("-1")', JAPANESE_INFINITY, AT),
4224
3308
  defineCharDefault(),
4225
3309
  ],
4226
3310
  });
@@ -4234,7 +3318,7 @@
4234
3318
  String: define('String.name', NAME),
4235
3319
  fromCharCo:
4236
3320
  define({ expr: '"from3har3o".split(3).join("C")', optimize: { complexOpt: false } }),
4237
- mCh: define('atob("bUNo")', Feature.ATOB),
3321
+ mCh: define('atob("bUNo")'),
4238
3322
  });
4239
3323
 
4240
3324
  CONSTANTS =
@@ -4246,33 +3330,18 @@
4246
3330
  [
4247
3331
  define('[].constructor'),
4248
3332
  ],
4249
- Audio:
4250
- [
4251
- define('Function("return Audio")()', HTMLAUDIOELEMENT),
4252
- define('self.Audio', HTMLAUDIOELEMENT, SELF_OBJ),
4253
- ],
4254
3333
  Boolean:
4255
3334
  [
4256
3335
  define('false.constructor'),
4257
3336
  ],
4258
- Date:
4259
- [
4260
- define('Function("return Date")()'),
4261
- define('self.Date', SELF_OBJ),
4262
- ],
4263
3337
  Function:
4264
3338
  [
4265
3339
  define('ANY_FUNCTION.constructor'),
4266
3340
  ],
4267
3341
  Intl:
4268
3342
  [
4269
- define('Function("return Intl")()', INTL),
4270
- define('self.Intl', INTL, SELF_OBJ),
4271
- ],
4272
- Node:
4273
- [
4274
- define('Function("return Node")()', NODECONSTRUCTOR),
4275
- define('self.Node', NODECONSTRUCTOR, SELF_OBJ),
3343
+ define('Function("return Intl")()'),
3344
+ define('self.Intl', SELF),
4276
3345
  ],
4277
3346
  Number:
4278
3347
  [
@@ -4280,8 +3349,8 @@
4280
3349
  ],
4281
3350
  Object:
4282
3351
  [
3352
+ define('Intl.constructor'),
4283
3353
  define('PLAIN_OBJECT.constructor'),
4284
- define('Intl.constructor', INTL),
4285
3354
  define('[].entries().constructor', OBJECT_ARRAY_ENTRIES_CTOR),
4286
3355
  ],
4287
3356
  RegExp:
@@ -4294,160 +3363,50 @@
4294
3363
  ],
4295
3364
  atob:
4296
3365
  [
4297
- define('Function("return atob")()', ATOB),
4298
- define('self.atob', ATOB, SELF_OBJ),
3366
+ define('Function("return atob")()'),
3367
+ define('self.atob', SELF),
4299
3368
  ],
4300
3369
  btoa:
4301
3370
  [
4302
- define('Function("return btoa")()', ATOB),
4303
- define('self.btoa', ATOB, SELF_OBJ),
3371
+ define('Function("return btoa")()'),
3372
+ define('self.btoa', SELF),
4304
3373
  ],
4305
3374
  document:
4306
3375
  [
4307
- define({ expr: 'Function("return document")()', optimize: true }, ANY_DOCUMENT),
4308
- define({ expr: 'self.document', optimize: true }, ANY_DOCUMENT, SELF_OBJ),
4309
- ],
4310
- escape:
4311
- [
4312
- define({ expr: 'Function("return escape")()', optimize: true }),
4313
- define({ expr: 'self.escape', optimize: true }, SELF_OBJ),
4314
- ],
4315
- location:
4316
- [
4317
- define('Function("return location")()', LOCATION),
4318
- define('self.location', LOCATION, SELF_OBJ),
4319
- ],
4320
- self:
4321
- [
4322
- define('Function("return self")()', SELF_OBJ),
4323
- define('[].concat.call()[0]', CALL_ON_GLOBAL, SELF_OBJ),
4324
- ],
4325
- unescape:
4326
- [
4327
- define({ expr: 'Function("return unescape")()', optimize: true }),
4328
- define({ expr: 'self.unescape', optimize: true }, SELF_OBJ),
4329
- ],
4330
-
4331
- // Custom definitions
4332
-
4333
- ANY_FUNCTION:
4334
- [
4335
- define('FILTER'),
4336
- define('AT', AT),
4337
- define('FILL', FILL),
4338
- define('FLAT', FLAT),
4339
- ],
4340
- ARRAY_ITERATOR:
4341
- [
4342
- define('[].entries()', ARRAY_ITERATOR),
4343
- ],
4344
- AT:
4345
- [
4346
- define('[].at', AT),
4347
- ],
4348
- ESCAPING_BACKSLASH:
4349
- [
4350
- define(backslashDefinition),
4351
- define({ expr: 'atob("01y")[1]', solutionType: SolutionType.STRING }, ATOB),
4352
- define
4353
- (
4354
- { expr: '(RP_0_S + RegExp("\\n"))[1]', solutionType: SolutionType.STRING },
4355
- ESC_REGEXP_LF
4356
- ),
4357
- define
4358
- (
4359
- { expr: '(RP_5_A + RegExp("".italics()))[10]', solutionType: SolutionType.STRING },
4360
- ESC_REGEXP_SLASH
4361
- ),
4362
- define
4363
- (
4364
- { expr: '(RP_3_WA + RegExp("".sub()))[10]', solutionType: SolutionType.STRING },
4365
- ESC_REGEXP_SLASH
4366
- ),
4367
- define
4368
- (
4369
- { expr: '(RP_0_S + RegExp(FILTER))[20]', solutionType: SolutionType.STRING },
4370
- ESC_REGEXP_LF,
4371
- FF_SRC
4372
- ),
4373
- define
4374
- (
4375
- { expr: '(RP_0_S + RegExp(Function()))[20]', solutionType: SolutionType.STRING },
4376
- ESC_REGEXP_LF,
4377
- FUNCTION_19_LF
4378
- ),
4379
- define
4380
- (
4381
- { expr: '(RP_5_A + RegExp(Function()))[30]', solutionType: SolutionType.STRING },
4382
- ESC_REGEXP_LF,
4383
- FUNCTION_22_LF
4384
- ),
4385
- define
4386
- (
4387
- { expr: '(RP_0_S + RegExp(ANY_FUNCTION))[1]', solutionType: SolutionType.STRING },
4388
- ESC_REGEXP_LF,
4389
- IE_SRC
4390
- ),
4391
- define
4392
- (
4393
- {
4394
- expr: '(+(RP_0_S + FILTER)[0] + RegExp(FILTER))[23]',
4395
- solutionType: SolutionType.STRING,
4396
- },
4397
- ESC_REGEXP_LF,
4398
- NO_V8_SRC
4399
- ),
4400
- define
4401
- (
4402
- { expr: '(RP_4_A + RegExp(AT))[20]', solutionType: SolutionType.STRING },
4403
- AT,
4404
- ESC_REGEXP_LF,
4405
- FF_SRC
4406
- ),
4407
- define
4408
- (
4409
- {
4410
- expr: '(RP_1_WA + [+(RP_0_S + AT)[0]] + RegExp(AT))[20]',
4411
- solutionType: SolutionType.STRING,
4412
- },
4413
- AT,
4414
- ESC_REGEXP_LF,
4415
- NO_V8_SRC
4416
- ),
4417
- define
4418
- (
4419
- { expr: '(RP_3_WA + RegExp(FILL))[21]', solutionType: SolutionType.STRING },
4420
- ESC_REGEXP_LF,
4421
- FF_SRC,
4422
- FILL
4423
- ),
4424
- define
4425
- (
4426
- { expr: '(RP_3_WA + RegExp(FLAT))[21]', solutionType: SolutionType.STRING },
4427
- ESC_REGEXP_LF,
4428
- FF_SRC,
4429
- FLAT
4430
- ),
4431
- define
4432
- (
4433
- {
4434
- expr: '(+(RP_0_S + FILL)[0] + RegExp(FILL))[21]',
4435
- solutionType: SolutionType.STRING,
4436
- },
4437
- ESC_REGEXP_LF,
4438
- FILL,
4439
- NO_V8_SRC
4440
- ),
4441
- define
4442
- (
4443
- {
4444
- expr: '(+(RP_0_S + FLAT)[0] + RegExp(FLAT))[21]',
4445
- solutionType: SolutionType.STRING,
4446
- },
4447
- ESC_REGEXP_LF,
4448
- FLAT,
4449
- NO_V8_SRC
4450
- ),
3376
+ define({ expr: 'Function("return document")()', optimize: true }, DOCUMENT),
3377
+ define({ expr: 'self.document', optimize: true }, DOCUMENT, SELF),
3378
+ ],
3379
+ escape:
3380
+ [
3381
+ define({ expr: 'Function("return escape")()', optimize: true }),
3382
+ define({ expr: 'self.escape', optimize: true }, SELF),
3383
+ ],
3384
+ self:
3385
+ [
3386
+ define('Function("return self")()', SELF),
3387
+ ],
3388
+ unescape:
3389
+ [
3390
+ define({ expr: 'Function("return unescape")()', optimize: true }),
3391
+ define({ expr: 'self.unescape', optimize: true }, SELF),
3392
+ ],
3393
+
3394
+ // Custom definitions
3395
+
3396
+ ANY_FUNCTION:
3397
+ [
3398
+ define('FILTER'),
3399
+ define('AT', AT),
3400
+ define('FILL', FILL),
3401
+ define('FLAT', FLAT),
3402
+ ],
3403
+ ARRAY_ITERATOR:
3404
+ [
3405
+ define('[].entries()', ARRAY_ITERATOR),
3406
+ ],
3407
+ AT:
3408
+ [
3409
+ define('[].at', AT),
4451
3410
  ],
4452
3411
  FILL:
4453
3412
  [
@@ -4470,13 +3429,6 @@
4470
3429
  define({ expr: '"ar-td"', solutionType: SolutionType.COMBINED_STRING }),
4471
3430
  define({ expr: '"ar"', solutionType: SolutionType.COMBINED_STRING }, SHORT_LOCALES),
4472
3431
  ],
4473
- LOCATION_CONSTRUCTOR:
4474
- [
4475
- define('Function("return location")().constructor', OBJECT_L_LOCATION_CTOR),
4476
- define('Function("return location")().constructor', OLD_SAFARI_LOCATION_CTOR),
4477
- define('self.location.constructor', OBJECT_L_LOCATION_CTOR, SELF_OBJ),
4478
- define('self.location.constructor', OLD_SAFARI_LOCATION_CTOR, SELF_OBJ),
4479
- ],
4480
3432
  PLAIN_OBJECT:
4481
3433
  [
4482
3434
  define('Function("return{}")()'),
@@ -4522,23 +3474,6 @@
4522
3474
  define
4523
3475
  ({ expr: '"toUpperCase"', optimize: true, solutionType: SolutionType.COMBINED_STRING }),
4524
3476
  ],
4525
- USER_AGENT:
4526
- [
4527
- define
4528
- (
4529
- {
4530
- expr: 'Function("return navigator")().userAgent',
4531
- solutionType: SolutionType.STRING,
4532
- },
4533
- MOZILLA
4534
- ),
4535
- define
4536
- (
4537
- { expr: 'self.navigator.userAgent', solutionType: SolutionType.STRING },
4538
- MOZILLA,
4539
- SELF_OBJ
4540
- ),
4541
- ],
4542
3477
 
4543
3478
  // Function body extra padding blocks: prepended to a function to align the function's body
4544
3479
  // at the same position in different engines, assuming that the function header is aligned.
@@ -4763,558 +3698,32 @@
4763
3698
  [define('fromCharCode'), define('fromCodePoint', FROM_CODE_POINT)],
4764
3699
  [
4765
3700
  define(0),
4766
- define(1, ASYNC_FUNCTION),
4767
- define(1, ATOB),
4768
- define
4769
- (
4770
- 0,
4771
- ASYNC_FUNCTION,
4772
- CALL_ON_GLOBAL,
4773
- FROM_CODE_POINT,
4774
- INCR_CHAR,
4775
- NAME,
4776
- NODECONSTRUCTOR,
4777
- SELF_OBJ
4778
- ),
4779
- define(1, ASYNC_FUNCTION, NO_FF_SRC),
4780
- define(1, ASYNC_FUNCTION, NO_V8_SRC),
4781
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, NAME),
4782
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, NAME),
4783
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, FILL, NAME),
4784
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, FLAT, NAME),
4785
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, NAME, NO_IE_SRC),
4786
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, NAME, NO_V8_SRC),
4787
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER),
4788
- define
4789
- (
4790
- 0,
4791
- ASYNC_FUNCTION,
4792
- AT,
4793
- CALL_ON_GLOBAL,
4794
- FROM_CODE_POINT,
4795
- NAME,
4796
- NODECONSTRUCTOR,
4797
- SELF_OBJ
4798
- ),
4799
- define(1, ARRAY_ITERATOR, AT, ATOB, IE_SRC, ITERATOR_HELPER),
4800
- define
4801
- (
4802
- 0,
4803
- ASYNC_FUNCTION,
4804
- CALL_ON_GLOBAL,
4805
- FLAT,
4806
- FROM_CODE_POINT,
4807
- NAME,
4808
- NODECONSTRUCTOR,
4809
- SELF_OBJ
4810
- ),
4811
- define
4812
- (1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4813
- define
4814
- (1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4815
- define
4816
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4817
- define
4818
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4819
- define(0, ATOB, FROM_CODE_POINT, INTL, ITERATOR_HELPER),
4820
- define(1, ATOB, FILL, INTL, ITERATOR_HELPER),
4821
- define(1, ATOB, IE_SRC, INTL, ITERATOR_HELPER),
4822
- define(1, ATOB, INTL, ITERATOR_HELPER, NO_IE_SRC),
4823
- define
4824
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FROM_CODE_POINT, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4825
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4826
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4827
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4828
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
4829
- define
4830
- (
4831
- 0,
4832
- ASYNC_FUNCTION,
4833
- CALL_ON_GLOBAL,
4834
- FLAT,
4835
- FROM_CODE_POINT,
4836
- IE_SRC,
4837
- NAME,
4838
- NODECONSTRUCTOR,
4839
- SELF_OBJ
4840
- ),
4841
- define(1, ARRAY_ITERATOR, AT, ATOB, ITERATOR_HELPER, NO_IE_SRC),
4842
- define
4843
- (
4844
- 0,
4845
- ASYNC_FUNCTION,
4846
- CALL_ON_GLOBAL,
4847
- FILL,
4848
- FROM_CODE_POINT,
4849
- NAME,
4850
- NODECONSTRUCTOR,
4851
- SELF_OBJ
4852
- ),
4853
- define
4854
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4855
- define
4856
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4857
- define
4858
- (
4859
- 0,
4860
- ASYNC_FUNCTION,
4861
- CALL_ON_GLOBAL,
4862
- FILL,
4863
- FROM_CODE_POINT,
4864
- IE_SRC,
4865
- NAME,
4866
- NODECONSTRUCTOR,
4867
- SELF_OBJ
4868
- ),
4869
- define(1, AT, ATOB, INTL, ITERATOR_HELPER),
4870
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
4871
- define(1, ARRAY_ITERATOR, ATOB, ITERATOR_HELPER, SELF_OBJ),
4872
- define(1, ATOB, FILL, ITERATOR_HELPER, SELF_OBJ),
4873
- define(1, ATOB, FLAT, INTL, ITERATOR_HELPER),
4874
- define(1, ATOB, FLAT, ITERATOR_HELPER, SELF_OBJ),
4875
- define
4876
- (
4877
- 0,
4878
- ARRAY_ITERATOR,
4879
- ASYNC_FUNCTION,
4880
- CALL_ON_GLOBAL,
4881
- FROM_CODE_POINT,
4882
- NODECONSTRUCTOR,
4883
- SELF_OBJ
4884
- ),
4885
- define
4886
- (1, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NODECONSTRUCTOR, SELF_OBJ),
4887
- define
4888
- (1, ARRAY_ITERATOR, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NODECONSTRUCTOR, SELF_OBJ),
4889
- define
4890
- (
4891
- 1,
4892
- ARRAY_ITERATOR,
4893
- ASYNC_FUNCTION,
4894
- CALL_ON_GLOBAL,
4895
- FILL,
4896
- INCR_CHAR,
4897
- NODECONSTRUCTOR,
4898
- SELF_OBJ
4899
- ),
4900
- define
4901
- (
4902
- 1,
4903
- ARRAY_ITERATOR,
4904
- ASYNC_FUNCTION,
4905
- CALL_ON_GLOBAL,
4906
- FILL,
4907
- NODECONSTRUCTOR,
4908
- NO_FF_SRC,
4909
- SELF_OBJ
4910
- ),
4911
- define
4912
- (
4913
- 0,
4914
- ARRAY_ITERATOR,
4915
- ASYNC_FUNCTION,
4916
- CALL_ON_GLOBAL,
4917
- FROM_CODE_POINT,
4918
- NAME,
4919
- NODECONSTRUCTOR,
4920
- SELF_OBJ
4921
- ),
4922
- define
4923
- (
4924
- 1,
4925
- ARRAY_ITERATOR,
4926
- ASYNC_FUNCTION,
4927
- CALL_ON_GLOBAL,
4928
- FLAT,
4929
- NAME,
4930
- NODECONSTRUCTOR,
4931
- NO_FF_SRC,
4932
- SELF_OBJ
4933
- ),
4934
- define
4935
- (
4936
- 1,
4937
- ARRAY_ITERATOR,
4938
- ASYNC_FUNCTION,
4939
- CALL_ON_GLOBAL,
4940
- FLAT,
4941
- NAME,
4942
- NODECONSTRUCTOR,
4943
- NO_V8_SRC,
4944
- SELF_OBJ
4945
- ),
4946
- define
4947
- (
4948
- 0,
4949
- ARRAY_ITERATOR,
4950
- ASYNC_FUNCTION,
4951
- CALL_ON_GLOBAL,
4952
- FLAT,
4953
- FROM_CODE_POINT,
4954
- IE_SRC,
4955
- NAME,
4956
- NODECONSTRUCTOR,
4957
- SELF_OBJ
4958
- ),
4959
- define
4960
- (
4961
- 1,
4962
- ARRAY_ITERATOR,
4963
- ASYNC_FUNCTION,
4964
- CALL_ON_GLOBAL,
4965
- FILL,
4966
- NODECONSTRUCTOR,
4967
- NO_V8_SRC,
4968
- SELF_OBJ
4969
- ),
4970
- define
4971
- (
4972
- 0,
4973
- ARRAY_ITERATOR,
4974
- ASYNC_FUNCTION,
4975
- CALL_ON_GLOBAL,
4976
- FILL,
4977
- FROM_CODE_POINT,
4978
- IE_SRC,
4979
- NAME,
4980
- NODECONSTRUCTOR,
4981
- SELF_OBJ
4982
- ),
4983
- define
4984
- (
4985
- 1,
4986
- ARRAY_ITERATOR,
4987
- ASYNC_FUNCTION,
4988
- AT,
4989
- CALL_ON_GLOBAL,
4990
- NAME,
4991
- NODECONSTRUCTOR,
4992
- NO_FF_SRC,
4993
- SELF_OBJ
4994
- ),
4995
- define
4996
- (
4997
- 1,
4998
- ARRAY_ITERATOR,
4999
- ASYNC_FUNCTION,
5000
- AT,
5001
- CALL_ON_GLOBAL,
5002
- NAME,
5003
- NODECONSTRUCTOR,
5004
- NO_V8_SRC,
5005
- SELF_OBJ
5006
- ),
5007
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER),
5008
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER),
5009
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NO_V8_SRC),
5010
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER),
5011
- define(1, ASYNC_FUNCTION, IE_SRC, INTL, ITERATOR_HELPER),
5012
- define(1, ASYNC_FUNCTION, FLAT, INTL, ITERATOR_HELPER, NO_V8_SRC),
5013
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5014
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5015
- define
5016
- (0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5017
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, NODECONSTRUCTOR),
5018
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5019
- define(0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5020
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_V8_SRC, SELF_OBJ),
5021
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5022
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NO_V8_SRC, SELF_OBJ),
5023
- define
5024
- (
5025
- 0,
5026
- ASYNC_FUNCTION,
5027
- CALL_ON_GLOBAL,
5028
- FROM_CODE_POINT,
5029
- ITERATOR_HELPER,
5030
- NO_V8_SRC,
5031
- SELF_OBJ
5032
- ),
5033
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NO_IE_SRC),
5034
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NO_IE_SRC),
5035
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5036
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, V8_SRC),
5037
- define(1, ASYNC_FUNCTION, FF_SRC, INTL, ITERATOR_HELPER),
5038
- define(1, ASYNC_FUNCTION, FILL, INTL, ITERATOR_HELPER, NO_IE_SRC),
5039
- define(1, ASYNC_FUNCTION, FLAT, INTL, ITERATOR_HELPER, NO_IE_SRC),
5040
- define
5041
- (0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, NO_IE_SRC),
5042
- define(1, ASYNC_FUNCTION, FF_SRC, ITERATOR_HELPER, SELF_OBJ),
5043
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5044
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5045
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, V8_SRC),
5046
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, NO_IE_SRC),
5047
- define(0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
5048
- define
5049
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FF_SRC, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5050
- define
5051
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ, V8_SRC),
5052
- define
5053
- (
5054
- 0,
5055
- ASYNC_FUNCTION,
5056
- CALL_ON_GLOBAL,
5057
- FILL,
5058
- FROM_CODE_POINT,
5059
- ITERATOR_HELPER,
5060
- NO_IE_SRC,
5061
- SELF_OBJ
5062
- ),
5063
- define
5064
- (
5065
- 0,
5066
- ASYNC_FUNCTION,
5067
- CALL_ON_GLOBAL,
5068
- FLAT,
5069
- FROM_CODE_POINT,
5070
- ITERATOR_HELPER,
5071
- NO_IE_SRC,
5072
- SELF_OBJ
5073
- ),
5074
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5075
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
5076
- define
5077
- (
5078
- 0,
5079
- ASYNC_FUNCTION,
5080
- CALL_ON_GLOBAL,
5081
- FLAT,
5082
- FROM_CODE_POINT,
5083
- ITERATOR_HELPER,
5084
- NAME,
5085
- SELF_OBJ
5086
- ),
5087
- define(1, ATOB, ITERATOR_HELPER, NAME, NO_V8_SRC),
5088
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5089
- define(1, ATOB, INCR_CHAR, ITERATOR_HELPER, NAME),
5090
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, INTL, ITERATOR_HELPER, NAME),
5091
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5092
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, NO_FF_SRC),
5093
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, SELF_OBJ),
5094
- define(0, ATOB, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5095
- define(1, ATOB, FILL, ITERATOR_HELPER, NAME),
5096
- define(1, ATOB, IE_SRC, INTL, ITERATOR_HELPER, NAME),
5097
- define(0, ATOB, FILL, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME),
5098
- define(1, ATOB, FILL, IE_SRC, ITERATOR_HELPER, NAME),
5099
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME),
5100
- define(0, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER, NAME, SELF_OBJ),
5101
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5102
- define(1, ATOB, IE_SRC, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5103
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5104
- define(1, ATOB, FLAT, ITERATOR_HELPER, NAME),
5105
- define(0, ARRAY_ITERATOR, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER),
5106
- define(1, ARRAY_ITERATOR, ATOB, FILL, ITERATOR_HELPER, NO_V8_SRC),
5107
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FILL, ITERATOR_HELPER, SELF_OBJ),
5108
- define
5109
- (0, ARRAY_ITERATOR, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5110
- define(1, ARRAY_ITERATOR, ATOB, FILL, IE_SRC, ITERATOR_HELPER),
5111
- define
5112
- (
5113
- 0,
5114
- ASYNC_FUNCTION,
5115
- CALL_ON_GLOBAL,
5116
- FROM_CODE_POINT,
5117
- NODECONSTRUCTOR,
5118
- NO_IE_SRC,
5119
- SELF_OBJ
5120
- ),
5121
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FF_SRC, FLAT, NODECONSTRUCTOR, SELF_OBJ),
5122
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NODECONSTRUCTOR, SELF_OBJ, V8_SRC),
5123
- define
5124
- (
5125
- 0,
5126
- ASYNC_FUNCTION,
5127
- CALL_ON_GLOBAL,
5128
- FROM_CODE_POINT,
5129
- ITERATOR_HELPER,
5130
- NODECONSTRUCTOR,
5131
- NO_IE_SRC,
5132
- SELF_OBJ
5133
- ),
5134
- define
5135
- (
5136
- 0,
5137
- ASYNC_FUNCTION,
5138
- CALL_ON_GLOBAL,
5139
- FROM_CODE_POINT,
5140
- NAME,
5141
- NODECONSTRUCTOR,
5142
- NO_IE_SRC,
5143
- SELF_OBJ
5144
- ),
5145
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, NODECONSTRUCTOR, SELF_OBJ),
5146
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NODECONSTRUCTOR, SELF_OBJ, V8_SRC),
5147
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
5148
- define(0, ATOB, CALL_ON_GLOBAL, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, SELF_OBJ),
5149
- define(1, ATOB, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5150
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5151
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER),
5152
- define(1, ARRAY_ITERATOR, AT, ATOB, FILL, ITERATOR_HELPER),
5153
- define(1, ARRAY_ITERATOR, ATOB, FILL, ITERATOR_HELPER, NO_IE_SRC),
5154
- define(1, ATOB, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5155
- define(1, ATOB, FILL, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5156
- define
5157
- (0, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5158
- define(1, ASYNC_FUNCTION, AT, IE_SRC, ITERATOR_HELPER),
5159
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER, NO_IE_SRC),
5160
- define
5161
- (
5162
- 0,
5163
- ASYNC_FUNCTION,
5164
- AT,
5165
- CALL_ON_GLOBAL,
5166
- FROM_CODE_POINT,
5167
- ITERATOR_HELPER,
5168
- NODECONSTRUCTOR,
5169
- NO_IE_SRC,
5170
- SELF_OBJ
5171
- ),
5172
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, ITERATOR_HELPER, SELF_OBJ),
5173
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, ITERATOR_HELPER, SELF_OBJ, V8_SRC),
5174
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
5175
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5176
- define(1, ASYNC_FUNCTION, FILL, INCR_CHAR, ITERATOR_HELPER, NAME, NO_V8_SRC),
5177
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5178
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5179
- define
5180
- (0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5181
- define
5182
- (
5183
- 0,
5184
- ASYNC_FUNCTION,
5185
- FILL,
5186
- FROM_CODE_POINT,
5187
- INCR_CHAR,
5188
- ITERATOR_HELPER,
5189
- NAME,
5190
- NODECONSTRUCTOR,
5191
- NO_V8_SRC
5192
- ),
5193
- define
5194
- (
5195
- 0,
5196
- ASYNC_FUNCTION,
5197
- FILL,
5198
- FROM_CODE_POINT,
5199
- INCR_CHAR,
5200
- ITERATOR_HELPER,
5201
- NAME,
5202
- NO_V8_SRC,
5203
- SELF_OBJ
5204
- ),
5205
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, NAME),
5206
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5207
- define
5208
- (
5209
- 0,
5210
- ASYNC_FUNCTION,
5211
- CALL_ON_GLOBAL,
5212
- FROM_CODE_POINT,
5213
- IE_SRC,
5214
- ITERATOR_HELPER,
5215
- NAME,
5216
- SELF_OBJ
5217
- ),
5218
- define(1, ASYNC_FUNCTION, FF_SRC, ITERATOR_HELPER, NAME),
5219
- define
5220
- (
5221
- 0,
5222
- ASYNC_FUNCTION,
5223
- CALL_ON_GLOBAL,
5224
- FF_SRC,
5225
- FROM_CODE_POINT,
5226
- ITERATOR_HELPER,
5227
- NAME,
5228
- SELF_OBJ
5229
- ),
5230
- define
5231
- (0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5232
- define(1, ASYNC_FUNCTION, FLAT, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5233
- define(1, ASYNC_FUNCTION, AT, FLAT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5234
- define
5235
- (
5236
- 0,
5237
- ASYNC_FUNCTION,
5238
- CALL_ON_GLOBAL,
5239
- FLAT,
5240
- FROM_CODE_POINT,
5241
- IE_SRC,
5242
- ITERATOR_HELPER,
5243
- NAME,
5244
- SELF_OBJ
5245
- ),
5246
- define(1, ASYNC_FUNCTION, FF_SRC, FLAT, ITERATOR_HELPER, NAME, SELF_OBJ),
5247
- define
5248
- (
5249
- 0,
5250
- ASYNC_FUNCTION,
5251
- AT,
5252
- CALL_ON_GLOBAL,
5253
- FROM_CODE_POINT,
5254
- ITERATOR_HELPER,
5255
- NAME,
5256
- NO_V8_SRC,
5257
- SELF_OBJ
5258
- ),
5259
- define
5260
- (
5261
- 0,
5262
- ASYNC_FUNCTION,
5263
- CALL_ON_GLOBAL,
5264
- FF_SRC,
5265
- FLAT,
5266
- FROM_CODE_POINT,
5267
- ITERATOR_HELPER,
5268
- NAME,
5269
- SELF_OBJ
5270
- ),
5271
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5272
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5273
- define(0, ARRAY_ITERATOR, ATOB, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
5274
- define(1, ARRAY_ITERATOR, ATOB, FLAT, ITERATOR_HELPER, NO_V8_SRC),
5275
- define
5276
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FLAT, INCR_CHAR, ITERATOR_HELPER, SELF_OBJ),
5277
- define
5278
- (0, ARRAY_ITERATOR, ATOB, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5279
- define(1, ATOB, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5280
- define(1, ARRAY_ITERATOR, AT, ATOB, FLAT, ITERATOR_HELPER),
5281
- define(1, ARRAY_ITERATOR, ATOB, FLAT, IE_SRC, ITERATOR_HELPER),
5282
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5283
- define(1, ARRAY_ITERATOR, ATOB, FLAT, ITERATOR_HELPER, NO_IE_SRC),
5284
- define(1, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5285
- define(1, ATOB, FILL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5286
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, FROM_CODE_POINT, ITERATOR_HELPER),
5287
- define(1, ATOB, ITERATOR_HELPER, NAME, NO_IE_SRC),
5288
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5289
- define(1, ATOB, FILL, ITERATOR_HELPER, NAME, NO_IE_SRC),
5290
- define(1, ATOB, FLAT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5291
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NAME, SELF_OBJ),
5292
- define
5293
- (
5294
- 0,
5295
- ARRAY_ITERATOR,
5296
- ATOB,
5297
- CALL_ON_GLOBAL,
5298
- FLAT,
5299
- FROM_CODE_POINT,
5300
- ITERATOR_HELPER,
5301
- NAME,
5302
- SELF_OBJ
5303
- ),
5304
- define
5305
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5306
- define
5307
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, INCR_CHAR, ITERATOR_HELPER, NAME, SELF_OBJ),
5308
- define
5309
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NAME, NO_IE_SRC, SELF_OBJ),
5310
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_V8_SRC),
5311
- define(1, CAPITAL_HTML),
5312
- define(1, AT, ATOB, ITERATOR_HELPER, SELF_OBJ),
5313
- define(0, ARRAY_ITERATOR, ATOB, CAPITAL_HTML, FROM_CODE_POINT),
5314
- define(1, BARPROP),
3701
+ define(1),
3702
+ define(0, ITERATOR_HELPER),
3703
+ define(1, FILL),
3704
+ define(0, ARRAY_ITERATOR, CAPITAL_HTML, FROM_CODE_POINT),
3705
+ define(1, FLAT, ITERATOR_HELPER),
3706
+ define(0, FILL, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
3707
+ define(1, ARRAY_ITERATOR, ITERATOR_HELPER),
3708
+ define(1, IE_SRC, ITERATOR_HELPER),
3709
+ define(1, ITERATOR_HELPER, NO_IE_SRC),
3710
+ define(1, FILL, FLAT, ITERATOR_HELPER, NAME),
3711
+ define(0, ARRAY_ITERATOR, FILL, FROM_CODE_POINT, ITERATOR_HELPER),
3712
+ define(0, ARRAY_ITERATOR, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
3713
+ define(0, ARRAY_ITERATOR, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER),
3714
+ define(0, ARRAY_ITERATOR, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
3715
+ define(1, ARRAY_ITERATOR, FILL, ITERATOR_HELPER, NO_IE_SRC),
3716
+ define(1, ARRAY_ITERATOR, FILL, ITERATOR_HELPER, NO_V8_SRC),
3717
+ define(1, ARRAY_ITERATOR, FLAT, ITERATOR_HELPER, NO_IE_SRC),
3718
+ define(1, ARRAY_ITERATOR, FLAT, ITERATOR_HELPER, NO_V8_SRC),
3719
+ define(0, ARRAY_ITERATOR, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
3720
+ define(1, AT, ITERATOR_HELPER),
3721
+ define(1, BARPROP, ITERATOR_HELPER),
5315
3722
  define(1, CAPITAL_HTML, ITERATOR_HELPER),
5316
- define(1, AT, ATOB, ITERATOR_HELPER, NAME),
5317
- define(0, ARRAY_ITERATOR, ATOB, BARPROP, CAPITAL_HTML, FROM_CODE_POINT),
3723
+ define(1, ARRAY_ITERATOR, FILL, IE_SRC, ITERATOR_HELPER, NAME),
3724
+ define(1, ARRAY_ITERATOR, FILL, ITERATOR_HELPER, NAME, NO_IE_SRC),
3725
+ define(1, ARRAY_ITERATOR, FLAT, IE_SRC, ITERATOR_HELPER, NAME),
3726
+ define(1, ARRAY_ITERATOR, FLAT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5318
3727
  ]
5319
3728
  );
5320
3729
 
@@ -5441,28 +3850,15 @@
5441
3850
  ],
5442
3851
  [
5443
3852
  define(0),
5444
- define(1, ARRAY_ITERATOR, ATOB),
3853
+ define(1, ARRAY_ITERATOR),
5445
3854
  define(0, NO_FF_SRC),
5446
3855
  define(0, NO_V8_SRC),
5447
3856
  define(1, ARRAY_ITERATOR, CAPITAL_HTML),
5448
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, SELF_OBJ),
5449
- define(0, ARRAY_ITERATOR, ATOB, FILL),
5450
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, FILL),
3857
+ define(0, ARRAY_ITERATOR, AT),
3858
+ define(0, ARRAY_ITERATOR, FILL),
3859
+ define(0, ARRAY_ITERATOR, FLAT),
3860
+ define(0, ARRAY_ITERATOR, NO_IE_SRC),
5451
3861
  define(0, ARRAY_ITERATOR, CAPITAL_HTML, IE_SRC),
5452
- define(0, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, IE_SRC, SELF_OBJ),
5453
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FILL, SELF_OBJ),
5454
- define(0, ARRAY_ITERATOR, ATOB, NO_IE_SRC),
5455
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, NO_IE_SRC),
5456
- define(0, ARRAY_ITERATOR, ATOB, FILL, IE_SRC),
5457
- define(0, ARRAY_ITERATOR, ATOB, FILL, INCR_CHAR, NO_V8_SRC),
5458
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, NO_IE_SRC, SELF_OBJ),
5459
- define(0, ARRAY_ITERATOR, AT, ATOB),
5460
- define(0, ARRAY_ITERATOR, AT, CAPITAL_HTML),
5461
- define(0, ARRAY_ITERATOR, ATOB, FF_SRC),
5462
- define(0, ARRAY_ITERATOR, ATOB, FLAT),
5463
- define(0, ARRAY_ITERATOR, ATOB, V8_SRC),
5464
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, FLAT),
5465
- define(0, ARRAY_ITERATOR, ATOB, FILL, NO_IE_SRC),
5466
3862
  define(2),
5467
3863
  ]
5468
3864
  );
@@ -6050,9 +4446,8 @@
6050
4446
  HexIntegerLiteral: '0[Xx]#HexDigit+',
6051
4447
  NumericLiteral: '#HexIntegerLiteral|#DecimalLiteral',
6052
4448
  Separator: '#SeparatorChar|//.*(?!.)|/\\*[\\s\\S]*?\\*/',
6053
- // U+180E is recognized as a separator in older browsers.
6054
- // U+FEFF is missed by /\s/ in Android Browser < 4.1.x.
6055
- SeparatorChar: '(?!\u180E)[\\s\uFEFF]',
4449
+ // U+180E is recognized as a separator in Internet Explorer.
4450
+ SeparatorChar: '(?!\u180E)\\s',
6056
4451
  SingleQuotedString: '\'(?:#EscapeSequence|(?![\'\\\\]).)*\'',
6057
4452
  UnicodeEscapeSequence: '\\\\u#HexDigit{4}',
6058
4453
  };
@@ -6162,17 +4557,6 @@
6162
4557
  var SCREW_AS_STRING = 1;
6163
4558
  var SCREW_AS_BONDED_STRING = 2;
6164
4559
 
6165
- function gather(buffer, offset, count, groupBond, groupForceString)
6166
- {
6167
- var end = offset + count;
6168
- var groupSolutions = buffer._solutions.slice(offset, end);
6169
- var optimizerList = buffer._optimizerList;
6170
- if (optimizerList.length)
6171
- optimizeSolutions(optimizerList, groupSolutions, groupBond, groupForceString);
6172
- var str = gatherGroup(groupSolutions, groupBond, groupForceString);
6173
- return str;
6174
- }
6175
-
6176
4560
  function gatherGroup(solutions, bond, forceString)
6177
4561
  {
6178
4562
  var solution = new DynamicSolution();
@@ -6197,14 +4581,12 @@
6197
4581
  return str;
6198
4582
  }
6199
4583
 
6200
- function ScrewBuffer(screwMode, groupThreshold, optimizerList)
4584
+ function ScrewBuffer(screwMode, optimizerList)
6201
4585
  {
6202
- this._groupThreshold = groupThreshold;
6203
- this._maxSolutionCount = _Math_pow(2, groupThreshold - 1);
6204
4586
  this._optimizerList = optimizerList;
6205
4587
  this._screwMode = screwMode;
6206
4588
  this._solutions = [];
6207
- this._length = -3;
4589
+ this._length = -APPEND_LENGTH_OF_EMPTY;
6208
4590
  }
6209
4591
 
6210
4592
  assignNoEnum$1
@@ -6219,8 +4601,6 @@
6219
4601
  function (solution)
6220
4602
  {
6221
4603
  var solutions = this._solutions;
6222
- if (solutions.length >= this._maxSolutionCount)
6223
- return false;
6224
4604
  solutions.push(solution);
6225
4605
  var appendLength = solution.appendLength;
6226
4606
  this._optimizerList.forEach
@@ -6233,62 +4613,18 @@
6233
4613
  }
6234
4614
  );
6235
4615
  this._length += appendLength;
6236
- return true;
6237
4616
  },
6238
4617
  toString:
6239
4618
  function ()
6240
4619
  {
6241
- function collectOut(offset, count, maxGroupCount, groupBond)
6242
- {
6243
- var str;
6244
- if (count <= groupSize + 1)
6245
- str = gather(buffer, offset, count, groupBond);
6246
- else
6247
- {
6248
- maxGroupCount /= 2;
6249
- var halfCount = groupSize * maxGroupCount;
6250
- var capacity = 2 * halfCount - count;
6251
- var leftEndCount =
6252
- _Math_max
6253
- (
6254
- halfCount - capacity + capacity % (groupSize - 1),
6255
- (maxGroupCount / 2 ^ 0) * (groupSize + 1)
6256
- );
6257
- str =
6258
- collectOut(offset, leftEndCount, maxGroupCount) +
6259
- '+' +
6260
- collectOut(offset + leftEndCount, count - leftEndCount, maxGroupCount, true);
6261
- if (groupBond)
6262
- str = '(' + str + ')';
6263
- }
6264
- return str;
6265
- }
6266
-
6267
- var str;
6268
- var solutionCount = this._solutions.length;
6269
- var groupThreshold = this._groupThreshold;
6270
4620
  var screwMode = this._screwMode;
6271
4621
  var bond = screwMode === SCREW_AS_BONDED_STRING;
6272
- if (solutionCount <= groupThreshold)
6273
- {
6274
- var forceString = screwMode !== SCREW_NORMAL;
6275
- str = gather(this, 0, solutionCount, bond, forceString);
6276
- }
6277
- else
6278
- {
6279
- var groupSize = groupThreshold;
6280
- var maxGroupCount = 2;
6281
- for (;;)
6282
- {
6283
- --groupSize;
6284
- var maxSolutionCountForDepth = groupSize * maxGroupCount;
6285
- if (solutionCount <= maxSolutionCountForDepth)
6286
- break;
6287
- maxGroupCount *= 2;
6288
- }
6289
- var buffer = this;
6290
- str = collectOut(0, solutionCount, maxGroupCount, bond);
6291
- }
4622
+ var forceString = screwMode !== SCREW_NORMAL;
4623
+ var groupSolutions = this._solutions.slice();
4624
+ var optimizerList = this._optimizerList;
4625
+ if (optimizerList.length)
4626
+ optimizeSolutions(optimizerList, groupSolutions, bond, forceString);
4627
+ var str = gatherGroup(groupSolutions, bond, forceString);
6292
4628
  return str;
6293
4629
  },
6294
4630
  }
@@ -6555,7 +4891,7 @@
6555
4891
  appendIndexer = false;
6556
4892
  toStringOpt = false;
6557
4893
  }
6558
- var expr = 'Function("return\\"" + ESCAPING_BACKSLASH + "' + escCode + '\\"")()';
4894
+ var expr = 'Function("return\\"\\\\' + escCode + '\\"")()';
6559
4895
  if (appendIndexer)
6560
4896
  expr += '[0]';
6561
4897
  var replacement = this.replaceExpr(expr, { default: false, toStringOpt: toStringOpt });
@@ -6600,8 +4936,6 @@
6600
4936
  return replacement;
6601
4937
  }
6602
4938
 
6603
- var ATOB_MASK = Feature.ATOB.mask;
6604
-
6605
4939
  var STATIC_CHAR_CACHE = createEmpty();
6606
4940
  var STATIC_CONST_CACHE = createEmpty();
6607
4941
  var STATIC_ENCODER = new Encoder(MASK_EMPTY);
@@ -6648,14 +4982,6 @@
6648
4982
  }
6649
4983
  }
6650
4984
 
6651
- function defaultResolveCharacter(encoder, char)
6652
- {
6653
- var charCode = char.charCodeAt();
6654
- var atobOpt = charCode < 0x100;
6655
- var solution = encoder._createCharDefaultSolution(char, charCode, atobOpt, true, true, true);
6656
- return solution;
6657
- }
6658
-
6659
4985
  function findOptimalSolution(encoder, source, entries, defaultSolutionType)
6660
4986
  {
6661
4987
  var optimalSolution;
@@ -6878,8 +5204,6 @@
6878
5204
  function (str, index)
6879
5205
  {
6880
5206
  regExp.lastIndex = index;
6881
- // String.prototype.match doesn't work well with sticky regular expressions in Node.js <
6882
- // 6.5.
6883
5207
  var match = regExp.exec(str);
6884
5208
  if (match)
6885
5209
  return match[0];
@@ -6910,37 +5234,44 @@
6910
5234
  function (char, charCode, atobOpt, charCodeOpt, escSeqOpt, unescapeOpt)
6911
5235
  {
6912
5236
  var solution;
6913
- if (atobOpt && this.hasFeatures(ATOB_MASK))
5237
+ var solutions = [];
5238
+ if (atobOpt)
6914
5239
  {
6915
5240
  solution =
6916
5241
  resolveCharByDefaultMethod(this, char, charCode, replaceCharByAtob, 'atob');
5242
+ solutions.push(solution);
6917
5243
  }
6918
- else
5244
+ if (charCodeOpt)
6919
5245
  {
6920
- var solutions = [];
6921
- if (charCodeOpt)
6922
- {
6923
- solution =
6924
- resolveCharByDefaultMethod
6925
- (this, char, charCode, replaceCharByCharCode, 'char-code');
6926
- solutions.push(solution);
6927
- }
6928
- if (escSeqOpt)
6929
- {
6930
- solution =
6931
- resolveCharByDefaultMethod
6932
- (this, char, charCode, replaceCharByEscSeq, 'esc-seq');
6933
- solutions.push(solution);
6934
- }
6935
- if (unescapeOpt)
6936
- {
6937
- solution =
6938
- resolveCharByDefaultMethod
6939
- (this, char, charCode, replaceCharByUnescape, 'unescape');
6940
- solutions.push(solution);
6941
- }
6942
- solution = shortestOf.apply(null, solutions);
5246
+ solution =
5247
+ resolveCharByDefaultMethod
5248
+ (this, char, charCode, replaceCharByCharCode, 'char-code');
5249
+ solutions.push(solution);
5250
+ }
5251
+ if (escSeqOpt)
5252
+ {
5253
+ solution =
5254
+ resolveCharByDefaultMethod(this, char, charCode, replaceCharByEscSeq, 'esc-seq');
5255
+ solutions.push(solution);
5256
+ }
5257
+ if (unescapeOpt)
5258
+ {
5259
+ solution =
5260
+ resolveCharByDefaultMethod(this, char, charCode, replaceCharByUnescape, 'unescape');
5261
+ solutions.push(solution);
6943
5262
  }
5263
+ solution = shortestOf.apply(null, solutions);
5264
+ return solution;
5265
+ },
5266
+
5267
+ _defaultResolveCharacter:
5268
+ function (char)
5269
+ {
5270
+ var charCode = char.charCodeAt();
5271
+ var atobOpt = charCode < 0x100;
5272
+ var stdOpt = !atobOpt;
5273
+ var solution =
5274
+ this._createCharDefaultSolution(char, charCode, atobOpt, stdOpt, stdOpt, stdOpt);
6944
5275
  return solution;
6945
5276
  },
6946
5277
 
@@ -7074,18 +5405,6 @@
7074
5405
  return included;
7075
5406
  },
7076
5407
 
7077
- // The maximum value that can be safely used as the first group threshold of a ScrewBuffer.
7078
- // "Safely" means such that the extreme decoding test is passed in all engines.
7079
- // This value is typically limited by the free memory available on the stack, and since the
7080
- // memory layout of the stack changes at runtime in an unstable way, the maximum safe value
7081
- // cannot be determined exactly.
7082
- // The lowest recorded value so far is 1844, measured in an Android Browser 4.2.2 running on
7083
- // an Intel Atom emulator.
7084
- // Internet Explorer on Windows Phone occasionally failed the extreme decoding test in a
7085
- // non-reproducible manner, although the issue seems to be related to the output size rather
7086
- // than the grouping threshold setting.
7087
- maxGroupThreshold: 1800,
7088
-
7089
5408
  replaceExpr:
7090
5409
  function (expr, optimize)
7091
5410
  {
@@ -7169,7 +5488,7 @@
7169
5488
  options = options || { };
7170
5489
  var optimizerList = this._getOptimizerList(str, options.optimize);
7171
5490
  var screwMode = options.screwMode || SCREW_NORMAL;
7172
- var buffer = new ScrewBuffer(screwMode, this.maxGroupThreshold, optimizerList);
5491
+ var buffer = new ScrewBuffer(screwMode, optimizerList);
7173
5492
  var firstSolution = options.firstSolution;
7174
5493
  var maxLength = options.maxLength;
7175
5494
  if (firstSolution)
@@ -7193,7 +5512,8 @@
7193
5512
  var char = str[index++];
7194
5513
  solution = this.resolveCharacter(char);
7195
5514
  }
7196
- if (!buffer.append(solution) || buffer.length > maxLength)
5515
+ buffer.append(solution);
5516
+ if (buffer.length > maxLength)
7197
5517
  return;
7198
5518
  }
7199
5519
  var replacement = _String$1(buffer);
@@ -7251,7 +5571,7 @@
7251
5571
  if (entries)
7252
5572
  solution = findOptimalSolution(this, char, entries);
7253
5573
  if (!solution)
7254
- solution = defaultResolveCharacter(this, char);
5574
+ solution = this._defaultResolveCharacter(char);
7255
5575
  }
7256
5576
  else
7257
5577
  {
@@ -7423,6 +5743,10 @@
7423
5743
  return figurator;
7424
5744
  }
7425
5745
 
5746
+ var ENCODING_TYPE_COMBINED = 'combined';
5747
+ var ENCODING_TYPE_EXPRESSION = 'expression';
5748
+ var ENCODING_TYPE_TEXT = 'text';
5749
+
7426
5750
  var FALSE_FREE_DELIMITER = { joiner: 'false', separator: 'false' };
7427
5751
  var FALSE_TRUE_DELIMITER = { joiner: '', separator: 'Function("return/(?=false|true)/")()' };
7428
5752
 
@@ -7752,29 +6076,7 @@
7752
6076
  function encodeText(encoder, input, screwMode, unitPath, maxLength)
7753
6077
  {
7754
6078
  var output =
7755
- callStrategies
7756
- (
7757
- encoder,
7758
- input,
7759
- { screwMode: screwMode },
7760
- [
7761
- 'byDenseFigures',
7762
- 'bySparseFigures',
7763
- 'byDictRadix5AmendedBy3',
7764
- 'byDictRadix4AmendedBy2',
7765
- 'byDictRadix4AmendedBy1',
7766
- 'byDictRadix5',
7767
- 'byDictRadix3AmendedBy1',
7768
- 'byDictRadix4',
7769
- 'byDict',
7770
- 'byCodePointsRadix4',
7771
- 'byCharCodesRadix4',
7772
- 'byCodePoints',
7773
- 'byCharCodes',
7774
- 'plain',
7775
- ],
7776
- unitPath
7777
- );
6079
+ callStrategies(encoder, input, { screwMode: screwMode }, TEXT_STRATEGY_NAMES, unitPath);
7778
6080
  if (output != null && !(output.length > maxLength))
7779
6081
  return output;
7780
6082
  }
@@ -7912,12 +6214,10 @@
7912
6214
 
7913
6215
  (function ()
7914
6216
  {
7915
- function defineStrategy(strategy, minInputLength, expressionMode, featureObj)
6217
+ function defineStrategy(strategy, encodingType, minInputLength, featureObj)
7916
6218
  {
6219
+ strategy.encodingType = encodingType;
7917
6220
  strategy.minInputLength = minInputLength;
7918
- if (expressionMode === undefined)
7919
- expressionMode = false;
7920
- strategy.expressionMode = expressionMode;
7921
6221
  if (featureObj === undefined)
7922
6222
  featureObj = Feature.DEFAULT;
7923
6223
  strategy.mask = featureObj.mask;
@@ -7951,6 +6251,7 @@
7951
6251
  var output = this._encodeByCharCodes(inputData, undefined, maxLength);
7952
6252
  return output;
7953
6253
  },
6254
+ ENCODING_TYPE_TEXT,
7954
6255
  2
7955
6256
  ),
7956
6257
 
@@ -7971,6 +6272,7 @@
7971
6272
  var output = this._encodeByCharCodes(inputData, 4, maxLength);
7972
6273
  return output;
7973
6274
  },
6275
+ ENCODING_TYPE_TEXT,
7974
6276
  25
7975
6277
  ),
7976
6278
 
@@ -7990,8 +6292,8 @@
7990
6292
  var output = this._encodeByCodePoints(inputData, undefined, maxLength);
7991
6293
  return output;
7992
6294
  },
6295
+ ENCODING_TYPE_TEXT,
7993
6296
  3,
7994
- undefined,
7995
6297
  Feature.FROM_CODE_POINT
7996
6298
  ),
7997
6299
 
@@ -8011,8 +6313,8 @@
8011
6313
  var output = this._encodeByCodePoints(inputData, 4, maxLength);
8012
6314
  return output;
8013
6315
  },
8014
- 30,
8015
- undefined,
6316
+ ENCODING_TYPE_TEXT,
6317
+ 29,
8016
6318
  Feature.FROM_CODE_POINT
8017
6319
  ),
8018
6320
 
@@ -8034,7 +6336,8 @@
8034
6336
  var output = this._encodeByDenseFigures(inputData, maxLength);
8035
6337
  return output;
8036
6338
  },
8037
- 1888
6339
+ ENCODING_TYPE_TEXT,
6340
+ 1881
8038
6341
  ),
8039
6342
 
8040
6343
  /* -------------------------------------------------------------------------------------- *\
@@ -8061,7 +6364,8 @@
8061
6364
  var output = this._encodeByDict(inputData, undefined, undefined, maxLength);
8062
6365
  return output;
8063
6366
  },
8064
- 2
6367
+ ENCODING_TYPE_TEXT,
6368
+ 3
8065
6369
  ),
8066
6370
 
8067
6371
  /* -------------------------------------------------------------------------------------- *\
@@ -8090,7 +6394,8 @@
8090
6394
  var output = this._encodeByDict(inputData, 3, 1, maxLength);
8091
6395
  return output;
8092
6396
  },
8093
- 136
6397
+ ENCODING_TYPE_TEXT,
6398
+ 134
8094
6399
  ),
8095
6400
 
8096
6401
  /* -------------------------------------------------------------------------------------- *\
@@ -8126,7 +6431,8 @@
8126
6431
  var output = this._encodeByDict(inputData, 4, 0, maxLength);
8127
6432
  return output;
8128
6433
  },
8129
- 160
6434
+ ENCODING_TYPE_TEXT,
6435
+ 112
8130
6436
  ),
8131
6437
 
8132
6438
  /* -------------------------------------------------------------------------------------- *\
@@ -8155,7 +6461,8 @@
8155
6461
  var output = this._encodeByDict(inputData, 4, 1, maxLength);
8156
6462
  return output;
8157
6463
  },
8158
- 218
6464
+ ENCODING_TYPE_TEXT,
6465
+ 118
8159
6466
  ),
8160
6467
 
8161
6468
  /* -------------------------------------------------------------------------------------- *\
@@ -8186,7 +6493,8 @@
8186
6493
  var output = this._encodeByDict(inputData, 4, 2, maxLength);
8187
6494
  return output;
8188
6495
  },
8189
- 263
6496
+ ENCODING_TYPE_TEXT,
6497
+ 178
8190
6498
  ),
8191
6499
 
8192
6500
  /* -------------------------------------------------------------------------------------- *\
@@ -8223,7 +6531,41 @@
8223
6531
  var output = this._encodeByDict(inputData, 5, 0, maxLength);
8224
6532
  return output;
8225
6533
  },
8226
- 223
6534
+ ENCODING_TYPE_TEXT,
6535
+ 172
6536
+ ),
6537
+
6538
+ /* -------------------------------------------------------------------------------------- *\
6539
+
6540
+ Encodes "SIXTEEN" as:
6541
+
6542
+ "1false0false10false2falsetruefalsetruefalseundefined".split(true).join(3).split("undefined"
6543
+ ).join(4).split(false).map(Function(
6544
+ "return function(undefined){return this[parseInt(undefined,5)]}")().bind("ISTENX")).join([])
6545
+
6546
+ (simple)
6547
+
6548
+ Or:
6549
+
6550
+ "1falsetruefalse10false2falsefalsefalseundefined".split(true).join(3).split("undefined").
6551
+ join(4).split(false).map(Function(
6552
+ "return function(undefined){return this[parseInt(+undefined,5)]}")().bind("ESTINX")).join([]
6553
+ )
6554
+
6555
+ (with coercion)
6556
+
6557
+ \* -------------------------------------------------------------------------------------- */
6558
+
6559
+ byDictRadix5AmendedBy2:
6560
+ defineStrategy
6561
+ (
6562
+ function (inputData, maxLength)
6563
+ {
6564
+ var output = this._encodeByDict(inputData, 5, 2, maxLength);
6565
+ return output;
6566
+ },
6567
+ ENCODING_TYPE_TEXT,
6568
+ 193
8227
6569
  ),
8228
6570
 
8229
6571
  /* -------------------------------------------------------------------------------------- *\
@@ -8255,7 +6597,8 @@
8255
6597
  var output = this._encodeByDict(inputData, 5, 3, maxLength);
8256
6598
  return output;
8257
6599
  },
8258
- 570
6600
+ ENCODING_TYPE_TEXT,
6601
+ 506
8259
6602
  ),
8260
6603
 
8261
6604
  /* -------------------------------------------------------------------------------------- *\
@@ -8276,6 +6619,7 @@
8276
6619
  var output = this._encodeBySparseFigures(inputData, maxLength);
8277
6620
  return output;
8278
6621
  },
6622
+ ENCODING_TYPE_TEXT,
8279
6623
  347
8280
6624
  ),
8281
6625
 
@@ -8294,8 +6638,8 @@
8294
6638
  var output = this._encodeExpress(input, maxLength);
8295
6639
  return output;
8296
6640
  },
8297
- undefined,
8298
- true
6641
+ ENCODING_TYPE_EXPRESSION,
6642
+ 0
8299
6643
  ),
8300
6644
 
8301
6645
  /* -------------------------------------------------------------------------------------- *\
@@ -8314,7 +6658,9 @@
8314
6658
  { maxLength: maxLength, optimize: true, screwMode: inputData.screwMode };
8315
6659
  var output = this.replaceString(input, options);
8316
6660
  return output;
8317
- }
6661
+ },
6662
+ ENCODING_TYPE_TEXT,
6663
+ 0
8318
6664
  ),
8319
6665
 
8320
6666
  /* -------------------------------------------------------------------------------------- *\
@@ -8332,12 +6678,34 @@
8332
6678
  var wrapper = inputData.wrapper;
8333
6679
  var output = encodeAndWrapText(this, input, wrapper, undefined, maxLength);
8334
6680
  return output;
8335
- }
6681
+ },
6682
+ ENCODING_TYPE_COMBINED,
6683
+ 0
8336
6684
  ),
8337
6685
  };
8338
6686
  }
8339
6687
  )();
8340
6688
 
6689
+ var TEXT_STRATEGY_NAMES =
6690
+ _Object_keys$1(STRATEGIES).filter
6691
+ (
6692
+ function (strategyName)
6693
+ {
6694
+ var returnValue = STRATEGIES[strategyName].encodingType === ENCODING_TYPE_TEXT;
6695
+ return returnValue;
6696
+ }
6697
+ )
6698
+ .sort
6699
+ (
6700
+ function (strategyName1, strategyName2)
6701
+ {
6702
+ var minInputLength1 = STRATEGIES[strategyName1].minInputLength;
6703
+ var minInputLength2 = STRATEGIES[strategyName2].minInputLength;
6704
+ var diff = minInputLength2 - minInputLength1;
6705
+ return diff;
6706
+ }
6707
+ );
6708
+
8341
6709
  assignNoEnum$1
8342
6710
  (
8343
6711
  Encoder.prototype,
@@ -9633,9 +8001,9 @@
9633
8001
  return entry;
9634
8002
  }
9635
8003
 
9636
- function createScrewBuffer(screwMode, groupThreshold, optimizerList)
8004
+ function createScrewBuffer(screwMode, optimizerList)
9637
8005
  {
9638
- var buffer = new ScrewBuffer(screwMode, groupThreshold, optimizerList);
8006
+ var buffer = new ScrewBuffer(screwMode, optimizerList);
9639
8007
  return buffer;
9640
8008
  }
9641
8009