aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-14 17:49:32 +0100
committerMartin Odersky <odersky@gmail.com>2017-04-06 13:15:27 +0200
commitbf2f77e112bbc1d242a4f91b113ba3cc14c3dcc8 (patch)
treeb1c6dea4b8bfdf99bb61fd3acfe022a86b4b10ad
parent53d5311f59689f73f2713bf5b704d6def8b2884e (diff)
downloaddotty-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.scala8
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)