diff options
author | Martin Odersky <odersky@gmail.com> | 2017-03-14 17:49:32 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-06 13:15:27 +0200 |
commit | bf2f77e112bbc1d242a4f91b113ba3cc14c3dcc8 (patch) | |
tree | b1c6dea4b8bfdf99bb61fd3acfe022a86b4b10ad | |
parent | 53d5311f59689f73f2713bf5b704d6def8b2884e (diff) | |
download | dotty-bf2f77e112bbc1d242a4f91b113ba3cc14c3dcc8.tar.gz dotty-bf2f77e112bbc1d242a4f91b113ba3cc14c3dcc8.tar.bz2 dotty-bf2f77e112bbc1d242a4f91b113ba3cc14c3dcc8.zip |
Don't let illegal parameter names propagate into types
-rw-r--r-- | compiler/src/dotty/tools/dotc/ast/Desugar.scala | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index 5f9d48798..1531e67b3 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -242,20 +242,20 @@ object desugar { * class C { type v C$T; type v T = C$T } */ def typeDef(tdef: TypeDef)(implicit ctx: Context): Tree = { - val name = + val checkedName = 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)) + val tparam = cpy.TypeDef(tdef)(name = checkedName.expandedName(ctx.owner)) .withMods(tdef.mods &~ PrivateLocal | ExpandedName) - val alias = cpy.TypeDef(tdef)(rhs = refOfDef(tparam)) + val alias = cpy.TypeDef(tdef)(name = checkedName, rhs = refOfDef(tparam)) .withMods(tdef.mods & VarianceFlags | PrivateLocalParamAccessor | Synthetic) Thicket(tparam, alias) } - else tdef + else cpy.TypeDef(tdef)(name = checkedName) } @sharable private val synthetic = Modifiers(Synthetic) |