jscrewit 2.41.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.41.0 – https://jscrew.it
1
+ // JScrewIt 3.0.0 – https://jscrew.it
2
2
 
3
3
  (function () {
4
4
  'use strict';
@@ -22,7 +22,6 @@
22
22
  var _Math_abs = Math.abs;
23
23
  var _Math_max = Math.max;
24
24
  var _Math_min = Math.min;
25
- var _Math_pow = Math.pow;
26
25
 
27
26
  var _Object = Object;
28
27
  var _Object_create$1 = _Object.create;
@@ -85,10 +84,7 @@
85
84
  try
86
85
  {
87
86
  var regExp = _RegExp(pattern, flags);
88
- // In Android Browser 4.0, the RegExp constructor ignores unrecognized flags instead of
89
- // throwing a SyntaxError.
90
- if (regExp.flags === flags)
91
- return regExp;
87
+ return regExp;
92
88
  }
93
89
  catch (error)
94
90
  { }
@@ -281,35 +277,21 @@
281
277
  // ~feature-hub – https://github.com/fasttime/JScrewIt/tree/master/packages/~feature-hub
282
278
 
283
279
 
284
- var LO_INDEX = 0;
285
- var HI_INDEX = 1;
286
- var freezeMask = function (_LoHi) { return Object.freeze(_LoHi); };
287
280
  /** An empty mask. */
288
- var MASK_EMPTY = freezeMask([0, 0]);
281
+ var MASK_EMPTY = 0;
289
282
  /** Determines whether two specified masks are equal. */
290
283
  function maskAreEqual(mask1, mask2) {
291
- var _LoHi1 = mask1;
292
- var _LoHi2 = mask2;
293
- return _LoHi1[LO_INDEX] === _LoHi2[LO_INDEX] && _LoHi1[HI_INDEX] === _LoHi2[HI_INDEX];
284
+ return mask1 === mask2;
294
285
  }
295
286
  /** Determines whether a specified mask includes another one. */
296
287
  function maskIncludes(includingMask, includedMask) {
297
- var includingLoHi = includingMask;
298
- var includedLoHi = includedMask;
299
- var includedLoValue;
300
- var includedHiValue;
301
- var returnValue = (includedLoValue = includedLoHi[LO_INDEX]) === (includedLoValue & includingLoHi[LO_INDEX]) &&
302
- (includedHiValue = includedLoHi[HI_INDEX]) === (includedHiValue & includingLoHi[HI_INDEX]);
288
+ var returnValue = (includingMask & includedMask) === includedMask;
303
289
  return returnValue;
304
290
  }
305
291
  /** Returns a new mask that is the intersection of two specified masks. */
306
292
  function maskIntersection(mask1, mask2) {
307
- var _LoHi1 = mask1;
308
- var _LoHi2 = mask2;
309
- var intersectionLo = _LoHi1[LO_INDEX] & _LoHi2[LO_INDEX];
310
- var intersectionHi = _LoHi1[HI_INDEX] & _LoHi2[HI_INDEX];
311
- var intersectionLoHi = [intersectionLo, intersectionHi];
312
- return freezeMask(intersectionLoHi);
293
+ var intersectionMask = (mask1 & mask2);
294
+ return intersectionMask;
313
295
  }
314
296
  /**
315
297
  * Returns a new non-empty mask that does not intersect the specified mask.
@@ -317,27 +299,18 @@
317
299
  * @throws If the specified mask is full, a `RangeError` is thrown.
318
300
  */
319
301
  function maskNext(mask) {
320
- var _LoHi = mask;
321
- var bitIndex = 0;
322
- for (; _LoHi[bitIndex >> 5] & 1 << (bitIndex & 0x1F); bitIndex++) {
323
- if (bitIndex === 63)
324
- throw RangeError('Mask full');
325
- }
326
- var nextLoHi = [0, 0];
327
- nextLoHi[bitIndex >> 5] = 1 << (bitIndex & 0x1F);
328
- return freezeMask(nextLoHi);
302
+ var nextValue = mask + 1 & ~mask;
303
+ if (!nextValue)
304
+ throw RangeError('Mask full');
305
+ return nextValue;
329
306
  }
330
307
  /** Returns a new mask that is the union of two specified masks. */
331
308
  function maskUnion(mask1, mask2) {
332
- var _LoHi1 = mask1;
333
- var _LoHi2 = mask2;
334
- var unionLo = _LoHi1[LO_INDEX] | _LoHi2[LO_INDEX];
335
- var unionHi = _LoHi1[HI_INDEX] | _LoHi2[HI_INDEX];
336
- var unionLoHi = [unionLo, unionHi];
337
- return freezeMask(unionLoHi);
309
+ var unionMask = (mask1 | mask2);
310
+ return unionMask;
338
311
  }
339
312
 
340
- var keyFor = function (mask) { return "_".concat(mask); };
313
+ var keyFor = function (mask) { return mask; };
341
314
  var MaskIndex = /** @class */ (function () {
342
315
  function MaskIndex() {
343
316
  this._index = Object.create(null);
@@ -467,11 +440,11 @@
467
440
  return mask;
468
441
  }
469
442
  function areCompatible() {
470
- var arg0;
471
- var features = arguments.length === 1 &&
472
- _Array_isArray(arg0 = arguments[0]) ?
473
- arg0 : arguments;
474
- var mask = featureArrayLikeToMask(features);
443
+ var features = [];
444
+ for (var _i = 0; _i < arguments.length; _i++) {
445
+ features[_i] = arguments[_i];
446
+ }
447
+ var mask = featureArrayToMask(features);
475
448
  var compatible = isMaskCompatible(mask);
476
449
  return compatible;
477
450
  }
@@ -532,11 +505,10 @@
532
505
  var description = DESCRIPTION_MAP[name];
533
506
  return description;
534
507
  }
535
- function featureArrayLikeToMask(features) {
508
+ function featureArrayToMask(features) {
536
509
  var mask = MASK_EMPTY;
537
- var length = features.length;
538
- for (var index = 0; index < length; ++index) {
539
- var feature = features[index];
510
+ for (var _i = 0, features_3 = features; _i < features_3.length; _i++) {
511
+ var feature = features_3[_i];
540
512
  var otherMask = maskFromStringOrFeature(feature);
541
513
  mask = maskUnion(mask, otherMask);
542
514
  }
@@ -549,18 +521,15 @@
549
521
  }
550
522
  /**
551
523
  * Node.js custom inspection function.
552
- * Set on `Feature.prototype` with name `"inspect"` for Node.js ≤ 8.6.x and with symbol
553
- * `Symbol.for("nodejs.util.inspect.custom")` for Node.js ≥ 6.6.x.
554
524
  *
555
525
  * @see
556
526
  * {@link https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects} for
557
527
  * further information.
558
528
  */
559
- // opts can be undefined in Node.js 0.10.0.
560
529
  function inspect(depth, opts) {
561
530
  var _a, _b, _c;
562
- var breakLength = (_a = opts === null || opts === void 0 ? void 0 : opts.breakLength) !== null && _a !== void 0 ? _a : 80;
563
- var compact = (_b = opts === null || opts === void 0 ? void 0 : opts.compact) !== null && _b !== void 0 ? _b : true;
531
+ var breakLength = (_a = opts.breakLength) !== null && _a !== void 0 ? _a : 80;
532
+ var compact = (_b = opts.compact) !== null && _b !== void 0 ? _b : true;
564
533
  var name = (_c = this.name) !== null && _c !== void 0 ? _c : joinParts(compact, '<', '', this.canonicalNames, ',', '>', breakLength - 3);
565
534
  var parts = [name];
566
535
  if (this.elementary)
@@ -597,7 +566,7 @@
597
566
  function validMaskFromArrayOrStringOrFeature(feature) {
598
567
  var mask;
599
568
  if (_Array_isArray(feature)) {
600
- mask = featureArrayLikeToMask(feature);
569
+ mask = featureArrayToMask(feature);
601
570
  if (feature.length > 1)
602
571
  validateMask(mask);
603
572
  }
@@ -666,8 +635,6 @@
666
635
  return str;
667
636
  },
668
637
  };
669
- if (utilInspect)
670
- protoSource.inspect = inspect;
671
638
  assignNoEnum(FEATURE_PROTOTYPE, protoSource);
672
639
  }
673
640
  (function () {
@@ -838,10 +805,7 @@
838
805
  assignNoEnum(Feature, constructorSource);
839
806
  }
840
807
  if (utilInspect) {
841
- var inspectKey = utilInspect.custom;
842
- if (inspectKey) {
843
- _Object_defineProperty(FEATURE_PROTOTYPE, inspectKey, { configurable: true, value: inspect, writable: true });
844
- }
808
+ _Object_defineProperty(FEATURE_PROTOTYPE, utilInspect.custom, { configurable: true, value: inspect, writable: true });
845
809
  }
846
810
  var featureNames = _Object_keys(featureInfos);
847
811
  var includeSetMap = createMap();
@@ -949,16 +913,7 @@
949
913
  {
950
914
  function check()
951
915
  {
952
- // self + '' throws an error inside a web worker in Safari 8 and 9.
953
- try
954
- {
955
- var str = self + '';
956
- }
957
- catch (error)
958
- {
959
- return false;
960
- }
961
- var available = regExp.test(str);
916
+ var available = typeof self !== 'undefined' && regExp.test(self + '');
962
917
  return available;
963
918
  }
964
919
 
@@ -997,55 +952,19 @@
997
952
 
998
953
  var featureInfos =
999
954
  {
1000
- ANY_DOCUMENT:
1001
- {
1002
- description:
1003
- 'Existence of the global object document whose string representation starts with ' +
1004
- '"[object " and ends with "Document]".',
1005
- check:
1006
- function ()
1007
- {
1008
- var available =
1009
- typeof document === 'object' && /^\[object [\S\s]*Document]$/.test(document + '');
1010
- return available;
1011
- },
1012
- attributes: { 'web-worker': 'web-worker-restriction' },
1013
- },
1014
- ANY_WINDOW:
1015
- {
1016
- description:
1017
- 'Existence of the global object self whose string representation starts with "[object " ' +
1018
- 'and ends with "Window]".',
1019
- check: makeSelfFeatureCheck(/^\[object [\S\s]*Window]$/),
1020
- includes: ['SELF_OBJ'],
1021
- attributes: { 'web-worker': 'web-worker-restriction' },
1022
- },
1023
955
  ARRAY_ITERATOR:
1024
956
  {
1025
957
  description:
1026
- 'The property that the string representation of Array.prototype.entries() starts with ' +
1027
- '"[object Array" and ends with "]" at index 21 or 22.',
1028
- check:
1029
- function ()
1030
- {
1031
- var available =
1032
- Array.prototype.entries && /^\[object Array[\S\s]{8,9}]$/.test([].entries());
1033
- return available;
1034
- },
1035
- },
1036
- ASYNC_FUNCTION:
1037
- {
1038
- description: 'Support for async functions, which return Promise object.',
958
+ 'The property that the string representation of Array.prototype.entries() evaluates to ' +
959
+ '"[object Array Iterator]".',
1039
960
  check:
1040
961
  function ()
1041
962
  {
1042
- try
963
+ if (Array.prototype.entries)
1043
964
  {
1044
- Function('return async function(){}');
1045
- return true;
965
+ var available = [].entries() + '' === '[object Array Iterator]';
966
+ return available;
1046
967
  }
1047
- catch (error)
1048
- { }
1049
968
  },
1050
969
  },
1051
970
  ARROW:
@@ -1065,24 +984,14 @@
1065
984
  },
1066
985
  AT:
1067
986
  {
1068
- description: 'Existence of the native function Array.prototype.at.',
1069
- check:
1070
- function ()
1071
- {
1072
- var available = Array.prototype.at;
1073
- return available;
1074
- },
1075
- },
1076
- ATOB:
1077
- {
1078
- description: 'Existence of the global functions atob and btoa.',
987
+ description:
988
+ 'Existence of the native functions Array.prototype.at and String.prototype.at.',
1079
989
  check:
1080
990
  function ()
1081
991
  {
1082
- var available = typeof atob === 'function' && typeof btoa === 'function';
992
+ var available = Array.prototype.at && String.prototype.at;
1083
993
  return available;
1084
994
  },
1085
- attributes: { 'web-worker': 'old-safari-restriction' },
1086
995
  },
1087
996
  BARPROP:
1088
997
  {
@@ -1097,23 +1006,6 @@
1097
1006
  },
1098
1007
  attributes: { 'web-worker': 'web-worker-restriction' },
1099
1008
  },
1100
- CALL_ON_GLOBAL:
1101
- {
1102
- description:
1103
- 'The ability to call a function on the global object when invoking ' +
1104
- 'Function.prototype.call without binding.',
1105
- check:
1106
- function ()
1107
- {
1108
- try
1109
- {
1110
- if ([].concat.call()[0])
1111
- return true;
1112
- }
1113
- catch (error)
1114
- { }
1115
- },
1116
- },
1117
1009
  CAPITAL_HTML:
1118
1010
  {
1119
1011
  description:
@@ -1147,51 +1039,21 @@
1147
1039
  var available = typeof console === 'object' && console + '' === '[object Console]';
1148
1040
  return available;
1149
1041
  },
1150
- attributes: { 'web-worker': 'no-console-in-web-worker' },
1151
- },
1152
- CREATE_ELEMENT:
1153
- {
1154
- description: 'Existence of the function document.createElement.',
1155
- aliasFor: 'ANY_DOCUMENT',
1156
1042
  },
1157
1043
  DOCUMENT:
1158
1044
  {
1159
1045
  description:
1160
- 'Existence of the global object document having the string representation "[object ' +
1161
- 'Document]".',
1046
+ 'Existence of the global object document whose string representation starts with ' +
1047
+ '"[object " and ends with "Document]".',
1162
1048
  check:
1163
1049
  function ()
1164
1050
  {
1165
- var available = typeof document === 'object' && document + '' === '[object Document]';
1051
+ var available =
1052
+ typeof document === 'object' && /^\[object [\S\s]*Document]$/.test(document + '');
1166
1053
  return available;
1167
1054
  },
1168
- includes: ['ANY_DOCUMENT'],
1169
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',
@@ -2074,106 +1537,40 @@
2074
1537
  compatibilityShortTag: 'W10',
2075
1538
  includes:
2076
1539
  {
2077
- LOCALE_INFINITY: true,
2078
- LOCALE_NUMERALS: false,
2079
- LOCALE_NUMERALS_BN: true,
2080
- LOCALE_NUMERALS_EXT: true,
2081
- },
2082
- },
2083
- NODE_0_10:
2084
- {
2085
- families: ['Node.js'],
2086
- versions: ['0.10'],
2087
- includes:
2088
- [
2089
- 'ESC_HTML_ALL',
2090
- 'FUNCTION_22_LF',
2091
- 'GENERIC_ARRAY_TO_STRING',
2092
- 'GLOBAL_UNDEFINED',
2093
- 'GMT',
2094
- 'INCR_CHAR',
2095
- 'NAME',
2096
- 'V8_SRC',
2097
- ],
2098
- },
2099
- NODE_0_12:
2100
- {
2101
- inherits: 'NODE_0_10',
2102
- versions: ['0.12'],
2103
- includes:
2104
- {
2105
- ESC_HTML_ALL: false,
2106
- ESC_HTML_QUOT_ONLY: true,
2107
- JAPANESE_INFINITY: true,
2108
- LOCALE_INFINITY: true,
2109
- NO_OLD_SAFARI_ARRAY_ITERATOR: true,
2110
- OBJECT_ARRAY_ENTRIES_CTOR: true,
2111
- PLAIN_INTL: true,
2112
- },
2113
- },
2114
- NODE_4:
2115
- {
2116
- inherits: 'NODE_0_12',
2117
- versions: ['4'],
2118
- includes: { ARROW: true, ESC_REGEXP_SLASH: true, FILL: true, FROM_CODE_POINT: true },
2119
- },
2120
- NODE_5:
2121
- {
2122
- inherits: 'NODE_4',
2123
- versions: ['5-7.5'],
2124
- attributes: { 'char-increment-restriction': null },
2125
- },
2126
- NODE_7_6:
2127
- {
2128
- inherits: 'NODE_5',
2129
- versions: ['7.6-9'],
2130
- includes: { ASYNC_FUNCTION: true },
2131
- },
2132
- NODE_10:
2133
- {
2134
- inherits: 'NODE_7_6',
2135
- versions: ['10'],
2136
- includes: { FUNCTION_19_LF: true, FUNCTION_22_LF: false },
2137
- },
2138
- NODE_11:
2139
- {
2140
- inherits: 'NODE_10',
2141
- versions: ['11'],
2142
- includes: { FLAT: true },
2143
- },
2144
- NODE_12:
2145
- {
2146
- inherits: 'NODE_11',
2147
- versions: ['12'],
2148
- includes: { ESC_REGEXP_LF: true, REGEXP_STRING_ITERATOR: true },
2149
- },
2150
- NODE_13:
2151
- {
2152
- inherits: 'NODE_12',
2153
- versions: ['13|14'],
2154
- includes: { LOCALE_NUMERALS_BN: true, LOCALE_NUMERALS_EXT: true, SHORT_LOCALES: true },
2155
- },
2156
- NODE_15:
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 },
1540
+ LOCALE_INFINITY: true,
1541
+ LOCALE_NUMERALS_BN: true,
1542
+ LOCALE_NUMERALS_EXT: true,
1543
+ },
2167
1544
  },
2168
- NODE_16_6:
1545
+ NODE_20:
2169
1546
  {
2170
- inherits: 'NODE_16_0',
2171
- versions: ['16.6-21'],
2172
- includes: { AT: true },
1547
+ families: ['Node.js'],
1548
+ versions: ['20-21'],
1549
+ includes:
1550
+ [
1551
+ 'ARRAY_ITERATOR',
1552
+ 'ARROW',
1553
+ 'AT',
1554
+ 'ESC_HTML_QUOT',
1555
+ 'FILL',
1556
+ 'FLAT',
1557
+ 'FROM_CODE_POINT',
1558
+ 'FUNCTION_19_LF',
1559
+ 'INCR_CHAR',
1560
+ 'LOCALE_INFINITY',
1561
+ 'LOCALE_NUMERALS_BN',
1562
+ 'LOCALE_NUMERALS_EXT',
1563
+ 'NAME',
1564
+ 'OBJECT_ARRAY_ENTRIES_CTOR',
1565
+ 'REGEXP_STRING_ITERATOR',
1566
+ 'SHORT_LOCALES',
1567
+ 'V8_SRC',
1568
+ ],
1569
+ attributes: { 'char-increment-restriction': null },
2173
1570
  },
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('C', CAPITAL_HTML),
3484
- define('D', CALL_ON_GLOBAL, DOMWINDOW),
3485
- define('A', ARRAY_ITERATOR, CAPITAL_HTML),
3486
- define('A', ARRAY_ITERATOR, CALL_ON_GLOBAL, DOMWINDOW),
3487
- ],
2749
+ [define('A'), define('C', CAPITAL_HTML), define('A', ARRAY_ITERATOR)],
3488
2750
  [
3489
2751
  define('F'),
3490
2752
  define('H', ITERATOR_HELPER),
@@ -3494,18 +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', ANY_WINDOW, CALL_ON_GLOBAL),
3501
- define('U', CAPITAL_HTML, IE_SRC),
3502
- define('W', CALL_ON_GLOBAL, CAPITAL_HTML, DOMWINDOW),
3503
- define('U', ANY_WINDOW, CALL_ON_GLOBAL, CAPITAL_HTML, NO_IE_SRC),
3504
- define('W', CALL_ON_GLOBAL, CAPITAL_HTML, OBJECT_W_SELF),
3505
- define('W', CALL_ON_GLOBAL, CAPITAL_HTML, DOMWINDOW, NO_IE_SRC),
3506
- define('U', ANY_WINDOW, ARRAY_ITERATOR, CALL_ON_GLOBAL, CAPITAL_HTML),
3507
- define('U', ARRAY_ITERATOR, CALL_ON_GLOBAL, CAPITAL_HTML, OBJECT_W_SELF),
3508
- ],
2759
+ [define('W'), define('U', CAPITAL_HTML)],
3509
2760
  'a',
