Skip to content

Commit bf85091

Browse files
committed
Take side-effects into account during rewriting
1 parent 2794657 commit bf85091

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/dotty/tools/dotc/transform/IsInstanceOfEvaluator.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,16 @@ class IsInstanceOfEvaluator extends MiniPhaseTransform { thisTransformer =>
9191
*
9292
* `scrutinee.isInstanceOf[Selector]` if `scrutinee eq null`
9393
*/
94-
def rewrite(tree: Select, to: Boolean): Tree =
95-
if (!to || !tree.qualifier.tpe.widen.derivesFrom(defn.AnyRefAlias))
96-
Literal(Constant(to))
97-
else
98-
Apply(tree.qualifier.select(defn.Object_ne), List(Literal(Constant(null))))
94+
def rewrite(tree: Select, to: Boolean): Tree = {
95+
val expr =
96+
if (!to || !tree.qualifier.tpe.widen.derivesFrom(defn.AnyRefAlias))
97+
Literal(Constant(to))
98+
else
99+
Apply(tree.qualifier.select(defn.Object_ne), List(Literal(Constant(null))))
100+
101+
if (!isPureExpr(tree.qualifier)) Block(List(tree.qualifier), expr)
102+
else expr
103+
}
99104

100105
/** Attempts to rewrite TypeApply to either `scrutinee ne null` or a
101106
* constant

0 commit comments

Comments
 (0)