From 929efec076d3ae5d2cf6d007c900c77602ed69e5 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Tue, 8 Nov 2016 10:44:54 +0100 Subject: [PATCH] Fix #1665: Check that != has an operand on the left. --- .../dotc/transform/InterceptedMethods.scala | 18 ++++++++++++++---- tests/pos/i1665.scala | 7 +++++++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 tests/pos/i1665.scala diff --git a/compiler/src/dotty/tools/dotc/transform/InterceptedMethods.scala b/compiler/src/dotty/tools/dotc/transform/InterceptedMethods.scala index 7c60e8d72286..21ca8dbfd132 100644 --- a/compiler/src/dotty/tools/dotc/transform/InterceptedMethods.scala +++ b/compiler/src/dotty/tools/dotc/transform/InterceptedMethods.scala @@ -96,14 +96,24 @@ class InterceptedMethods extends MiniPhaseTransform { s"that means the intercepted methods set doesn't match the code") tree } - lazy val Select(qual, _) = tree.fun + lazy val qual = tree.fun match { + case Select(qual, _) => qual + case ident @ Ident(_) => + ident.tpe match { + case TermRef(prefix: TermRef, _) => + tpd.ref(prefix) + case TermRef(prefix: ThisType, _) => + tpd.This(prefix.cls) + } + + } val Any_## = this.Any_## val Any_!= = defn.Any_!= val rewrite: Tree = tree.fun.symbol match { case Any_## => - poundPoundValue(qual) + poundPoundValue(qual) case Any_!= => - qual.select(defn.Any_==).appliedToArgs(tree.args).select(defn.Boolean_!) + qual.select(defn.Any_==).appliedToArgs(tree.args).select(defn.Boolean_!) /* /* else if (isPrimitiveValueClass(qual.tpe.typeSymbol)) { // todo: this is needed to support value classes @@ -121,7 +131,7 @@ class InterceptedMethods extends MiniPhaseTransform { // we get a primitive form of _getClass trying to target a boxed value // so we need replace that method name with Object_getClass to get correct behavior. // See SI-5568. - qual.selectWithSig(defn.Any_getClass).appliedToNone + qual.selectWithSig(defn.Any_getClass).appliedToNone case _ => tree } diff --git a/tests/pos/i1665.scala b/tests/pos/i1665.scala new file mode 100644 index 000000000000..b7e4a4eedd38 --- /dev/null +++ b/tests/pos/i1665.scala @@ -0,0 +1,7 @@ + +object Test { + !=(1) + !=("abc") + 1 != this + !=(this) +}