3510
2761
  'false',
3511
2762
  'i',
@@ -3593,13 +2844,7 @@
3593
2844
  '0A',
3594
2845
  [define('0B'), define('0R', CAPITAL_HTML), define('0B', ARRAY_ITERATOR)],
3595
2846
  '0i',
3596
- [
3597
- define('0j'),
3598
- define('0T', CAPITAL_HTML),
3599
- define('0j', ARRAY_ITERATOR),
3600
- define('0D', CALL_ON_GLOBAL, DOMWINDOW),
3601
- define('0j', ARRAY_ITERATOR, CALL_ON_GLOBAL, DOMWINDOW),
3602
- ],
2847
+ [define('0j'), define('0T', CAPITAL_HTML), define('0j', ARRAY_ITERATOR)],
3603
2848
  '00',
3604
2849
  '01',
3605
2850
  '02',
@@ -3619,17 +2864,7 @@
3619
2864
  CHARACTERS =
3620
2865
  noProto
3621
2866
  ({
3622
- // '\0'…'\x07'
3623
- '\b':
3624
- [
3625
- define('Function("return\\"" + ESCAPING_BACKSLASH + "b\\"")()[0]'),
3626
- defineCharDefault({ escSeq: false }),
3627
- ],
3628
- '\t':
3629
- [
3630
- define('Function("return\\"" + ESCAPING_BACKSLASH + "true\\"")()[0]'),
3631
- defineCharDefault({ escSeq: false }),
3632
- ],
2867
+ // '\0'…'\x09'
3633
2868
  '\n':
3634
2869
  [
3635
2870
  define('(RP_0_S + Function())[23]'),
@@ -3638,25 +2873,10 @@
3638
2873
  define('(RP_0_S + ANY_FUNCTION)[0]', IE_SRC),
3639
2874
  defineCharInFnHead(13, NO_V8_SRC),
3640
2875
  ],
3641
- '\v':
3642
- [
3643
- define('Function("return\\"" + ESCAPING_BACKSLASH + "v\\"")()[0]'),
3644
- defineCharDefault({ escSeq: false }),
3645
- ],
3646
- '\f':
3647
- [
3648
- define('Function("return\\"" + ESCAPING_BACKSLASH + "false\\"")()[0]'),
3649
- defineCharDefault({ escSeq: false }),
3650
- ],
3651
- '\r':
3652
- [
3653
- define('Function("return\\"" + ESCAPING_BACKSLASH + "r\\"")()'),
3654
- defineCharDefault({ escSeq: false }),
3655
- ],
3656
- // '\x0e'…'\x1d'
2876
+ // '\x0b'…'\x1d'
3657
2877
  '\x1e':
3658
2878
  [
3659
- define('(RP_5_A + atob("NaNfalse"))[10]', ATOB),
2879
+ define('(RP_5_A + atob("NaNfalse"))[10]'),
3660
2880
  ],
3661
2881
  // '\x1f'
3662
2882
  ' ':
@@ -3683,7 +2903,6 @@
3683
2903
  ],
3684
2904
  '#':
3685
2905
  [
3686
- define('document.nodeName[0]', NODE_NAME),
3687
2906
  defineCharDefault(),
3688
2907
  ],
3689
2908
  // '$'
@@ -3691,17 +2910,14 @@
3691
2910
  [
3692
2911
  define('escape(FILTER)[20]'),
3693
2912
  define('escape(0 + AT)[20]', AT),
3694
- define('atob("000l")[2]', ATOB),
3695
2913
  define('escape(FILL)[21]', FILL),
3696
2914
  define('escape(FLAT)[21]', FLAT),
3697
2915
  define('escape(ANY_FUNCTION)[0]', IE_SRC),
2916
+ defineCharDefault(),
3698
2917
  ],
3699
2918
  '&':
3700
2919
  [
3701
- define('"".fontcolor("".italics())[22]', ESC_HTML_ALL),
3702
- define('"".fontcolor("".sub())[20]', ESC_HTML_ALL),
3703
- define('"".fontcolor("\\"")[13]', ESC_HTML_QUOT),
3704
- define('"".fontcolor("".fontcolor([]))[31]', ESC_HTML_QUOT_ONLY),
2920
+ define('"".fontcolor("".fontcolor([]))[31]', ESC_HTML_QUOT),
3705
2921
  defineCharDefault(),
3706
2922
  ],
3707
2923
  // '\''
@@ -3728,18 +2944,10 @@
3728
2944
  define('"true".sub()[10]'),
3729
2945
  ],
3730
2946
  // '0'…'9'
3731
- ':':
3732
- [
3733
- define('(RP_0_S + RegExp())[3]'),
3734
- defineCharDefault(),
3735
- ],
2947
+ // ':'
3736
2948
  ';':
3737
2949
  [
3738
- define('"".fontcolor("".italics())[21]', ESC_HTML_ALL),
3739
- define('"".fontcolor(true + "".sub())[20]', ESC_HTML_ALL),
3740
- define('"".fontcolor("NaN\\"")[21]', ESC_HTML_QUOT),
3741
- define('"".fontcolor("".fontcolor())[30]', ESC_HTML_QUOT_ONLY),
3742
- defineCharDefault(),
2950
+ define('"".fontcolor("".fontcolor())[30]', ESC_HTML_QUOT),
3743
2951
  ],
3744
2952
  '<':
