diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-14 16:47:55 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-06 13:15:27 +0200 |
commit | 6545606cefaf8ec7090f8a601123bfae61b441a6 (patch) | |
tree | 8d8f261fb6c9807923ea60f4611b8c2b6e4f3ddf /compiler/src/dotty/tools/dotc/ast | |
parent | 62c2a1e2d6265cf7f096e4c4e51e4e883bce1514 (diff) | |
download | dotty-6545606cefaf8ec7090f8a601123bfae61b441a6.tar.gz dotty-6545606cefaf8ec7090f8a601123bfae61b441a6.tar.bz2 dotty-6545606cefaf8ec7090f8a601123bfae61b441a6.zip |
Encode variances in parameter names
This leads to a slight overall simplification, harmonizes pickle
format with internal representation, and makes MethodTypes and
PolyTypes more similar to each other.
I believe the change is useful as it is, but in particular it is
a useful step for an eventual unification of MethodTypes and
PolyTypes.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/ast')
-rw-r--r-- | compiler/src/dotty/tools/dotc/ast/Desugar.scala | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index 8499330fb..5f9d48798 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -242,6 +242,12 @@ object desugar { * class C { type v C$T; type v T = C$T } */ def typeDef(tdef: TypeDef)(implicit ctx: Context): Tree = { + val name = + if (tdef.name.hasVariance && tdef.mods.is(Param)) { + ctx.error(em"type parameter name may not start with `+' or `-'", tdef.pos) + ("$" + tdef.name).toTypeName + } + else tdef.name if (tdef.mods is PrivateLocalParam) { val tparam = cpy.TypeDef(tdef)(name = tdef.name.expandedName(ctx.owner)) .withMods(tdef.mods &~ PrivateLocal | ExpandedName) |