diff options
author | Nicolas Stucki <nicolas.stucki@gmail.com> | 2017-01-11 18:41:58 +0100 |
---|---|---|
committer | Nicolas Stucki <nicolas.stucki@gmail.com> | 2017-01-11 18:41:58 +0100 |
commit | cf57534c6141593fbe2ac2fec9d101fa662ecf05 (patch) | |
tree | 440cddbb105cf313032ff9b6d1d433f379e098a8 /compiler/src/dotty/tools/dotc/transform/ResolveSuper.scala | |
parent | 9f505a42a1c100eedab9748321a77d4bc345af61 (diff) | |
download | dotty-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.scala | 16 |
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 |