3745
2953
  [
@@ -3774,47 +2982,31 @@
3774
2982
  'C':
3775
2983
  [
3776
2984
  define('escape("".italics())[2]'),
3777
- define('escape("".sub())[2]'),
3778
2985
  define('escape(F_A_L_S_E)[11]'),
3779
- define('atob("00NaNfalse")[1]', ATOB),
3780
2986
  define('(RP_4_A + "".fontcolor())[10]', CAPITAL_HTML),
3781
2987
  define('(RP_3_WA + Function("return console")())[11]', CONSOLE),
3782
- define('(RP_0_S + Node)[12]', NODECONSTRUCTOR),
2988
+ defineCharDefault(),
3783
2989
  ],
3784
2990
  'D':
3785
2991
  [
2992
+ define('btoa("00")[1]'),
3786
2993
  // * The escaped character may be either "]" or "}".
3787
2994
  define('escape((+("1000" + (RP_5_A + FILTER + 0)[40] + 0) + FILTER)[40])[2]'), // *
3788
2995
  define('escape("]")[2]'),
3789
2996
  define('escape("}")[2]'),
3790
- define('(document + RP_0_S)[SLICE_OR_SUBSTR]("-10")[1]', ANY_DOCUMENT),
3791
2997
  define('escape((RP_4_A + [+("1000" + (AT + 0)[31] + 0)] + AT)[40])[2]', AT), // *
3792
- define('btoa("00")[1]', ATOB),
3793
- define('(RP_3_WA + document)[11]', DOCUMENT),
3794
- define('(RP_3_WA + self)[11]', DOMWINDOW),
3795
2998
  define // *
3796
2999
  ('escape((NaN + [+("10" + [(RP_6_S + FILL)[40]] + "000")] + FILL)[40])[2]', FILL),
3797
3000
  define // *
3798
3001
  ('escape((NaN + [+("10" + [(RP_6_S + FLAT)[40]] + "000")] + FLAT)[40])[2]', FLAT),
3799
- define('escape(ARRAY_ITERATOR)[30]', NO_OLD_SAFARI_ARRAY_ITERATOR),
3800
3002
  define('escape(FILTER)[50]', V8_SRC),
3801
- define('(document + [RP_1_WA]).at("-10")', ANY_DOCUMENT, AT),
3802
- define('escape(AT)[61]', AT, IE_SRC),
3803
3003
  define('escape([[]][+(RP_0_S + AT)[0]] + AT)[61]', AT, NO_FF_SRC), // *
3804
- define('escape([NaN][+(RP_1_WA + AT)[20]] + AT)[61]', AT, NO_IE_SRC), // *
3805
- define('escape(true + AT)[50]', AT, V8_SRC),
3806
- define('(RP_3_WA + "".slice.call())[11]', CALL_ON_GLOBAL, DOMWINDOW),
3807
- define('"".sub.call()[13]', CALL_ON_GLOBAL, DOMWINDOW),
3808
3004
  define('escape(FILL)[60]', FF_SRC, FILL),
3809
- define('escape(FLAT)[60]', FF_SRC, FLAT),
3810
3005
  ],
3811
3006
  'E':
3812
3007
  [
3813
- defineCharInFn('RegExp', 12),
3814
- define('btoa("0NaN")[1]', ATOB),
3008
+ define('btoa("0NaN")[1]'),
3815
3009
  define('(RP_5_A + "".link())[10]', CAPITAL_HTML),
3816
- define('(RP_3_WA + Audio)[21]', HTMLAUDIOELEMENT),
3817
- define('(RP_0_S + REGEXP_STRING_ITERATOR)[11]', REGEXP_STRING_ITERATOR),
3818
3010
  ],
3819
3011
  'F':
3820
3012
  [
@@ -3823,27 +3015,19 @@
3823
3015
  ],
3824
3016
  'G':
3825
3017
  [
3826
- define('btoa("0false")[1]', ATOB),
3018
+ define('btoa("0false")[1]'),
3827
3019
  define('"0".big()[10]', CAPITAL_HTML),
3828
- define('(RP_5_A + Date())[30]', GMT),
3829
3020
  ],
3830
3021
  'H':
3831
3022
  [
3832
- define('btoa(true)[1]', ATOB),
3023
+ define('btoa(true)[1]'),
3833
3024
  define('"".link()[3]', CAPITAL_HTML),
3834
- define('(RP_3_WA + document.forms)[11]', FORMS),
3835
- define
3836
- ({ expr: '(RP_3_WA + Function("return history")())[11]', optimize: true }, HISTORY),
3837
- define('(RP_1_WA + Audio)[10]', HTMLAUDIOELEMENT),
3838
3025
  define('(RP_4_A + [].entries().filter(ANY_FUNCTION))[21]', ITERATOR_HELPER),
3839
- define({ expr: '(RP_3_WA + self.history)[11]', optimize: true }, HISTORY, SELF_OBJ),
3840
3026
  ],
3841
3027
  'I': '"Infinity"[0]',
3842
3028
  'J':
3843
3029
  [
3844
- define('"j"[TO_UPPER_CASE]()'),
3845
- define('btoa(true)[2]', ATOB),
3846
- defineCharDefault({ atob: false }),
3030
+ define('btoa(true)[2]'),
3847
3031
  ],
3848
3032
  'K':
3849
3033
  [
@@ -3852,100 +3036,38 @@
3852
3036
  ],
3853
3037
  'L':
3854
3038
  [
3855
- define('btoa(".")[0]', ATOB),
3039
+ define('btoa(".")[0]'),
3856
3040
  define('(RP_3_WA + "".fontcolor())[11]', CAPITAL_HTML),
3857
- define('(RP_0_S + document.forms)[11]', FORMS),
3858
- define('(RP_0_S + Audio)[12]', HTMLAUDIOELEMENT),
3859
- define
3860
- (
3861
- {
3862
- expr:
3863
- 'Function("return toString.call(location)")()[SLICE_OR_SUBSTR]("-10")[1]',
3864
- optimize: true,
3865
- },
3866
- LOCATION
3867
- ),
3868
- define('(RP_3_WA + LOCATION_CONSTRUCTOR)[11]', OBJECT_L_LOCATION_CTOR),
3869
- define
3870
- (
3871
- '(LOCATION_CONSTRUCTOR + RP_0_S)[SLICE_OR_SUBSTR]("-20")[0]',
3872
- OLD_SAFARI_LOCATION_CTOR
3873
- ),
3874
- define
3875
- (
3876
- {
3877
- expr:
3878
- '(Function("return toString.call(location)")() + RP_1_WA).at("-10")',
3879
- optimize: true,
3880
- },
3881
- AT,
3882
- LOCATION
3883
- ),
3884
- define('(LOCATION_CONSTRUCTOR + RP_0_S).at("-20")', AT, OLD_SAFARI_LOCATION_CTOR),
3885
- define
3886
- (
3887
- '[][TO_STRING].call(location)[SLICE_OR_SUBSTR]("-10")[1]',
3888
- GENERIC_ARRAY_TO_STRING,
3889
- LOCATION
3890
- ),
3891
- define
3892
- ('self[TO_STRING].call(location)[SLICE_OR_SUBSTR]("-10")[1]', LOCATION, SELF_OBJ),
3893
- define
3894
- (
3895
- '([][TO_STRING].call(location) + RP_1_WA).at("-10")',
3896
- AT,
3897
- GENERIC_ARRAY_TO_STRING,
3898
- LOCATION
3899
- ),
3900
- define('(self[TO_STRING].call(location) + RP_1_WA).at("-10")', AT, LOCATION, SELF_OBJ),
3901
3041
  ],
3902
3042
  'M':
3903
3043
  [
3904
- define('btoa(0)[0]', ATOB),
3044
+ define('btoa(0)[0]'),
3905
3045
  define('"".small()[2]', CAPITAL_HTML),
3906
- define('(RP_0_S + self)[10]', DOMWINDOW),
3907
- define('(RP_0_S + document.forms)[10]', FORMS),
3908
- define('(RP_4_A + Date())[30]', GMT),
3909
- define('(RP_0_S + Audio)[11]', HTMLAUDIOELEMENT),
3910
- define('USER_AGENT[0]', MOZILLA),
3911
- define('"".slice.call()[10]', CALL_ON_GLOBAL, DOMWINDOW),
3912
- define('(RP_5_A + "".sub.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
3913
3046
  ],
3914
3047
  'N': '"NaN"[0]',
3915
3048
  'O':
3916
3049
  [
3917
3050
  defineCharInFn('Object', 9),
3051
+ define('btoa(NaN)[3]'),
3918
3052
  define('(RP_3_WA + PLAIN_OBJECT)[11]'),
3919
- define('btoa(NaN)[3]', ATOB),
3920
3053
  define('"".fontcolor()[2]', CAPITAL_HTML),
3921
- define('(RP_1_WA + self)[10]', DOMWINDOW),
3922
3054
  define('(RP_3_WA + Intl)[11]', PLAIN_INTL),
3923
- define('(RP_1_WA + "".slice.call())[10]', CALL_ON_GLOBAL, DOMWINDOW),
3924
- define('(RP_6_S + "".sub.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
3925
3055
  ],
3926
3056
  'P':
3927
3057
  [
3928
- define('String.fromCharCode("80")'),
3929
- define('(RP_3_WA + Function("return async function(){}")()())[11]', ASYNC_FUNCTION),
3930
- define('atob("01A")[1]', ATOB),
3931
- define('btoa("".italics())[0]', ATOB),
3058
+ define('btoa("".italics())[0]'),
3932
3059
  define('(RP_0_S + Function("return statusbar")())[11]', BARPROP),
3933
3060
  define('"0".sup()[10]', CAPITAL_HTML),
3934
- define('(RP_0_S + self.statusbar)[11]', BARPROP, SELF_OBJ),
3935
- defineCharDefault({ atob: false, charCode: false }),
3061
+ defineCharDefault(),
3936
3062
  ],
3937
3063
  'Q':
3938
3064
  [
3939
- define('"q"[TO_UPPER_CASE]()'),
3940
- define('btoa(1)[1]', ATOB),
3941
- defineCharDefault({ atob: false }),
3065
+ define('btoa(1)[1]'),
3942
3066
  ],
3943
3067
  'R':
3944
3068
  [
3945
- defineCharInFn('RegExp', 9),
3946
- define('btoa("0true")[2]', ATOB),
3069
+ define('btoa("0true")[2]'),
3947
3070
  define('"".fontcolor()[10]', CAPITAL_HTML),
3948
- define('(RP_3_WA + REGEXP_STRING_ITERATOR)[11]', REGEXP_STRING_ITERATOR),
3949
3071
  ],
3950
3072
  'S':
3951
3073
  [
@@ -3954,115 +3076,49 @@
3954
3076
  ],
3955
3077
  'T':
3956
3078
  [
3957
- define
3958
- (
3959
- {
3960
- expr:
3961
- '(RP_0_S + ' +
3962
- 'Function("try{undefined.false}catch(undefined){return undefined}")())[0]',
3963
- optimize: true,
3964
- }
3965
- ),
3966
- define('btoa(NaN)[0]', ATOB),
3079
+ define('btoa(NaN)[0]'),
3967
3080
  define('"".fontcolor([])[20]', CAPITAL_HTML),
3968
- define('(RP_1_WA + document.forms)[10]', FORMS),
3969
- define('(RP_3_WA + Date())[30]', GMT),
3970
- define('(RP_0_S + Audio)[10]', HTMLAUDIOELEMENT),
3971
- defineCharDefault({ atob: false }),
3972
3081
  ],
3973
3082
  'U':
3974
3083
  [
3975
- define('btoa("1NaN")[1]', ATOB),
3084
+ define('btoa("1NaN")[1]'),
3976
3085
  define('"".sub()[2]', CAPITAL_HTML),
3977
- define
3978
- (
3979
- { expr: '(RP_3_WA + Function("return toString")()())[11]', optimize: true },
3980
- GLOBAL_UNDEFINED
3981
- ),
3982
- define
3983
- (
3984
- { expr: '(RP_3_WA + Function("return{}.toString")()())[11]', optimize: true },
3985
- OBJECT_UNDEFINED
3986
- ),
3987
- define('(RP_3_WA + PLAIN_OBJECT[TO_STRING].call())[11]', UNDEFINED),
3988
- define('(RP_3_WA + ARRAY_ITERATOR[TO_STRING].call())[11]', ARRAY_ITERATOR, UNDEFINED),
3989
- define
3990
- (
3991
- { expr: '(RP_3_WA + Function("return Intl.toString")()())[11]', optimize: true },
3992
- INTL,
3993
- OBJECT_UNDEFINED
3994
- ),
3995
- define('(RP_3_WA + Intl[TO_STRING].call())[11]', INTL, UNDEFINED),
3996
3086
  ],
3997
3087
  'V':
3998
3088
  [
3999
- define('"v"[TO_UPPER_CASE]()'),
4000
- define('btoa(undefined)[10]', ATOB),
4001
- define('(RP_0_S + document.createElement("video"))[12]', CREATE_ELEMENT),
4002
- defineCharDefault({ atob: false }),
3089
+ define('btoa(undefined)[10]'),
4003
3090
  ],
4004
3091
  'W':
4005
3092
  [
4006
- define('"w"[TO_UPPER_CASE]()'),
4007
- define('(self + RP_4_A)[SLICE_OR_SUBSTR]("-11")[0]', ANY_WINDOW),
4008
- define('btoa(undefined)[1]', ATOB),
4009
- define('(RP_0_S + self)[11]', DOMWINDOW),
3093
+ define('btoa(undefined)[1]'),
4010
3094
  define('(RP_3_WA + self)[11]', OBJECT_W_SELF),
4011
- define('(self + RP_4_A).at("-11")', ANY_WINDOW, AT),
4012
- define
4013
- (
4014
- '("".slice.call() + RP_4_A)[SLICE_OR_SUBSTR]("-11")[0]',
4015
- ANY_WINDOW,
4016
- CALL_ON_GLOBAL
4017
- ),
4018
- define
4019
- (
4020
- '"".sub.call()[SLICE_OR_SUBSTR]("-13")[0]',
4021
- ANY_WINDOW,
4022
- CALL_ON_GLOBAL
4023
- ),
4024
- define('"".slice.call()[11]', CALL_ON_GLOBAL, DOMWINDOW),
4025
- define('(RP_4_A + "".sub.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
4026
- define('(RP_3_WA + "".slice.call())[11]', CALL_ON_GLOBAL, WINDOW),
4027
- define('"".sub.call()[13]', CALL_ON_GLOBAL, WINDOW),
4028
- define('("".slice.call() + RP_4_A).at("-11")', ANY_WINDOW, AT, CALL_ON_GLOBAL),
4029
- defineCharDefault({ atob: false }),
4030
3095
  ],
4031
3096
  'X':
4032
3097
  [
4033
- define('"x"[TO_UPPER_CASE]()'),
4034
- define('btoa("1true")[1]', ATOB),
4035
- defineCharDefault({ atob: false }),
3098
+ define('btoa("1true")[1]'),
4036
3099
  ],
4037
3100
  'Y':
4038
3101
  [
4039
- define('"y"[TO_UPPER_CASE]()'),
4040
- define('btoa("a")[0]', ATOB),
4041
- defineCharDefault({ atob: false }),
3102
+ define('btoa("a")[0]'),
4042
3103
  ],
4043
3104
  'Z':
4044
3105
  [
4045
- define('btoa(false)[0]', ATOB),
4046
- define('(RP_3_WA + "".fontsize())[11]', CAPITAL_HTML),
3106
+ define('btoa(false)[0]'),
4047
3107
  ],
4048
3108
  '[':
4049
3109
  [
4050
3110
  defineCharInFnBody(14),
4051
3111
  define('(RP_0_S + ARRAY_ITERATOR)[0]', ARRAY_ITERATOR),
4052
3112
  ],
4053
- '\\':
4054
- [
4055
- define('ESCAPING_BACKSLASH'),
4056
- defineCharDefault({ atob: false, escSeq: false, unescape: false }),
4057
- ],
3113
+ // '\\'
4058
3114
  ']':
4059
3115
  [
4060
3116
  defineCharInFnBody(26),
4061
- define('(RP_0_S + ARRAY_ITERATOR)[22]', NO_OLD_SAFARI_ARRAY_ITERATOR),
3117
+ define('(RP_0_S + ARRAY_ITERATOR)[22]', ARRAY_ITERATOR),
4062
3118
  ],
4063
3119
  '^':
4064
3120
  [
4065
- define('atob("undefined0")[2]', ATOB),
3121
+ define('atob("undefined0")[2]'),
4066
3122
  ],
4067
3123
  // '_'
4068
3124
  // '`'
@@ -4086,18 +3142,17 @@
4086
3142
  ],
4087
3143
  'h':
4088
3144
  [
3145
+ define('btoa("0false")[3]'),
4089
3146
  define('101[TO_STRING]("21")[1]'),
4090
- define('btoa("0false")[3]', ATOB),
4091
3147
  ],
4092
3148
  'i': '([RP_5_A] + undefined)[10]',
4093
3149
  'j':
4094
3150
  [
3151
+ define('(RP_0_S + Intl)[3]'),
4095
3152
  define('(RP_0_S + PLAIN_OBJECT)[10]'),
4096
3153
  define('(RP_0_S + ARRAY_ITERATOR)[3]', ARRAY_ITERATOR),
4097
- define('(RP_0_S + Intl)[3]', INTL),
4098
- define('(RP_0_S + Node)[3]', NODECONSTRUCTOR),
4099
3154
  define('(RP_0_S + Intl)[10]', PLAIN_INTL),
4100
- define('(RP_0_S + self)[3]', SELF_OBJ),
3155
+ define('(RP_0_S + self)[3]', SELF),
4101
3156
  ],
4102
3157
  'k':
4103
3158
  [
@@ -4119,15 +3174,13 @@
4119
3174
  'p':
4120
3175
  [
4121
3176
  define('211[TO_STRING]("31")[1]'),
4122
- define('(RP_3_WA + btoa(undefined))[10]', ATOB),
3177
+ define('(RP_3_WA + btoa(undefined))[10]'),
4123
3178
  define('(RP_0_S + [].entries().filter(ANY_FUNCTION))[20]', ITERATOR_HELPER),
4124
3179
  ],
4125
3180
  'q':
4126
3181
  [
4127
3182
  define('212[TO_STRING]("31")[1]'),
4128
- define('"".fontcolor(0 + "".fontcolor())[30]', ESC_HTML_ALL),
4129
- define('"".fontcolor("0false\\"")[20]', ESC_HTML_QUOT),
4130
- define('"".fontcolor(true + "".fontcolor())[30]', ESC_HTML_QUOT_ONLY),
3183
+ define('"".fontcolor(true + "".fontcolor())[30]', ESC_HTML_QUOT),
4131
3184
  defineCharDefault(),
4132
3185
  ],
4133
3186
  'r': '"true"[1]',
@@ -4141,39 +3194,19 @@
4141
3194
  'w':
4142
3195
  [
4143
3196
  define('32[TO_STRING]("33")'),
4144
- define('(self + RP_0_S)[SLICE_OR_SUBSTR]("-2")[0]', ANY_WINDOW),
4145
- define('atob("undefined0")[1]', ATOB),
4146
- define('(RP_4_A + self)[20]', DOMWINDOW),
3197
+ define('atob("undefined0")[1]'),
4147
3198
  define('(RP_0_S + self)[13]', WINDOW),
4148
- define('(self + RP_0_S).at("-2")', ANY_WINDOW, AT),
4149
- define
4150
- (
4151
- '"".slice.call()[SLICE_OR_SUBSTR]("-2")[0]',
4152
- ANY_WINDOW,
4153
- CALL_ON_GLOBAL
4154
- ),
4155
- define
4156
- (
4157
- '("".sub.call() + RP_3_WA)[SLICE_OR_SUBSTR]("-11")[0]',
4158
- ANY_WINDOW,
4159
- CALL_ON_GLOBAL
4160
- ),
4161
- define('(RP_4_A + "".slice.call())[20]', CALL_ON_GLOBAL, DOMWINDOW),
4162
- define('"".sub.call()[21]', CALL_ON_GLOBAL, DOMWINDOW),
4163
- define('"".slice.call()[13]', CALL_ON_GLOBAL, WINDOW),
4164
- define('(RP_3_WA + "".sub.call())[21]', CALL_ON_GLOBAL, WINDOW),
4165
- define('"".slice.call().at("-2")', ANY_WINDOW, AT, CALL_ON_GLOBAL),
4166
3199
  ],
4167
3200
  'x':
4168
3201
  [
3202
+ define('btoa("falsefalse")[10]'),
4169
3203
  define('101[TO_STRING]("34")[1]'),
4170
- define('btoa("falsefalse")[10]', ATOB),
4171
3204
  ],
4172
3205
  'y': '(RP_3_WA + [Infinity])[10]',
4173
3206
  'z':
4174
3207
  [
4175
3208
  define('35[TO_STRING]("36")'),
4176
- define('btoa("falsefalse")[11]', ATOB),
3209
+ define('btoa("falsefalse")[11]'),
4177
3210
  ],
4178
3211
  '{':
4179
3212
  [
@@ -4189,89 +3222,89 @@
4189
3222
 
4190
3223
  '\x8a':
4191
3224
  [
4192
- define('(RP_4_A + atob("NaNundefined"))[10]', ATOB),
3225
+ define('(RP_4_A + atob("NaNundefined"))[10]'),
4193
3226
  ],
4194
3227
  '\x8d':
4195
3228
  [
4196
- define('atob("0NaN")[2]', ATOB),
3229
+ define('atob("0NaN")[2]'),
4197
3230
  ],
4198
3231
  '\x96':
4199
3232
  [
4200
- define('atob("00false")[3]', ATOB),
3233
+ define('atob("00false")[3]'),
4201
3234
  ],
4202
3235
  '\x9e':
4203
3236
  [
4204
- define('atob(true)[2]', ATOB),
3237
+ define('atob(true)[2]'),
4205
3238
  ],
4206
3239
  '£':
4207
3240
  [
4208
- define('atob(NaN)[1]', ATOB),
3241
+ define('atob(NaN)[1]'),
4209
3242
  ],
4210
3243
  '¥':
4211
3244
  [
4212
- define('atob("0false")[2]', ATOB),
3245
+ define('atob("0false")[2]'),
4213
3246
  ],
4214
3247
  '§':
4215
3248
  [
4216
- define('atob("00undefined")[2]', ATOB),
3249
+ define('atob("00undefined")[2]'),
4217
3250
  ],
4218
3251
  '©':
4219
3252
  [
4220
- define('atob("false0")[1]', ATOB),
3253
+ define('atob("false0")[1]'),
4221
3254
  ],
4222
3255
  '±':
4223
3256
  [
4224
- define('atob("0false")[3]', ATOB),
3257
+ define('atob("0false")[3]'),
4225
3258
  ],
4226
3259
  '¶':
4227
3260
  [
4228
- define('atob(true)[0]', ATOB),
3261
+ define('atob(true)[0]'),
4229
3262
  ],
4230
3263
  'º':
4231
3264
  [
4232
- define('atob("undefined0")[0]', ATOB),
3265
+ define('atob("undefined0")[0]'),
4233
3266
  ],
4234
3267
  '»':
4235
3268
  [
4236
- define('atob(true)[1]', ATOB),
3269
+ define('atob(true)[1]'),
4237
3270
  ],
4238
3271
  'Ç':
4239
3272
  [
4240
- define('atob("falsefalsefalse")[10]', ATOB),
3273
+ define('atob("falsefalsefalse")[10]'),
4241
3274
  ],
4242
3275
  'Ú':
4243
3276
  [
4244
- define('atob("0truefalse")[1]', ATOB),
3277
+ define('atob("0truefalse")[1]'),
4245
3278
  ],
4246
3279
  'Ý':
4247
3280
  [
4248
- define('atob("0undefined")[2]', ATOB),
3281
+ define('atob("0undefined")[2]'),
4249
3282
  ],
4250
3283
  'â':
4251
3284
  [
4252
- define('atob("falsefalseundefined")[11]', ATOB),
3285
+ define('atob("falsefalseundefined")[11]'),
4253
3286
  ],
4254
3287
  'é':
4255
3288
  [
4256
- define('atob("0undefined")[1]', ATOB),
3289
+ define('atob("0undefined")[1]'),
4257
3290
  ],
4258
3291
  'î':
4259
3292
  [
4260
- define('atob("0truefalse")[2]', ATOB),
3293
+ define('atob("0truefalse")[2]'),
4261
3294
  ],
4262
3295
  'ö':
4263
3296
  [
4264
- define('atob("0false")[1]', ATOB),
3297
+ define('atob("0false")[1]'),
4265
3298
  ],
4266
3299
  'ø':
4267
3300
  [
4268
- define('atob("undefinedundefined")[10]', ATOB),
3301
+ define('atob("undefinedundefined")[10]'),
4269
3302
  ],
4270
3303
  '∞':
4271
3304
  [
4272
- define('Infinity[TO_LOCALE_STRING]("ja")[SLICE_OR_SUBSTR]("-1")', JAPANESE_INFINITY),
3305
+ define('Infinity[TO_LOCALE_STRING]("ja")[SLICE_OR_SUBSTR]("-1")'),
3306
+ define('Infinity[TO_LOCALE_STRING]("ja").at("-1")', AT),
4273
3307
  define('Infinity[TO_LOCALE_STRING]()', LOCALE_INFINITY),
4274
- define('Infinity[TO_LOCALE_STRING]("ja").at("-1")', JAPANESE_INFINITY, AT),
4275
3308
  defineCharDefault(),
4276
3309
  ],
4277
3310
  });
@@ -4285,7 +3318,7 @@
4285
3318
  String: define('String.name', NAME),
4286
3319
  fromCharCo:
4287
3320
  define({ expr: '"from3har3o".split(3).join("C")', optimize: { complexOpt: false } }),
4288
- mCh: define('atob("bUNo")', Feature.ATOB),
3321
+ mCh: define('atob("bUNo")'),
4289
3322
  });
4290
3323
 
4291
3324
  CONSTANTS =
@@ -4297,33 +3330,18 @@
4297
3330
  [
4298
3331
  define('[].constructor'),
4299
3332
  ],
4300
- Audio:
4301
- [
4302
- define('Function("return Audio")()', HTMLAUDIOELEMENT),
4303
- define('self.Audio', HTMLAUDIOELEMENT, SELF_OBJ),
4304
- ],
4305
3333
  Boolean:
4306
3334
  [
4307
3335
  define('false.constructor'),
4308
3336
  ],
4309
- Date:
4310
- [
4311
- define('Function("return Date")()'),
4312
- define('self.Date', SELF_OBJ),
4313
- ],
4314
3337
  Function:
4315
3338
  [
4316
3339
  define('ANY_FUNCTION.constructor'),
4317
3340
  ],
4318
3341
  Intl:
4319
3342
  [
4320
- define('Function("return Intl")()', INTL),
4321
- define('self.Intl', INTL, SELF_OBJ),
4322
- ],
4323
- Node:
4324
- [
4325
- define('Function("return Node")()', NODECONSTRUCTOR),
4326
- define('self.Node', NODECONSTRUCTOR, SELF_OBJ),
3343
+ define('Function("return Intl")()'),
3344
+ define('self.Intl', SELF),
4327
3345
  ],
4328
3346
  Number:
4329
3347
  [
@@ -4331,8 +3349,8 @@
4331
3349
  ],
4332
3350
  Object:
4333
3351
  [
3352
+ define('Intl.constructor'),
4334
3353
  define('PLAIN_OBJECT.constructor'),
4335
- define('Intl.constructor', INTL),
4336
3354
  define('[].entries().constructor', OBJECT_ARRAY_ENTRIES_CTOR),
4337
3355
  ],
4338
3356
  RegExp:
@@ -4345,160 +3363,50 @@
4345
3363
  ],
