diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-05-26 11:41:19 +0200 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-05-26 13:20:11 +0200 |
commit | fa81e54db9ebb36c7f76cbedfa98115e50a8f88c (patch) | |
tree | cb03fa0ab0fbaa43a0e4199fd5c5efa3b9701e92 /src | |
parent | fc419f55e29b7e77e9062d40a0864086f8d51bfa (diff) | |
download | dotty-fa81e54db9ebb36c7f76cbedfa98115e50a8f88c.tar.gz dotty-fa81e54db9ebb36c7f76cbedfa98115e50a8f88c.tar.bz2 dotty-fa81e54db9ebb36c7f76cbedfa98115e50a8f88c.zip |
Take side-effects into account during rewriting
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/IsInstanceOfEvaluator.scala | 15 |
1 files changed, 10 insertions, 5 deletions
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 |