aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-12-15 18:14:31 +0100
committerMartin Odersky <odersky@gmail.com>2016-12-17 18:34:27 +0100
commit740bd425d562e5e9d1744361553054413775cb73 (patch)
tree37c8ebc3415ebe25dd909c5dc6f7ea6d806d52e9
parenta6ae1a7b5b62b1b4e8b702c640305c3ae6d7da13 (diff)
downloaddotty-740bd425d562e5e9d1744361553054413775cb73.tar.gz
dotty-740bd425d562e5e9d1744361553054413775cb73.tar.bz2
dotty-740bd425d562e5e9d1744361553054413775cb73.zip
Drop Override flag for non-overriding direct methods
Also, integrate Jason's test case with the conditional.
-rw-r--r--compiler/src/dotty/tools/dotc/transform/ShortcutImplicits.scala7
-rw-r--r--tests/run/implicitFuns.scala6
2 files changed, 10 insertions, 3 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/ShortcutImplicits.scala b/compiler/src/dotty/tools/dotc/transform/ShortcutImplicits.scala
index a9fadaa56..31dfad757 100644
--- a/compiler/src/dotty/tools/dotc/transform/ShortcutImplicits.scala
+++ b/compiler/src/dotty/tools/dotc/transform/ShortcutImplicits.scala
@@ -89,11 +89,14 @@ class ShortcutImplicits extends MiniPhase with IdentityDenotTransformer { thisTr
}
/** A new `m$direct` method to accompany the given method `m` */
- private def newDirectMethod(sym: Symbol)(implicit ctx: Context): Symbol =
- sym.copy(
+ private def newDirectMethod(sym: Symbol)(implicit ctx: Context): Symbol = {
+ val direct = sym.copy(
name = sym.name.directName,
flags = sym.flags | Synthetic,
info = directInfo(sym.info))
+ if (direct.allOverriddenSymbols.isEmpty) direct.resetFlag(Override)
+ direct
+ }
/** The direct method `m$direct` that accompanies the given method `m`.
* Create one if it does not exist already.
diff --git a/tests/run/implicitFuns.scala b/tests/run/implicitFuns.scala
index 1bc5a2f6b..496fba0d3 100644
--- a/tests/run/implicitFuns.scala
+++ b/tests/run/implicitFuns.scala
@@ -1,5 +1,5 @@
object Test {
- def main(args: Array[String]) = {
+ def main(args: Array[String]): Unit = {
implicit val world: String = "world!"
@@ -53,6 +53,10 @@ object Test {
val c1: Int = c
Contextual.main(args)
+
+ def foo(s: String): Stringly[Int] = 42
+
+ (if ("".isEmpty) foo("") else foo("")).apply("")
}
}