4346
3364
  atob:
4347
3365
  [
4348
- define('Function("return atob")()', ATOB),
4349
- define('self.atob', ATOB, SELF_OBJ),
3366
+ define('Function("return atob")()'),
3367
+ define('self.atob', SELF),
4350
3368
  ],
4351
3369
  btoa:
4352
3370
  [
4353
- define('Function("return btoa")()', ATOB),
4354
- define('self.btoa', ATOB, SELF_OBJ),
3371
+ define('Function("return btoa")()'),
3372
+ define('self.btoa', SELF),
4355
3373
  ],
4356
3374
  document:
4357
3375
  [
4358
- define({ expr: 'Function("return document")()', optimize: true }, ANY_DOCUMENT),
4359
- define({ expr: 'self.document', optimize: true }, ANY_DOCUMENT, SELF_OBJ),
4360
- ],
4361
- escape:
4362
- [
4363
- define({ expr: 'Function("return escape")()', optimize: true }),
4364
- define({ expr: 'self.escape', optimize: true }, SELF_OBJ),
4365
- ],
4366
- location:
4367
- [
4368
- define('Function("return location")()', LOCATION),
4369
- define('self.location', LOCATION, SELF_OBJ),
4370
- ],
4371
- self:
4372
- [
4373
- define('Function("return self")()', SELF_OBJ),
4374
- define('[].concat.call()[0]', CALL_ON_GLOBAL, SELF_OBJ),
4375
- ],
4376
- unescape:
4377
- [
4378
- define({ expr: 'Function("return unescape")()', optimize: true }),
4379
- define({ expr: 'self.unescape', optimize: true }, SELF_OBJ),
4380
- ],
4381
-
4382
- // Custom definitions
4383
-
4384
- ANY_FUNCTION:
4385
- [
4386
- define('FILTER'),
4387
- define('AT', AT),
4388
- define('FILL', FILL),
4389
- define('FLAT', FLAT),
4390
- ],
4391
- ARRAY_ITERATOR:
4392
- [
4393
- define('[].entries()', ARRAY_ITERATOR),
4394
- ],
4395
- AT:
4396
- [
4397
- define('[].at', AT),
4398
- ],
4399
- ESCAPING_BACKSLASH:
4400
- [
4401
- define(backslashDefinition),
4402
- define({ expr: 'atob("01y")[1]', solutionType: SolutionType.STRING }, ATOB),
4403
- define
4404
- (
4405
- { expr: '(RP_0_S + RegExp("\\n"))[1]', solutionType: SolutionType.STRING },
4406
- ESC_REGEXP_LF
4407
- ),
4408
- define
4409
- (
4410
- { expr: '(RP_5_A + RegExp("".italics()))[10]', solutionType: SolutionType.STRING },
4411
- ESC_REGEXP_SLASH
4412
- ),
4413
- define
4414
- (
4415
- { expr: '(RP_3_WA + RegExp("".sub()))[10]', solutionType: SolutionType.STRING },
4416
- ESC_REGEXP_SLASH
4417
- ),
4418
- define
4419
- (
4420
- { expr: '(RP_0_S + RegExp(FILTER))[20]', solutionType: SolutionType.STRING },
4421
- ESC_REGEXP_LF,
4422
- FF_SRC
4423
- ),
4424
- define
4425
- (
4426
- { expr: '(RP_0_S + RegExp(Function()))[20]', solutionType: SolutionType.STRING },
4427
- ESC_REGEXP_LF,
4428
- FUNCTION_19_LF
4429
- ),
4430
- define
4431
- (
4432
- { expr: '(RP_5_A + RegExp(Function()))[30]', solutionType: SolutionType.STRING },
4433
- ESC_REGEXP_LF,
4434
- FUNCTION_22_LF
4435
- ),
4436
- define
4437
- (
4438
- { expr: '(RP_0_S + RegExp(ANY_FUNCTION))[1]', solutionType: SolutionType.STRING },
4439
- ESC_REGEXP_LF,
4440
- IE_SRC
4441
- ),
4442
- define
4443
- (
4444
- {
4445
- expr: '(+(RP_0_S + FILTER)[0] + RegExp(FILTER))[23]',
4446
- solutionType: SolutionType.STRING,
4447
- },
4448
- ESC_REGEXP_LF,
4449
- NO_V8_SRC
4450
- ),
4451
- define
4452
- (
4453
- { expr: '(RP_4_A + RegExp(AT))[20]', solutionType: SolutionType.STRING },
4454
- AT,
4455
- ESC_REGEXP_LF,
4456
- FF_SRC
4457
- ),
4458
- define
4459
- (
4460
- {
4461
- expr: '(RP_1_WA + [+(RP_0_S + AT)[0]] + RegExp(AT))[20]',
4462
- solutionType: SolutionType.STRING,
4463
- },
4464
- AT,
4465
- ESC_REGEXP_LF,
4466
- NO_V8_SRC
4467
- ),
4468
- define
4469
- (
4470
- { expr: '(RP_3_WA + RegExp(FILL))[21]', solutionType: SolutionType.STRING },
4471
- ESC_REGEXP_LF,
4472
- FF_SRC,
4473
- FILL
4474
- ),
4475
- define
4476
- (
4477
- { expr: '(RP_3_WA + RegExp(FLAT))[21]', solutionType: SolutionType.STRING },
4478
- ESC_REGEXP_LF,
4479
- FF_SRC,
4480
- FLAT
4481
- ),
4482
- define
4483
- (
4484
- {
4485
- expr: '(+(RP_0_S + FILL)[0] + RegExp(FILL))[21]',
4486
- solutionType: SolutionType.STRING,
4487
- },
4488
- ESC_REGEXP_LF,
4489
- FILL,
4490
- NO_V8_SRC
4491
- ),
4492
- define
4493
- (
4494
- {
4495
- expr: '(+(RP_0_S + FLAT)[0] + RegExp(FLAT))[21]',
4496
- solutionType: SolutionType.STRING,
4497
- },
4498
- ESC_REGEXP_LF,
4499
- FLAT,
4500
- NO_V8_SRC
4501
- ),
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),
4502
3410
  ],
