Skip to content

Commit

Permalink
Make the check even more specific
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Jun 10, 2019
1 parent 1d4d93d commit c8a0591
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/ast/nodes/BinaryExpression.ts
@@ -1,6 +1,9 @@
import { DeoptimizableEntity } from '../DeoptimizableEntity';
import { ExecutionPathOptions } from '../ExecutionPathOptions';
import { ImmutableEntityPathTracker } from '../utils/ImmutableEntityPathTracker';
import {
EMPTY_IMMUTABLE_TRACKER,
ImmutableEntityPathTracker
} from '../utils/ImmutableEntityPathTracker';
import { EMPTY_PATH, LiteralValueOrUnknown, ObjectPath, UNKNOWN_VALUE } from '../values';
import ExpressionStatement from './ExpressionStatement';
import { LiteralValue } from './Literal';
Expand Down Expand Up @@ -37,12 +40,14 @@ const binaryOperators: {
'|': (left: any, right: any) => left | right
};

export default class BinaryExpression extends NodeBase {
export default class BinaryExpression extends NodeBase implements DeoptimizableEntity {
left!: ExpressionNode;
operator!: keyof typeof binaryOperators;
right!: ExpressionNode;
type!: NodeType.tBinaryExpression;

deoptimizeCache(): void {}

getLiteralValueAtPath(
path: ObjectPath,
recursionTracker: ImmutableEntityPathTracker,
Expand All @@ -63,7 +68,11 @@ export default class BinaryExpression extends NodeBase {

hasEffects(options: ExecutionPathOptions): boolean {
// support some implicit type coercion runtime errors
if (this.operator === '+' && this.parent instanceof ExpressionStatement) {
if (
this.operator === '+' &&
this.parent instanceof ExpressionStatement &&
this.left.getLiteralValueAtPath(EMPTY_PATH, EMPTY_IMMUTABLE_TRACKER, this) === ''
) {
return true;
}
return super.hasEffects(options);
Expand Down

0 comments on commit c8a0591

Please sign in to comment.