From cf57534c6141593fbe2ac2fec9d101fa662ecf05 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 11 Jan 2017 18:41:58 +0100 Subject: Add PrimitiveForwarders and fix forwarding on value classes. --- .../src/dotty/tools/dotc/transform/ResolveSuper.scala | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) (limited to 'compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala') 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._ * * 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 - * ` def f[Ts](ps1)...(psN): U` in trait M` and - * ` def f[Ts](ps1)...(psN): V = ...` in implemented in N` - * where U is a primitive and V a polymorphic type (or vice versa) needs: - * - * 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 -- cgit v1.2.3