4503
3411
  FILL:
4504
3412
  [
@@ -4521,13 +3429,6 @@
4521
3429
  define({ expr: '"ar-td"', solutionType: SolutionType.COMBINED_STRING }),
4522
3430
  define({ expr: '"ar"', solutionType: SolutionType.COMBINED_STRING }, SHORT_LOCALES),
4523
3431
  ],
4524
- LOCATION_CONSTRUCTOR:
4525
- [
4526
- define('Function("return location")().constructor', OBJECT_L_LOCATION_CTOR),
4527
- define('Function("return location")().constructor', OLD_SAFARI_LOCATION_CTOR),
4528
- define('self.location.constructor', OBJECT_L_LOCATION_CTOR, SELF_OBJ),
4529
- define('self.location.constructor', OLD_SAFARI_LOCATION_CTOR, SELF_OBJ),
4530
- ],
4531
3432
  PLAIN_OBJECT:
4532
3433
  [
4533
3434
  define('Function("return{}")()'),
@@ -4573,23 +3474,6 @@
4573
3474
  define
4574
3475
  ({ expr: '"toUpperCase"', optimize: true, solutionType: SolutionType.COMBINED_STRING }),
4575
3476
  ],
4576
- USER_AGENT:
4577
- [
4578
- define
4579
- (
4580
- {
4581
- expr: 'Function("return navigator")().userAgent',
4582
- solutionType: SolutionType.STRING,
4583
- },
4584
- MOZILLA
4585
- ),
4586
- define
4587
- (
4588
- { expr: 'self.navigator.userAgent', solutionType: SolutionType.STRING },
4589
- MOZILLA,
4590
- SELF_OBJ
4591
- ),
4592
- ],
4593
3477
 
4594
3478
  // Function body extra padding blocks: prepended to a function to align the function's body
4595
3479
  // at the same position in different engines, assuming that the function header is aligned.
@@ -4814,558 +3698,32 @@
4814
3698
  [define('fromCharCode'), define('fromCodePoint', FROM_CODE_POINT)],
