aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala
diff options
context:
space:
mode:
authorNicolas Stucki <nicolas.stucki@gmail.com>2017-01-11 18:41:58 +0100
committerNicolas Stucki <nicolas.stucki@gmail.com>2017-01-11 18:41:58 +0100
commitcf57534c6141593fbe2ac2fec9d101fa662ecf05 (patch)
tree440cddbb105cf313032ff9b6d1d433f379e098a8 /compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala
parent9f505a42a1c100eedab9748321a77d4bc345af61 (diff)
downloaddotty-cf57534c6141593fbe2ac2fec9d101fa662ecf05.tar.gz
dotty-cf57534c6141593fbe2ac2fec9d101fa662ecf05.tar.bz2
dotty-cf57534c6141593fbe2ac2fec9d101fa662ecf05.zip
Add PrimitiveForwarders and fix forwarding on value classes.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala16
1 files changed, 2 insertions, 14 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala b/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala
index c4d8f5e33..3a301167d 100644
--- a/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala
+++ b/compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala
@@ -38,14 +38,6 @@ import ResolveSuper._
*
* <mods> def f[Ts](ps1)...(psN): U = super[M].f[Ts](ps1)...(psN)
*
- * 3.3 (done in `methodPrimitiveForwarders`) For every method that is declared both
- * as generic with a primitive type and with a primitive type
- * `<mods> def f[Ts](ps1)...(psN): U` in trait M` and
- * `<mods> def f[Ts](ps1)...(psN): V = ...` in implemented in N`
- * where U is a primitive and V a polymorphic type (or vice versa) needs:
- *
- * <mods> def f[Ts](ps1)...(psN): U = super[N].f[Ts](ps1)...(psN)
- *
* A method in M needs to be disambiguated if it is concrete, not overridden in C,
* and if it overrides another concrete method.
*
@@ -73,11 +65,7 @@ class ResolveSuper extends MiniPhaseTransform with IdentityDenotTransformer { th
for (meth <- mixin.info.decls.toList if needsForwarder(meth))
yield polyDefDef(implementation(meth.asTerm), forwarder(meth))
- def methodPrimitiveForwarders: List[Tree] =
- for (meth <- mixins.flatMap(_.info.decls.flatMap(needsPrimitiveForwarderTo)).distinct)
- yield polyDefDef(implementation(meth.asTerm), forwarder(meth))
-
- val overrides = mixins.flatMap(mixin => superAccessors(mixin) ::: methodOverrides(mixin)) ::: methodPrimitiveForwarders
+ val overrides = mixins.flatMap(mixin => superAccessors(mixin) ::: methodOverrides(mixin))
cpy.Template(impl)(body = overrides ::: impl.body)
}
@@ -97,7 +85,7 @@ class ResolveSuper extends MiniPhaseTransform with IdentityDenotTransformer { th
private val PrivateOrAccessorOrDeferred = Private | Accessor | Deferred
}
-object ResolveSuper{
+object ResolveSuper {
/** Returns the symbol that is accessed by a super-accessor in a mixin composition.
*
* @param base The class in which everything is mixed together