diff options
author | Martin Odersky <odersky@gmail.com> | 2012-09-16 20:55:44 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-09-17 16:28:09 +0200 |
commit | c30a9bddc49592fef6d054cd0ce4e7ec2c035f71 (patch) | |
tree | 21f8401798184c34be4239cd6ce4f6dc6fa142c0 /src | |
parent | 61c83d2903f1c68c943ea646e75b4ca32d75f991 (diff) | |
download | scala-c30a9bddc49592fef6d054cd0ce4e7ec2c035f71.tar.gz scala-c30a9bddc49592fef6d054cd0ce4e7ec2c035f71.tar.bz2 scala-c30a9bddc49592fef6d054cd0ce4e7ec2c035f71.zip |
Fixes SI-6337 by disallowing nested value classes.
It seems for the moment too hard to allow this, and the functionality to have value classes wrap other value classes does not seem essential.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala | 3 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala b/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala index 0820d3e714..e09f30ae31 100644 --- a/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala +++ b/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala @@ -135,7 +135,8 @@ abstract class ExtensionMethods extends Transform with TypingTransformers { tree match { case Template(_, _, _) => if (currentOwner.isDerivedValueClass) { - checkNonCyclic(currentOwner.pos, Set(), currentOwner) + /* This is currently redundant since value classes may not + checkNonCyclic(currentOwner.pos, Set(), currentOwner) */ extensionDefs(currentOwner.companionModule) = new mutable.ListBuffer[Tree] currentOwner.primaryConstructor.makeNotPrivate(NoSymbol) super.transform(tree) diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index ce1c6089fb..6689db8156 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -1393,8 +1393,10 @@ trait Typers extends Modes with Adaptations with Tags { case List(acc) => def isUnderlyingAcc(sym: Symbol) = sym == acc || acc.hasAccessorFlag && sym == acc.accessed - if (acc.accessBoundary(clazz) != rootMirror.RootClass) + if (acc.accessBoundary(clazz) != rootMirror.RootClass) unit.error(acc.pos, "value class needs to have a publicly accessible val parameter") + else if (acc.tpe.typeSymbol.isDerivedValueClass) + unit.error(acc.pos, "value class may not wrap another user-defined value class") for (stat <- body) if (!treeInfo.isAllowedInUniversalTrait(stat) && !isUnderlyingAcc(stat.symbol)) unit.error(stat.pos, |