4815
3699
  [
4816
3700
  define(0),
4817
- define(1, ASYNC_FUNCTION),
4818
- define(1, ATOB),
4819
- define
4820
- (
4821
- 0,
4822
- ASYNC_FUNCTION,
4823
- CALL_ON_GLOBAL,
4824
- FROM_CODE_POINT,
4825
- INCR_CHAR,
4826
- NAME,
4827
- NODECONSTRUCTOR,
4828
- SELF_OBJ
4829
- ),
4830
- define(1, ASYNC_FUNCTION, NO_FF_SRC),
4831
- define(1, ASYNC_FUNCTION, NO_V8_SRC),
4832
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, NAME),
4833
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, NAME),
4834
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, FILL, NAME),
4835
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, FLAT, NAME),
4836
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, NAME, NO_IE_SRC),
4837
- define(1, ARRAY_ITERATOR, ASYNC_FUNCTION, NAME, NO_V8_SRC),
4838
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER),
4839
- define
4840
- (
4841
- 0,
4842
- ASYNC_FUNCTION,
4843
- AT,
4844
- CALL_ON_GLOBAL,
4845
- FROM_CODE_POINT,
4846
- NAME,
4847
- NODECONSTRUCTOR,
4848
- SELF_OBJ
4849
- ),
4850
- define(1, ARRAY_ITERATOR, AT, ATOB, IE_SRC, ITERATOR_HELPER),
4851
- define
4852
- (
4853
- 0,
4854
- ASYNC_FUNCTION,
4855
- CALL_ON_GLOBAL,
4856
- FLAT,
4857
- FROM_CODE_POINT,
4858
- NAME,
4859
- NODECONSTRUCTOR,
4860
- SELF_OBJ
4861
- ),
4862
- define
4863
- (1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4864
- define
4865
- (1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4866
- define
4867
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4868
- define
4869
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4870
- define(0, ATOB, FROM_CODE_POINT, INTL, ITERATOR_HELPER),
4871
- define(1, ATOB, FILL, INTL, ITERATOR_HELPER),
4872
- define(1, ATOB, IE_SRC, INTL, ITERATOR_HELPER),
4873
- define(1, ATOB, INTL, ITERATOR_HELPER, NO_IE_SRC),
4874
- define
4875
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FROM_CODE_POINT, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4876
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4877
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4878
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, IE_SRC, NODECONSTRUCTOR, SELF_OBJ),
4879
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
4880
- define
4881
- (
4882
- 0,
4883
- ASYNC_FUNCTION,
4884
- CALL_ON_GLOBAL,
4885
- FLAT,
4886
- FROM_CODE_POINT,
4887
- IE_SRC,
4888
- NAME,
4889
- NODECONSTRUCTOR,
4890
- SELF_OBJ
4891
- ),
4892
- define(1, ARRAY_ITERATOR, AT, ATOB, ITERATOR_HELPER, NO_IE_SRC),
4893
- define
4894
- (
4895
- 0,
4896
- ASYNC_FUNCTION,
4897
- CALL_ON_GLOBAL,
4898
- FILL,
4899
- FROM_CODE_POINT,
4900
- NAME,
4901
- NODECONSTRUCTOR,
4902
- SELF_OBJ
4903
- ),
4904
- define
4905
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, NAME, NODECONSTRUCTOR, NO_FF_SRC, SELF_OBJ),
4906
- define
4907
- (1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FILL, NAME, NODECONSTRUCTOR, NO_V8_SRC, SELF_OBJ),
4908
- define
4909
- (
4910
- 0,
4911
- ASYNC_FUNCTION,
4912
- CALL_ON_GLOBAL,
4913
- FILL,
4914
- FROM_CODE_POINT,
4915
- IE_SRC,
4916
- NAME,
4917
- NODECONSTRUCTOR,
4918
- SELF_OBJ
4919
- ),
4920
- define(1, AT, ATOB, INTL, ITERATOR_HELPER),
4921
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
4922
- define(1, ARRAY_ITERATOR, ATOB, ITERATOR_HELPER, SELF_OBJ),
4923
- define(1, ATOB, FILL, ITERATOR_HELPER, SELF_OBJ),
4924
- define(1, ATOB, FLAT, INTL, ITERATOR_HELPER),
4925
- define(1, ATOB, FLAT, ITERATOR_HELPER, SELF_OBJ),
4926
- define
4927
- (
4928
- 0,
4929
- ARRAY_ITERATOR,
4930
- ASYNC_FUNCTION,
4931
- CALL_ON_GLOBAL,
4932
- FROM_CODE_POINT,
4933
- NODECONSTRUCTOR,
4934
- SELF_OBJ
4935
- ),
4936
- define
4937
- (1, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NODECONSTRUCTOR, SELF_OBJ),
4938
- define
4939
- (1, ARRAY_ITERATOR, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NODECONSTRUCTOR, SELF_OBJ),
4940
- define
4941
- (
4942
- 1,
4943
- ARRAY_ITERATOR,
4944
- ASYNC_FUNCTION,
4945
- CALL_ON_GLOBAL,
4946
- FILL,
4947
- INCR_CHAR,
4948
- NODECONSTRUCTOR,
4949
- SELF_OBJ
4950
- ),
4951
- define
4952
- (
4953
- 1,
4954
- ARRAY_ITERATOR,
4955
- ASYNC_FUNCTION,
4956
- CALL_ON_GLOBAL,
4957
- FILL,
4958
- NODECONSTRUCTOR,
4959
- NO_FF_SRC,
4960
- SELF_OBJ
4961
- ),
4962
- define
4963
- (
4964
- 0,
4965
- ARRAY_ITERATOR,
4966
- ASYNC_FUNCTION,
4967
- CALL_ON_GLOBAL,
4968
- FROM_CODE_POINT,
4969
- NAME,
4970
- NODECONSTRUCTOR,
4971
- SELF_OBJ
4972
- ),
4973
- define
4974
- (
4975
- 1,
4976
- ARRAY_ITERATOR,
4977
- ASYNC_FUNCTION,
4978
- CALL_ON_GLOBAL,
4979
- FLAT,
4980
- NAME,
4981
- NODECONSTRUCTOR,
4982
- NO_FF_SRC,
4983
- SELF_OBJ
4984
- ),
4985
- define
4986
- (
4987
- 1,
4988
- ARRAY_ITERATOR,
4989
- ASYNC_FUNCTION,
4990
- CALL_ON_GLOBAL,
4991
- FLAT,
4992
- NAME,
4993
- NODECONSTRUCTOR,
4994
- NO_V8_SRC,
4995
- SELF_OBJ
4996
- ),
4997
- define
4998
- (
4999
- 0,
5000
- ARRAY_ITERATOR,
5001
- ASYNC_FUNCTION,
5002
- CALL_ON_GLOBAL,
5003
- FLAT,
5004
- FROM_CODE_POINT,
5005
- IE_SRC,
5006
- NAME,
5007
- NODECONSTRUCTOR,
5008
- SELF_OBJ
5009
- ),
5010
- define
5011
- (
5012
- 1,
5013
- ARRAY_ITERATOR,
5014
- ASYNC_FUNCTION,
5015
- CALL_ON_GLOBAL,
5016
- FILL,
5017
- NODECONSTRUCTOR,
5018
- NO_V8_SRC,
5019
- SELF_OBJ
5020
- ),
5021
- define
5022
- (
5023
- 0,
5024
- ARRAY_ITERATOR,
5025
- ASYNC_FUNCTION,
5026
- CALL_ON_GLOBAL,
5027
- FILL,
5028
- FROM_CODE_POINT,
5029
- IE_SRC,
5030
- NAME,
5031
- NODECONSTRUCTOR,
5032
- SELF_OBJ
5033
- ),
5034
- define
5035
- (
5036
- 1,
5037
- ARRAY_ITERATOR,
5038
- ASYNC_FUNCTION,
5039
- AT,
5040
- CALL_ON_GLOBAL,
5041
- NAME,
5042
- NODECONSTRUCTOR,
5043
- NO_FF_SRC,
5044
- SELF_OBJ
5045
- ),
5046
- define
5047
- (
5048
- 1,
5049
- ARRAY_ITERATOR,
5050
- ASYNC_FUNCTION,
5051
- AT,
5052
- CALL_ON_GLOBAL,
5053
- NAME,
5054
- NODECONSTRUCTOR,
5055
- NO_V8_SRC,
5056
- SELF_OBJ
5057
- ),
5058
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER),
5059
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER),
5060
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NO_V8_SRC),
5061
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER),
5062
- define(1, ASYNC_FUNCTION, IE_SRC, INTL, ITERATOR_HELPER),
5063
- define(1, ASYNC_FUNCTION, FLAT, INTL, ITERATOR_HELPER, NO_V8_SRC),
5064
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5065
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5066
- define
5067
- (0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5068
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, NODECONSTRUCTOR),
5069
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NODECONSTRUCTOR, NO_V8_SRC),
5070
- define(0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5071
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_V8_SRC, SELF_OBJ),
5072
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5073
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NO_V8_SRC, SELF_OBJ),
5074
- define
5075
- (
5076
- 0,
5077
- ASYNC_FUNCTION,
5078
- CALL_ON_GLOBAL,
5079
- FROM_CODE_POINT,
5080
- ITERATOR_HELPER,
5081
- NO_V8_SRC,
5082
- SELF_OBJ
5083
- ),
5084
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NO_IE_SRC),
5085
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NO_IE_SRC),
5086
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5087
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, V8_SRC),
5088
- define(1, ASYNC_FUNCTION, FF_SRC, INTL, ITERATOR_HELPER),
5089
- define(1, ASYNC_FUNCTION, FILL, INTL, ITERATOR_HELPER, NO_IE_SRC),
5090
- define(1, ASYNC_FUNCTION, FLAT, INTL, ITERATOR_HELPER, NO_IE_SRC),
5091
- define
5092
- (0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, NO_IE_SRC),
5093
- define(1, ASYNC_FUNCTION, FF_SRC, ITERATOR_HELPER, SELF_OBJ),
5094
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5095
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5096
- define(1, ASYNC_FUNCTION, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, V8_SRC),
5097
- define(1, ASYNC_FUNCTION, FILL, ITERATOR_HELPER, NAME, NODECONSTRUCTOR, NO_IE_SRC),
5098
- define(0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
5099
- define
5100
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FF_SRC, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5101
- define
5102
- (0, ASYNC_FUNCTION, CALL_ON_GLOBAL, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ, V8_SRC),
5103
- define
5104
- (
5105
- 0,
5106
- ASYNC_FUNCTION,
5107
- CALL_ON_GLOBAL,
5108
- FILL,
5109
- FROM_CODE_POINT,
5110
- ITERATOR_HELPER,
5111
- NO_IE_SRC,
5112
- SELF_OBJ
5113
- ),
5114
- define
5115
- (
5116
- 0,
5117
- ASYNC_FUNCTION,
5118
- CALL_ON_GLOBAL,
5119
- FLAT,
5120
- FROM_CODE_POINT,
5121
- ITERATOR_HELPER,
5122
- NO_IE_SRC,
5123
- SELF_OBJ
5124
- ),
5125
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5126
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME),
5127
- define
5128
- (
5129
- 0,
5130
- ASYNC_FUNCTION,
5131
- CALL_ON_GLOBAL,
5132
- FLAT,
5133
- FROM_CODE_POINT,
5134
- ITERATOR_HELPER,
5135
- NAME,
5136
- SELF_OBJ
5137
- ),
5138
- define(1, ATOB, ITERATOR_HELPER, NAME, NO_V8_SRC),
5139
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5140
- define(1, ATOB, INCR_CHAR, ITERATOR_HELPER, NAME),
5141
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, INTL, ITERATOR_HELPER, NAME),
5142
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5143
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, NO_FF_SRC),
5144
- define(0, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME, SELF_OBJ),
5145
- define(0, ATOB, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5146
- define(1, ATOB, FILL, ITERATOR_HELPER, NAME),
5147
- define(1, ATOB, IE_SRC, INTL, ITERATOR_HELPER, NAME),
5148
- define(0, ATOB, FILL, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME),
5149
- define(1, ATOB, FILL, IE_SRC, ITERATOR_HELPER, NAME),
5150
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, INCR_CHAR, ITERATOR_HELPER, NAME),
5151
- define(0, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER, NAME, SELF_OBJ),
5152
- define(0, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5153
- define(1, ATOB, IE_SRC, ITERATOR_HELPER, NAME, NODECONSTRUCTOR),
5154
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5155
- define(1, ATOB, FLAT, ITERATOR_HELPER, NAME),
5156
- define(0, ARRAY_ITERATOR, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER),
5157
- define(1, ARRAY_ITERATOR, ATOB, FILL, ITERATOR_HELPER, NO_V8_SRC),
5158
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FILL, ITERATOR_HELPER, SELF_OBJ),
5159
- define
5160
- (0, ARRAY_ITERATOR, ATOB, FILL, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5161
- define(1, ARRAY_ITERATOR, ATOB, FILL, IE_SRC, ITERATOR_HELPER),
5162
- define
5163
- (
5164
- 0,
5165
- ASYNC_FUNCTION,
5166
- CALL_ON_GLOBAL,
5167
- FROM_CODE_POINT,
5168
- NODECONSTRUCTOR,
5169
- NO_IE_SRC,
5170
- SELF_OBJ
5171
- ),
5172
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FF_SRC, FLAT, NODECONSTRUCTOR, SELF_OBJ),
5173
- define(1, ASYNC_FUNCTION, CALL_ON_GLOBAL, FLAT, NODECONSTRUCTOR, SELF_OBJ, V8_SRC),
5174
- define
5175
- (
5176
- 0,
5177
- ASYNC_FUNCTION,
5178
- CALL_ON_GLOBAL,
5179
- FROM_CODE_POINT,
5180
- ITERATOR_HELPER,
5181
- NODECONSTRUCTOR,
5182
- NO_IE_SRC,
5183
- SELF_OBJ
5184
- ),
5185
- define
5186
- (
5187
- 0,
5188
- ASYNC_FUNCTION,
5189
- CALL_ON_GLOBAL,
5190
- FROM_CODE_POINT,
5191
- NAME,
5192
- NODECONSTRUCTOR,
5193
- NO_IE_SRC,
5194
- SELF_OBJ
5195
- ),
5196
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, NODECONSTRUCTOR, SELF_OBJ),
5197
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, NODECONSTRUCTOR, SELF_OBJ, V8_SRC),
5198
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
5199
- define(0, ATOB, CALL_ON_GLOBAL, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, SELF_OBJ),
5200
- define(1, ATOB, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5201
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5202
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER),
5203
- define(1, ARRAY_ITERATOR, AT, ATOB, FILL, ITERATOR_HELPER),
5204
- define(1, ARRAY_ITERATOR, ATOB, FILL, ITERATOR_HELPER, NO_IE_SRC),
5205
- define(1, ATOB, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5206
- define(1, ATOB, FILL, IE_SRC, ITERATOR_HELPER, SELF_OBJ),
5207
- define
5208
- (0, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FROM_CODE_POINT, ITERATOR_HELPER, SELF_OBJ),
5209
- define(1, ASYNC_FUNCTION, AT, IE_SRC, ITERATOR_HELPER),
5210
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER, NO_IE_SRC),
5211
- define
5212
- (
5213
- 0,
5214
- ASYNC_FUNCTION,
5215
- AT,
5216
- CALL_ON_GLOBAL,
5217
- FROM_CODE_POINT,
5218
- ITERATOR_HELPER,
5219
- NODECONSTRUCTOR,
5220
- NO_IE_SRC,
5221
- SELF_OBJ
5222
- ),
5223
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, ITERATOR_HELPER, SELF_OBJ),
5224
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, ITERATOR_HELPER, SELF_OBJ, V8_SRC),
5225
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC),
5226
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5227
- define(1, ASYNC_FUNCTION, FILL, INCR_CHAR, ITERATOR_HELPER, NAME, NO_V8_SRC),
5228
- define(0, ASYNC_FUNCTION, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5229
- define(1, ASYNC_FUNCTION, FLAT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5230
- define
5231
- (0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, INTL, ITERATOR_HELPER, NAME, NO_V8_SRC),
5232
- define
5233
- (
5234
- 0,
5235
- ASYNC_FUNCTION,
5236
- FILL,
5237
- FROM_CODE_POINT,
5238
- INCR_CHAR,
5239
- ITERATOR_HELPER,
5240
- NAME,
5241
- NODECONSTRUCTOR,
5242
- NO_V8_SRC
5243
- ),
5244
- define
5245
- (
5246
- 0,
5247
- ASYNC_FUNCTION,
5248
- FILL,
5249
- FROM_CODE_POINT,
5250
- INCR_CHAR,
5251
- ITERATOR_HELPER,
5252
- NAME,
5253
- NO_V8_SRC,
5254
- SELF_OBJ
5255
- ),
5256
- define(1, ASYNC_FUNCTION, IE_SRC, ITERATOR_HELPER, NAME),
5257
- define(1, ASYNC_FUNCTION, AT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5258
- define
5259
- (
5260
- 0,
5261
- ASYNC_FUNCTION,
5262
- CALL_ON_GLOBAL,
5263
- FROM_CODE_POINT,
5264
- IE_SRC,
5265
- ITERATOR_HELPER,
5266
- NAME,
5267
- SELF_OBJ
5268
- ),
5269
- define(1, ASYNC_FUNCTION, FF_SRC, ITERATOR_HELPER, NAME),
5270
- define
5271
- (
5272
- 0,
5273
- ASYNC_FUNCTION,
5274
- CALL_ON_GLOBAL,
5275
- FF_SRC,
5276
- FROM_CODE_POINT,
5277
- ITERATOR_HELPER,
5278
- NAME,
5279
- SELF_OBJ
5280
- ),
5281
- define
5282
- (0, ASYNC_FUNCTION, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5283
- define(1, ASYNC_FUNCTION, FLAT, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5284
- define(1, ASYNC_FUNCTION, AT, FLAT, ITERATOR_HELPER, NAME, NO_V8_SRC, SELF_OBJ),
5285
- define
5286
- (
5287
- 0,
5288
- ASYNC_FUNCTION,
5289
- CALL_ON_GLOBAL,
5290
- FLAT,
5291
- FROM_CODE_POINT,
5292
- IE_SRC,
5293
- ITERATOR_HELPER,
5294
- NAME,
5295
- SELF_OBJ
5296
- ),
5297
- define(1, ASYNC_FUNCTION, FF_SRC, FLAT, ITERATOR_HELPER, NAME, SELF_OBJ),
5298
- define
5299
- (
5300
- 0,
5301
- ASYNC_FUNCTION,
5302
- AT,
5303
- CALL_ON_GLOBAL,
5304
- FROM_CODE_POINT,
5305
- ITERATOR_HELPER,
5306
- NAME,
5307
- NO_V8_SRC,
5308
- SELF_OBJ
5309
- ),
5310
- define
5311
- (
5312
- 0,
5313
- ASYNC_FUNCTION,
5314
- CALL_ON_GLOBAL,
5315
- FF_SRC,
5316
- FLAT,
5317
- FROM_CODE_POINT,
5318
- ITERATOR_HELPER,
5319
- NAME,
5320
- SELF_OBJ
5321
- ),
5322
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, FF_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5323
- define(1, ASYNC_FUNCTION, AT, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5324
- define(0, ARRAY_ITERATOR, ATOB, FLAT, FROM_CODE_POINT, ITERATOR_HELPER),
5325
- define(1, ARRAY_ITERATOR, ATOB, FLAT, ITERATOR_HELPER, NO_V8_SRC),
5326
- define
5327
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FLAT, INCR_CHAR, ITERATOR_HELPER, SELF_OBJ),
5328
- define
5329
- (0, ARRAY_ITERATOR, ATOB, FLAT, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_V8_SRC),
5330
- define(1, ATOB, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5331
- define(1, ARRAY_ITERATOR, AT, ATOB, FLAT, ITERATOR_HELPER),
5332
- define(1, ARRAY_ITERATOR, ATOB, FLAT, IE_SRC, ITERATOR_HELPER),
5333
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5334
- define(1, ARRAY_ITERATOR, ATOB, FLAT, ITERATOR_HELPER, NO_IE_SRC),
5335
- define(1, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5336
- define(1, ATOB, FILL, ITERATOR_HELPER, NO_IE_SRC, SELF_OBJ),
5337
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, AT, FROM_CODE_POINT, ITERATOR_HELPER),
5338
- define(1, ATOB, ITERATOR_HELPER, NAME, NO_IE_SRC),
5339
- define(0, ARRAY_ITERATOR, ATOB, FROM_CODE_POINT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5340
- define(1, ATOB, FILL, ITERATOR_HELPER, NAME, NO_IE_SRC),
5341
- define(1, ATOB, FLAT, ITERATOR_HELPER, NAME, NO_IE_SRC),
5342
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NAME, SELF_OBJ),
5343
- define
5344
- (
5345
- 0,
5346
- ARRAY_ITERATOR,
5347
- ATOB,
5348
- CALL_ON_GLOBAL,
5349
- FLAT,
5350
- FROM_CODE_POINT,
5351
- ITERATOR_HELPER,
5352
- NAME,
5353
- SELF_OBJ
5354
- ),
5355
- define
5356
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, IE_SRC, ITERATOR_HELPER, NAME, SELF_OBJ),
5357
- define
5358
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, INCR_CHAR, ITERATOR_HELPER, NAME, SELF_OBJ),
5359
- define
5360
- (1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, ITERATOR_HELPER, NAME, NO_IE_SRC, SELF_OBJ),
5361
- define(0, ARRAY_ITERATOR, ASYNC_FUNCTION, FROM_CODE_POINT, ITERATOR_HELPER, NO_V8_SRC),
5362
- define(1, CAPITAL_HTML),
5363
- define(1, AT, ATOB, ITERATOR_HELPER, SELF_OBJ),
5364
- define(0, ARRAY_ITERATOR, ATOB, CAPITAL_HTML, FROM_CODE_POINT),
5365
- define(1, BARPROP),
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),
5366
3722
  define(1, CAPITAL_HTML, ITERATOR_HELPER),
5367
- define(1, AT, ATOB, ITERATOR_HELPER, NAME),
5368
- define(0, ARRAY_ITERATOR, ATOB, BARPROP, CAPITAL_HTML, FROM_CODE_POINT),
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),
5369
3727
  ]
5370
3728
  );
