diff options
author | Martin Odersky <odersky@gmail.com> | 2006-08-21 17:35:21 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-08-21 17:35:21 +0000 |
commit | c4bc5bc26afd0356d38374955462dd8aea8782bd (patch) | |
tree | be6dc853810aba7223efca5253649d75b74dd5df /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | |
parent | 1536b1c67ecff52027a0c24d6791fb978fb88db4 (diff) | |
download | scala-c4bc5bc26afd0356d38374955462dd8aea8782bd.tar.gz scala-c4bc5bc26afd0356d38374955462dd8aea8782bd.tar.bz2 scala-c4bc5bc26afd0356d38374955462dd8aea8782bd.zip |
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index 6a9d3b9ab4..e5c82085fb 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -69,6 +69,8 @@ abstract class RefChecks extends InfoTransform { * 1.8.2 M is of type []S, O is of type ()T and S <: T, or * 1.8.3 M is of type ()S, O is of type []T and S <: T, or * 2. Check that only abstract classes have deferred members + * 3. Check that every member with an `override' modifier + * overrides some other member. */ private def checkAllOverrides(clazz: Symbol): unit = { @@ -239,6 +241,17 @@ abstract class RefChecks extends InfoTransform { else "")) } } + + // 3. Check that every defined member with an `override' modifier overrides some other member. + for (val member <- clazz.info.decls.toList) + if ((member hasFlag (OVERRIDE | ABSOVERRIDE)) && + (clazz.info.baseClasses.tail forall { + bc => member.matchingSymbol(bc, clazz.thisType) == NoSymbol + })) { + // for (val bc <- clazz.info.baseClasses.tail) System.out.println("" + bc + " has " + bc.info.decl(member.name) + ":" + bc.info.decl(member.name).tpe);//DEBUG + unit.error(member.pos, member.toString() + " overrides nothing"); + member resetFlag OVERRIDE + } } // Basetype Checking -------------------------------------------------------- |