rollup 3.18.0 → 3.19.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/dist/bin/rollup +8 -5
- package/dist/es/rollup.js +2 -2
- package/dist/es/shared/node-entry.js +444 -298
- 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 +444 -298
- 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
package/dist/shared/rollup.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
@license
|
|
3
|
-
Rollup.js v3.
|
|
4
|
-
|
|
3
|
+
Rollup.js v3.19.0
|
|
4
|
+
Thu, 09 Mar 2023 19:00:13 GMT - commit cff3bbcb34cf35a765a8bcbbd56ba643bd1de68d
|
|
5
5
|
|
|
6
6
|
https://github.com/rollup/rollup
|
|
7
7
|
|
|
@@ -31,7 +31,7 @@ function _interopNamespaceDefault(e) {
|
|
|
31
31
|
|
|
32
32
|
const tty__namespace = /*#__PURE__*/_interopNamespaceDefault(tty);
|
|
33
33
|
|
|
34
|
-
var version$1 = "3.
|
|
34
|
+
var version$1 = "3.19.0";
|
|
35
35
|
|
|
36
36
|
function ensureArray$1(items) {
|
|
37
37
|
if (Array.isArray(items)) {
|
|
@@ -1818,6 +1818,7 @@ class MagicString {
|
|
|
1818
1818
|
sourcemapLocations: { writable: true, value: new BitSet() },
|
|
1819
1819
|
storedNames: { writable: true, value: {} },
|
|
1820
1820
|
indentStr: { writable: true, value: undefined },
|
|
1821
|
+
ignoreList: { writable: true, value: options.ignoreList },
|
|
1821
1822
|
});
|
|
1822
1823
|
|
|
1823
1824
|
this.byStart[0] = chunk;
|
|
@@ -1935,11 +1936,12 @@ class MagicString {
|
|
|
1935
1936
|
});
|
|
1936
1937
|
|
|
1937
1938
|
return {
|
|
1938
|
-
file: options.file ? options.file.split(/[/\\]/).pop() :
|
|
1939
|
-
sources: [options.source ? getRelativePath(options.file || '', options.source) :
|
|
1940
|
-
sourcesContent: options.includeContent ? [this.original] :
|
|
1939
|
+
file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
|
|
1940
|
+
sources: [options.source ? getRelativePath(options.file || '', options.source) : (options.file || '')],
|
|
1941
|
+
sourcesContent: options.includeContent ? [this.original] : undefined,
|
|
1941
1942
|
names,
|
|
1942
1943
|
mappings: mappings.raw,
|
|
1944
|
+
x_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined
|
|
1943
1945
|
};
|
|
1944
1946
|
}
|
|
1945
1947
|
|
|
@@ -2609,7 +2611,7 @@ let Bundle$1 = class Bundle {
|
|
|
2609
2611
|
);
|
|
2610
2612
|
}
|
|
2611
2613
|
|
|
2612
|
-
['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {
|
|
2614
|
+
['filename', 'ignoreList', 'indentExclusionRanges', 'separator'].forEach((option) => {
|
|
2613
2615
|
if (!hasOwnProp.call(source, option)) source[option] = source.content[option];
|
|
2614
2616
|
});
|
|
2615
2617
|
|
|
@@ -2662,6 +2664,7 @@ let Bundle$1 = class Bundle {
|
|
|
2662
2664
|
|
|
2663
2665
|
generateDecodedMap(options = {}) {
|
|
2664
2666
|
const names = [];
|
|
2667
|
+
let x_google_ignoreList = undefined;
|
|
2665
2668
|
this.sources.forEach((source) => {
|
|
2666
2669
|
Object.keys(source.content.storedNames).forEach((name) => {
|
|
2667
2670
|
if (!~names.indexOf(name)) names.push(name);
|
|
@@ -2719,10 +2722,17 @@ let Bundle$1 = class Bundle {
|
|
|
2719
2722
|
if (magicString.outro) {
|
|
2720
2723
|
mappings.advance(magicString.outro);
|
|
2721
2724
|
}
|
|
2725
|
+
|
|
2726
|
+
if (source.ignoreList && sourceIndex !== -1) {
|
|
2727
|
+
if (x_google_ignoreList === undefined) {
|
|
2728
|
+
x_google_ignoreList = [];
|
|
2729
|
+
}
|
|
2730
|
+
x_google_ignoreList.push(sourceIndex);
|
|
2731
|
+
}
|
|
2722
2732
|
});
|
|
2723
2733
|
|
|
2724
2734
|
return {
|
|
2725
|
-
file: options.file ? options.file.split(/[/\\]/).pop() :
|
|
2735
|
+
file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
|
|
2726
2736
|
sources: this.uniqueSources.map((source) => {
|
|
2727
2737
|
return options.file ? getRelativePath(options.file, source.filename) : source.filename;
|
|
2728
2738
|
}),
|
|
@@ -2731,6 +2741,7 @@ let Bundle$1 = class Bundle {
|
|
|
2731
2741
|
}),
|
|
2732
2742
|
names,
|
|
2733
2743
|
mappings: mappings.raw,
|
|
2744
|
+
x_google_ignoreList,
|
|
2734
2745
|
};
|
|
2735
2746
|
}
|
|
2736
2747
|
|
|
@@ -3009,14 +3020,14 @@ class ExpressionEntity {
|
|
|
3009
3020
|
constructor() {
|
|
3010
3021
|
this.included = false;
|
|
3011
3022
|
}
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
3023
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, _path, _recursionTracker) {
|
|
3024
|
+
deoptimizeInteraction(interaction);
|
|
3015
3025
|
}
|
|
3026
|
+
deoptimizePath(_path) { }
|
|
3016
3027
|
/**
|
|
3017
|
-
* If possible it returns a stringifyable literal value for this node that
|
|
3018
|
-
* for inlining or comparing values.
|
|
3019
|
-
*
|
|
3028
|
+
* If possible it returns a stringifyable literal value for this node that
|
|
3029
|
+
* can be used for inlining or comparing values. Otherwise, it should return
|
|
3030
|
+
* UnknownValue.
|
|
3020
3031
|
*/
|
|
3021
3032
|
getLiteralValueAtPath(_path, _recursionTracker, _origin) {
|
|
3022
3033
|
return UnknownValue;
|
|
@@ -3045,11 +3056,20 @@ const UNKNOWN_RETURN_EXPRESSION = [
|
|
|
3045
3056
|
UNKNOWN_EXPRESSION,
|
|
3046
3057
|
false
|
|
3047
3058
|
];
|
|
3059
|
+
const deoptimizeInteraction = (interaction) => {
|
|
3060
|
+
interaction.thisArg?.deoptimizePath(UNKNOWN_PATH);
|
|
3061
|
+
if (interaction.args) {
|
|
3062
|
+
for (const argument of interaction.args) {
|
|
3063
|
+
argument.deoptimizePath(UNKNOWN_PATH);
|
|
3064
|
+
}
|
|
3065
|
+
}
|
|
3066
|
+
};
|
|
3048
3067
|
|
|
3049
3068
|
const INTERACTION_ACCESSED = 0;
|
|
3050
3069
|
const INTERACTION_ASSIGNED = 1;
|
|
3051
3070
|
const INTERACTION_CALLED = 2;
|
|
3052
3071
|
const NODE_INTERACTION_UNKNOWN_ACCESS = {
|
|
3072
|
+
args: null,
|
|
3053
3073
|
thisArg: null,
|
|
3054
3074
|
type: INTERACTION_ACCESSED
|
|
3055
3075
|
};
|
|
@@ -6361,9 +6381,9 @@ class NodeBase extends ExpressionEntity {
|
|
|
6361
6381
|
}
|
|
6362
6382
|
|
|
6363
6383
|
class SpreadElement extends NodeBase {
|
|
6364
|
-
|
|
6384
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6365
6385
|
if (path.length > 0) {
|
|
6366
|
-
this.argument.
|
|
6386
|
+
this.argument.deoptimizeArgumentsOnInteractionAtPath(interaction, [UnknownKey, ...path], recursionTracker);
|
|
6367
6387
|
}
|
|
6368
6388
|
}
|
|
6369
6389
|
hasEffects(context) {
|
|
@@ -6390,9 +6410,9 @@ class Method extends ExpressionEntity {
|
|
|
6390
6410
|
super();
|
|
6391
6411
|
this.description = description;
|
|
6392
6412
|
}
|
|
6393
|
-
|
|
6413
|
+
deoptimizeArgumentsOnInteractionAtPath({ type, thisArg }, path) {
|
|
6394
6414
|
if (type === INTERACTION_CALLED && path.length === 0 && this.description.mutatesSelfAsArray) {
|
|
6395
|
-
thisArg
|
|
6415
|
+
thisArg?.deoptimizePath(UNKNOWN_INTEGER_PATH);
|
|
6396
6416
|
}
|
|
6397
6417
|
}
|
|
6398
6418
|
getReturnExpressionWhenCalledAtPath(path, { thisArg }) {
|
|
@@ -6470,6 +6490,7 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6470
6490
|
super();
|
|
6471
6491
|
this.prototypeExpression = prototypeExpression;
|
|
6472
6492
|
this.immutable = immutable;
|
|
6493
|
+
this.additionalExpressionsToBeDeoptimized = new Set();
|
|
6473
6494
|
this.allProperties = [];
|
|
6474
6495
|
this.deoptimizedPaths = Object.create(null);
|
|
6475
6496
|
this.expressionsToBeDeoptimizedByKey = Object.create(null);
|
|
@@ -6480,7 +6501,6 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6480
6501
|
this.propertiesAndGettersByKey = Object.create(null);
|
|
6481
6502
|
this.propertiesAndSettersByKey = Object.create(null);
|
|
6482
6503
|
this.settersByKey = Object.create(null);
|
|
6483
|
-
this.thisParametersToBeDeoptimized = new Set();
|
|
6484
6504
|
this.unknownIntegerProps = [];
|
|
6485
6505
|
this.unmatchableGetters = [];
|
|
6486
6506
|
this.unmatchablePropertiesAndGetters = [];
|
|
@@ -6518,6 +6538,85 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6518
6538
|
this.prototypeExpression?.deoptimizePath([UnknownKey, UnknownKey]);
|
|
6519
6539
|
this.deoptimizeCachedEntities();
|
|
6520
6540
|
}
|
|
6541
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6542
|
+
const [key, ...subPath] = path;
|
|
6543
|
+
const { args, thisArg, type } = interaction;
|
|
6544
|
+
if (this.hasLostTrack ||
|
|
6545
|
+
// single paths that are deoptimized will not become getters or setters
|
|
6546
|
+
((type === INTERACTION_CALLED || path.length > 1) &&
|
|
6547
|
+
(this.hasUnknownDeoptimizedProperty ||
|
|
6548
|
+
(typeof key === 'string' && this.deoptimizedPaths[key])))) {
|
|
6549
|
+
thisArg?.deoptimizePath(UNKNOWN_PATH);
|
|
6550
|
+
if (args) {
|
|
6551
|
+
for (const argument of args) {
|
|
6552
|
+
argument.deoptimizePath(UNKNOWN_PATH);
|
|
6553
|
+
}
|
|
6554
|
+
}
|
|
6555
|
+
return;
|
|
6556
|
+
}
|
|
6557
|
+
const [propertiesForExactMatchByKey, relevantPropertiesByKey, relevantUnmatchableProperties] = type === INTERACTION_CALLED || path.length > 1
|
|
6558
|
+
? [
|
|
6559
|
+
this.propertiesAndGettersByKey,
|
|
6560
|
+
this.propertiesAndGettersByKey,
|
|
6561
|
+
this.unmatchablePropertiesAndGetters
|
|
6562
|
+
]
|
|
6563
|
+
: type === INTERACTION_ACCESSED
|
|
6564
|
+
? [this.propertiesAndGettersByKey, this.gettersByKey, this.unmatchableGetters]
|
|
6565
|
+
: [this.propertiesAndSettersByKey, this.settersByKey, this.unmatchableSetters];
|
|
6566
|
+
if (typeof key === 'string') {
|
|
6567
|
+
if (propertiesForExactMatchByKey[key]) {
|
|
6568
|
+
const properties = relevantPropertiesByKey[key];
|
|
6569
|
+
if (properties) {
|
|
6570
|
+
for (const property of properties) {
|
|
6571
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6572
|
+
}
|
|
6573
|
+
}
|
|
6574
|
+
if (!this.immutable) {
|
|
6575
|
+
if (thisArg) {
|
|
6576
|
+
this.additionalExpressionsToBeDeoptimized.add(thisArg);
|
|
6577
|
+
}
|
|
6578
|
+
if (args) {
|
|
6579
|
+
for (const argument of args) {
|
|
6580
|
+
this.additionalExpressionsToBeDeoptimized.add(argument);
|
|
6581
|
+
}
|
|
6582
|
+
}
|
|
6583
|
+
}
|
|
6584
|
+
return;
|
|
6585
|
+
}
|
|
6586
|
+
for (const property of relevantUnmatchableProperties) {
|
|
6587
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6588
|
+
}
|
|
6589
|
+
if (INTEGER_REG_EXP.test(key)) {
|
|
6590
|
+
for (const property of this.unknownIntegerProps) {
|
|
6591
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6592
|
+
}
|
|
6593
|
+
}
|
|
6594
|
+
}
|
|
6595
|
+
else {
|
|
6596
|
+
for (const properties of [
|
|
6597
|
+
...Object.values(relevantPropertiesByKey),
|
|
6598
|
+
relevantUnmatchableProperties
|
|
6599
|
+
]) {
|
|
6600
|
+
for (const property of properties) {
|
|
6601
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6602
|
+
}
|
|
6603
|
+
}
|
|
6604
|
+
for (const property of this.unknownIntegerProps) {
|
|
6605
|
+
property.deoptimizeArgumentsOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6606
|
+
}
|
|
6607
|
+
}
|
|
6608
|
+
if (!this.immutable) {
|
|
6609
|
+
if (thisArg) {
|
|
6610
|
+
this.additionalExpressionsToBeDeoptimized.add(thisArg);
|
|
6611
|
+
}
|
|
6612
|
+
if (args) {
|
|
6613
|
+
for (const argument of args) {
|
|
6614
|
+
this.additionalExpressionsToBeDeoptimized.add(argument);
|
|
6615
|
+
}
|
|
6616
|
+
}
|
|
6617
|
+
}
|
|
6618
|
+
this.prototypeExpression?.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
6619
|
+
}
|
|
6521
6620
|
deoptimizeIntegerProperties() {
|
|
6522
6621
|
if (this.hasLostTrack ||
|
|
6523
6622
|
this.hasUnknownDeoptimizedProperty ||
|
|
@@ -6570,65 +6669,6 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6570
6669
|
}
|
|
6571
6670
|
this.prototypeExpression?.deoptimizePath(path.length === 1 ? [...path, UnknownKey] : path);
|
|
6572
6671
|
}
|
|
6573
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6574
|
-
const [key, ...subPath] = path;
|
|
6575
|
-
if (this.hasLostTrack ||
|
|
6576
|
-
// single paths that are deoptimized will not become getters or setters
|
|
6577
|
-
((interaction.type === INTERACTION_CALLED || path.length > 1) &&
|
|
6578
|
-
(this.hasUnknownDeoptimizedProperty ||
|
|
6579
|
-
(typeof key === 'string' && this.deoptimizedPaths[key])))) {
|
|
6580
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
6581
|
-
return;
|
|
6582
|
-
}
|
|
6583
|
-
const [propertiesForExactMatchByKey, relevantPropertiesByKey, relevantUnmatchableProperties] = interaction.type === INTERACTION_CALLED || path.length > 1
|
|
6584
|
-
? [
|
|
6585
|
-
this.propertiesAndGettersByKey,
|
|
6586
|
-
this.propertiesAndGettersByKey,
|
|
6587
|
-
this.unmatchablePropertiesAndGetters
|
|
6588
|
-
]
|
|
6589
|
-
: interaction.type === INTERACTION_ACCESSED
|
|
6590
|
-
? [this.propertiesAndGettersByKey, this.gettersByKey, this.unmatchableGetters]
|
|
6591
|
-
: [this.propertiesAndSettersByKey, this.settersByKey, this.unmatchableSetters];
|
|
6592
|
-
if (typeof key === 'string') {
|
|
6593
|
-
if (propertiesForExactMatchByKey[key]) {
|
|
6594
|
-
const properties = relevantPropertiesByKey[key];
|
|
6595
|
-
if (properties) {
|
|
6596
|
-
for (const property of properties) {
|
|
6597
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6598
|
-
}
|
|
6599
|
-
}
|
|
6600
|
-
if (!this.immutable) {
|
|
6601
|
-
this.thisParametersToBeDeoptimized.add(interaction.thisArg);
|
|
6602
|
-
}
|
|
6603
|
-
return;
|
|
6604
|
-
}
|
|
6605
|
-
for (const property of relevantUnmatchableProperties) {
|
|
6606
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6607
|
-
}
|
|
6608
|
-
if (INTEGER_REG_EXP.test(key)) {
|
|
6609
|
-
for (const property of this.unknownIntegerProps) {
|
|
6610
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6611
|
-
}
|
|
6612
|
-
}
|
|
6613
|
-
}
|
|
6614
|
-
else {
|
|
6615
|
-
for (const properties of [
|
|
6616
|
-
...Object.values(relevantPropertiesByKey),
|
|
6617
|
-
relevantUnmatchableProperties
|
|
6618
|
-
]) {
|
|
6619
|
-
for (const property of properties) {
|
|
6620
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6621
|
-
}
|
|
6622
|
-
}
|
|
6623
|
-
for (const property of this.unknownIntegerProps) {
|
|
6624
|
-
property.deoptimizeThisOnInteractionAtPath(interaction, subPath, recursionTracker);
|
|
6625
|
-
}
|
|
6626
|
-
}
|
|
6627
|
-
if (!this.immutable) {
|
|
6628
|
-
this.thisParametersToBeDeoptimized.add(interaction.thisArg);
|
|
6629
|
-
}
|
|
6630
|
-
this.prototypeExpression?.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
6631
|
-
}
|
|
6632
6672
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
6633
6673
|
if (path.length === 0) {
|
|
6634
6674
|
return UnknownTruthyValue;
|
|
@@ -6759,7 +6799,7 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6759
6799
|
expression.deoptimizeCache();
|
|
6760
6800
|
}
|
|
6761
6801
|
}
|
|
6762
|
-
for (const expression of this.
|
|
6802
|
+
for (const expression of this.additionalExpressionsToBeDeoptimized) {
|
|
6763
6803
|
expression.deoptimizePath(UNKNOWN_PATH);
|
|
6764
6804
|
}
|
|
6765
6805
|
}
|
|
@@ -6771,7 +6811,7 @@ class ObjectEntity extends ExpressionEntity {
|
|
|
6771
6811
|
}
|
|
6772
6812
|
}
|
|
6773
6813
|
}
|
|
6774
|
-
for (const expression of this.
|
|
6814
|
+
for (const expression of this.additionalExpressionsToBeDeoptimized) {
|
|
6775
6815
|
expression.deoptimizePath(UNKNOWN_INTEGER_PATH);
|
|
6776
6816
|
}
|
|
6777
6817
|
}
|
|
@@ -6814,9 +6854,9 @@ const isInteger = (property) => typeof property === 'string' && /^\d+$/.test(pro
|
|
|
6814
6854
|
// properties as we do not expect new builtin properties to be numbers, this
|
|
6815
6855
|
// will improve tree-shaking for out-of-bounds array properties
|
|
6816
6856
|
const OBJECT_PROTOTYPE_FALLBACK = new (class ObjectPrototypeFallbackExpression extends ExpressionEntity {
|
|
6817
|
-
|
|
6818
|
-
if (type === INTERACTION_CALLED && path.length === 1 && !isInteger(path[0])) {
|
|
6819
|
-
|
|
6857
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path) {
|
|
6858
|
+
if (interaction.type === INTERACTION_CALLED && path.length === 1 && !isInteger(path[0])) {
|
|
6859
|
+
deoptimizeInteraction(interaction);
|
|
6820
6860
|
}
|
|
6821
6861
|
}
|
|
6822
6862
|
getLiteralValueAtPath(path) {
|
|
@@ -6975,12 +7015,12 @@ class ArrayExpression extends NodeBase {
|
|
|
6975
7015
|
super(...arguments);
|
|
6976
7016
|
this.objectEntity = null;
|
|
6977
7017
|
}
|
|
7018
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
7019
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
7020
|
+
}
|
|
6978
7021
|
deoptimizePath(path) {
|
|
6979
7022
|
this.getObjectEntity().deoptimizePath(path);
|
|
6980
7023
|
}
|
|
6981
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
6982
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
6983
|
-
}
|
|
6984
7024
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
6985
7025
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
6986
7026
|
}
|
|
@@ -7068,29 +7108,33 @@ class ArrayPattern extends NodeBase {
|
|
|
7068
7108
|
class LocalVariable extends Variable {
|
|
7069
7109
|
constructor(name, declarator, init, context) {
|
|
7070
7110
|
super(name);
|
|
7111
|
+
this.init = init;
|
|
7071
7112
|
this.calledFromTryStatement = false;
|
|
7072
7113
|
this.additionalInitializers = null;
|
|
7073
7114
|
this.expressionsToBeDeoptimized = [];
|
|
7074
7115
|
this.declarations = declarator ? [declarator] : [];
|
|
7075
|
-
this.init = init;
|
|
7076
7116
|
this.deoptimizationTracker = context.deoptimizationTracker;
|
|
7077
7117
|
this.module = context.module;
|
|
7078
7118
|
}
|
|
7079
7119
|
addDeclaration(identifier, init) {
|
|
7080
7120
|
this.declarations.push(identifier);
|
|
7081
|
-
|
|
7082
|
-
if (init !== null) {
|
|
7083
|
-
additionalInitializers.push(init);
|
|
7084
|
-
}
|
|
7121
|
+
this.markInitializersForDeoptimization().push(init);
|
|
7085
7122
|
}
|
|
7086
7123
|
consolidateInitializers() {
|
|
7087
|
-
if (this.additionalInitializers
|
|
7124
|
+
if (this.additionalInitializers) {
|
|
7088
7125
|
for (const initializer of this.additionalInitializers) {
|
|
7089
7126
|
initializer.deoptimizePath(UNKNOWN_PATH);
|
|
7090
7127
|
}
|
|
7091
7128
|
this.additionalInitializers = null;
|
|
7092
7129
|
}
|
|
7093
7130
|
}
|
|
7131
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
7132
|
+
if (this.isReassigned) {
|
|
7133
|
+
deoptimizeInteraction(interaction);
|
|
7134
|
+
return;
|
|
7135
|
+
}
|
|
7136
|
+
recursionTracker.withTrackedEntityAtPath(path, this.init, () => this.init.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker), undefined);
|
|
7137
|
+
}
|
|
7094
7138
|
deoptimizePath(path) {
|
|
7095
7139
|
if (this.isReassigned ||
|
|
7096
7140
|
this.deoptimizationTracker.trackEntityAtPathAndGetIfTracked(path, this)) {
|
|
@@ -7104,21 +7148,15 @@ class LocalVariable extends Variable {
|
|
|
7104
7148
|
for (const expression of expressionsToBeDeoptimized) {
|
|
7105
7149
|
expression.deoptimizeCache();
|
|
7106
7150
|
}
|
|
7107
|
-
this.init
|
|
7151
|
+
this.init.deoptimizePath(UNKNOWN_PATH);
|
|
7108
7152
|
}
|
|
7109
7153
|
}
|
|
7110
7154
|
else {
|
|
7111
|
-
this.init
|
|
7155
|
+
this.init.deoptimizePath(path);
|
|
7112
7156
|
}
|
|
7113
7157
|
}
|
|
7114
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
7115
|
-
if (this.isReassigned || !this.init) {
|
|
7116
|
-
return interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
7117
|
-
}
|
|
7118
|
-
recursionTracker.withTrackedEntityAtPath(path, this.init, () => this.init.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker), undefined);
|
|
7119
|
-
}
|
|
7120
7158
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
7121
|
-
if (this.isReassigned
|
|
7159
|
+
if (this.isReassigned) {
|
|
7122
7160
|
return UnknownValue;
|
|
7123
7161
|
}
|
|
7124
7162
|
return recursionTracker.withTrackedEntityAtPath(path, this.init, () => {
|
|
@@ -7127,7 +7165,7 @@ class LocalVariable extends Variable {
|
|
|
7127
7165
|
}, UnknownValue);
|
|
7128
7166
|
}
|
|
7129
7167
|
getReturnExpressionWhenCalledAtPath(path, interaction, recursionTracker, origin) {
|
|
7130
|
-
if (this.isReassigned
|
|
7168
|
+
if (this.isReassigned) {
|
|
7131
7169
|
return UNKNOWN_RETURN_EXPRESSION;
|
|
7132
7170
|
}
|
|
7133
7171
|
return recursionTracker.withTrackedEntityAtPath(path, this.init, () => {
|
|
@@ -7140,8 +7178,7 @@ class LocalVariable extends Variable {
|
|
|
7140
7178
|
case INTERACTION_ACCESSED: {
|
|
7141
7179
|
if (this.isReassigned)
|
|
7142
7180
|
return true;
|
|
7143
|
-
return
|
|
7144
|
-
!context.accessed.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
7181
|
+
return (!context.accessed.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
7145
7182
|
this.init.hasEffectsOnInteractionAtPath(path, interaction, context));
|
|
7146
7183
|
}
|
|
7147
7184
|
case INTERACTION_ASSIGNED: {
|
|
@@ -7151,15 +7188,13 @@ class LocalVariable extends Variable {
|
|
|
7151
7188
|
return false;
|
|
7152
7189
|
if (this.isReassigned)
|
|
7153
7190
|
return true;
|
|
7154
|
-
return
|
|
7155
|
-
!context.assigned.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
7191
|
+
return (!context.assigned.trackEntityAtPathAndGetIfTracked(path, this) &&
|
|
7156
7192
|
this.init.hasEffectsOnInteractionAtPath(path, interaction, context));
|
|
7157
7193
|
}
|
|
7158
7194
|
case INTERACTION_CALLED: {
|
|
7159
7195
|
if (this.isReassigned)
|
|
7160
7196
|
return true;
|
|
7161
|
-
return
|
|
7162
|
-
!(interaction.withNew ? context.instantiated : context.called).trackEntityAtPathAndGetIfTracked(path, interaction.args, this) &&
|
|
7197
|
+
return (!(interaction.withNew ? context.instantiated : context.called).trackEntityAtPathAndGetIfTracked(path, interaction.args, this) &&
|
|
7163
7198
|
this.init.hasEffectsOnInteractionAtPath(path, interaction, context));
|
|
7164
7199
|
}
|
|
7165
7200
|
}
|
|
@@ -7184,12 +7219,12 @@ class LocalVariable extends Variable {
|
|
|
7184
7219
|
}
|
|
7185
7220
|
}
|
|
7186
7221
|
includeCallArguments(context, parameters) {
|
|
7187
|
-
if (this.isReassigned ||
|
|
7222
|
+
if (this.isReassigned || context.includedCallArguments.has(this.init)) {
|
|
7188
7223
|
for (const argument of parameters) {
|
|
7189
7224
|
argument.include(context, false);
|
|
7190
7225
|
}
|
|
7191
7226
|
}
|
|
7192
|
-
else
|
|
7227
|
+
else {
|
|
7193
7228
|
context.includedCallArguments.add(this.init);
|
|
7194
7229
|
this.init.includeCallArguments(context, parameters);
|
|
7195
7230
|
context.includedCallArguments.delete(this.init);
|
|
@@ -7200,12 +7235,91 @@ class LocalVariable extends Variable {
|
|
|
7200
7235
|
}
|
|
7201
7236
|
markInitializersForDeoptimization() {
|
|
7202
7237
|
if (this.additionalInitializers === null) {
|
|
7203
|
-
this.additionalInitializers =
|
|
7238
|
+
this.additionalInitializers = [this.init];
|
|
7204
7239
|
this.init = UNKNOWN_EXPRESSION;
|
|
7205
7240
|
this.isReassigned = true;
|
|
7206
7241
|
}
|
|
7207
7242
|
return this.additionalInitializers;
|
|
7208
7243
|
}
|
|
7244
|
+
mergeDeclarations(variable) {
|
|
7245
|
+
const { declarations } = this;
|
|
7246
|
+
for (const declaration of variable.declarations) {
|
|
7247
|
+
declarations.push(declaration);
|
|
7248
|
+
}
|
|
7249
|
+
const additionalInitializers = this.markInitializersForDeoptimization();
|
|
7250
|
+
additionalInitializers.push(variable.init);
|
|
7251
|
+
if (variable.additionalInitializers) {
|
|
7252
|
+
for (const initializer of variable.additionalInitializers) {
|
|
7253
|
+
additionalInitializers.push(initializer);
|
|
7254
|
+
}
|
|
7255
|
+
}
|
|
7256
|
+
}
|
|
7257
|
+
}
|
|
7258
|
+
|
|
7259
|
+
class ParameterVariable extends LocalVariable {
|
|
7260
|
+
constructor(name, declarator, context) {
|
|
7261
|
+
super(name, declarator, UNKNOWN_EXPRESSION, context);
|
|
7262
|
+
this.deoptimizationInteractions = [];
|
|
7263
|
+
this.deoptimizations = new DiscriminatedPathTracker();
|
|
7264
|
+
this.deoptimizedFields = new Set();
|
|
7265
|
+
this.entitiesToBeDeoptimized = new Set();
|
|
7266
|
+
}
|
|
7267
|
+
addEntityToBeDeoptimized(entity) {
|
|
7268
|
+
if (this.deoptimizedFields.has(UnknownKey)) {
|
|
7269
|
+
entity.deoptimizePath(UNKNOWN_PATH);
|
|
7270
|
+
}
|
|
7271
|
+
else {
|
|
7272
|
+
for (const field of this.deoptimizedFields) {
|
|
7273
|
+
entity.deoptimizePath([field]);
|
|
7274
|
+
}
|
|
7275
|
+
}
|
|
7276
|
+
for (const { interaction, path } of this.deoptimizationInteractions) {
|
|
7277
|
+
entity.deoptimizeArgumentsOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
7278
|
+
}
|
|
7279
|
+
this.entitiesToBeDeoptimized.add(entity);
|
|
7280
|
+
}
|
|
7281
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path) {
|
|
7282
|
+
// For performance reasons, we fully deoptimize all deeper interactions
|
|
7283
|
+
if (path.length >= 2) {
|
|
7284
|
+
deoptimizeInteraction(interaction);
|
|
7285
|
+
return;
|
|
7286
|
+
}
|
|
7287
|
+
if (interaction.thisArg &&
|
|
7288
|
+
!this.deoptimizations.trackEntityAtPathAndGetIfTracked(path, interaction.args, interaction.thisArg)) {
|
|
7289
|
+
for (const entity of this.entitiesToBeDeoptimized) {
|
|
7290
|
+
entity.deoptimizeArgumentsOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
7291
|
+
}
|
|
7292
|
+
this.deoptimizationInteractions.push({
|
|
7293
|
+
interaction,
|
|
7294
|
+
path
|
|
7295
|
+
});
|
|
7296
|
+
}
|
|
7297
|
+
}
|
|
7298
|
+
deoptimizePath(path) {
|
|
7299
|
+
if (path.length === 0 || this.deoptimizedFields.has(UnknownKey)) {
|
|
7300
|
+
return;
|
|
7301
|
+
}
|
|
7302
|
+
const key = path[0];
|
|
7303
|
+
if (this.deoptimizedFields.has(key)) {
|
|
7304
|
+
return;
|
|
7305
|
+
}
|
|
7306
|
+
this.deoptimizedFields.add(key);
|
|
7307
|
+
for (const entity of this.entitiesToBeDeoptimized) {
|
|
7308
|
+
entity.deoptimizePath(path);
|
|
7309
|
+
}
|
|
7310
|
+
}
|
|
7311
|
+
getReturnExpressionWhenCalledAtPath(path) {
|
|
7312
|
+
// We deoptimize everything that is called as that will trivially deoptimize
|
|
7313
|
+
// the corresponding return expressions as well and avoid badly performing
|
|
7314
|
+
// and complicated alternatives
|
|
7315
|
+
if (path.length === 0) {
|
|
7316
|
+
this.deoptimizePath(UNKNOWN_PATH);
|
|
7317
|
+
}
|
|
7318
|
+
else if (!this.deoptimizedFields.has(path[0])) {
|
|
7319
|
+
this.deoptimizePath(path.slice(0, 1));
|
|
7320
|
+
}
|
|
7321
|
+
return UNKNOWN_RETURN_EXPRESSION;
|
|
7322
|
+
}
|
|
7209
7323
|
}
|
|
7210
7324
|
|
|
7211
7325
|
const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$';
|
|
@@ -7347,16 +7461,15 @@ class ParameterScope extends ChildScope {
|
|
|
7347
7461
|
}
|
|
7348
7462
|
/**
|
|
7349
7463
|
* Adds a parameter to this scope. Parameters must be added in the correct
|
|
7350
|
-
* order, e.
|
|
7464
|
+
* order, i.e. from left to right.
|
|
7351
7465
|
*/
|
|
7352
7466
|
addParameterDeclaration(identifier) {
|
|
7353
|
-
const name = identifier
|
|
7354
|
-
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
|
|
7358
|
-
|
|
7359
|
-
variable = new LocalVariable(name, identifier, UNKNOWN_EXPRESSION, this.context);
|
|
7467
|
+
const { name } = identifier;
|
|
7468
|
+
const variable = new ParameterVariable(name, identifier, this.context);
|
|
7469
|
+
const localVariable = this.hoistedBodyVarScope.variables.get(name);
|
|
7470
|
+
if (localVariable) {
|
|
7471
|
+
this.hoistedBodyVarScope.variables.set(name, variable);
|
|
7472
|
+
variable.mergeDeclarations(localVariable);
|
|
7360
7473
|
}
|
|
7361
7474
|
this.variables.set(name, variable);
|
|
7362
7475
|
return variable;
|
|
@@ -7502,16 +7615,20 @@ const getPureFunctions = ({ treeshake }) => {
|
|
|
7502
7615
|
return pureFunctions;
|
|
7503
7616
|
};
|
|
7504
7617
|
|
|
7618
|
+
const doNothing = () => { };
|
|
7619
|
+
|
|
7505
7620
|
/* eslint sort-keys: "off" */
|
|
7506
7621
|
const ValueProperties = Symbol('Value Properties');
|
|
7507
7622
|
const getTruthyLiteralValue = () => UnknownTruthyValue;
|
|
7508
7623
|
const returnFalse = () => false;
|
|
7509
7624
|
const returnTrue = () => true;
|
|
7510
7625
|
const PURE = {
|
|
7626
|
+
deoptimizeArgumentsOnCall: doNothing,
|
|
7511
7627
|
getLiteralValue: getTruthyLiteralValue,
|
|
7512
7628
|
hasEffectsWhenCalled: returnFalse
|
|
7513
7629
|
};
|
|
7514
7630
|
const IMPURE = {
|
|
7631
|
+
deoptimizeArgumentsOnCall: doNothing,
|
|
7515
7632
|
getLiteralValue: getTruthyLiteralValue,
|
|
7516
7633
|
hasEffectsWhenCalled: returnTrue
|
|
7517
7634
|
};
|
|
@@ -7530,6 +7647,9 @@ const PF = {
|
|
|
7530
7647
|
const MUTATES_ARG_WITHOUT_ACCESSOR = {
|
|
7531
7648
|
__proto__: null,
|
|
7532
7649
|
[ValueProperties]: {
|
|
7650
|
+
deoptimizeArgumentsOnCall({ args: [firstArgument] }) {
|
|
7651
|
+
firstArgument?.deoptimizePath(UNKNOWN_PATH);
|
|
7652
|
+
},
|
|
7533
7653
|
getLiteralValue: getTruthyLiteralValue,
|
|
7534
7654
|
hasEffectsWhenCalled({ args }, context) {
|
|
7535
7655
|
return (args.length === 0 ||
|
|
@@ -7734,6 +7854,7 @@ const knownGlobals = {
|
|
|
7734
7854
|
toStringTag: {
|
|
7735
7855
|
__proto__: null,
|
|
7736
7856
|
[ValueProperties]: {
|
|
7857
|
+
deoptimizeArgumentsOnCall: doNothing,
|
|
7737
7858
|
getLiteralValue() {
|
|
7738
7859
|
return SymbolToStringTag;
|
|
7739
7860
|
},
|
|
@@ -7759,7 +7880,30 @@ const knownGlobals = {
|
|
|
7759
7880
|
// Additional globals shared by Node and Browser that are not strictly part of the language
|
|
7760
7881
|
clearInterval: C,
|
|
7761
7882
|
clearTimeout: C,
|
|
7762
|
-
console:
|
|
7883
|
+
console: {
|
|
7884
|
+
__proto__: null,
|
|
7885
|
+
[ValueProperties]: IMPURE,
|
|
7886
|
+
assert: C,
|
|
7887
|
+
clear: C,
|
|
7888
|
+
count: C,
|
|
7889
|
+
countReset: C,
|
|
7890
|
+
debug: C,
|
|
7891
|
+
dir: C,
|
|
7892
|
+
dirxml: C,
|
|
7893
|
+
error: C,
|
|
7894
|
+
exception: C,
|
|
7895
|
+
group: C,
|
|
7896
|
+
groupCollapsed: C,
|
|
7897
|
+
groupEnd: C,
|
|
7898
|
+
info: C,
|
|
7899
|
+
log: C,
|
|
7900
|
+
table: C,
|
|
7901
|
+
time: C,
|
|
7902
|
+
timeEnd: C,
|
|
7903
|
+
timeLog: C,
|
|
7904
|
+
trace: C,
|
|
7905
|
+
warn: C
|
|
7906
|
+
},
|
|
7763
7907
|
Intl: {
|
|
7764
7908
|
__proto__: null,
|
|
7765
7909
|
[ValueProperties]: IMPURE,
|
|
@@ -8384,6 +8528,29 @@ class GlobalVariable extends Variable {
|
|
|
8384
8528
|
// been reassigned
|
|
8385
8529
|
this.isReassigned = true;
|
|
8386
8530
|
}
|
|
8531
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8532
|
+
switch (interaction.type) {
|
|
8533
|
+
// While there is no point in testing these cases as at the moment, they
|
|
8534
|
+
// are also covered via other means, we keep them for completeness
|
|
8535
|
+
case INTERACTION_ACCESSED:
|
|
8536
|
+
case INTERACTION_ASSIGNED: {
|
|
8537
|
+
if (!getGlobalAtPath([this.name, ...path].slice(0, -1))) {
|
|
8538
|
+
super.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8539
|
+
}
|
|
8540
|
+
return;
|
|
8541
|
+
}
|
|
8542
|
+
case INTERACTION_CALLED: {
|
|
8543
|
+
const globalAtPath = getGlobalAtPath([this.name, ...path]);
|
|
8544
|
+
if (globalAtPath) {
|
|
8545
|
+
globalAtPath.deoptimizeArgumentsOnCall(interaction);
|
|
8546
|
+
}
|
|
8547
|
+
else {
|
|
8548
|
+
super.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8549
|
+
}
|
|
8550
|
+
return;
|
|
8551
|
+
}
|
|
8552
|
+
}
|
|
8553
|
+
}
|
|
8387
8554
|
getLiteralValueAtPath(path, _recursionTracker, _origin) {
|
|
8388
8555
|
const globalAtPath = getGlobalAtPath([this.name, ...path]);
|
|
8389
8556
|
return globalAtPath ? globalAtPath.getLiteralValue() : UnknownValue;
|
|
@@ -8468,6 +8635,9 @@ class Identifier extends NodeBase {
|
|
|
8468
8635
|
variable.kind = kind;
|
|
8469
8636
|
return [(this.variable = variable)];
|
|
8470
8637
|
}
|
|
8638
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8639
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8640
|
+
}
|
|
8471
8641
|
deoptimizePath(path) {
|
|
8472
8642
|
if (path.length === 0 && !this.scope.contains(this.name)) {
|
|
8473
8643
|
this.disallowImportReassignment();
|
|
@@ -8476,9 +8646,6 @@ class Identifier extends NodeBase {
|
|
|
8476
8646
|
// Identifier as property that might be deoptimized by default
|
|
8477
8647
|
this.variable?.deoptimizePath(path);
|
|
8478
8648
|
}
|
|
8479
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8480
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8481
|
-
}
|
|
8482
8649
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
8483
8650
|
return this.getVariableRespectingTDZ().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
8484
8651
|
}
|
|
@@ -8904,6 +9071,30 @@ class FunctionBase extends NodeBase {
|
|
|
8904
9071
|
this.objectEntity = null;
|
|
8905
9072
|
this.deoptimizedReturn = false;
|
|
8906
9073
|
}
|
|
9074
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9075
|
+
if (interaction.type === INTERACTION_CALLED) {
|
|
9076
|
+
const { parameters } = this.scope;
|
|
9077
|
+
const { args } = interaction;
|
|
9078
|
+
let hasRest = false;
|
|
9079
|
+
for (let position = 0; position < args.length; position++) {
|
|
9080
|
+
const parameter = this.params[position];
|
|
9081
|
+
if (hasRest || parameter instanceof RestElement) {
|
|
9082
|
+
hasRest = true;
|
|
9083
|
+
args[position].deoptimizePath(UNKNOWN_PATH);
|
|
9084
|
+
}
|
|
9085
|
+
else if (parameter instanceof Identifier) {
|
|
9086
|
+
// args[position].deoptimizePath(UNKNOWN_PATH);
|
|
9087
|
+
parameters[position][0].addEntityToBeDeoptimized(args[position]);
|
|
9088
|
+
}
|
|
9089
|
+
else if (parameter) {
|
|
9090
|
+
args[position].deoptimizePath(UNKNOWN_PATH);
|
|
9091
|
+
}
|
|
9092
|
+
}
|
|
9093
|
+
}
|
|
9094
|
+
else {
|
|
9095
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9096
|
+
}
|
|
9097
|
+
}
|
|
8907
9098
|
deoptimizePath(path) {
|
|
8908
9099
|
this.getObjectEntity().deoptimizePath(path);
|
|
8909
9100
|
if (path.length === 1 && path[0] === UnknownKey) {
|
|
@@ -8912,11 +9103,6 @@ class FunctionBase extends NodeBase {
|
|
|
8912
9103
|
this.scope.getReturnExpression().deoptimizePath(UNKNOWN_PATH);
|
|
8913
9104
|
}
|
|
8914
9105
|
}
|
|
8915
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
8916
|
-
if (path.length > 0) {
|
|
8917
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
8918
|
-
}
|
|
8919
|
-
}
|
|
8920
9106
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
8921
9107
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
8922
9108
|
}
|
|
@@ -9239,54 +9425,12 @@ class ArgumentsVariable extends LocalVariable {
|
|
|
9239
9425
|
}
|
|
9240
9426
|
}
|
|
9241
9427
|
|
|
9242
|
-
class ThisVariable extends
|
|
9428
|
+
class ThisVariable extends ParameterVariable {
|
|
9243
9429
|
constructor(context) {
|
|
9244
|
-
super('this', null,
|
|
9245
|
-
this.deoptimizedPaths = [];
|
|
9246
|
-
this.entitiesToBeDeoptimized = new Set();
|
|
9247
|
-
this.thisDeoptimizationList = [];
|
|
9248
|
-
this.thisDeoptimizations = new DiscriminatedPathTracker();
|
|
9249
|
-
}
|
|
9250
|
-
addEntityToBeDeoptimized(entity) {
|
|
9251
|
-
for (const path of this.deoptimizedPaths) {
|
|
9252
|
-
entity.deoptimizePath(path);
|
|
9253
|
-
}
|
|
9254
|
-
for (const { interaction, path } of this.thisDeoptimizationList) {
|
|
9255
|
-
entity.deoptimizeThisOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
9256
|
-
}
|
|
9257
|
-
this.entitiesToBeDeoptimized.add(entity);
|
|
9258
|
-
}
|
|
9259
|
-
deoptimizePath(path) {
|
|
9260
|
-
if (path.length === 0 ||
|
|
9261
|
-
this.deoptimizationTracker.trackEntityAtPathAndGetIfTracked(path, this)) {
|
|
9262
|
-
return;
|
|
9263
|
-
}
|
|
9264
|
-
this.deoptimizedPaths.push(path);
|
|
9265
|
-
for (const entity of this.entitiesToBeDeoptimized) {
|
|
9266
|
-
entity.deoptimizePath(path);
|
|
9267
|
-
}
|
|
9268
|
-
}
|
|
9269
|
-
deoptimizeThisOnInteractionAtPath(interaction, path) {
|
|
9270
|
-
const thisDeoptimization = {
|
|
9271
|
-
interaction,
|
|
9272
|
-
path
|
|
9273
|
-
};
|
|
9274
|
-
if (!this.thisDeoptimizations.trackEntityAtPathAndGetIfTracked(path, interaction.type, interaction.thisArg)) {
|
|
9275
|
-
for (const entity of this.entitiesToBeDeoptimized) {
|
|
9276
|
-
entity.deoptimizeThisOnInteractionAtPath(interaction, path, SHARED_RECURSION_TRACKER);
|
|
9277
|
-
}
|
|
9278
|
-
this.thisDeoptimizationList.push(thisDeoptimization);
|
|
9279
|
-
}
|
|
9430
|
+
super('this', null, context);
|
|
9280
9431
|
}
|
|
9281
9432
|
hasEffectsOnInteractionAtPath(path, interaction, context) {
|
|
9282
|
-
|
|
9283
|
-
if (replacedVariableInit) {
|
|
9284
|
-
return (replacedVariableInit.hasEffectsOnInteractionAtPath(path, interaction, context) ||
|
|
9285
|
-
// If the surrounding function is included, all mutations of "this" must
|
|
9286
|
-
// be counted as side effects, which is what this second line does.
|
|
9287
|
-
(!context.ignore.this && super.hasEffectsOnInteractionAtPath(path, interaction, context)));
|
|
9288
|
-
}
|
|
9289
|
-
return UNKNOWN_EXPRESSION.hasEffectsOnInteractionAtPath(path, interaction, context);
|
|
9433
|
+
return (context.replacedVariableInits.get(this) || UNKNOWN_EXPRESSION).hasEffectsOnInteractionAtPath(path, interaction, context);
|
|
9290
9434
|
}
|
|
9291
9435
|
}
|
|
9292
9436
|
|
|
@@ -9323,9 +9467,9 @@ class FunctionNode extends FunctionBase {
|
|
|
9323
9467
|
// constructed entity.
|
|
9324
9468
|
this.scope.thisVariable.addEntityToBeDeoptimized(this.constructedEntity);
|
|
9325
9469
|
}
|
|
9326
|
-
|
|
9327
|
-
super.
|
|
9328
|
-
if (interaction.type === INTERACTION_CALLED && path.length === 0) {
|
|
9470
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9471
|
+
super.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9472
|
+
if (interaction.type === INTERACTION_CALLED && path.length === 0 && interaction.thisArg) {
|
|
9329
9473
|
this.scope.thisVariable.addEntityToBeDeoptimized(interaction.thisArg);
|
|
9330
9474
|
}
|
|
9331
9475
|
}
|
|
@@ -9524,7 +9668,7 @@ function renderCallArguments(code, options, node) {
|
|
|
9524
9668
|
}
|
|
9525
9669
|
|
|
9526
9670
|
class Literal extends NodeBase {
|
|
9527
|
-
|
|
9671
|
+
deoptimizeArgumentsOnInteractionAtPath() { }
|
|
9528
9672
|
getLiteralValueAtPath(path) {
|
|
9529
9673
|
if (path.length > 0 ||
|
|
9530
9674
|
// unknown literals can also be null but do not start with an "n"
|
|
@@ -9642,6 +9786,19 @@ class MemberExpression extends NodeBase {
|
|
|
9642
9786
|
super.bind();
|
|
9643
9787
|
}
|
|
9644
9788
|
}
|
|
9789
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9790
|
+
if (this.variable) {
|
|
9791
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9792
|
+
}
|
|
9793
|
+
else if (!this.isUndefined) {
|
|
9794
|
+
if (path.length < MAX_PATH_DEPTH) {
|
|
9795
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(interaction, [this.getPropertyKey(), ...path], recursionTracker);
|
|
9796
|
+
}
|
|
9797
|
+
else {
|
|
9798
|
+
deoptimizeInteraction(interaction);
|
|
9799
|
+
}
|
|
9800
|
+
}
|
|
9801
|
+
}
|
|
9645
9802
|
deoptimizeCache() {
|
|
9646
9803
|
const expressionsToBeDeoptimized = this.expressionsToBeDeoptimized;
|
|
9647
9804
|
this.expressionsToBeDeoptimized = [];
|
|
@@ -9665,19 +9822,6 @@ class MemberExpression extends NodeBase {
|
|
|
9665
9822
|
]);
|
|
9666
9823
|
}
|
|
9667
9824
|
}
|
|
9668
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9669
|
-
if (this.variable) {
|
|
9670
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9671
|
-
}
|
|
9672
|
-
else if (!this.isUndefined) {
|
|
9673
|
-
if (path.length < MAX_PATH_DEPTH) {
|
|
9674
|
-
this.object.deoptimizeThisOnInteractionAtPath(interaction, [this.getPropertyKey(), ...path], recursionTracker);
|
|
9675
|
-
}
|
|
9676
|
-
else {
|
|
9677
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
9678
|
-
}
|
|
9679
|
-
}
|
|
9680
|
-
}
|
|
9681
9825
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9682
9826
|
if (this.variable) {
|
|
9683
9827
|
return this.variable.getLiteralValueAtPath(path, recursionTracker, origin);
|
|
@@ -9758,7 +9902,7 @@ class MemberExpression extends NodeBase {
|
|
|
9758
9902
|
}
|
|
9759
9903
|
initialise() {
|
|
9760
9904
|
this.propertyKey = getResolvablePropertyKey(this);
|
|
9761
|
-
this.accessInteraction = { thisArg: this.object, type: INTERACTION_ACCESSED };
|
|
9905
|
+
this.accessInteraction = { args: null, thisArg: this.object, type: INTERACTION_ACCESSED };
|
|
9762
9906
|
}
|
|
9763
9907
|
isSkippedAsOptional(origin) {
|
|
9764
9908
|
return (!this.variable &&
|
|
@@ -9803,7 +9947,7 @@ class MemberExpression extends NodeBase {
|
|
|
9803
9947
|
propertyReadSideEffects &&
|
|
9804
9948
|
!(this.variable || this.isUndefined)) {
|
|
9805
9949
|
const propertyKey = this.getPropertyKey();
|
|
9806
|
-
this.object.
|
|
9950
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(this.accessInteraction, [propertyKey], SHARED_RECURSION_TRACKER);
|
|
9807
9951
|
this.context.requestTreeshakingPass();
|
|
9808
9952
|
}
|
|
9809
9953
|
}
|
|
@@ -9816,7 +9960,7 @@ class MemberExpression extends NodeBase {
|
|
|
9816
9960
|
this.bound &&
|
|
9817
9961
|
propertyReadSideEffects &&
|
|
9818
9962
|
!(this.variable || this.isUndefined)) {
|
|
9819
|
-
this.object.
|
|
9963
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(this.assignmentInteraction, [this.getPropertyKey()], SHARED_RECURSION_TRACKER);
|
|
9820
9964
|
this.context.requestTreeshakingPass();
|
|
9821
9965
|
}
|
|
9822
9966
|
}
|
|
@@ -9888,6 +10032,33 @@ class CallExpressionBase extends NodeBase {
|
|
|
9888
10032
|
this.deoptimizableDependentExpressions = [];
|
|
9889
10033
|
this.expressionsToBeDeoptimized = new Set();
|
|
9890
10034
|
}
|
|
10035
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10036
|
+
const { args, thisArg } = interaction;
|
|
10037
|
+
const [returnExpression, isPure] = this.getReturnExpression(recursionTracker);
|
|
10038
|
+
if (isPure)
|
|
10039
|
+
return;
|
|
10040
|
+
if (returnExpression === UNKNOWN_EXPRESSION) {
|
|
10041
|
+
thisArg?.deoptimizePath(UNKNOWN_PATH);
|
|
10042
|
+
if (args) {
|
|
10043
|
+
for (const argument of args) {
|
|
10044
|
+
argument.deoptimizePath(UNKNOWN_PATH);
|
|
10045
|
+
}
|
|
10046
|
+
}
|
|
10047
|
+
}
|
|
10048
|
+
else {
|
|
10049
|
+
recursionTracker.withTrackedEntityAtPath(path, returnExpression, () => {
|
|
10050
|
+
if (thisArg) {
|
|
10051
|
+
this.expressionsToBeDeoptimized.add(thisArg);
|
|
10052
|
+
}
|
|
10053
|
+
if (args) {
|
|
10054
|
+
for (const argument of args) {
|
|
10055
|
+
this.expressionsToBeDeoptimized.add(argument);
|
|
10056
|
+
}
|
|
10057
|
+
}
|
|
10058
|
+
returnExpression.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10059
|
+
}, null);
|
|
10060
|
+
}
|
|
10061
|
+
}
|
|
9891
10062
|
deoptimizeCache() {
|
|
9892
10063
|
if (this.returnExpression?.[0] !== UNKNOWN_EXPRESSION) {
|
|
9893
10064
|
this.returnExpression = UNKNOWN_RETURN_EXPRESSION;
|
|
@@ -9909,20 +10080,6 @@ class CallExpressionBase extends NodeBase {
|
|
|
9909
10080
|
returnExpression.deoptimizePath(path);
|
|
9910
10081
|
}
|
|
9911
10082
|
}
|
|
9912
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
9913
|
-
const [returnExpression, isPure] = this.getReturnExpression(recursionTracker);
|
|
9914
|
-
if (isPure)
|
|
9915
|
-
return;
|
|
9916
|
-
if (returnExpression === UNKNOWN_EXPRESSION) {
|
|
9917
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
9918
|
-
}
|
|
9919
|
-
else {
|
|
9920
|
-
recursionTracker.withTrackedEntityAtPath(path, returnExpression, () => {
|
|
9921
|
-
this.expressionsToBeDeoptimized.add(interaction.thisArg);
|
|
9922
|
-
returnExpression.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
9923
|
-
}, null);
|
|
9924
|
-
}
|
|
9925
|
-
}
|
|
9926
10083
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
9927
10084
|
const [returnExpression] = this.getReturnExpression(recursionTracker);
|
|
9928
10085
|
if (returnExpression === UNKNOWN_EXPRESSION) {
|
|
@@ -10032,13 +10189,7 @@ class CallExpression extends CallExpressionBase {
|
|
|
10032
10189
|
}
|
|
10033
10190
|
applyDeoptimizations() {
|
|
10034
10191
|
this.deoptimized = true;
|
|
10035
|
-
|
|
10036
|
-
this.callee.deoptimizeThisOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
10037
|
-
}
|
|
10038
|
-
for (const argument of this.arguments) {
|
|
10039
|
-
// This will make sure all properties of parameters behave as "unknown"
|
|
10040
|
-
argument.deoptimizePath(UNKNOWN_PATH);
|
|
10041
|
-
}
|
|
10192
|
+
this.callee.deoptimizeArgumentsOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
10042
10193
|
this.context.requestTreeshakingPass();
|
|
10043
10194
|
}
|
|
10044
10195
|
getReturnExpression(recursionTracker = SHARED_RECURSION_TRACKER) {
|
|
@@ -10135,15 +10286,9 @@ class MethodBase extends NodeBase {
|
|
|
10135
10286
|
super(...arguments);
|
|
10136
10287
|
this.accessedValue = null;
|
|
10137
10288
|
}
|
|
10138
|
-
|
|
10139
|
-
// expressions, there is no known situation where a getter is deoptimized.
|
|
10140
|
-
deoptimizeCache() { }
|
|
10141
|
-
deoptimizePath(path) {
|
|
10142
|
-
this.getAccessedValue()[0].deoptimizePath(path);
|
|
10143
|
-
}
|
|
10144
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10289
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10145
10290
|
if (interaction.type === INTERACTION_ACCESSED && this.kind === 'get' && path.length === 0) {
|
|
10146
|
-
return this.value.
|
|
10291
|
+
return this.value.deoptimizeArgumentsOnInteractionAtPath({
|
|
10147
10292
|
args: NO_ARGS,
|
|
10148
10293
|
thisArg: interaction.thisArg,
|
|
10149
10294
|
type: INTERACTION_CALLED,
|
|
@@ -10151,14 +10296,20 @@ class MethodBase extends NodeBase {
|
|
|
10151
10296
|
}, EMPTY_PATH, recursionTracker);
|
|
10152
10297
|
}
|
|
10153
10298
|
if (interaction.type === INTERACTION_ASSIGNED && this.kind === 'set' && path.length === 0) {
|
|
10154
|
-
return this.value.
|
|
10299
|
+
return this.value.deoptimizeArgumentsOnInteractionAtPath({
|
|
10155
10300
|
args: interaction.args,
|
|
10156
10301
|
thisArg: interaction.thisArg,
|
|
10157
10302
|
type: INTERACTION_CALLED,
|
|
10158
10303
|
withNew: false
|
|
10159
10304
|
}, EMPTY_PATH, recursionTracker);
|
|
10160
10305
|
}
|
|
10161
|
-
this.getAccessedValue()[0].
|
|
10306
|
+
this.getAccessedValue()[0].deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10307
|
+
}
|
|
10308
|
+
// As getter properties directly receive their values from fixed function
|
|
10309
|
+
// expressions, there is no known situation where a getter is deoptimized.
|
|
10310
|
+
deoptimizeCache() { }
|
|
10311
|
+
deoptimizePath(path) {
|
|
10312
|
+
this.getAccessedValue()[0].deoptimizePath(path);
|
|
10162
10313
|
}
|
|
10163
10314
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
10164
10315
|
return this.getAccessedValue()[0].getLiteralValueAtPath(path, recursionTracker, origin);
|
|
@@ -10214,12 +10365,12 @@ class ObjectMember extends ExpressionEntity {
|
|
|
10214
10365
|
this.object = object;
|
|
10215
10366
|
this.key = key;
|
|
10216
10367
|
}
|
|
10368
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10369
|
+
this.object.deoptimizeArgumentsOnInteractionAtPath(interaction, [this.key, ...path], recursionTracker);
|
|
10370
|
+
}
|
|
10217
10371
|
deoptimizePath(path) {
|
|
10218
10372
|
this.object.deoptimizePath([this.key, ...path]);
|
|
10219
10373
|
}
|
|
10220
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10221
|
-
this.object.deoptimizeThisOnInteractionAtPath(interaction, [this.key, ...path], recursionTracker);
|
|
10222
|
-
}
|
|
10223
10374
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
10224
10375
|
return this.object.getLiteralValueAtPath([this.key, ...path], recursionTracker, origin);
|
|
10225
10376
|
}
|
|
@@ -10239,15 +10390,15 @@ class ClassNode extends NodeBase {
|
|
|
10239
10390
|
createScope(parentScope) {
|
|
10240
10391
|
this.scope = new ChildScope(parentScope);
|
|
10241
10392
|
}
|
|
10393
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10394
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10395
|
+
}
|
|
10242
10396
|
deoptimizeCache() {
|
|
10243
10397
|
this.getObjectEntity().deoptimizeAllProperties();
|
|
10244
10398
|
}
|
|
10245
10399
|
deoptimizePath(path) {
|
|
10246
10400
|
this.getObjectEntity().deoptimizePath(path);
|
|
10247
10401
|
}
|
|
10248
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10249
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10250
|
-
}
|
|
10251
10402
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
10252
10403
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
10253
10404
|
}
|
|
@@ -10434,6 +10585,10 @@ class ConditionalExpression extends NodeBase {
|
|
|
10434
10585
|
this.isBranchResolutionAnalysed = false;
|
|
10435
10586
|
this.usedBranch = null;
|
|
10436
10587
|
}
|
|
10588
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10589
|
+
this.consequent.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10590
|
+
this.alternate.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10591
|
+
}
|
|
10437
10592
|
deoptimizeCache() {
|
|
10438
10593
|
if (this.usedBranch !== null) {
|
|
10439
10594
|
const unusedBranch = this.usedBranch === this.consequent ? this.alternate : this.consequent;
|
|
@@ -10454,10 +10609,6 @@ class ConditionalExpression extends NodeBase {
|
|
|
10454
10609
|
this.alternate.deoptimizePath(path);
|
|
10455
10610
|
}
|
|
10456
10611
|
}
|
|
10457
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
10458
|
-
this.consequent.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10459
|
-
this.alternate.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
10460
|
-
}
|
|
10461
10612
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
10462
10613
|
const usedBranch = this.getUsedBranch();
|
|
10463
10614
|
if (!usedBranch)
|
|
@@ -11566,6 +11717,10 @@ class LogicalExpression extends NodeBase {
|
|
|
11566
11717
|
this.isBranchResolutionAnalysed = false;
|
|
11567
11718
|
this.usedBranch = null;
|
|
11568
11719
|
}
|
|
11720
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11721
|
+
this.left.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11722
|
+
this.right.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11723
|
+
}
|
|
11569
11724
|
deoptimizeCache() {
|
|
11570
11725
|
if (this.usedBranch) {
|
|
11571
11726
|
const unusedBranch = this.usedBranch === this.left ? this.right : this.left;
|
|
@@ -11589,10 +11744,6 @@ class LogicalExpression extends NodeBase {
|
|
|
11589
11744
|
this.right.deoptimizePath(path);
|
|
11590
11745
|
}
|
|
11591
11746
|
}
|
|
11592
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11593
|
-
this.left.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11594
|
-
this.right.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11595
|
-
}
|
|
11596
11747
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
11597
11748
|
const usedBranch = this.getUsedBranch();
|
|
11598
11749
|
if (!usedBranch)
|
|
@@ -11862,10 +12013,7 @@ class NewExpression extends NodeBase {
|
|
|
11862
12013
|
}
|
|
11863
12014
|
applyDeoptimizations() {
|
|
11864
12015
|
this.deoptimized = true;
|
|
11865
|
-
|
|
11866
|
-
// This will make sure all properties of parameters behave as "unknown"
|
|
11867
|
-
argument.deoptimizePath(UNKNOWN_PATH);
|
|
11868
|
-
}
|
|
12016
|
+
this.callee.deoptimizeArgumentsOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
11869
12017
|
this.context.requestTreeshakingPass();
|
|
11870
12018
|
}
|
|
11871
12019
|
}
|
|
@@ -11875,15 +12023,15 @@ class ObjectExpression extends NodeBase {
|
|
|
11875
12023
|
super(...arguments);
|
|
11876
12024
|
this.objectEntity = null;
|
|
11877
12025
|
}
|
|
12026
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12027
|
+
this.getObjectEntity().deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
12028
|
+
}
|
|
11878
12029
|
deoptimizeCache() {
|
|
11879
12030
|
this.getObjectEntity().deoptimizeAllProperties();
|
|
11880
12031
|
}
|
|
11881
12032
|
deoptimizePath(path) {
|
|
11882
12033
|
this.getObjectEntity().deoptimizePath(path);
|
|
11883
12034
|
}
|
|
11884
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
11885
|
-
this.getObjectEntity().deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
11886
|
-
}
|
|
11887
12035
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
11888
12036
|
return this.getObjectEntity().getLiteralValueAtPath(path, recursionTracker, origin);
|
|
11889
12037
|
}
|
|
@@ -12065,12 +12213,12 @@ class Property extends MethodBase {
|
|
|
12065
12213
|
}
|
|
12066
12214
|
|
|
12067
12215
|
class PropertyDefinition extends NodeBase {
|
|
12216
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12217
|
+
this.value?.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
12218
|
+
}
|
|
12068
12219
|
deoptimizePath(path) {
|
|
12069
12220
|
this.value?.deoptimizePath(path);
|
|
12070
12221
|
}
|
|
12071
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12072
|
-
this.value?.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
12073
|
-
}
|
|
12074
12222
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
12075
12223
|
return this.value
|
|
12076
12224
|
? this.value.getLiteralValueAtPath(path, recursionTracker, origin)
|
|
@@ -12116,12 +12264,12 @@ class ReturnStatement extends NodeBase {
|
|
|
12116
12264
|
}
|
|
12117
12265
|
|
|
12118
12266
|
class SequenceExpression extends NodeBase {
|
|
12267
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12268
|
+
this.expressions[this.expressions.length - 1].deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
12269
|
+
}
|
|
12119
12270
|
deoptimizePath(path) {
|
|
12120
12271
|
this.expressions[this.expressions.length - 1].deoptimizePath(path);
|
|
12121
12272
|
}
|
|
12122
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12123
|
-
this.expressions[this.expressions.length - 1].deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
12124
|
-
}
|
|
12125
12273
|
getLiteralValueAtPath(path, recursionTracker, origin) {
|
|
12126
12274
|
return this.expressions[this.expressions.length - 1].getLiteralValueAtPath(path, recursionTracker, origin);
|
|
12127
12275
|
}
|
|
@@ -12209,12 +12357,12 @@ class Super extends NodeBase {
|
|
|
12209
12357
|
bind() {
|
|
12210
12358
|
this.variable = this.scope.findVariable('this');
|
|
12211
12359
|
}
|
|
12360
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12361
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker);
|
|
12362
|
+
}
|
|
12212
12363
|
deoptimizePath(path) {
|
|
12213
12364
|
this.variable.deoptimizePath(path);
|
|
12214
12365
|
}
|
|
12215
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12216
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker);
|
|
12217
|
-
}
|
|
12218
12366
|
include() {
|
|
12219
12367
|
if (!this.included) {
|
|
12220
12368
|
this.included = true;
|
|
@@ -12389,13 +12537,7 @@ class TaggedTemplateExpression extends CallExpressionBase {
|
|
|
12389
12537
|
}
|
|
12390
12538
|
applyDeoptimizations() {
|
|
12391
12539
|
this.deoptimized = true;
|
|
12392
|
-
|
|
12393
|
-
this.tag.deoptimizeThisOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
12394
|
-
}
|
|
12395
|
-
for (const argument of this.quasi.expressions) {
|
|
12396
|
-
// This will make sure all properties of parameters behave as "unknown"
|
|
12397
|
-
argument.deoptimizePath(UNKNOWN_PATH);
|
|
12398
|
-
}
|
|
12540
|
+
this.tag.deoptimizeArgumentsOnInteractionAtPath(this.interaction, EMPTY_PATH, SHARED_RECURSION_TRACKER);
|
|
12399
12541
|
this.context.requestTreeshakingPass();
|
|
12400
12542
|
}
|
|
12401
12543
|
getReturnExpression(recursionTracker = SHARED_RECURSION_TRACKER) {
|
|
@@ -12424,7 +12566,7 @@ class TemplateElement extends NodeBase {
|
|
|
12424
12566
|
}
|
|
12425
12567
|
|
|
12426
12568
|
class TemplateLiteral extends NodeBase {
|
|
12427
|
-
|
|
12569
|
+
deoptimizeArgumentsOnInteractionAtPath() { }
|
|
12428
12570
|
getLiteralValueAtPath(path) {
|
|
12429
12571
|
if (path.length > 0 || this.quasis.length !== 1) {
|
|
12430
12572
|
return UnknownValue;
|
|
@@ -12568,13 +12710,13 @@ class ThisExpression extends NodeBase {
|
|
|
12568
12710
|
bind() {
|
|
12569
12711
|
this.variable = this.scope.findVariable('this');
|
|
12570
12712
|
}
|
|
12713
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12714
|
+
// We rewrite the parameter so that a ThisVariable can detect self-mutations
|
|
12715
|
+
this.variable.deoptimizeArgumentsOnInteractionAtPath(interaction.thisArg === this ? { ...interaction, thisArg: this.variable } : interaction, path, recursionTracker);
|
|
12716
|
+
}
|
|
12571
12717
|
deoptimizePath(path) {
|
|
12572
12718
|
this.variable.deoptimizePath(path);
|
|
12573
12719
|
}
|
|
12574
|
-
deoptimizeThisOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
12575
|
-
// We rewrite the parameter so that a ThisVariable can detect self-mutations
|
|
12576
|
-
this.variable.deoptimizeThisOnInteractionAtPath(interaction.thisArg === this ? { ...interaction, thisArg: this.variable } : interaction, path, recursionTracker);
|
|
12577
|
-
}
|
|
12578
12720
|
hasEffectsOnInteractionAtPath(path, interaction, context) {
|
|
12579
12721
|
if (path.length === 0) {
|
|
12580
12722
|
return interaction.type !== INTERACTION_ACCESSED;
|
|
@@ -13142,22 +13284,22 @@ class NamespaceVariable extends Variable {
|
|
|
13142
13284
|
this.references.push(identifier);
|
|
13143
13285
|
this.name = identifier.name;
|
|
13144
13286
|
}
|
|
13145
|
-
|
|
13146
|
-
if (path.length > 1) {
|
|
13287
|
+
deoptimizeArgumentsOnInteractionAtPath(interaction, path, recursionTracker) {
|
|
13288
|
+
if (path.length > 1 || (path.length === 1 && interaction.type === INTERACTION_CALLED)) {
|
|
13147
13289
|
const key = path[0];
|
|
13148
13290
|
if (typeof key === 'string') {
|
|
13149
|
-
this.getMemberVariables()[key]?.
|
|
13291
|
+
this.getMemberVariables()[key]?.deoptimizeArgumentsOnInteractionAtPath(interaction, path.slice(1), recursionTracker);
|
|
13292
|
+
}
|
|
13293
|
+
else {
|
|
13294
|
+
deoptimizeInteraction(interaction);
|
|
13150
13295
|
}
|
|
13151
13296
|
}
|
|
13152
13297
|
}
|
|
13153
|
-
|
|
13154
|
-
if (path.length > 1
|
|
13298
|
+
deoptimizePath(path) {
|
|
13299
|
+
if (path.length > 1) {
|
|
13155
13300
|
const key = path[0];
|
|
13156
13301
|
if (typeof key === 'string') {
|
|
13157
|
-
this.getMemberVariables()[key]?.
|
|
13158
|
-
}
|
|
13159
|
-
else {
|
|
13160
|
-
interaction.thisArg.deoptimizePath(UNKNOWN_PATH);
|
|
13302
|
+
this.getMemberVariables()[key]?.deoptimizePath(path.slice(1));
|
|
13161
13303
|
}
|
|
13162
13304
|
}
|
|
13163
13305
|
}
|
|
@@ -13346,7 +13488,6 @@ function doAssertionsDiffer(assertionA, assertionB) {
|
|
|
13346
13488
|
keysA.some(key => assertionA[key] !== assertionB[key]));
|
|
13347
13489
|
}
|
|
13348
13490
|
|
|
13349
|
-
const NOOP = () => { };
|
|
13350
13491
|
let timers = new Map();
|
|
13351
13492
|
function getPersistedLabel(label, level) {
|
|
13352
13493
|
switch (level) {
|
|
@@ -13400,8 +13541,8 @@ function getTimings() {
|
|
|
13400
13541
|
}
|
|
13401
13542
|
return newTimings;
|
|
13402
13543
|
}
|
|
13403
|
-
let timeStart =
|
|
13404
|
-
let timeEnd =
|
|
13544
|
+
let timeStart = doNothing;
|
|
13545
|
+
let timeEnd = doNothing;
|
|
13405
13546
|
const TIMED_PLUGIN_HOOKS = [
|
|
13406
13547
|
'augmentChunkHash',
|
|
13407
13548
|
'buildEnd',
|
|
@@ -13457,8 +13598,8 @@ function initialiseTimers(inputOptions) {
|
|
|
13457
13598
|
inputOptions.plugins = inputOptions.plugins.map(getPluginWithTimers);
|
|
13458
13599
|
}
|
|
13459
13600
|
else {
|
|
13460
|
-
timeStart =
|
|
13461
|
-
timeEnd =
|
|
13601
|
+
timeStart = doNothing;
|
|
13602
|
+
timeEnd = doNothing;
|
|
13462
13603
|
}
|
|
13463
13604
|
}
|
|
13464
13605
|
|
|
@@ -17874,13 +18015,13 @@ function addModuleToManualChunk(alias, module, manualChunkAliasByEntry) {
|
|
|
17874
18015
|
}
|
|
17875
18016
|
|
|
17876
18017
|
// This file was generated. Do not modify manually!
|
|
17877
|
-
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,
|
|
18018
|
+
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];
|
|
17878
18019
|
|
|
17879
18020
|
// This file was generated. Do not modify manually!
|
|
17880
|
-
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,
|
|
18021
|
+
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];
|
|
17881
18022
|
|
|
17882
18023
|
// This file was generated. Do not modify manually!
|
|
17883
|
-
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-\
|
|
18024
|
+
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";
|
|
17884
18025
|
|
|
17885
18026
|
// This file was generated. Do not modify manually!
|
|
17886
18027
|
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";
|
|
@@ -17925,6 +18066,7 @@ function isInAstralSet(code, set) {
|
|
|
17925
18066
|
pos += set[i + 1];
|
|
17926
18067
|
if (pos >= code) { return true }
|
|
17927
18068
|
}
|
|
18069
|
+
return false
|
|
17928
18070
|
}
|
|
17929
18071
|
|
|
17930
18072
|
// Test whether a given character code starts an identifier.
|
|
@@ -18310,7 +18452,7 @@ function getOptions(opts) {
|
|
|
18310
18452
|
if (options.allowReserved == null)
|
|
18311
18453
|
{ options.allowReserved = options.ecmaVersion < 5; }
|
|
18312
18454
|
|
|
18313
|
-
if (opts.allowHashBang == null)
|
|
18455
|
+
if (!opts || opts.allowHashBang == null)
|
|
18314
18456
|
{ options.allowHashBang = options.ecmaVersion >= 14; }
|
|
18315
18457
|
|
|
18316
18458
|
if (isArray(options.onToken)) {
|
|
@@ -18710,10 +18852,10 @@ pp$8.isLet = function(context) {
|
|
|
18710
18852
|
// Statement) is allowed here. If context is not empty then only a Statement
|
|
18711
18853
|
// is allowed. However, `let [` is an explicit negative lookahead for
|
|
18712
18854
|
// ExpressionStatement, so special-case it first.
|
|
18713
|
-
if (nextCh === 91 || nextCh === 92
|
|
18855
|
+
if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'
|
|
18714
18856
|
if (context) { return false }
|
|
18715
18857
|
|
|
18716
|
-
if (nextCh === 123) { return true } // '{'
|
|
18858
|
+
if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral
|
|
18717
18859
|
if (isIdentifierStart(nextCh, true)) {
|
|
18718
18860
|
var pos = next + 1;
|
|
18719
18861
|
while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }
|
|
@@ -19446,7 +19588,7 @@ pp$8.parseClassId = function(node, isStatement) {
|
|
|
19446
19588
|
};
|
|
19447
19589
|
|
|
19448
19590
|
pp$8.parseClassSuper = function(node) {
|
|
19449
|
-
node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(false) : null;
|
|
19591
|
+
node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;
|
|
19450
19592
|
};
|
|
19451
19593
|
|
|
19452
19594
|
pp$8.enterClassBody = function() {
|
|
@@ -20991,7 +21133,7 @@ pp$5.parseProperty = function(isPattern, refDestructuringErrors) {
|
|
|
20991
21133
|
if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
|
|
20992
21134
|
isAsync = true;
|
|
20993
21135
|
isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);
|
|
20994
|
-
this.parsePropertyName(prop
|
|
21136
|
+
this.parsePropertyName(prop);
|
|
20995
21137
|
} else {
|
|
20996
21138
|
isAsync = false;
|
|
20997
21139
|
}
|
|
@@ -21240,7 +21382,7 @@ pp$5.checkUnreserved = function(ref) {
|
|
|
21240
21382
|
// when parsing properties), it will also convert keywords into
|
|
21241
21383
|
// identifiers.
|
|
21242
21384
|
|
|
21243
|
-
pp$5.parseIdent = function(liberal
|
|
21385
|
+
pp$5.parseIdent = function(liberal) {
|
|
21244
21386
|
var node = this.startNode();
|
|
21245
21387
|
if (this.type === types$1.name) {
|
|
21246
21388
|
node.name = this.value;
|
|
@@ -21483,8 +21625,8 @@ pp$2.copyNode = function(node) {
|
|
|
21483
21625
|
return newNode
|
|
21484
21626
|
};
|
|
21485
21627
|
|
|
21486
|
-
// This file contains Unicode properties extracted from the ECMAScript
|
|
21487
|
-
//
|
|
21628
|
+
// This file contains Unicode properties extracted from the ECMAScript specification.
|
|
21629
|
+
// The lists are extracted like so:
|
|
21488
21630
|
// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)
|
|
21489
21631
|
|
|
21490
21632
|
// #table-binary-unicode-properties
|
|
@@ -21493,12 +21635,15 @@ var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
|
|
|
21493
21635
|
var ecma11BinaryProperties = ecma10BinaryProperties;
|
|
21494
21636
|
var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict";
|
|
21495
21637
|
var ecma13BinaryProperties = ecma12BinaryProperties;
|
|
21638
|
+
var ecma14BinaryProperties = ecma13BinaryProperties;
|
|
21639
|
+
|
|
21496
21640
|
var unicodeBinaryProperties = {
|
|
21497
21641
|
9: ecma9BinaryProperties,
|
|
21498
21642
|
10: ecma10BinaryProperties,
|
|
21499
21643
|
11: ecma11BinaryProperties,
|
|
21500
21644
|
12: ecma12BinaryProperties,
|
|
21501
|
-
13: ecma13BinaryProperties
|
|
21645
|
+
13: ecma13BinaryProperties,
|
|
21646
|
+
14: ecma14BinaryProperties
|
|
21502
21647
|
};
|
|
21503
21648
|
|
|
21504
21649
|
// #table-unicode-general-category-values
|
|
@@ -21510,12 +21655,15 @@ var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Han
|
|
|
21510
21655
|
var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
|
|
21511
21656
|
var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi";
|
|
21512
21657
|
var ecma13ScriptValues = ecma12ScriptValues + " Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith";
|
|
21658
|
+
var ecma14ScriptValues = ecma13ScriptValues + " Kawi Nag_Mundari Nagm";
|
|
21659
|
+
|
|
21513
21660
|
var unicodeScriptValues = {
|
|
21514
21661
|
9: ecma9ScriptValues,
|
|
21515
21662
|
10: ecma10ScriptValues,
|
|
21516
21663
|
11: ecma11ScriptValues,
|
|
21517
21664
|
12: ecma12ScriptValues,
|
|
21518
|
-
13: ecma13ScriptValues
|
|
21665
|
+
13: ecma13ScriptValues,
|
|
21666
|
+
14: ecma14ScriptValues
|
|
21519
21667
|
};
|
|
21520
21668
|
|
|
21521
21669
|
var data = {};
|
|
@@ -21534,7 +21682,7 @@ function buildUnicodeData(ecmaVersion) {
|
|
|
21534
21682
|
d.nonBinary.scx = d.nonBinary.Script_Extensions;
|
|
21535
21683
|
}
|
|
21536
21684
|
|
|
21537
|
-
for (var i = 0, list = [9, 10, 11, 12, 13]; i < list.length; i += 1) {
|
|
21685
|
+
for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {
|
|
21538
21686
|
var ecmaVersion = list[i];
|
|
21539
21687
|
|
|
21540
21688
|
buildUnicodeData(ecmaVersion);
|
|
@@ -21545,7 +21693,7 @@ var pp$1 = Parser.prototype;
|
|
|
21545
21693
|
var RegExpValidationState = function RegExpValidationState(parser) {
|
|
21546
21694
|
this.parser = parser;
|
|
21547
21695
|
this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : "");
|
|
21548
|
-
this.unicodeProperties = data[parser.options.ecmaVersion >=
|
|
21696
|
+
this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];
|
|
21549
21697
|
this.source = "";
|
|
21550
21698
|
this.flags = "";
|
|
21551
21699
|
this.start = 0;
|
|
@@ -23307,8 +23455,6 @@ pp.readEscapedChar = function(inTemplate) {
|
|
|
23307
23455
|
codePos,
|
|
23308
23456
|
"Invalid escape sequence in template string"
|
|
23309
23457
|
);
|
|
23310
|
-
|
|
23311
|
-
return null
|
|
23312
23458
|
}
|
|
23313
23459
|
default:
|
|
23314
23460
|
if (ch >= 48 && ch <= 55) {
|
|
@@ -23396,7 +23542,7 @@ pp.readWord = function() {
|
|
|
23396
23542
|
|
|
23397
23543
|
// Acorn is a tiny, fast JavaScript parser written in JavaScript.
|
|
23398
23544
|
|
|
23399
|
-
var version = "8.8.
|
|
23545
|
+
var version = "8.8.2";
|
|
23400
23546
|
|
|
23401
23547
|
Parser.acorn = {
|
|
23402
23548
|
Parser: Parser,
|