aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-07-02 14:07:57 +0200
committerMartin Odersky <odersky@gmail.com>2015-07-02 14:08:12 +0200
commit257bf52c3d205359896e3c391274091b3fab732e (patch)
treeda78a487648f20ec17f3217ac3d01ea511ceaf31 /src/dotty/tools/dotc/typer/RefChecks.scala
parentb0084dafdc4742960696829c358cfbbbcb6e5e45 (diff)
downloaddotty-257bf52c3d205359896e3c391274091b3fab732e.tar.gz
dotty-257bf52c3d205359896e3c391274091b3fab732e.tar.bz2
dotty-257bf52c3d205359896e3c391274091b3fab732e.zip
Check that value classes are static
Diffstat (limited to 'src/dotty/tools/dotc/typer/RefChecks.scala')
-rw-r--r--src/dotty/tools/dotc/typer/RefChecks.scala10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/typer/RefChecks.scala b/src/dotty/tools/dotc/typer/RefChecks.scala
index d9b62badc..6a31b66aa 100644
--- a/src/dotty/tools/dotc/typer/RefChecks.scala
+++ b/src/dotty/tools/dotc/typer/RefChecks.scala
@@ -655,12 +655,14 @@ object RefChecks {
}
/** Verify classes extending AnyVal meet the requirements */
- private def checkAnyValSubclass(clazz: Symbol)(implicit ctx: Context) =
+ private def checkDerivedValueClass(clazz: Symbol)(implicit ctx: Context) =
if (isDerivedValueClass(clazz)) {
if (clazz.is(Trait))
ctx.error("Only classes (not traits) are allowed to extend AnyVal", clazz.pos)
- else if (clazz.is(Abstract))
+ if (clazz.is(Abstract))
ctx.error("`abstract' modifier cannot be used with value classes", clazz.pos)
+ if (!clazz.isStatic)
+ ctx.error("value class cannot be an inner class", clazz.pos)
}
type LevelAndIndex = immutable.Map[Symbol, (LevelInfo, Int)]
@@ -708,7 +710,7 @@ import RefChecks._
* - only one overloaded alternative defines default arguments
* - applyDynamic methods are not overloaded
* - all overrides conform to rules laid down by `checkAllOverrides`.
- * - any value classes conform to rules laid down by `checkAnyValSubClass`.
+ * - any value classes conform to rules laid down by `checkDerivedValueClass`.
* - this(...) constructor calls do not forward reference other definitions in their block (not even lazy vals).
* - no forward reference in a local block jumps over a non-lazy val definition.
* - a class and its companion object do not both define a class or module with the same name.
@@ -778,7 +780,7 @@ class RefChecks extends MiniPhase { thisTransformer =>
checkParents(cls)
checkCompanionNameClashes(cls)
checkAllOverrides(cls)
- checkAnyValSubclass(cls)
+ checkDerivedValueClass(cls)
tree
}