From fa81e54db9ebb36c7f76cbedfa98115e50a8f88c Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Thu, 26 May 2016 11:41:19 +0200 Subject: Take side-effects into account during rewriting --- .../tools/dotc/transform/IsInstanceOfEvaluator.scala | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/dotty/tools/dotc/transform/IsInstanceOfEvaluator.scala') diff --git a/src/dotty/tools/dotc/transform/IsInstanceOfEvaluator.scala b/src/dotty/tools/dotc/transform/IsInstanceOfEvaluator.scala index 14c3dea71..584628acd 100644 --- a/src/dotty/tools/dotc/transform/IsInstanceOfEvaluator.scala +++ b/src/dotty/tools/dotc/transform/IsInstanceOfEvaluator.scala @@ -91,11 +91,16 @@ class IsInstanceOfEvaluator extends MiniPhaseTransform { thisTransformer => * * `scrutinee.isInstanceOf[Selector]` if `scrutinee eq null` */ - def rewrite(tree: Select, to: Boolean): Tree = - if (!to || !tree.qualifier.tpe.widen.derivesFrom(defn.AnyRefAlias)) - Literal(Constant(to)) - else - Apply(tree.qualifier.select(defn.Object_ne), List(Literal(Constant(null)))) + def rewrite(tree: Select, to: Boolean): Tree = { + val expr = + if (!to || !tree.qualifier.tpe.widen.derivesFrom(defn.AnyRefAlias)) + Literal(Constant(to)) + else + Apply(tree.qualifier.select(defn.Object_ne), List(Literal(Constant(null)))) + + if (!isPureExpr(tree.qualifier)) Block(List(tree.qualifier), expr) + else expr + } /** Attempts to rewrite TypeApply to either `scrutinee ne null` or a * constant -- cgit v1.2.3