From 87e8029fa06e87b001e2f47a879eb0e940691c45 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 16 May 2021 07:24:48 +0200 Subject: [PATCH] Improve coverage --- src/ast/nodes/CallExpression.ts | 24 +++---------------- .../builtin-prototypes/literal/_expected.js | 1 + .../builtin-prototypes/literal/main.js | 1 + 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/src/ast/nodes/CallExpression.ts b/src/ast/nodes/CallExpression.ts index c0d1087f1dc..a3dffadf3f5 100644 --- a/src/ast/nodes/CallExpression.ts +++ b/src/ast/nodes/CallExpression.ts @@ -46,7 +46,6 @@ export default class CallExpression extends NodeBase implements DeoptimizableEnt private deoptimizableDependentExpressions: DeoptimizableEntity[] = []; private expressionsToBeDeoptimized = new Set(); private returnExpression: ExpressionEntity | null = null; - private wasPathDeoptmizedWhileOptimized = false; bind() { super.bind(); @@ -86,23 +85,11 @@ export default class CallExpression extends NodeBase implements DeoptimizableEnt deoptimizeCache() { if (this.returnExpression !== UNKNOWN_EXPRESSION) { - this.returnExpression = null; - const returnExpression = this.getReturnExpression(); - const { deoptimizableDependentExpressions, expressionsToBeDeoptimized } = this; - if (returnExpression !== UNKNOWN_EXPRESSION) { - // We need to replace here because it is possible new expressions are added - // while we are deoptimizing the old ones - this.deoptimizableDependentExpressions = []; - this.expressionsToBeDeoptimized = new Set(); - if (this.wasPathDeoptmizedWhileOptimized) { - returnExpression.deoptimizePath(UNKNOWN_PATH); - this.wasPathDeoptmizedWhileOptimized = false; - } - } - for (const expression of deoptimizableDependentExpressions) { + this.returnExpression = UNKNOWN_EXPRESSION; + for (const expression of this.deoptimizableDependentExpressions) { expression.deoptimizeCache(); } - for (const expression of expressionsToBeDeoptimized) { + for (const expression of this.expressionsToBeDeoptimized) { expression.deoptimizePath(UNKNOWN_PATH); } } @@ -117,7 +104,6 @@ export default class CallExpression extends NodeBase implements DeoptimizableEnt } const returnExpression = this.getReturnExpression(); if (returnExpression !== UNKNOWN_EXPRESSION) { - this.wasPathDeoptmizedWhileOptimized = true; returnExpression.deoptimizePath(path); } } @@ -212,9 +198,6 @@ export default class CallExpression extends NodeBase implements DeoptimizableEnt } hasEffectsWhenAccessedAtPath(path: ObjectPath, context: HasEffectsContext): boolean { - if (path.length === 0) { - return false; - } return ( !context.accessed.trackEntityAtPathAndGetIfTracked(path, this) && this.getReturnExpression().hasEffectsWhenAccessedAtPath(path, context) @@ -222,7 +205,6 @@ export default class CallExpression extends NodeBase implements DeoptimizableEnt } hasEffectsWhenAssignedAtPath(path: ObjectPath, context: HasEffectsContext): boolean { - if (path.length === 0) return true; return ( !context.assigned.trackEntityAtPathAndGetIfTracked(path, this) && this.getReturnExpression().hasEffectsWhenAssignedAtPath(path, context) diff --git a/test/form/samples/builtin-prototypes/literal/_expected.js b/test/form/samples/builtin-prototypes/literal/_expected.js index a3ef0d436f8..75d80d652e5 100644 --- a/test/form/samples/builtin-prototypes/literal/_expected.js +++ b/test/form/samples/builtin-prototypes/literal/_expected.js @@ -7,6 +7,7 @@ true.valueOf()(); (1).valueOf()(); 'ab'.charAt(1).unknown.unknown(); 'ab'.charAt(1)(); +null.unknown; 'ab'.replace( 'a', () => console.log( 1 ) || 'b' ); // deep property access is forbidden diff --git a/test/form/samples/builtin-prototypes/literal/main.js b/test/form/samples/builtin-prototypes/literal/main.js index 2400111b686..e91c6a56144 100644 --- a/test/form/samples/builtin-prototypes/literal/main.js +++ b/test/form/samples/builtin-prototypes/literal/main.js @@ -13,6 +13,7 @@ true.valueOf()(); (1).valueOf()(); 'ab'.charAt(1).unknown.unknown(); 'ab'.charAt(1)(); +null.unknown; // number prototype const _toExponential = (1).toExponential( 2 ).trim();