rollup 3.18.0 → 3.19.1
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/dist/bin/rollup +8 -5
- package/dist/es/rollup.js +2 -2
- package/dist/es/shared/node-entry.js +446 -299
- package/dist/es/shared/watch.js +2 -2
- package/dist/loadConfigFile.js +2 -2
- package/dist/rollup.js +2 -2
- package/dist/shared/fsevents-importer.js +2 -2
- package/dist/shared/index.js +2 -2
- package/dist/shared/loadConfigFile.js +2 -2
- package/dist/shared/rollup.js +446 -299
- package/dist/shared/watch-cli.js +2 -2
- package/dist/shared/watch-proxy.js +2 -2
- package/dist/shared/watch.js +2 -2
- package/package.json +30 -30
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
@license
|
|
3
|
-
Rollup.js v3.
|
|
4
|
-
|
|
3
|
+
Rollup.js v3.19.1
|
|
4
|
+
Fri, 10 Mar 2023 12:56:45 GMT - commit 46676a4c8886f461706bef73d414709f82d818d6
|
|
5
5
|
|
|
6
6
|
https://github.com/rollup/rollup
|
|
7
7
|
|
|
@@ -16,7 +16,7 @@ import { lstat, realpath, readdir, readFile, mkdir, writeFile } from 'node:fs/pr
|
|
|
16
16
|
import { EventEmitter } from 'node:events';
|
|
17
17
|
import * as tty from 'tty';
|
|
18
18
|
|
|
19
|
-
var version$1 = "3.
|
|
19
|
+
var version$1 = "3.19.1";
|
|
20
20
|
|
|
21
21
|
const comma = ','.charCodeAt(0);
|
|
22
22
|
const semicolon = ';'.charCodeAt(0);
|
|
@@ -557,6 +557,7 @@ class MagicString {
|
|
|
557
557
|
sourcemapLocations: { writable: true, value: new BitSet() },
|
|
558
558
|
storedNames: { writable: true, value: {} },
|
|
559
559
|
indentStr: { writable: true, value: undefined },
|
|
560
|
+
ignoreList: { writable: true, value: options.ignoreList },
|
|
560
561
|
});
|
|
561
562
|
|
|
562
563
|
this.byStart[0] = chunk;
|
|
@@ -674,11 +675,12 @@ class MagicString {
|
|
|
674
675
|
});
|
|
675
676
|
|
|
676
677
|
return {
|
|
677
|
-
file: options.file ? options.file.split(/[/\\]/).pop() :
|
|
678
|
-
sources: [options.source ? getRelativePath(options.file || '', options.source) :
|
|
679
|
-
sourcesContent: options.includeContent ? [this.original] :
|
|
678
|
+
file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
|
|
679
|
+
sources: [options.source ? getRelativePath(options.file || '', options.source) : (options.file || '')],
|
|
680
|
+
sourcesContent: options.includeContent ? [this.original] : undefined,
|
|
680
681
|
names,
|
|
681
682
|
mappings: mappings.raw,
|
|
683
|
+
x_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined
|
|
682
684
|
};
|
|
683
685
|
}
|
|
684
686
|
|
|
@@ -1348,7 +1350,7 @@ let Bundle$1 = class Bundle {
|
|
|
1348
1350
|
);
|
|
1349
1351
|
}
|
|
1350
1352
|
|
|
1351
|
-
['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {
|
|
1353
|
+
['filename', 'ignoreList', 'indentExclusionRanges', 'separator'].forEach((option) => {
|
|
1352
1354
|
if (!hasOwnProp.call(source, option)) source[option] = source.content[option];
|
|
1353
1355
|
});
|
|
1354
1356
|
|
|
@@ -1401,6 +1403,7 @@ let Bundle$1 = class Bundle {
|
|
|
1401
1403
|
|
|
1402
1404
|
generateDecodedMap(options = {}) {
|
|
1403
1405
|
const names = [];
|
|
1406
|
+
let x_google_ignoreList = undefined;
|
|
1404
1407
|
this.sources.forEach((source) => {
|
|
1405
1408
|
Object.keys(source.content.storedNames).forEach((name) => {
|
|
1406
1409
|
if (!~names.indexOf(name)) names.push(name);
|
|
@@ -1458,10 +1461,17 @@ let Bundle$1 = class Bundle {
|
|
|
1458
1461
|
if (magicString.outro) {
|
|
1459
1462
|
mappings.advance(magicString.outro);
|
|
1460
1463
|
}
|
|
1464
|
+
|
|
1465
|
+
if (source.ignoreList && sourceIndex !== -1) {
|
|
1466
|
+
if (x_google_ignoreList === undefined) {
|
|
1467
|
+
x_google_ignoreList = [];
|
|
1468
|
+
}
|
|
1469
|
+
x_google_ignoreList.push(sourceIndex);
|
|
1470
|
+
}
|
|
1461
1471
|
});
|
|
1462
1472
|
|
|
1463
1473
|
return {
|
|
1464
|
-
file: options.file ? options.file.split(/[/\\]/).pop() :
|
|
1474
|
+
file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
|
|
1465
1475
|
sources: this.uniqueSources.map((source) => {
|
|
1466
1476
|
return options.file ? getRelativePath(options.file, source.filename) : source.filename;
|
|
1467
1477
|
}),
|
|
@@ -1470,6 +1480,7 @@ let Bundle$1 = class Bundle {
|
|
|
1470
1480
|
}),
|
|
1471
1481
|
names,
|
|
1472
1482
|
mappings: mappings.raw,
|
|
1483
|
+
x_google_ignoreList,
|
|
1473
1484
|
};
|
|
1474
1485
|
}
|
|
1475
1486
|
|
|
@@ -1812,14 +1823,14 @@ class ExpressionEntity {
|
|
|
1812
1823
|
constructor() {
|
|
1813
1824
|
this.included = false;
|
|
1814
1825
|
}
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
1826
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, _path, _recursionTracker) {
|
|
1827
|
+
deoptimizeInteraction(interaction);
|
|
1818
1828
|
}
|
|
1829
|
+
deoptimizePath(_path) { }
|
|
1819
1830
|
/**
|
|
1820
|
-
* If possible it returns a stringifyable literal value for this node that
|
|
1821
|
-
* for inlining or comparing values.
|
|
1822
|
-
*
|
|
1831
|
+
* If possible it returns a stringifyable literal value for this node that
|
|
1832
|
+
* can be used for inlining or comparing values. Otherwise, it should return
|
|
1833
|
+
* UnknownValue.
|
|
1823
1834
|
*/
|
|
1824
1835
|
getLiteralValueAtPath(_path, _recursionTracker, _origin) {
|
|
1825
1836
|
return UnknownValue;
|
|
@@ -1848,11 +1859,20 @@ const UNKNOWN_RETURN_EXPRESSION = [
|
|
|
1848
1859
|
UNKNOWN_EXPRESSION,
|
|
1849
1860
|
false
|
|
1850
1861
|
];
|
|
1862
|
+
const deoptimizeInteraction = (interaction) => {
|
|
1863
|
+
interaction.thisArg?.deoptimizePath(UNKNOWN_PATH);
|
|
1864
|
+
if (interaction.args) {
|
|
1865
|
+
for (const argument of interaction.args) {
|
|
1866
|
+
argument.deoptimizePath(UNKNOWN_PATH);
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1869
|
+
};
|
|
1851
1870
|
|
|
1852
1871
|
const INTERACTION_ACCESSED = 0;
|
|
1853
1872
|
const INTERACTION_ASSIGNED = 1;
|
|
1854
1873
|
const INTERACTION_CALLED = 2;
|
|
1855
1874
|
const NODE_INTERACTION_UNKNOWN_ACCESS = {
|
|
1875
|
+
args: null,
|
|
1856
1876
|
thisArg: null,
|
|
1857
1877
|
type: INTERACTION_ACCESSED
|
|
1858
1878
|
};
|
|
@@ -5863,9 +5883,9 @@ class NodeBase extends ExpressionEntity {
|
|
|
5863
5883
|
}
|
|
5864
5884
|
|
|
5865
5885
|
class SpreadElement extends NodeBase {
|
|
5866
|
-
|
|
5886
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
5867
5887
|
if (path.length > 0) {
|
|
5868
|
-
this.argument.
|
|
5888
|
+
this.argument.deoptimizeArgumentsOnInteractionAtPath(interaction, [UnknownKey, ...path], recursionTracker);
|
|
5869
5889
|
}
|
|
5870
5890
|
}
|
|
5871
5891
|
hasEffects(context) {
|
|
@@ -5892,9 +5912,9 @@ class Method extends ExpressionEntity {
|
|
|
5892
5912
|
super();
|
|
5893
5913
|
this.description = description;
|
|
5894
5914
|
}
|
|
5895
|
-
|
|
5915
|
+
deoptimizeArgumentsOnInteractionAtPath({ type, thisArg }, path) {
|
|
5896
5916
|
if (type === INTERACTION_CALLED && path.length === 0 && this.description.mutatesSelfAsArray) {
|
|
5897
|
-
thisArg
|
|
5917
|
+
thisArg?.deoptimizePath(UNKNOWN_INTEGER_PATH);
|
|
5898
5918
|
}
|
|
5899
5919
|
}
|
|
5900
5920
|
getReturnExpressionWhenCalledAtPath(path, { thisArg }) {
|
|
@@ -5972,6 +5992,7 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
5972
5992
|
super();
|
|
5973
5993
|
this.prototypeExpression = prototypeExpression;
|
|
5974
5994
|
this.immutable = immutable;
|
|
5995
|
+
this.additionalExpressionsToBeDeoptimized = new Set();
|
|
5975
5996
|
this.allProperties = [];
|
|
5976
5997
|
this.deoptimizedPaths = Object.create(null);
|
|
5977
5998
|
this.expressionsToBeDeoptimizedByKey = Object.create(null);
|
|
@@ -5982,7 +6003,6 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
5982
6003
|
this.propertiesAndGettersByKey = Object.create(null);
|
|
5983
6004
|
this.propertiesAndSettersByKey = Object.create(null);
|
|
5984
6005
|
this.settersByKey = Object.create(null);
|
|
5985
|
-
this.thisParametersToBeDeoptimized = new Set();
|
|
5986
6006
|
this.unknownIntegerProps = [];
|
|
5987
6007
|
this.unmatchableGetters = [];
|
|
5988
6008
|
this.unmatchablePropertiesAndGetters = [];
|
|
@@ -6020,6 +6040,85 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6020
6040
|
this.prototypeExpression?.deoptimizePath([UnknownKey, UnknownKey]);
|
|
6021
6041
|
this.deoptimizeCachedEntities();
|
|
6022
6042
|
}
|
|
6043
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6044
|
+
const [key, ...subPath] = path;
|
|
6045
|
+
const { args, thisArg, type } = interaction;
|
|
6046
|
+
if (this.hasLostTrack ||
|
|
6047
|
+
// single paths that are deoptimized will not become getters or setters
|
|
6048
|
+
((type === INTERACTION_CALLED || path.length > 1) &&
|
|
6049
|
+
(this.hasUnknownDeoptimizedProperty ||
|
|
6050
|
+
(typeof key === 'string' && this.deoptimizedPaths[key])))) {
|
|
6051
|
+
thisArg?.deoptimizePath(UNKNOWN_PATH);
|
|
6052
|
+
if (args) {
|
|
6053
|
+
for (const argument of args) {
|
|
6054
|
+
argument.deoptimizePath(UNKNOWN_PATH);
|
|
6055
|
+
}
|
|
6056
|
+
}
|
|
6057
|
+
return;
|
|
6058
|
+
}
|
|
6059
|
+
const [propertiesForExactMatchByKey, relevantPropertiesByKey, relevantUnmatchableProperties] = type === INTERACTION_CALLED || path.length > 1
|
|
6060
|
+
? [
|
|
6061
|
+
this.propertiesAndGettersByKey,
|
|
6062
|
+
this.propertiesAndGettersByKey,
|
|
6063
|
+
this.unmatchablePropertiesAndGetters
|
|
6064
|
+
]
|
|
6065
|
+
: type === INTERACTION_ACCESSED
|
|
6066
|
+
? [this.propertiesAndGettersByKey, this.gettersByKey, this.unmatchableGetters]
|
|
6067
|
+
: [this.propertiesAndSettersByKey, this.settersByKey, this.unmatchableSetters];
|
|
6068
|
+
if (typeof key === 'string') {
|
|
6069
|
+
if (propertiesForExactMatchByKey[key]) {
|
|
6070
|
+
const properties = relevantPropertiesByKey[key];
|
|
6071
|
+
if (properties) {
|
|
6072
|
+
for (const property of properties) {
|
|
6073
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6074
|
+
}
|
|
6075
|
+
}
|
|
6076
|
+
if (!this.immutable) {
|
|
6077
|
+
if (thisArg) {
|
|
6078
|
+
this.additionalExpressionsToBeDeoptimized.add(thisArg);
|
|
6079
|
+
}
|
|
6080
|
+
if (args) {
|
|
6081
|
+
for (const argument of args) {
|
|
6082
|
+
this.additionalExpressionsToBeDeoptimized.add(argument);
|
|
6083
|
+
}
|
|
6084
|
+
}
|
|
6085
|
+
}
|
|
6086
|
+
return;
|
|
6087
|
+
}
|
|
6088
|
+
for (const property of relevantUnmatchableProperties) {
|
|
6089
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6090
|
+
}
|
|
6091
|
+
if (INTEGER_REG_EXP.test(key)) {
|
|
6092
|
+
for (const property of this.unknownIntegerProps) {
|
|
6093
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6094
|
+
}
|
|
6095
|
+
}
|
|
6096
|
+
}
|
|
6097
|
+
else {
|
|
6098
|
+
for (const properties of [
|
|
6099
|
+
...Object.values(relevantPropertiesByKey),
|
|
6100
|
+
relevantUnmatchableProperties
|
|
6101
|
+
]) {
|
|
6102
|
+
for (const property of properties) {
|
|
6103
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6104
|
+
}
|
|
6105
|
+
}
|
|
6106
|
+
for (const property of this.unknownIntegerProps) {
|
|
6107
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6108
|
+
}
|
|
6109
|
+
}
|
|
6110
|
+
if (!this.immutable) {
|
|
6111
|
+
if (thisArg) {
|
|
6112
|
+
this.additionalExpressionsToBeDeoptimized.add(thisArg);
|
|
6113
|
+
}
|
|
6114
|
+
if (args) {
|
|
6115
|
+
for (const argument of args) {
|
|
6116
|
+
this.additionalExpressionsToBeDeoptimized.add(argument);
|
|
6117
|
+
}
|
|
6118
|
+
}
|
|
6119
|
+
}
|
|
6120
|
+
this.prototypeExpression?.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
6121
|
+
}
|
|
6023
6122
|
deoptimizeIntegerProperties() {
|
|
6024
6123
|
if (this.hasLostTrack ||
|
|
6025
6124
|
this.hasUnknownDeoptimizedProperty ||
|
|
@@ -6072,65 +6171,6 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6072
6171
|
}
|
|
6073
6172
|
this.prototypeExpression?.deoptimizePath(path.length === 1 ? [...path, UnknownKey] : path);
|
|
6074
6173
|
}
|
|
6075
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6076
|
-
const [key, ...subPath] = path;
|
|
6077
|
-
if (this.hasLostTrack ||
|
|
6078
|
-
// single paths that are deoptimized will not become getters or setters
|
|
6079
|
-
((interaction.type === INTERACTION_CALLED || path.length > 1) &&
|
|
6080
|
-
(this.hasUnknownDeoptimizedProperty ||
|
|
6081
|
-
(typeof key === 'string' && this.deoptimizedPaths[key])))) {
|
|
6082
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
6083
|
-
return;
|
|
6084
|
-
}
|
|
6085
|
-
const [propertiesForExactMatchByKey, relevantPropertiesByKey, relevantUnmatchableProperties] = interaction.type === INTERACTION_CALLED || path.length > 1
|
|
6086
|
-
? [
|
|
6087
|
-
this.propertiesAndGettersByKey,
|
|
6088
|
-
this.propertiesAndGettersByKey,
|
|
6089
|
-
this.unmatchablePropertiesAndGetters
|
|
6090
|
-
]
|
|
6091
|
-
: interaction.type === INTERACTION_ACCESSED
|
|
6092
|
-
? [this.propertiesAndGettersByKey, this.gettersByKey, this.unmatchableGetters]
|
|
6093
|
-
: [this.propertiesAndSettersByKey, this.settersByKey, this.unmatchableSetters];
|
|
6094
|
-
if (typeof key === 'string') {
|
|
6095
|
-
if (propertiesForExactMatchByKey[key]) {
|
|
6096
|
-
const properties = relevantPropertiesByKey[key];
|
|
6097
|
-
if (properties) {
|
|
6098
|
-
for (const property of properties) {
|
|
6099
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6100
|
-
}
|
|
6101
|
-
}
|
|
6102
|
-
if (!this.immutable) {
|
|
6103
|
-
this.thisParametersToBeDeoptimized.add(interaction.thisArg);
|
|
6104
|
-
}
|
|
6105
|
-
return;
|
|
6106
|
-
}
|
|
6107
|
-
for (const property of relevantUnmatchableProperties) {
|
|
6108
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6109
|
-
}
|
|
6110
|
-
if (INTEGER_REG_EXP.test(key)) {
|
|
6111
|
-
for (const property of this.unknownIntegerProps) {
|
|
6112
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6113
|
-
}
|
|
6114
|
-
}
|
|
6115
|
-
}
|
|
6116
|
-
else {
|
|
6117
|
-
for (const properties of [
|
|
6118
|
-
...Object.values(relevantPropertiesByKey),
|
|
6119
|
-
relevantUnmatchableProperties
|
|
6120
|
-
]) {
|
|
6121
|
-
for (const property of properties) {
|
|
6122
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6123
|
-
}
|
|
6124
|
-
}
|
|
6125
|
-
for (const property of this.unknownIntegerProps) {
|
|
6126
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6127
|
-
}
|
|
6128
|
-
}
|
|
6129
|
-
if (!this.immutable) {
|
|
6130
|
-
this.thisParametersToBeDeoptimized.add(interaction.thisArg);
|
|
6131
|
-
}
|
|
6132
|
-
this.prototypeExpression?.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
6133
|
-
}
|
|
6134
6174
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
6135
6175
|
if (path.length === 0) {
|
|
6136
6176
|
return UnknownTruthyValue;
|
|
@@ -6261,7 +6301,7 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6261
6301
|
expression.deoptimizeCache();
|
|
6262
6302
|
}
|
|
6263
6303
|
}
|
|
6264
|
-
for (const expression of this.
|
|
6304
|
+
for (const expression of this.additionalExpressionsToBeDeoptimized) {
|
|
6265
6305
|
expression.deoptimizePath(UNKNOWN_PATH);
|
|
6266
6306
|
}
|
|
6267
6307
|
}
|
|
@@ -6273,7 +6313,7 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6273
6313
|
}
|
|
6274
6314
|
}
|
|
6275
6315
|
}
|
|
6276
|
-
for (const expression of this.
|
|
6316
|
+
for (const expression of this.additionalExpressionsToBeDeoptimized) {
|
|
6277
6317
|
expression.deoptimizePath(UNKNOWN_INTEGER_PATH);
|
|
6278
6318
|
}
|
|
6279
6319
|
}
|
|
@@ -6316,9 +6356,9 @@ const isInteger = (property) => typeof property === 'string' && /^\d+$/.test(pro
|
|
|
6316
6356
|
// properties as we do not expect new builtin properties to be numbers, this
|
|
6317
6357
|
// will improve tree-shaking for out-of-bounds array properties
|
|
6318
6358
|
const OBJECT_PROTOTYPE_FALLBACK = new (class ObjectPrototypeFallbackExpression extends ExpressionEntity {
|
|
6319
|
-
|
|
6320
|
-
if (type === INTERACTION_CALLED && path.length === 1 && !isInteger(path[0])) {
|
|
6321
|
-
|
|
6359
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path) {
|
|
6360
|
+
if (interaction.type === INTERACTION_CALLED && path.length === 1 && !isInteger(path[0])) {
|
|
6361
|
+
deoptimizeInteraction(interaction);
|
|
6322
6362
|
}
|
|
6323
6363
|
}
|
|
6324
6364
|
getLiteralValueAtPath(path) {
|
|
@@ -6477,12 +6517,12 @@ class ArrayExpression extends NodeBase {
|
|
|
6477
6517
|
super(...arguments);
|
|
6478
6518
|
this.objectEntity = null;
|
|
6479
6519
|
}
|
|
6520
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6521
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
6522
|
+
}
|
|
6480
6523
|
deoptimizePath(path) {
|
|
6481
6524
|
this.getObjectEntity().deoptimizePath(path);
|
|
6482
6525
|
}
|
|
6483
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6484
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
6485
|
-
}
|
|
6486
6526
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
6487
6527
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
6488
6528
|
}
|
|
@@ -6570,29 +6610,33 @@ class ArrayPattern extends NodeBase {
|
|
|
6570
6610
|
class LocalVariable extends Variable {
|
|
6571
6611
|
constructor(name, declarator, init, context) {
|
|
6572
6612
|
super(name);
|
|
6613
|
+
this.init = init;
|
|
6573
6614
|
this.calledFromTryStatement = false;
|
|
6574
6615
|
this.additionalInitializers = null;
|
|
6575
6616
|
this.expressionsToBeDeoptimized = [];
|
|
6576
6617
|
this.declarations = declarator ? [declarator] : [];
|
|
6577
|
-
this.init = init;
|
|
6578
6618
|
this.deoptimizationTracker = context.deoptimizationTracker;
|
|
6579
6619
|
this.module = context.module;
|
|
6580
6620
|
}
|
|
6581
6621
|
addDeclaration(identifier, init) {
|
|
6582
6622
|
this.declarations.push(identifier);
|
|
6583
|
-
|
|
6584
|
-
if (init !== null) {
|
|
6585
|
-
additionalInitializers.push(init);
|
|
6586
|
-
}
|
|
6623
|
+
this.markInitializersForDeoptimization().push(init);
|
|
6587
6624
|
}
|
|
6588
6625
|
consolidateInitializers() {
|
|
6589
|
-
if (this.additionalInitializers
|
|
6626
|
+
if (this.additionalInitializers) {
|
|
6590
6627
|
for (const initializer of this.additionalInitializers) {
|
|
6591
6628
|
initializer.deoptimizePath(UNKNOWN_PATH);
|
|
6592
6629
|
}
|
|
6593
6630
|
this.additionalInitializers = null;
|
|
6594
6631
|
}
|
|
6595
6632
|
}
|
|
6633
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6634
|
+
if (this.isReassigned) {
|
|
6635
|
+
deoptimizeInteraction(interaction);
|
|
6636
|
+
return;
|
|
6637
|
+
}
|
|
6638
|
+
recursionTracker.withTrackedEntityAtPath(path, this.init, () => this.init.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker), undefined);
|
|
6639
|
+
}
|
|
6596
6640
|
deoptimizePath(path) {
|
|
6597
6641
|
if (this.isReassigned ||
|
|
6598
6642
|
this.deoptimizationTracker.trackEntityAtPathAndGetIfTracked(path, this)) {
|
|
@@ -6606,21 +6650,15 @@ class LocalVariable extends Variable {
|
|
|
6606
6650
|
for (const expression of expressionsToBeDeoptimized) {
|
|
6607
6651
|
expression.deoptimizeCache();
|
|
6608
6652
|
}
|
|
6609
|
-
this.init
|
|
6653
|
+
this.init.deoptimizePath(UNKNOWN_PATH);
|
|
6610
6654
|
}
|
|
6611
6655
|
}
|
|
6612
6656
|
else {
|
|
6613
|
-
this.init
|
|
6657
|
+
this.init.deoptimizePath(path);
|
|
6614
6658
|
}
|
|
6615
6659
|
}
|
|
6616
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6617
|
-
if (this.isReassigned || !this.init) {
|
|
6618
|
-
return interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
6619
|
-
}
|
|
6620
|
-
recursionTracker.withTrackedEntityAtPath(path, this.init, () => this.init.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker), undefined);
|
|
6621
|
-
}
|
|
6622
6660
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
6623
|
-
if (this.isReassigned
|
|
6661
|
+
if (this.isReassigned) {
|
|
6624
6662
|
return UnknownValue;
|
|
6625
6663
|
}
|
|
6626
6664
|
return recursionTracker.withTrackedEntityAtPath(path, this.init, () => {
|
|
@@ -6629,7 +6667,7 @@ class LocalVariable extends Variable {
|
|
|
6629
6667
|
}, UnknownValue);
|
|
6630
6668
|
}
|
|
6631
6669
|
getReturnExpressionWhenCalledAtPath(path, interaction, recursionTracker, origin) {
|
|
6632
|
-
if (this.isReassigned
|
|
6670
|
+
if (this.isReassigned) {
|
|
6633
6671
|
return UNKNOWN_RETURN_EXPRESSION;
|
|
6634
6672
|
}
|
|
6635
6673
|
return recursionTracker.withTrackedEntityAtPath(path, this.init, () => {
|
|
@@ -6642,8 +6680,7 @@ class LocalVariable extends Variable {
|
|
|
6642
6680
|
case INTERACTION_ACCESSED: {
|
|
6643
6681
|
if (this.isReassigned)
|
|
6644
6682
|
return true;
|
|
6645
|
-
return
|
|
6646
|
-
!context.accessed.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
6683
|
+
return (!context.accessed.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
6647
6684
|
this.init.hasEffectsOnInteractionAtPath(path, interaction, context));
|
|
6648
6685
|
}
|
|
6649
6686
|
case INTERACTION_ASSIGNED: {
|
|
@@ -6653,15 +6690,13 @@ class LocalVariable extends Variable {
|
|
|
6653
6690
|
return false;
|
|
6654
6691
|
if (this.isReassigned)
|
|
6655
6692
|
return true;
|
|
6656
|
-
return
|
|
6657
|
-
!context.assigned.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
6693
|
+
return (!context.assigned.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
6658
6694
|
this.init.hasEffectsOnInteractionAtPath(path, interaction, context));
|
|
6659
6695
|
}
|
|
6660
6696
|
case INTERACTION_CALLED: {
|
|
6661
6697
|
if (this.isReassigned)
|
|
6662
6698
|
return true;
|
|
6663
|
-
return
|
|
6664
|
-
!(interaction.withNew ? context.instantiated : context.called).trackEntityAtPathAndGetIfTracked(path, interaction.args, this) &&
|
|
6699
|
+
return (!(interaction.withNew ? context.instantiated : context.called).trackEntityAtPathAndGetIfTracked(path, interaction.args, this) &&
|
|
6665
6700
|
this.init.hasEffectsOnInteractionAtPath(path, interaction, context));
|
|
6666
6701
|
}
|
|
6667
6702
|
}
|
|
@@ -6686,12 +6721,12 @@ class LocalVariable extends Variable {
|
|
|
6686
6721
|
}
|
|
6687
6722
|
}
|
|
6688
6723
|
includeCallArguments(context, parameters) {
|
|
6689
|
-
if (this.isReassigned ||
|
|
6724
|
+
if (this.isReassigned || context.includedCallArguments.has(this.init)) {
|
|
6690
6725
|
for (const argument of parameters) {
|
|
6691
6726
|
argument.include(context, false);
|
|
6692
6727
|
}
|
|
6693
6728
|
}
|
|
6694
|
-
else
|
|
6729
|
+
else {
|
|
6695
6730
|
context.includedCallArguments.add(this.init);
|
|
6696
6731
|
this.init.includeCallArguments(context, parameters);
|
|
6697
6732
|
context.includedCallArguments.delete(this.init);
|
|
@@ -6702,12 +6737,91 @@ class LocalVariable extends Variable {
|
|
|
6702
6737
|
}
|
|
6703
6738
|
markInitializersForDeoptimization() {
|
|
6704
6739
|
if (this.additionalInitializers === null) {
|
|
6705
|
-
this.additionalInitializers =
|
|
6740
|
+
this.additionalInitializers = [this.init];
|
|
6706
6741
|
this.init = UNKNOWN_EXPRESSION;
|
|
6707
6742
|
this.isReassigned = true;
|
|
6708
6743
|
}
|
|
6709
6744
|
return this.additionalInitializers;
|
|
6710
6745
|
}
|
|
6746
|
+
mergeDeclarations(variable) {
|
|
6747
|
+
const { declarations } = this;
|
|
6748
|
+
for (const declaration of variable.declarations) {
|
|
6749
|
+
declarations.push(declaration);
|
|
6750
|
+
}
|
|
6751
|
+
const additionalInitializers = this.markInitializersForDeoptimization();
|
|
6752
|
+
additionalInitializers.push(variable.init);
|
|
6753
|
+
if (variable.additionalInitializers) {
|
|
6754
|
+
for (const initializer of variable.additionalInitializers) {
|
|
6755
|
+
additionalInitializers.push(initializer);
|
|
6756
|
+
}
|
|
6757
|
+
}
|
|
6758
|
+
}
|
|
6759
|
+
}
|
|
6760
|
+
|
|
6761
|
+
class ParameterVariable extends LocalVariable {
|
|
6762
|
+
constructor(name, declarator, context) {
|
|
6763
|
+
super(name, declarator, UNKNOWN_EXPRESSION, context);
|
|
6764
|
+
this.deoptimizationInteractions = [];
|
|
6765
|
+
this.deoptimizations = new DiscriminatedPathTracker();
|
|
6766
|
+
this.deoptimizedFields = new Set();
|
|
6767
|
+
this.entitiesToBeDeoptimized = new Set();
|
|
6768
|
+
}
|
|
6769
|
+
addEntityToBeDeoptimized(entity) {
|
|
6770
|
+
if (this.deoptimizedFields.has(UnknownKey)) {
|
|
6771
|
+
entity.deoptimizePath(UNKNOWN_PATH);
|
|
6772
|
+
}
|
|
6773
|
+
else {
|
|
6774
|
+
for (const field of this.deoptimizedFields) {
|
|
6775
|
+
entity.deoptimizePath([field]);
|
|
6776
|
+
}
|
|
6777
|
+
}
|
|
6778
|
+
for (const { interaction, path } of this.deoptimizationInteractions) {
|
|
6779
|
+
entity.deoptimizeArgumentsOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
6780
|
+
}
|
|
6781
|
+
this.entitiesToBeDeoptimized.add(entity);
|
|
6782
|
+
}
|
|
6783
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path) {
|
|
6784
|
+
// For performance reasons, we fully deoptimize all deeper interactions
|
|
6785
|
+
if (path.length >= 2) {
|
|
6786
|
+
deoptimizeInteraction(interaction);
|
|
6787
|
+
return;
|
|
6788
|
+
}
|
|
6789
|
+
if (interaction.thisArg &&
|
|
6790
|
+
!this.deoptimizations.trackEntityAtPathAndGetIfTracked(path, interaction.args, interaction.thisArg)) {
|
|
6791
|
+
for (const entity of this.entitiesToBeDeoptimized) {
|
|
6792
|
+
entity.deoptimizeArgumentsOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
6793
|
+
}
|
|
6794
|
+
this.deoptimizationInteractions.push({
|
|
6795
|
+
interaction,
|
|
6796
|
+
path
|
|
6797
|
+
});
|
|
6798
|
+
}
|
|
6799
|
+
}
|
|
6800
|
+
deoptimizePath(path) {
|
|
6801
|
+
if (path.length === 0 || this.deoptimizedFields.has(UnknownKey)) {
|
|
6802
|
+
return;
|
|
6803
|
+
}
|
|
6804
|
+
const key = path[0];
|
|
6805
|
+
if (this.deoptimizedFields.has(key)) {
|
|
6806
|
+
return;
|
|
6807
|
+
}
|
|
6808
|
+
this.deoptimizedFields.add(key);
|
|
6809
|
+
for (const entity of this.entitiesToBeDeoptimized) {
|
|
6810
|
+
entity.deoptimizePath(path);
|
|
6811
|
+
}
|
|
6812
|
+
}
|
|
6813
|
+
getReturnExpressionWhenCalledAtPath(path) {
|
|
6814
|
+
// We deoptimize everything that is called as that will trivially deoptimize
|
|
6815
|
+
// the corresponding return expressions as well and avoid badly performing
|
|
6816
|
+
// and complicated alternatives
|
|
6817
|
+
if (path.length === 0) {
|
|
6818
|
+
this.deoptimizePath(UNKNOWN_PATH);
|
|
6819
|
+
}
|
|
6820
|
+
else if (!this.deoptimizedFields.has(path[0])) {
|
|
6821
|
+
this.deoptimizePath(path.slice(0, 1));
|
|
6822
|
+
}
|
|
6823
|
+
return UNKNOWN_RETURN_EXPRESSION;
|
|
6824
|
+
}
|
|
6711
6825
|
}
|
|
6712
6826
|
|
|
6713
6827
|
const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$';
|
|
@@ -6849,16 +6963,15 @@ class ParameterScope extends ChildScope {
|
|
|
6849
6963
|
}
|
|
6850
6964
|
/**
|
|
6851
6965
|
* Adds a parameter to this scope. Parameters must be added in the correct
|
|
6852
|
-
* order, e.
|
|
6966
|
+
* order, i.e. from left to right.
|
|
6853
6967
|
*/
|
|
6854
6968
|
addParameterDeclaration(identifier) {
|
|
6855
|
-
const name = identifier
|
|
6856
|
-
|
|
6857
|
-
|
|
6858
|
-
|
|
6859
|
-
|
|
6860
|
-
|
|
6861
|
-
variable = new LocalVariable(name, identifier, UNKNOWN_EXPRESSION, this.context);
|
|
6969
|
+
const { name } = identifier;
|
|
6970
|
+
const variable = new ParameterVariable(name, identifier, this.context);
|
|
6971
|
+
const localVariable = this.hoistedBodyVarScope.variables.get(name);
|
|
6972
|
+
if (localVariable) {
|
|
6973
|
+
this.hoistedBodyVarScope.variables.set(name, variable);
|
|
6974
|
+
variable.mergeDeclarations(localVariable);
|
|
6862
6975
|
}
|
|
6863
6976
|
this.variables.set(name, variable);
|
|
6864
6977
|
return variable;
|
|
@@ -7004,16 +7117,20 @@ const getPureFunctions = ({ treeshake }) => {
|
|
|
7004
7117
|
return pureFunctions;
|
|
7005
7118
|
};
|
|
7006
7119
|
|
|
7120
|
+
const doNothing = () => { };
|
|
7121
|
+
|
|
7007
7122
|
/* eslint sort-keys: "off" */
|
|
7008
7123
|
const ValueProperties = Symbol('Value Properties');
|
|
7009
7124
|
const getTruthyLiteralValue = () => UnknownTruthyValue;
|
|
7010
7125
|
const returnFalse = () => false;
|
|
7011
7126
|
const returnTrue = () => true;
|
|
7012
7127
|
const PURE = {
|
|
7128
|
+
deoptimizeArgumentsOnCall: doNothing,
|
|
7013
7129
|
getLiteralValue: getTruthyLiteralValue,
|
|
7014
7130
|
hasEffectsWhenCalled: returnFalse
|
|
7015
7131
|
};
|
|
7016
7132
|
const IMPURE = {
|
|
7133
|
+
deoptimizeArgumentsOnCall: doNothing,
|
|
7017
7134
|
getLiteralValue: getTruthyLiteralValue,
|
|
7018
7135
|
hasEffectsWhenCalled: returnTrue
|
|
7019
7136
|
};
|
|
@@ -7032,6 +7149,9 @@ const PF = {
|
|
|
7032
7149
|
const MUTATES_ARG_WITHOUT_ACCESSOR = {
|
|
7033
7150
|
__proto__: null,
|
|
7034
7151
|
[ValueProperties]: {
|
|
7152
|
+
deoptimizeArgumentsOnCall({ args: [firstArgument] }) {
|
|
7153
|
+
firstArgument?.deoptimizePath(UNKNOWN_PATH);
|
|
7154
|
+
},
|
|
7035
7155
|
getLiteralValue: getTruthyLiteralValue,
|
|
7036
7156
|
hasEffectsWhenCalled({ args }, context) {
|
|
7037
7157
|
return (args.length === 0 ||
|
|
@@ -7236,6 +7356,7 @@ const knownGlobals = {
|
|
|
7236
7356
|
toStringTag: {
|
|
7237
7357
|
__proto__: null,
|
|
7238
7358
|
[ValueProperties]: {
|
|
7359
|
+
deoptimizeArgumentsOnCall: doNothing,
|
|
7239
7360
|
getLiteralValue() {
|
|
7240
7361
|
return SymbolToStringTag;
|
|
7241
7362
|
},
|
|
@@ -7261,7 +7382,30 @@ const knownGlobals = {
|
|
|
7261
7382
|
// Additional globals shared by Node and Browser that are not strictly part of the language
|
|
7262
7383
|
clearInterval: C,
|
|
7263
7384
|
clearTimeout: C,
|
|
7264
|
-
console:
|
|
7385
|
+
console: {
|
|
7386
|
+
__proto__: null,
|
|
7387
|
+
[ValueProperties]: IMPURE,
|
|
7388
|
+
assert: C,
|
|
7389
|
+
clear: C,
|
|
7390
|
+
count: C,
|
|
7391
|
+
countReset: C,
|
|
7392
|
+
debug: C,
|
|
7393
|
+
dir: C,
|
|
7394
|
+
dirxml: C,
|
|
7395
|
+
error: C,
|
|
7396
|
+
exception: C,
|
|
7397
|
+
group: C,
|
|
7398
|
+
groupCollapsed: C,
|
|
7399
|
+
groupEnd: C,
|
|
7400
|
+
info: C,
|
|
7401
|
+
log: C,
|
|
7402
|
+
table: C,
|
|
7403
|
+
time: C,
|
|
7404
|
+
timeEnd: C,
|
|
7405
|
+
timeLog: C,
|
|
7406
|
+
trace: C,
|
|
7407
|
+
warn: C
|
|
7408
|
+
},
|
|
7265
7409
|
Intl: {
|
|
7266
7410
|
__proto__: null,
|
|
7267
7411
|
[ValueProperties]: IMPURE,
|
|
@@ -7886,6 +8030,29 @@ class GlobalVariable extends Variable {
|
|
|
7886
8030
|
// been reassigned
|
|
7887
8031
|
this.isReassigned = true;
|
|
7888
8032
|
}
|
|
8033
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8034
|
+
switch (interaction.type) {
|
|
8035
|
+
// While there is no point in testing these cases as at the moment, they
|
|
8036
|
+
// are also covered via other means, we keep them for completeness
|
|
8037
|
+
case INTERACTION_ACCESSED:
|
|
8038
|
+
case INTERACTION_ASSIGNED: {
|
|
8039
|
+
if (!getGlobalAtPath([this.name, ...path].slice(0, -1))) {
|
|
8040
|
+
super.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8041
|
+
}
|
|
8042
|
+
return;
|
|
8043
|
+
}
|
|
8044
|
+
case INTERACTION_CALLED: {
|
|
8045
|
+
const globalAtPath = getGlobalAtPath([this.name, ...path]);
|
|
8046
|
+
if (globalAtPath) {
|
|
8047
|
+
globalAtPath.deoptimizeArgumentsOnCall(interaction);
|
|
8048
|
+
}
|
|
8049
|
+
else {
|
|
8050
|
+
super.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8051
|
+
}
|
|
8052
|
+
return;
|
|
8053
|
+
}
|
|
8054
|
+
}
|
|
8055
|
+
}
|
|
7889
8056
|
getLiteralValueAtPath(path, _recursionTracker, _origin) {
|
|
7890
8057
|
const globalAtPath = getGlobalAtPath([this.name, ...path]);
|
|
7891
8058
|
return globalAtPath ? globalAtPath.getLiteralValue() : UnknownValue;
|
|
@@ -7970,6 +8137,9 @@ class Identifier extends NodeBase {
|
|
|
7970
8137
|
variable.kind = kind;
|
|
7971
8138
|
return [(this.variable = variable)];
|
|
7972
8139
|
}
|
|
8140
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8141
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8142
|
+
}
|
|
7973
8143
|
deoptimizePath(path) {
|
|
7974
8144
|
if (path.length === 0 && !this.scope.contains(this.name)) {
|
|
7975
8145
|
this.disallowImportReassignment();
|
|
@@ -7978,9 +8148,6 @@ class Identifier extends NodeBase {
|
|
|
7978
8148
|
// Identifier as property that might be deoptimized by default
|
|
7979
8149
|
this.variable?.deoptimizePath(path);
|
|
7980
8150
|
}
|
|
7981
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
7982
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
7983
|
-
}
|
|
7984
8151
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
7985
8152
|
return this.getVariableRespectingTDZ().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
7986
8153
|
}
|
|
@@ -8406,6 +8573,30 @@ class FunctionBase extends NodeBase {
|
|
|
8406
8573
|
this.objectEntity = null;
|
|
8407
8574
|
this.deoptimizedReturn = false;
|
|
8408
8575
|
}
|
|
8576
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8577
|
+
if (interaction.type === INTERACTION_CALLED) {
|
|
8578
|
+
const { parameters } = this.scope;
|
|
8579
|
+
const { args } = interaction;
|
|
8580
|
+
let hasRest = false;
|
|
8581
|
+
for (let position = 0; position < args.length; position++) {
|
|
8582
|
+
const parameter = this.params[position];
|
|
8583
|
+
if (hasRest || parameter instanceof RestElement) {
|
|
8584
|
+
hasRest = true;
|
|
8585
|
+
args[position].deoptimizePath(UNKNOWN_PATH);
|
|
8586
|
+
}
|
|
8587
|
+
else if (parameter instanceof Identifier) {
|
|
8588
|
+
// args[position].deoptimizePath(UNKNOWN_PATH);
|
|
8589
|
+
parameters[position][0].addEntityToBeDeoptimized(args[position]);
|
|
8590
|
+
}
|
|
8591
|
+
else if (parameter) {
|
|
8592
|
+
args[position].deoptimizePath(UNKNOWN_PATH);
|
|
8593
|
+
}
|
|
8594
|
+
}
|
|
8595
|
+
}
|
|
8596
|
+
else {
|
|
8597
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8598
|
+
}
|
|
8599
|
+
}
|
|
8409
8600
|
deoptimizePath(path) {
|
|
8410
8601
|
this.getObjectEntity().deoptimizePath(path);
|
|
8411
8602
|
if (path.length === 1 && path[0] === UnknownKey) {
|
|
@@ -8414,11 +8605,6 @@ class FunctionBase extends NodeBase {
|
|
|
8414
8605
|
this.scope.getReturnExpression().deoptimizePath(UNKNOWN_PATH);
|
|
8415
8606
|
}
|
|
8416
8607
|
}
|
|
8417
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8418
|
-
if (path.length > 0) {
|
|
8419
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8420
|
-
}
|
|
8421
|
-
}
|
|
8422
8608
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
8423
8609
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
8424
8610
|
}
|
|
@@ -8741,54 +8927,12 @@ class ArgumentsVariable extends LocalVariable {
|
|
|
8741
8927
|
}
|
|
8742
8928
|
}
|
|
8743
8929
|
|
|
8744
|
-
class ThisVariable extends
|
|
8930
|
+
class ThisVariable extends ParameterVariable {
|
|
8745
8931
|
constructor(context) {
|
|
8746
|
-
super('this', null,
|
|
8747
|
-
this.deoptimizedPaths = [];
|
|
8748
|
-
this.entitiesToBeDeoptimized = new Set();
|
|
8749
|
-
this.thisDeoptimizationList = [];
|
|
8750
|
-
this.thisDeoptimizations = new DiscriminatedPathTracker();
|
|
8751
|
-
}
|
|
8752
|
-
addEntityToBeDeoptimized(entity) {
|
|
8753
|
-
for (const path of this.deoptimizedPaths) {
|
|
8754
|
-
entity.deoptimizePath(path);
|
|
8755
|
-
}
|
|
8756
|
-
for (const { interaction, path } of this.thisDeoptimizationList) {
|
|
8757
|
-
entity.deoptimizeThisOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
8758
|
-
}
|
|
8759
|
-
this.entitiesToBeDeoptimized.add(entity);
|
|
8760
|
-
}
|
|
8761
|
-
deoptimizePath(path) {
|
|
8762
|
-
if (path.length === 0 ||
|
|
8763
|
-
this.deoptimizationTracker.trackEntityAtPathAndGetIfTracked(path, this)) {
|
|
8764
|
-
return;
|
|
8765
|
-
}
|
|
8766
|
-
this.deoptimizedPaths.push(path);
|
|
8767
|
-
for (const entity of this.entitiesToBeDeoptimized) {
|
|
8768
|
-
entity.deoptimizePath(path);
|
|
8769
|
-
}
|
|
8770
|
-
}
|
|
8771
|
-
deoptimizeThisOnInteractionAtPath(interaction, path) {
|
|
8772
|
-
const thisDeoptimization = {
|
|
8773
|
-
interaction,
|
|
8774
|
-
path
|
|
8775
|
-
};
|
|
8776
|
-
if (!this.thisDeoptimizations.trackEntityAtPathAndGetIfTracked(path, interaction.type, interaction.thisArg)) {
|
|
8777
|
-
for (const entity of this.entitiesToBeDeoptimized) {
|
|
8778
|
-
entity.deoptimizeThisOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
8779
|
-
}
|
|
8780
|
-
this.thisDeoptimizationList.push(thisDeoptimization);
|
|
8781
|
-
}
|
|
8932
|
+
super('this', null, context);
|
|
8782
8933
|
}
|
|
8783
8934
|
hasEffectsOnInteractionAtPath(path, interaction, context) {
|
|
8784
|
-
|
|
8785
|
-
if (replacedVariableInit) {
|
|
8786
|
-
return (replacedVariableInit.hasEffectsOnInteractionAtPath(path, interaction, context) ||
|
|
8787
|
-
// If the surrounding function is included, all mutations of "this" must
|
|
8788
|
-
// be counted as side effects, which is what this second line does.
|
|
8789
|
-
(!context.ignore.this && super.hasEffectsOnInteractionAtPath(path, interaction, context)));
|
|
8790
|
-
}
|
|
8791
|
-
return UNKNOWN_EXPRESSION.hasEffectsOnInteractionAtPath(path, interaction, context);
|
|
8935
|
+
return (context.replacedVariableInits.get(this) || UNKNOWN_EXPRESSION).hasEffectsOnInteractionAtPath(path, interaction, context);
|
|
8792
8936
|
}
|
|
8793
8937
|
}
|
|
8794
8938
|
|
|
@@ -8825,9 +8969,9 @@ class FunctionNode extends FunctionBase {
|
|
|
8825
8969
|
// constructed entity.
|
|
8826
8970
|
this.scope.thisVariable.addEntityToBeDeoptimized(this.constructedEntity);
|
|
8827
8971
|
}
|
|
8828
|
-
|
|
8829
|
-
super.
|
|
8830
|
-
if (interaction.type === INTERACTION_CALLED && path.length === 0) {
|
|
8972
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8973
|
+
super.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8974
|
+
if (interaction.type === INTERACTION_CALLED && path.length === 0 && interaction.thisArg) {
|
|
8831
8975
|
this.scope.thisVariable.addEntityToBeDeoptimized(interaction.thisArg);
|
|
8832
8976
|
}
|
|
8833
8977
|
}
|
|
@@ -9026,7 +9170,7 @@ function renderCallArguments(code, options, node) {
|
|
|
9026
9170
|
}
|
|
9027
9171
|
|
|
9028
9172
|
class Literal extends NodeBase {
|
|
9029
|
-
|
|
9173
|
+
deoptimizeArgumentsOnInteractionAtPath() { }
|
|
9030
9174
|
getLiteralValueAtPath(path) {
|
|
9031
9175
|
if (path.length > 0 ||
|
|
9032
9176
|
// unknown literals can also be null but do not start with an "n"
|
|
@@ -9144,6 +9288,19 @@ class MemberExpression extends NodeBase {
|
|
|
9144
9288
|
super.bind();
|
|
9145
9289
|
}
|
|
9146
9290
|
}
|
|
9291
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9292
|
+
if (this.variable) {
|
|
9293
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9294
|
+
}
|
|
9295
|
+
else if (!this.isUndefined) {
|
|
9296
|
+
if (path.length < MAX_PATH_DEPTH) {
|
|
9297
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(interaction, [this.getPropertyKey(), ...path], recursionTracker);
|
|
9298
|
+
}
|
|
9299
|
+
else {
|
|
9300
|
+
deoptimizeInteraction(interaction);
|
|
9301
|
+
}
|
|
9302
|
+
}
|
|
9303
|
+
}
|
|
9147
9304
|
deoptimizeCache() {
|
|
9148
9305
|
const expressionsToBeDeoptimized = this.expressionsToBeDeoptimized;
|
|
9149
9306
|
this.expressionsToBeDeoptimized = [];
|
|
@@ -9167,19 +9324,6 @@ class MemberExpression extends NodeBase {
|
|
|
9167
9324
|
]);
|
|
9168
9325
|
}
|
|
9169
9326
|
}
|
|
9170
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9171
|
-
if (this.variable) {
|
|
9172
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9173
|
-
}
|
|
9174
|
-
else if (!this.isUndefined) {
|
|
9175
|
-
if (path.length < MAX_PATH_DEPTH) {
|
|
9176
|
-
this.object.deoptimizeThisOnInteractionAtPath(interaction, [this.getPropertyKey(), ...path], recursionTracker);
|
|
9177
|
-
}
|
|
9178
|
-
else {
|
|
9179
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
9180
|
-
}
|
|
9181
|
-
}
|
|
9182
|
-
}
|
|
9183
9327
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9184
9328
|
if (this.variable) {
|
|
9185
9329
|
return this.variable.getLiteralValueAtPath(path, recursionTracker, origin);
|
|
@@ -9260,7 +9404,7 @@ class MemberExpression extends NodeBase {
|
|
|
9260
9404
|
}
|
|
9261
9405
|
initialise() {
|
|
9262
9406
|
this.propertyKey = getResolvablePropertyKey(this);
|
|
9263
|
-
this.accessInteraction = { thisArg: this.object, type: INTERACTION_ACCESSED };
|
|
9407
|
+
this.accessInteraction = { args: null, thisArg: this.object, type: INTERACTION_ACCESSED };
|
|
9264
9408
|
}
|
|
9265
9409
|
isSkippedAsOptional(origin) {
|
|
9266
9410
|
return (!this.variable &&
|
|
@@ -9305,7 +9449,7 @@ class MemberExpression extends NodeBase {
|
|
|
9305
9449
|
propertyReadSideEffects &&
|
|
9306
9450
|
!(this.variable || this.isUndefined)) {
|
|
9307
9451
|
const propertyKey = this.getPropertyKey();
|
|
9308
|
-
this.object.
|
|
9452
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(this.accessInteraction, [propertyKey], SHARED_RECURSION_TRACKER);
|
|
9309
9453
|
this.context.requestTreeshakingPass();
|
|
9310
9454
|
}
|
|
9311
9455
|
}
|
|
@@ -9318,7 +9462,7 @@ class MemberExpression extends NodeBase {
|
|
|
9318
9462
|
this.bound &&
|
|
9319
9463
|
propertyReadSideEffects &&
|
|
9320
9464
|
!(this.variable || this.isUndefined)) {
|
|
9321
|
-
this.object.
|
|
9465
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(this.assignmentInteraction, [this.getPropertyKey()], SHARED_RECURSION_TRACKER);
|
|
9322
9466
|
this.context.requestTreeshakingPass();
|
|
9323
9467
|
}
|
|
9324
9468
|
}
|
|
@@ -9390,6 +9534,33 @@ class CallExpressionBase extends NodeBase {
|
|
|
9390
9534
|
this.deoptimizableDependentExpressions = [];
|
|
9391
9535
|
this.expressionsToBeDeoptimized = new Set();
|
|
9392
9536
|
}
|
|
9537
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9538
|
+
const { args, thisArg } = interaction;
|
|
9539
|
+
const [returnExpression, isPure] = this.getReturnExpression(recursionTracker);
|
|
9540
|
+
if (isPure)
|
|
9541
|
+
return;
|
|
9542
|
+
if (returnExpression === UNKNOWN_EXPRESSION) {
|
|
9543
|
+
thisArg?.deoptimizePath(UNKNOWN_PATH);
|
|
9544
|
+
if (args) {
|
|
9545
|
+
for (const argument of args) {
|
|
9546
|
+
argument.deoptimizePath(UNKNOWN_PATH);
|
|
9547
|
+
}
|
|
9548
|
+
}
|
|
9549
|
+
}
|
|
9550
|
+
else {
|
|
9551
|
+
recursionTracker.withTrackedEntityAtPath(path, returnExpression, () => {
|
|
9552
|
+
if (thisArg) {
|
|
9553
|
+
this.expressionsToBeDeoptimized.add(thisArg);
|
|
9554
|
+
}
|
|
9555
|
+
if (args) {
|
|
9556
|
+
for (const argument of args) {
|
|
9557
|
+
this.expressionsToBeDeoptimized.add(argument);
|
|
9558
|
+
}
|
|
9559
|
+
}
|
|
9560
|
+
returnExpression.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9561
|
+
}, null);
|
|
9562
|
+
}
|
|
9563
|
+
}
|
|
9393
9564
|
deoptimizeCache() {
|
|
9394
9565
|
if (this.returnExpression?.[0] !== UNKNOWN_EXPRESSION) {
|
|
9395
9566
|
this.returnExpression = UNKNOWN_RETURN_EXPRESSION;
|
|
@@ -9411,20 +9582,6 @@ class CallExpressionBase extends NodeBase {
|
|
|
9411
9582
|
returnExpression.deoptimizePath(path);
|
|
9412
9583
|
}
|
|
9413
9584
|
}
|
|
9414
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9415
|
-
const [returnExpression, isPure] = this.getReturnExpression(recursionTracker);
|
|
9416
|
-
if (isPure)
|
|
9417
|
-
return;
|
|
9418
|
-
if (returnExpression === UNKNOWN_EXPRESSION) {
|
|
9419
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
9420
|
-
}
|
|
9421
|
-
else {
|
|
9422
|
-
recursionTracker.withTrackedEntityAtPath(path, returnExpression, () => {
|
|
9423
|
-
this.expressionsToBeDeoptimized.add(interaction.thisArg);
|
|
9424
|
-
returnExpression.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9425
|
-
}, null);
|
|
9426
|
-
}
|
|
9427
|
-
}
|
|
9428
9585
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9429
9586
|
const [returnExpression] = this.getReturnExpression(recursionTracker);
|
|
9430
9587
|
if (returnExpression === UNKNOWN_EXPRESSION) {
|
|
@@ -9534,13 +9691,7 @@ class CallExpression extends CallExpressionBase {
|
|
|
9534
9691
|
}
|
|
9535
9692
|
applyDeoptimizations() {
|
|
9536
9693
|
this.deoptimized = true;
|
|
9537
|
-
|
|
9538
|
-
this.callee.deoptimizeThisOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
9539
|
-
}
|
|
9540
|
-
for (const argument of this.arguments) {
|
|
9541
|
-
// This will make sure all properties of parameters behave as "unknown"
|
|
9542
|
-
argument.deoptimizePath(UNKNOWN_PATH);
|
|
9543
|
-
}
|
|
9694
|
+
this.callee.deoptimizeArgumentsOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
9544
9695
|
this.context.requestTreeshakingPass();
|
|
9545
9696
|
}
|
|
9546
9697
|
getReturnExpression(recursionTracker = SHARED_RECURSION_TRACKER) {
|
|
@@ -9637,15 +9788,9 @@ class MethodBase extends NodeBase {
|
|
|
9637
9788
|
super(...arguments);
|
|
9638
9789
|
this.accessedValue = null;
|
|
9639
9790
|
}
|
|
9640
|
-
|
|
9641
|
-
// expressions, there is no known situation where a getter is deoptimized.
|
|
9642
|
-
deoptimizeCache() { }
|
|
9643
|
-
deoptimizePath(path) {
|
|
9644
|
-
this.getAccessedValue()[0].deoptimizePath(path);
|
|
9645
|
-
}
|
|
9646
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9791
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9647
9792
|
if (interaction.type === INTERACTION_ACCESSED && this.kind === 'get' && path.length === 0) {
|
|
9648
|
-
return this.value.
|
|
9793
|
+
return this.value.deoptimizeArgumentsOnInteractionAtPath({
|
|
9649
9794
|
args: NO_ARGS,
|
|
9650
9795
|
thisArg: interaction.thisArg,
|
|
9651
9796
|
type: INTERACTION_CALLED,
|
|
@@ -9653,14 +9798,20 @@ class MethodBase extends NodeBase {
|
|
|
9653
9798
|
}, EMPTY_PATH, recursionTracker);
|
|
9654
9799
|
}
|
|
9655
9800
|
if (interaction.type === INTERACTION_ASSIGNED && this.kind === 'set' && path.length === 0) {
|
|
9656
|
-
return this.value.
|
|
9801
|
+
return this.value.deoptimizeArgumentsOnInteractionAtPath({
|
|
9657
9802
|
args: interaction.args,
|
|
9658
9803
|
thisArg: interaction.thisArg,
|
|
9659
9804
|
type: INTERACTION_CALLED,
|
|
9660
9805
|
withNew: false
|
|
9661
9806
|
}, EMPTY_PATH, recursionTracker);
|
|
9662
9807
|
}
|
|
9663
|
-
this.getAccessedValue()[0].
|
|
9808
|
+
this.getAccessedValue()[0].deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9809
|
+
}
|
|
9810
|
+
// As getter properties directly receive their values from fixed function
|
|
9811
|
+
// expressions, there is no known situation where a getter is deoptimized.
|
|
9812
|
+
deoptimizeCache() { }
|
|
9813
|
+
deoptimizePath(path) {
|
|
9814
|
+
this.getAccessedValue()[0].deoptimizePath(path);
|
|
9664
9815
|
}
|
|
9665
9816
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9666
9817
|
return this.getAccessedValue()[0].getLiteralValueAtPath(path, recursionTracker, origin);
|
|
@@ -9716,12 +9867,12 @@ class ObjectMember extends ExpressionEntity {
|
|
|
9716
9867
|
this.object = object;
|
|
9717
9868
|
this.key = key;
|
|
9718
9869
|
}
|
|
9870
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9871
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(interaction, [this.key, ...path], recursionTracker);
|
|
9872
|
+
}
|
|
9719
9873
|
deoptimizePath(path) {
|
|
9720
9874
|
this.object.deoptimizePath([this.key, ...path]);
|
|
9721
9875
|
}
|
|
9722
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9723
|
-
this.object.deoptimizeThisOnInteractionAtPath(interaction, [this.key, ...path], recursionTracker);
|
|
9724
|
-
}
|
|
9725
9876
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9726
9877
|
return this.object.getLiteralValueAtPath([this.key, ...path], recursionTracker, origin);
|
|
9727
9878
|
}
|
|
@@ -9741,15 +9892,15 @@ class ClassNode extends NodeBase {
|
|
|
9741
9892
|
createScope(parentScope) {
|
|
9742
9893
|
this.scope = new ChildScope(parentScope);
|
|
9743
9894
|
}
|
|
9895
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9896
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9897
|
+
}
|
|
9744
9898
|
deoptimizeCache() {
|
|
9745
9899
|
this.getObjectEntity().deoptimizeAllProperties();
|
|
9746
9900
|
}
|
|
9747
9901
|
deoptimizePath(path) {
|
|
9748
9902
|
this.getObjectEntity().deoptimizePath(path);
|
|
9749
9903
|
}
|
|
9750
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9751
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9752
|
-
}
|
|
9753
9904
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9754
9905
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
9755
9906
|
}
|
|
@@ -9936,6 +10087,10 @@ class ConditionalExpression extends NodeBase {
|
|
|
9936
10087
|
this.isBranchResolutionAnalysed = false;
|
|
9937
10088
|
this.usedBranch = null;
|
|
9938
10089
|
}
|
|
10090
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10091
|
+
this.consequent.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10092
|
+
this.alternate.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10093
|
+
}
|
|
9939
10094
|
deoptimizeCache() {
|
|
9940
10095
|
if (this.usedBranch !== null) {
|
|
9941
10096
|
const unusedBranch = this.usedBranch === this.consequent ? this.alternate : this.consequent;
|
|
@@ -9956,10 +10111,6 @@ class ConditionalExpression extends NodeBase {
|
|
|
9956
10111
|
this.alternate.deoptimizePath(path);
|
|
9957
10112
|
}
|
|
9958
10113
|
}
|
|
9959
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9960
|
-
this.consequent.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9961
|
-
this.alternate.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9962
|
-
}
|
|
9963
10114
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9964
10115
|
const usedBranch = this.getUsedBranch();
|
|
9965
10116
|
if (!usedBranch)
|
|
@@ -11068,6 +11219,10 @@ class LogicalExpression extends NodeBase {
|
|
|
11068
11219
|
this.isBranchResolutionAnalysed = false;
|
|
11069
11220
|
this.usedBranch = null;
|
|
11070
11221
|
}
|
|
11222
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11223
|
+
this.left.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11224
|
+
this.right.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11225
|
+
}
|
|
11071
11226
|
deoptimizeCache() {
|
|
11072
11227
|
if (this.usedBranch) {
|
|
11073
11228
|
const unusedBranch = this.usedBranch === this.left ? this.right : this.left;
|
|
@@ -11091,10 +11246,6 @@ class LogicalExpression extends NodeBase {
|
|
|
11091
11246
|
this.right.deoptimizePath(path);
|
|
11092
11247
|
}
|
|
11093
11248
|
}
|
|
11094
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11095
|
-
this.left.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11096
|
-
this.right.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11097
|
-
}
|
|
11098
11249
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
11099
11250
|
const usedBranch = this.getUsedBranch();
|
|
11100
11251
|
if (!usedBranch)
|
|
@@ -11364,10 +11515,7 @@ class NewExpression extends NodeBase {
|
|
|
11364
11515
|
}
|
|
11365
11516
|
applyDeoptimizations() {
|
|
11366
11517
|
this.deoptimized = true;
|
|
11367
|
-
|
|
11368
|
-
// This will make sure all properties of parameters behave as "unknown"
|
|
11369
|
-
argument.deoptimizePath(UNKNOWN_PATH);
|
|
11370
|
-
}
|
|
11518
|
+
this.callee.deoptimizeArgumentsOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
11371
11519
|
this.context.requestTreeshakingPass();
|
|
11372
11520
|
}
|
|
11373
11521
|
}
|
|
@@ -11377,15 +11525,15 @@ class ObjectExpression extends NodeBase {
|
|
|
11377
11525
|
super(...arguments);
|
|
11378
11526
|
this.objectEntity = null;
|
|
11379
11527
|
}
|
|
11528
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11529
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11530
|
+
}
|
|
11380
11531
|
deoptimizeCache() {
|
|
11381
11532
|
this.getObjectEntity().deoptimizeAllProperties();
|
|
11382
11533
|
}
|
|
11383
11534
|
deoptimizePath(path) {
|
|
11384
11535
|
this.getObjectEntity().deoptimizePath(path);
|
|
11385
11536
|
}
|
|
11386
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11387
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11388
|
-
}
|
|
11389
11537
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
11390
11538
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
11391
11539
|
}
|
|
@@ -11567,12 +11715,12 @@ class Property extends MethodBase {
|
|
|
11567
11715
|
}
|
|
11568
11716
|
|
|
11569
11717
|
class PropertyDefinition extends NodeBase {
|
|
11718
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11719
|
+
this.value?.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11720
|
+
}
|
|
11570
11721
|
deoptimizePath(path) {
|
|
11571
11722
|
this.value?.deoptimizePath(path);
|
|
11572
11723
|
}
|
|
11573
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11574
|
-
this.value?.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11575
|
-
}
|
|
11576
11724
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
11577
11725
|
return this.value
|
|
11578
11726
|
? this.value.getLiteralValueAtPath(path, recursionTracker, origin)
|
|
@@ -11618,12 +11766,12 @@ class ReturnStatement extends NodeBase {
|
|
|
11618
11766
|
}
|
|
11619
11767
|
|
|
11620
11768
|
class SequenceExpression extends NodeBase {
|
|
11769
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11770
|
+
this.expressions[this.expressions.length - 1].deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11771
|
+
}
|
|
11621
11772
|
deoptimizePath(path) {
|
|
11622
11773
|
this.expressions[this.expressions.length - 1].deoptimizePath(path);
|
|
11623
11774
|
}
|
|
11624
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11625
|
-
this.expressions[this.expressions.length - 1].deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11626
|
-
}
|
|
11627
11775
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
11628
11776
|
return this.expressions[this.expressions.length - 1].getLiteralValueAtPath(path, recursionTracker, origin);
|
|
11629
11777
|
}
|
|
@@ -11699,7 +11847,8 @@ class StaticBlock extends NodeBase {
|
|
|
11699
11847
|
}
|
|
11700
11848
|
render(code, options) {
|
|
11701
11849
|
if (this.body.length > 0) {
|
|
11702
|
-
|
|
11850
|
+
const bodyStartPos = findFirstOccurrenceOutsideComment(code.original.slice(this.start, this.end), '{') + 1;
|
|
11851
|
+
renderStatementList(this.body, code, this.start + bodyStartPos, this.end - 1, options);
|
|
11703
11852
|
}
|
|
11704
11853
|
else {
|
|
11705
11854
|
super.render(code, options);
|
|
@@ -11711,12 +11860,12 @@ class Super extends NodeBase {
|
|
|
11711
11860
|
bind() {
|
|
11712
11861
|
this.variable = this.scope.findVariable('this');
|
|
11713
11862
|
}
|
|
11863
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11864
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11865
|
+
}
|
|
11714
11866
|
deoptimizePath(path) {
|
|
11715
11867
|
this.variable.deoptimizePath(path);
|
|
11716
11868
|
}
|
|
11717
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11718
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11719
|
-
}
|
|
11720
11869
|
include() {
|
|
11721
11870
|
if (!this.included) {
|
|
11722
11871
|
this.included = true;
|
|
@@ -11891,13 +12040,7 @@ class TaggedTemplateExpression extends CallExpressionBase {
|
|
|
11891
12040
|
}
|
|
11892
12041
|
applyDeoptimizations() {
|
|
11893
12042
|
this.deoptimized = true;
|
|
11894
|
-
|
|
11895
|
-
this.tag.deoptimizeThisOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
11896
|
-
}
|
|
11897
|
-
for (const argument of this.quasi.expressions) {
|
|
11898
|
-
// This will make sure all properties of parameters behave as "unknown"
|
|
11899
|
-
argument.deoptimizePath(UNKNOWN_PATH);
|
|
11900
|
-
}
|
|
12043
|
+
this.tag.deoptimizeArgumentsOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
11901
12044
|
this.context.requestTreeshakingPass();
|
|
11902
12045
|
}
|
|
11903
12046
|
getReturnExpression(recursionTracker = SHARED_RECURSION_TRACKER) {
|
|
@@ -11926,7 +12069,7 @@ class TemplateElement extends NodeBase {
|
|
|
11926
12069
|
}
|
|
11927
12070
|
|
|
11928
12071
|
class TemplateLiteral extends NodeBase {
|
|
11929
|
-
|
|
12072
|
+
deoptimizeArgumentsOnInteractionAtPath() { }
|
|
11930
12073
|
getLiteralValueAtPath(path) {
|
|
11931
12074
|
if (path.length > 0 || this.quasis.length !== 1) {
|
|
11932
12075
|
return UnknownValue;
|
|
@@ -12070,13 +12213,13 @@ class ThisExpression extends NodeBase {
|
|
|
12070
12213
|
bind() {
|
|
12071
12214
|
this.variable = this.scope.findVariable('this');
|
|
12072
12215
|
}
|
|
12216
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12217
|
+
// We rewrite the parameter so that a ThisVariable can detect self-mutations
|
|
12218
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction.thisArg === this ? { ...interaction, thisArg: this.variable } : interaction, path, recursionTracker);
|
|
12219
|
+
}
|
|
12073
12220
|
deoptimizePath(path) {
|
|
12074
12221
|
this.variable.deoptimizePath(path);
|
|
12075
12222
|
}
|
|
12076
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12077
|
-
// We rewrite the parameter so that a ThisVariable can detect self-mutations
|
|
12078
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction.thisArg === this ? { ...interaction, thisArg: this.variable } : interaction, path, recursionTracker);
|
|
12079
|
-
}
|
|
12080
12223
|
hasEffectsOnInteractionAtPath(path, interaction, context) {
|
|
12081
12224
|
if (path.length === 0) {
|
|
12082
12225
|
return interaction.type !== INTERACTION_ACCESSED;
|
|
@@ -12644,22 +12787,22 @@ class NamespaceVariable extends Variable {
|
|
|
12644
12787
|
this.references.push(identifier);
|
|
12645
12788
|
this.name = identifier.name;
|
|
12646
12789
|
}
|
|
12647
|
-
|
|
12648
|
-
if (path.length > 1) {
|
|
12790
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12791
|
+
if (path.length > 1 || (path.length === 1 && interaction.type === INTERACTION_CALLED)) {
|
|
12649
12792
|
const key = path[0];
|
|
12650
12793
|
if (typeof key === 'string') {
|
|
12651
|
-
this.getMemberVariables()[key]?.
|
|
12794
|
+
this.getMemberVariables()[key]?.deoptimizeArgumentsOnInteractionAtPath(interaction, path.slice(1), recursionTracker);
|
|
12795
|
+
}
|
|
12796
|
+
else {
|
|
12797
|
+
deoptimizeInteraction(interaction);
|
|
12652
12798
|
}
|
|
12653
12799
|
}
|
|
12654
12800
|
}
|
|
12655
|
-
|
|
12656
|
-
if (path.length > 1
|
|
12801
|
+
deoptimizePath(path) {
|
|
12802
|
+
if (path.length > 1) {
|
|
12657
12803
|
const key = path[0];
|
|
12658
12804
|
if (typeof key === 'string') {
|
|
12659
|
-
this.getMemberVariables()[key]?.
|
|
12660
|
-
}
|
|
12661
|
-
else {
|
|
12662
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
12805
|
+
this.getMemberVariables()[key]?.deoptimizePath(path.slice(1));
|
|
12663
12806
|
}
|
|
12664
12807
|
}
|
|
12665
12808
|
}
|
|
@@ -12848,7 +12991,6 @@ function doAssertionsDiffer(assertionA, assertionB) {
|
|
|
12848
12991
|
keysA.some(key => assertionA[key] !== assertionB[key]));
|
|
12849
12992
|
}
|
|
12850
12993
|
|
|
12851
|
-
const NOOP = () => { };
|
|
12852
12994
|
let timers = new Map();
|
|
12853
12995
|
function getPersistedLabel(label, level) {
|
|
12854
12996
|
switch (level) {
|
|
@@ -12902,8 +13044,8 @@ function getTimings() {
|
|
|
12902
13044
|
}
|
|
12903
13045
|
return newTimings;
|
|
12904
13046
|
}
|
|
12905
|
-
let timeStart =
|
|
12906
|
-
let timeEnd =
|
|
13047
|
+
let timeStart = doNothing;
|
|
13048
|
+
let timeEnd = doNothing;
|
|
12907
13049
|
const TIMED_PLUGIN_HOOKS = [
|
|
12908
13050
|
'augmentChunkHash',
|
|
12909
13051
|
'buildEnd',
|
|
@@ -12959,8 +13101,8 @@ function initialiseTimers(inputOptions) {
|
|
|
12959
13101
|
inputOptions.plugins = inputOptions.plugins.map(getPluginWithTimers);
|
|
12960
13102
|
}
|
|
12961
13103
|
else {
|
|
12962
|
-
timeStart =
|
|
12963
|
-
timeEnd =
|
|
13104
|
+
timeStart = doNothing;
|
|
13105
|
+
timeEnd = doNothing;
|
|
12964
13106
|
}
|
|
12965
13107
|
}
|
|
12966
13108
|
|
|
@@ -17376,13 +17518,13 @@ function addModuleToManualChunk(alias, module, manualChunkAliasByEntry) {
|
|
|
17376
17518
|
}
|
|
17377
17519
|
|
|
17378
17520
|
// This file was generated. Do not modify manually!
|
|
17379
|
-
var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1,
|
|
17521
|
+
var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
|
|
17380
17522
|
|
|
17381
17523
|
// This file was generated. Do not modify manually!
|
|
17382
|
-
var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24,
|
|
17524
|
+
var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];
|
|
17383
17525
|
|
|
17384
17526
|
// This file was generated. Do not modify manually!
|
|
17385
|
-
var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\
|
|
17527
|
+
var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
|
|
17386
17528
|
|
|
17387
17529
|
// This file was generated. Do not modify manually!
|
|
17388
17530
|
var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
|
|
@@ -17427,6 +17569,7 @@ function isInAstralSet(code, set) {
|
|
|
17427
17569
|
pos += set[i + 1];
|
|
17428
17570
|
if (pos >= code) { return true }
|
|
17429
17571
|
}
|
|
17572
|
+
return false
|
|
17430
17573
|
}
|
|
17431
17574
|
|
|
17432
17575
|
// Test whether a given character code starts an identifier.
|
|
@@ -17812,7 +17955,7 @@ function getOptions(opts) {
|
|
|
17812
17955
|
if (options.allowReserved == null)
|
|
17813
17956
|
{ options.allowReserved = options.ecmaVersion < 5; }
|
|
17814
17957
|
|
|
17815
|
-
if (opts.allowHashBang == null)
|
|
17958
|
+
if (!opts || opts.allowHashBang == null)
|
|
17816
17959
|
{ options.allowHashBang = options.ecmaVersion >= 14; }
|
|
17817
17960
|
|
|
17818
17961
|
if (isArray(options.onToken)) {
|
|
@@ -18212,10 +18355,10 @@ pp$8.isLet = function(context) {
|
|
|
18212
18355
|
// Statement) is allowed here. If context is not empty then only a Statement
|
|
18213
18356
|
// is allowed. However, `let [` is an explicit negative lookahead for
|
|
18214
18357
|
// ExpressionStatement, so special-case it first.
|
|
18215
|
-
if (nextCh === 91 || nextCh === 92
|
|
18358
|
+
if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'
|
|
18216
18359
|
if (context) { return false }
|
|
18217
18360
|
|
|
18218
|
-
if (nextCh === 123) { return true } // '{'
|
|
18361
|
+
if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral
|
|
18219
18362
|
if (isIdentifierStart(nextCh, true)) {
|
|
18220
18363
|
var pos = next + 1;
|
|
18221
18364
|
while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }
|
|
@@ -18948,7 +19091,7 @@ pp$8.parseClassId = function(node, isStatement) {
|
|
|
18948
19091
|
};
|
|
18949
19092
|
|
|
18950
19093
|
pp$8.parseClassSuper = function(node) {
|
|
18951
|
-
node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(false) : null;
|
|
19094
|
+
node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;
|
|
18952
19095
|
};
|
|
18953
19096
|
|
|
18954
19097
|
pp$8.enterClassBody = function() {
|
|
@@ -20493,7 +20636,7 @@ pp$5.parseProperty = function(isPattern, refDestructuringErrors) {
|
|
|
20493
20636
|
if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
|
|
20494
20637
|
isAsync = true;
|
|
20495
20638
|
isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);
|
|
20496
|
-
this.parsePropertyName(prop
|
|
20639
|
+
this.parsePropertyName(prop);
|
|
20497
20640
|
} else {
|
|
20498
20641
|
isAsync = false;
|
|
20499
20642
|
}
|
|
@@ -20742,7 +20885,7 @@ pp$5.checkUnreserved = function(ref) {
|
|
|
20742
20885
|
// when parsing properties), it will also convert keywords into
|
|
20743
20886
|
// identifiers.
|
|
20744
20887
|
|
|
20745
|
-
pp$5.parseIdent = function(liberal
|
|
20888
|
+
pp$5.parseIdent = function(liberal) {
|
|
20746
20889
|
var node = this.startNode();
|
|
20747
20890
|
if (this.type === types$1.name) {
|
|
20748
20891
|
node.name = this.value;
|
|
@@ -20985,8 +21128,8 @@ pp$2.copyNode = function(node) {
|
|
|
20985
21128
|
return newNode
|
|
20986
21129
|
};
|
|
20987
21130
|
|
|
20988
|
-
// This file contains Unicode properties extracted from the ECMAScript
|
|
20989
|
-
//
|
|
21131
|
+
// This file contains Unicode properties extracted from the ECMAScript specification.
|
|
21132
|
+
// The lists are extracted like so:
|
|
20990
21133
|
// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)
|
|
20991
21134
|
|
|
20992
21135
|
// #table-binary-unicode-properties
|
|
@@ -20995,12 +21138,15 @@ var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
|
|
|
20995
21138
|
var ecma11BinaryProperties = ecma10BinaryProperties;
|
|
20996
21139
|
var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict";
|
|
20997
21140
|
var ecma13BinaryProperties = ecma12BinaryProperties;
|
|
21141
|
+
var ecma14BinaryProperties = ecma13BinaryProperties;
|
|
21142
|
+
|
|
20998
21143
|
var unicodeBinaryProperties = {
|
|
20999
21144
|
9: ecma9BinaryProperties,
|
|
21000
21145
|
10: ecma10BinaryProperties,
|
|
21001
21146
|
11: ecma11BinaryProperties,
|
|
21002
21147
|
12: ecma12BinaryProperties,
|
|
21003
|
-
13: ecma13BinaryProperties
|
|
21148
|
+
13: ecma13BinaryProperties,
|
|
21149
|
+
14: ecma14BinaryProperties
|
|
21004
21150
|
};
|
|
21005
21151
|
|
|
21006
21152
|
// #table-unicode-general-category-values
|
|
@@ -21012,12 +21158,15 @@ var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Han
|
|
|
21012
21158
|
var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
|
|
21013
21159
|
var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi";
|
|
21014
21160
|
var ecma13ScriptValues = ecma12ScriptValues + " Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith";
|
|
21161
|
+
var ecma14ScriptValues = ecma13ScriptValues + " Kawi Nag_Mundari Nagm";
|
|
21162
|
+
|
|
21015
21163
|
var unicodeScriptValues = {
|
|
21016
21164
|
9: ecma9ScriptValues,
|
|
21017
21165
|
10: ecma10ScriptValues,
|
|
21018
21166
|
11: ecma11ScriptValues,
|
|
21019
21167
|
12: ecma12ScriptValues,
|
|
21020
|
-
13: ecma13ScriptValues
|
|
21168
|
+
13: ecma13ScriptValues,
|
|
21169
|
+
14: ecma14ScriptValues
|
|
21021
21170
|
};
|
|
21022
21171
|
|
|
21023
21172
|
var data = {};
|
|
@@ -21036,7 +21185,7 @@ function buildUnicodeData(ecmaVersion) {
|
|
|
21036
21185
|
d.nonBinary.scx = d.nonBinary.Script_Extensions;
|
|
21037
21186
|
}
|
|
21038
21187
|
|
|
21039
|
-
for (var i = 0, list = [9, 10, 11, 12, 13]; i < list.length; i += 1) {
|
|
21188
|
+
for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {
|
|
21040
21189
|
var ecmaVersion = list[i];
|
|
21041
21190
|
|
|
21042
21191
|
buildUnicodeData(ecmaVersion);
|
|
@@ -21047,7 +21196,7 @@ var pp$1 = Parser.prototype;
|
|
|
21047
21196
|
var RegExpValidationState = function RegExpValidationState(parser) {
|
|
21048
21197
|
this.parser = parser;
|
|
21049
21198
|
this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : "");
|
|
21050
|
-
this.unicodeProperties = data[parser.options.ecmaVersion >=
|
|
21199
|
+
this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];
|
|
21051
21200
|
this.source = "";
|
|
21052
21201
|
this.flags = "";
|
|
21053
21202
|
this.start = 0;
|
|
@@ -22809,8 +22958,6 @@ pp.readEscapedChar = function(inTemplate) {
|
|
|
22809
22958
|
codePos,
|
|
22810
22959
|
"Invalid escape sequence in template string"
|
|
22811
22960
|
);
|
|
22812
|
-
|
|
22813
|
-
return null
|
|
22814
22961
|
}
|
|
22815
22962
|
default:
|
|
22816
22963
|
if (ch >= 48 && ch <= 55) {
|
|
@@ -22898,7 +23045,7 @@ pp.readWord = function() {
|
|
|
22898
23045
|
|
|
22899
23046
|
// Acorn is a tiny, fast JavaScript parser written in JavaScript.
|
|
22900
23047
|
|
|
22901
|
-
var version = "8.8.
|
|
23048
|
+
var version = "8.8.2";
|
|
22902
23049
|
|
|
22903
23050
|
Parser.acorn = {
|
|
22904
23051
|
Parser: Parser,
|