5371
3729
 
@@ -5492,28 +3850,15 @@
5492
3850
  ],
5493
3851
  [
5494
3852
  define(0),
5495
- define(1, ARRAY_ITERATOR, ATOB),
3853
+ define(1, ARRAY_ITERATOR),
5496
3854
  define(0, NO_FF_SRC),
5497
3855
  define(0, NO_V8_SRC),
5498
3856
  define(1, ARRAY_ITERATOR, CAPITAL_HTML),
5499
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, SELF_OBJ),
5500
- define(0, ARRAY_ITERATOR, ATOB, FILL),
5501
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, FILL),
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),
5502
3861
  define(0, ARRAY_ITERATOR, CAPITAL_HTML, IE_SRC),
5503
- define(0, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, IE_SRC, SELF_OBJ),
5504
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, FILL, SELF_OBJ),
5505
- define(0, ARRAY_ITERATOR, ATOB, NO_IE_SRC),
5506
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, NO_IE_SRC),
5507
- define(0, ARRAY_ITERATOR, ATOB, FILL, IE_SRC),
5508
- define(0, ARRAY_ITERATOR, ATOB, FILL, INCR_CHAR, NO_V8_SRC),
5509
- define(1, ARRAY_ITERATOR, ATOB, CALL_ON_GLOBAL, NO_IE_SRC, SELF_OBJ),
5510
- define(0, ARRAY_ITERATOR, AT, ATOB),
5511
- define(0, ARRAY_ITERATOR, AT, CAPITAL_HTML),
5512
- define(0, ARRAY_ITERATOR, ATOB, FF_SRC),
5513
- define(0, ARRAY_ITERATOR, ATOB, FLAT),
5514
- define(0, ARRAY_ITERATOR, ATOB, V8_SRC),
5515
- define(0, ARRAY_ITERATOR, CAPITAL_HTML, FLAT),
5516
- define(0, ARRAY_ITERATOR, ATOB, FILL, NO_IE_SRC),
5517
3862
  define(2),
5518
3863
  ]
5519
3864
  );
@@ -6101,9 +4446,8 @@
6101
4446
  HexIntegerLiteral: '0[Xx]#HexDigit+',
6102
4447
  NumericLiteral: '#HexIntegerLiteral|#DecimalLiteral',
6103
4448
  Separator: '#SeparatorChar|//.*(?!.)|/\\*[\\s\\S]*?\\*/',
6104
- // U+180E is recognized as a separator in older browsers.
6105
- // U+FEFF is missed by /\s/ in Android Browser < 4.1.x.
6106
- SeparatorChar: '(?!\u180E)[\\s\uFEFF]',
4449
+ // U+180E is recognized as a separator in Internet Explorer.
4450
+ SeparatorChar: '(?!\u180E)\\s',
6107
4451
  SingleQuotedString: '\'(?:#EscapeSequence|(?![\'\\\\]).)*\'',
6108
4452
  UnicodeEscapeSequence: '\\\\u#HexDigit{4}',
6109
4453
  };
@@ -6213,17 +4557,6 @@
6213
4557
  var SCREW_AS_STRING = 1;
6214
4558
  var SCREW_AS_BONDED_STRING = 2;
6215
4559
 
6216
- function gather(buffer, offset, count, groupBond, groupForceString)
6217
- {
6218
- var end = offset + count;
6219
- var groupSolutions = buffer._solutions.slice(offset, end);
6220
- var optimizerList = buffer._optimizerList;
6221
- if (optimizerList.length)
6222
- optimizeSolutions(optimizerList, groupSolutions, groupBond, groupForceString);
6223
- var str = gatherGroup(groupSolutions, groupBond, groupForceString);
6224
- return str;
6225
- }
6226
-
6227
4560
  function gatherGroup(solutions, bond, forceString)
6228
4561
  {
6229
4562
  var solution = new DynamicSolution();
@@ -6248,10 +4581,8 @@
6248
4581
  return str;
6249
4582
  }
6250
4583
 
6251
- function ScrewBuffer(screwMode, groupThreshold, optimizerList)
4584
+ function ScrewBuffer(screwMode, optimizerList)
6252
4585
  {
6253
- this._groupThreshold = groupThreshold;
6254
- this._maxSolutionCount = _Math_pow(2, groupThreshold - 1);
6255
4586
  this._optimizerList = optimizerList;
6256
4587
  this._screwMode = screwMode;
6257
4588
  this._solutions = [];
@@ -6270,8 +4601,6 @@
6270
4601
  function (solution)
6271
4602
  {
6272
4603
  var solutions = this._solutions;
6273
- if (solutions.length >= this._maxSolutionCount)
6274
- return false;
6275
4604
  solutions.push(solution);
6276
4605
  var appendLength = solution.appendLength;
6277
4606
  this._optimizerList.forEach
@@ -6284,62 +4613,18 @@
6284
4613
  }
6285
4614
  );
6286
4615
  this._length += appendLength;
6287
- return true;
6288
4616
  },
6289
4617
  toString:
6290
4618
  function ()
6291
4619
  {
6292
- function collectOut(offset, count, maxGroupCount, groupBond)
6293
- {
6294
- var str;
6295
- if (count <= groupSize + 1)
6296
- str = gather(buffer, offset, count, groupBond);
6297
- else
6298
- {
6299
- maxGroupCount /= 2;
6300
- var halfCount = groupSize * maxGroupCount;
6301
- var capacity = 2 * halfCount - count;
6302
- var leftEndCount =
6303
- _Math_max
6304
- (
6305
- halfCount - capacity + capacity % (groupSize - 1),
6306
- (maxGroupCount / 2 ^ 0) * (groupSize + 1)
6307
- );
6308
- str =
6309
- collectOut(offset, leftEndCount, maxGroupCount) +
6310
- '+' +
6311
- collectOut(offset + leftEndCount, count - leftEndCount, maxGroupCount, true);
6312
- if (groupBond)
6313
- str = '(' + str + ')';
6314
- }
6315
- return str;
6316
- }
6317
-
6318
- var str;
6319
- var solutionCount = this._solutions.length;
6320
- var groupThreshold = this._groupThreshold;
6321
4620
  var screwMode = this._screwMode;
6322
4621
  var bond = screwMode === SCREW_AS_BONDED_STRING;
6323
- if (solutionCount <= groupThreshold)
6324
- {
6325
- var forceString = screwMode !== SCREW_NORMAL;
6326
- str = gather(this, 0, solutionCount, bond, forceString);
6327
- }
6328
- else
6329
- {
6330
- var groupSize = groupThreshold;
6331
- var maxGroupCount = 2;
6332
- for (;;)
6333
- {
6334
- --groupSize;
6335
- var maxSolutionCountForDepth = groupSize * maxGroupCount;
6336
- if (solutionCount <= maxSolutionCountForDepth)
6337
- break;
6338
- maxGroupCount *= 2;
6339
- }
6340
- var buffer = this;
6341
- str = collectOut(0, solutionCount, maxGroupCount, bond);
6342
- }
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);
6343
4628
  return str;
6344
4629
  },
6345
4630
  }
@@ -6606,7 +4891,7 @@
6606
4891
  appendIndexer = false;
6607
4892
  toStringOpt = false;
6608
4893
  }
6609
- var expr = 'Function("return\\"" + ESCAPING_BACKSLASH + "' + escCode + '\\"")()';
4894
+ var expr = 'Function("return\\"\\\\' + escCode + '\\"")()';
6610
4895
  if (appendIndexer)
6611
4896
  expr += '[0]';
6612
4897
  var replacement = this.replaceExpr(expr, { default: false, toStringOpt: toStringOpt });
@@ -6651,8 +4936,6 @@
6651
4936
  return replacement;
6652
4937
  }
6653
4938
 
6654
- var ATOB_MASK = Feature.ATOB.mask;
6655
-
6656
4939
  var STATIC_CHAR_CACHE = createEmpty();
6657
4940
  var STATIC_CONST_CACHE = createEmpty();
6658
4941
  var STATIC_ENCODER = new Encoder(MASK_EMPTY);
@@ -6699,14 +4982,6 @@
6699
4982
  }
6700
4983
  }
6701
4984
 
6702
- function defaultResolveCharacter(encoder, char)
6703
- {
6704
- var charCode = char.charCodeAt();
6705
- var atobOpt = charCode < 0x100;
6706
- var solution = encoder._createCharDefaultSolution(char, charCode, atobOpt, true, true, true);
6707
- return solution;
6708
- }
6709
-
6710
4985
  function findOptimalSolution(encoder, source, entries, defaultSolutionType)
