Skip to content

Commit

Permalink
Improve coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed May 16, 2021
1 parent 224a4e1 commit 87e8029
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 21 deletions.
24 changes: 3 additions & 21 deletions src/ast/nodes/CallExpression.ts
Expand Up @@ -46,7 +46,6 @@ export default class CallExpression extends NodeBase implements DeoptimizableEnt
private deoptimizableDependentExpressions: DeoptimizableEntity[] = [];
private expressionsToBeDeoptimized = new Set<ExpressionEntity>();
private returnExpression: ExpressionEntity | null = null;
private wasPathDeoptmizedWhileOptimized = false;

bind() {
super.bind();
Expand Down Expand Up @@ -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);
}
}
Expand All @@ -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);
}
}
Expand Down Expand Up @@ -212,17 +198,13 @@ 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)
);
}

hasEffectsWhenAssignedAtPath(path: ObjectPath, context: HasEffectsContext): boolean {
if (path.length === 0) return true;
return (
!context.assigned.trackEntityAtPathAndGetIfTracked(path, this) &&
this.getReturnExpression().hasEffectsWhenAssignedAtPath(path, context)
Expand Down
1 change: 1 addition & 0 deletions test/form/samples/builtin-prototypes/literal/_expected.js
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions test/form/samples/builtin-prototypes/literal/main.js
Expand Up @@ -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();
Expand Down

0 comments on commit 87e8029

Please sign in to comment.