aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/ast
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-14 16:47:55 +0100
committerMartin Odersky <odersky@gmail.com>2017-04-06 13:15:27 +0200
commit6545606cefaf8ec7090f8a601123bfae61b441a6 (patch)
tree8d8f261fb6c9807923ea60f4611b8c2b6e4f3ddf /compiler/src/dotty/tools/dotc/ast
parent62c2a1e2d6265cf7f096e4c4e51e4e883bce1514 (diff)
downloaddotty-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.scala6
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)