6711
4986
  {
6712
4987
  var optimalSolution;
@@ -6929,8 +5204,6 @@
6929
5204
  function (str, index)
6930
5205
  {
6931
5206
  regExp.lastIndex = index;
6932
- // String.prototype.match doesn't work well with sticky regular expressions in Node.js <
6933
- // 6.5.
6934
5207
  var match = regExp.exec(str);
6935
5208
  if (match)
6936
5209
  return match[0];
@@ -6961,37 +5234,44 @@
6961
5234
  function (char, charCode, atobOpt, charCodeOpt, escSeqOpt, unescapeOpt)
6962
5235
  {
6963
5236
  var solution;
6964
- if (atobOpt && this.hasFeatures(ATOB_MASK))
5237
+ var solutions = [];
5238
+ if (atobOpt)
6965
5239
  {
6966
5240
  solution =
6967
5241
  resolveCharByDefaultMethod(this, char, charCode, replaceCharByAtob, 'atob');
5242
+ solutions.push(solution);
6968
5243
  }
6969
- else
5244
+ if (charCodeOpt)
6970
5245
  {
6971
- var solutions = [];
6972
- if (charCodeOpt)
6973
- {
6974
- solution =
6975
- resolveCharByDefaultMethod
6976
- (this, char, charCode, replaceCharByCharCode, 'char-code');
6977
- solutions.push(solution);
6978
- }
6979
- if (escSeqOpt)
6980
- {
6981
- solution =
6982
- resolveCharByDefaultMethod
6983
- (this, char, charCode, replaceCharByEscSeq, 'esc-seq');
6984
- solutions.push(solution);
6985
- }
6986
- if (unescapeOpt)
6987
- {
6988
- solution =
6989
- resolveCharByDefaultMethod
6990
- (this, char, charCode, replaceCharByUnescape, 'unescape');
6991
- solutions.push(solution);
6992
- }
6993
- solution = shortestOf.apply(null, solutions);
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);
6994
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);
6995
5275
  return solution;
6996
5276
  },
6997
5277
 
@@ -7125,18 +5405,6 @@
7125
5405
  return included;
7126
5406
  },
7127
5407
 
7128
- // The maximum value that can be safely used as the first group threshold of a ScrewBuffer.
7129
- // "Safely" means such that the extreme decoding test is passed in all engines.
7130
- // This value is typically limited by the free memory available on the stack, and since the
7131
- // memory layout of the stack changes at runtime in an unstable way, the maximum safe value
7132
- // cannot be determined exactly.
7133
- // The lowest recorded value so far is 1844, measured in an Android Browser 4.2.2 running on
7134
- // an Intel Atom emulator.
7135
- // Internet Explorer on Windows Phone occasionally failed the extreme decoding test in a
7136
- // non-reproducible manner, although the issue seems to be related to the output size rather
7137
- // than the grouping threshold setting.
7138
- maxGroupThreshold: 1800,
7139
-
7140
5408
  replaceExpr:
7141
5409
  function (expr, optimize)
7142
5410
  {
@@ -7220,7 +5488,7 @@
7220
5488
  options = options || { };
7221
5489
  var optimizerList = this._getOptimizerList(str, options.optimize);
7222
5490
  var screwMode = options.screwMode || SCREW_NORMAL;
7223
- var buffer = new ScrewBuffer(screwMode, this.maxGroupThreshold, optimizerList);
5491
+ var buffer = new ScrewBuffer(screwMode, optimizerList);
7224
5492
  var firstSolution = options.firstSolution;
7225
5493
  var maxLength = options.maxLength;
7226
5494
  if (firstSolution)
@@ -7244,7 +5512,8 @@
7244
5512
  var char = str[index++];
7245
5513
  solution = this.resolveCharacter(char);
7246
5514
  }
7247
- if (!buffer.append(solution) || buffer.length > maxLength)
5515
+ buffer.append(solution);
5516
+ if (buffer.length > maxLength)
7248
5517
  return;
7249
5518
  }
7250
5519
  var replacement = _String$1(buffer);
@@ -7302,7 +5571,7 @@
7302
5571
  if (entries)
7303
5572
  solution = findOptimalSolution(this, char, entries);
7304
5573
  if (!solution)
7305
- solution = defaultResolveCharacter(this, char);
5574
+ solution = this._defaultResolveCharacter(char);
7306
5575
  }
7307
5576
  else
7308
5577
  {
@@ -7474,6 +5743,10 @@
7474
5743
  return figurator;
7475
5744
  }
7476
5745
 
5746
+ var ENCODING_TYPE_COMBINED = 'combined';
5747
+ var ENCODING_TYPE_EXPRESSION = 'expression';
5748
+ var ENCODING_TYPE_TEXT = 'text';
5749
+
7477
5750
  var FALSE_FREE_DELIMITER = { joiner: 'false', separator: 'false' };
7478
5751
  var FALSE_TRUE_DELIMITER = { joiner: '', separator: 'Function("return/(?=false|true)/")()' };
7479
5752
 
@@ -7803,29 +6076,7 @@
7803
6076
  function encodeText(encoder, input, screwMode, unitPath, maxLength)
7804
6077
  {
7805
6078
  var output =
7806
- callStrategies
7807
- (
7808
- encoder,
7809
- input,
7810
- { screwMode: screwMode },
7811
- [
7812
- 'byDenseFigures',
7813
- 'bySparseFigures',
7814
- 'byDictRadix5AmendedBy3',
7815
- 'byDictRadix4AmendedBy2',
7816
- 'byDictRadix4AmendedBy1',
7817
- 'byDictRadix5',
7818
- 'byDictRadix3AmendedBy1',
7819
- 'byDictRadix4',
7820
- 'byDict',
7821
- 'byCodePointsRadix4',
7822
- 'byCharCodesRadix4',
7823
- 'byCodePoints',
7824
- 'byCharCodes',
7825
- 'plain',
7826
- ],
7827
- unitPath
7828
- );
6079
+ callStrategies(encoder, input, { screwMode: screwMode }, TEXT_STRATEGY_NAMES, unitPath);
7829
6080
  if (output != null && !(output.length > maxLength))
7830
6081
  return output;
7831
6082
  }
@@ -7963,12 +6214,10 @@
7963
6214
 
7964
6215
  (function ()
7965
6216
  {
7966
- function defineStrategy(strategy, minInputLength, expressionMode, featureObj)
6217
+ function defineStrategy(strategy, encodingType, minInputLength, featureObj)
7967
6218
  {
6219
+ strategy.encodingType = encodingType;
7968
6220
  strategy.minInputLength = minInputLength;
7969
- if (expressionMode === undefined)
7970
- expressionMode = false;
7971
- strategy.expressionMode = expressionMode;
7972
6221
  if (featureObj === undefined)
7973
6222
  featureObj = Feature.DEFAULT;
7974
6223
  strategy.mask = featureObj.mask;
@@ -8002,6 +6251,7 @@
8002
6251
  var output = this._encodeByCharCodes(inputData, undefined, maxLength);
8003
6252
  return output;
8004
6253
  },
6254
+ ENCODING_TYPE_TEXT,
8005
6255
  2
8006
6256
  ),
8007
6257
 
@@ -8022,6 +6272,7 @@
8022
6272
  var output = this._encodeByCharCodes(inputData, 4, maxLength);
8023
6273
  return output;
8024
6274
  },
6275
+ ENCODING_TYPE_TEXT,
8025
6276
  25
8026
6277
  ),
8027
6278
 
@@ -8041,8 +6292,8 @@
8041
6292
  var output = this._encodeByCodePoints(inputData, undefined, maxLength);
8042
6293
  return output;
8043
6294
  },
6295
+ ENCODING_TYPE_TEXT,
8044
6296
  3,
8045
- undefined,
8046
6297
  Feature.FROM_CODE_POINT
8047
6298
  ),
8048
6299
 
@@ -8062,8 +6313,8 @@
8062
6313
  var output = this._encodeByCodePoints(inputData, 4, maxLength);
8063
6314
  return output;
8064
6315
  },
8065
- 30,
8066
- undefined,
6316
+ ENCODING_TYPE_TEXT,
6317
+ 29,
8067
6318
  Feature.FROM_CODE_POINT
8068
6319
  ),
8069
6320
 
@@ -8085,7 +6336,8 @@
8085
6336
  var output = this._encodeByDenseFigures(inputData, maxLength);
8086
6337
  return output;
8087
6338
  },
8088
- 1888
6339
+ ENCODING_TYPE_TEXT,
6340
+ 1881
8089
6341
  ),
8090
6342
 
8091
6343
  /* -------------------------------------------------------------------------------------- *\
@@ -8112,7 +6364,8 @@
8112
6364
  var output = this._encodeByDict(inputData, undefined, undefined, maxLength);
8113
6365
  return output;
8114
6366
  },
8115
- 2
6367
+ ENCODING_TYPE_TEXT,
6368
+ 3
8116
6369
  ),
8117
6370
 
8118
6371
  /* -------------------------------------------------------------------------------------- *\
@@ -8141,7 +6394,8 @@
8141
6394
  var output = this._encodeByDict(inputData, 3, 1, maxLength);
8142
6395
  return output;
8143
6396
  },
8144
- 136
6397
+ ENCODING_TYPE_TEXT,
6398
+ 134
8145
6399
  ),
8146
6400
 
8147
6401
  /* -------------------------------------------------------------------------------------- *\
@@ -8177,7 +6431,8 @@
8177
6431
  var output = this._encodeByDict(inputData, 4, 0, maxLength);
8178
6432
  return output;
8179
6433
  },
8180
- 160
6434
+ ENCODING_TYPE_TEXT,
6435
+ 112
8181
6436
  ),
8182
6437
 
8183
6438
  /* -------------------------------------------------------------------------------------- *\
@@ -8206,7 +6461,8 @@
8206
6461
  var output = this._encodeByDict(inputData, 4, 1, maxLength);
8207
6462
  return output;
8208
6463
  },
8209
- 218
6464
+ ENCODING_TYPE_TEXT,
6465
+ 118
8210
6466
  ),
8211
6467
 
8212
6468
  /* -------------------------------------------------------------------------------------- *\
@@ -8237,7 +6493,8 @@
8237
6493
  var output = this._encodeByDict(inputData, 4, 2, maxLength);
8238
6494
  return output;
8239
6495
  },
8240
- 263
6496
+ ENCODING_TYPE_TEXT,
6497
+ 178
8241
6498
  ),
8242
6499
 
8243
6500
  /* -------------------------------------------------------------------------------------- *\
@@ -8274,7 +6531,41 @@
8274
6531
  var output = this._encodeByDict(inputData, 5, 0, maxLength);
8275
6532
  return output;
8276
6533
  },
8277
- 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
8278
6569
  ),
8279
6570
 
8280
6571
  /* -------------------------------------------------------------------------------------- *\
@@ -8306,7 +6597,8 @@
8306
6597
  var output = this._encodeByDict(inputData, 5, 3, maxLength);
8307
6598
  return output;
8308
6599
  },
8309
- 570
6600
+ ENCODING_TYPE_TEXT,
6601
+ 506
8310
6602
  ),
8311
6603
 
8312
6604
  /* -------------------------------------------------------------------------------------- *\
@@ -8327,6 +6619,7 @@
8327
6619
  var output = this._encodeBySparseFigures(inputData, maxLength);
8328
6620
  return output;
8329
6621
  },
6622
+ ENCODING_TYPE_TEXT,
8330
6623
  347
8331
6624
  ),
8332
6625
 
@@ -8345,8 +6638,8 @@
8345
6638
  var output = this._encodeExpress(input, maxLength);
8346
6639
  return output;
8347
6640
  },
8348
- undefined,
8349
- true
6641
+ ENCODING_TYPE_EXPRESSION,
6642
+ 0
8350
6643
  ),
8351
6644
 
8352
6645
  /* -------------------------------------------------------------------------------------- *\
@@ -8365,7 +6658,9 @@
8365
6658
  { maxLength: maxLength, optimize: true, screwMode: inputData.screwMode };
8366
6659
  var output = this.replaceString(input, options);
8367
6660
  return output;
8368
- }
6661
+ },
6662
+ ENCODING_TYPE_TEXT,
6663
+ 0
8369
6664
  ),
8370
6665
 
8371
6666
  /* -------------------------------------------------------------------------------------- *\
@@ -8383,12 +6678,34 @@
8383
6678
  var wrapper = inputData.wrapper;
8384
6679
  var output = encodeAndWrapText(this, input, wrapper, undefined, maxLength);
8385
6680
  return output;
8386
- }
6681
+ },
6682
+ ENCODING_TYPE_COMBINED,
6683
+ 0
8387
6684
  ),
8388
6685
  };
8389
6686
  }
8390
6687
  )();
8391
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
+
8392
6709
  assignNoEnum$1
8393
6710
  (
8394
6711
  Encoder.prototype,
@@ -9684,9 +8001,9 @@
9684
8001
  return entry;
9685
8002
  }
9686
8003
 
9687
- function createScrewBuffer(screwMode, groupThreshold, optimizerList)
8004
+ function createScrewBuffer(screwMode, optimizerList)
9688
8005
  {
9689
- var buffer = new ScrewBuffer(screwMode, groupThreshold, optimizerList);
8006
+ var buffer = new ScrewBuffer(screwMode, optimizerList);
9690
8007
  return buffer;
9691
8008
  }
9692
8009