summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-01-03 17:07:10 +0000
committerMartin Odersky <odersky@gmail.com>2006-01-03 17:07:10 +0000
commitdbf2424c54aefddb50f6e7cb12d1fdc220bd9465 (patch)
tree37354cb10469167013b16dd47de26df0ba58cbb6 /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parentec25a32375121896a054a3428c3a7f5b1c867cee (diff)
downloadscala-dbf2424c54aefddb50f6e7cb12d1fdc220bd9465.tar.gz
scala-dbf2424c54aefddb50f6e7cb12d1fdc220bd9465.tar.bz2
scala-dbf2424c54aefddb50f6e7cb12d1fdc220bd9465.zip
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 6f9df75223..ce53aa40c2 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -40,7 +40,13 @@ trait Namers: Analyzer {
class Namer(val context: Context) {
- def setPrivate(sym: Symbol, mods: Modifiers): Symbol = sym;
+ val typer = newTyper(context);
+
+ def setPrivate(sym: Symbol, mods: Modifiers): Symbol = {
+ if (!mods.privateWithin.isEmpty)
+ sym.privateWithin = typer.qualifyingClassContext(EmptyTree, mods.privateWithin).owner;
+ sym
+ }
def updatePosFlags(sym: Symbol, pos: int, flags: int): Symbol = {
if (settings.debug.value) log("overwriting " + sym);
@@ -271,8 +277,6 @@ trait Namers: Analyzer {
// --- Lazy Type Assignment --------------------------------------------------
- val typer = newTyper(context);
-
def typeCompleter(tree: Tree) = new TypeCompleter(tree) {
override def complete(sym: Symbol): unit = {
if (settings.debug.value) log("defining " + sym);
@@ -499,7 +503,7 @@ trait Namers: Analyzer {
* - `abstract' modifier only for classes
* - `override' modifier never for classes
* - `def' modifier never for parameters of case classes
- * - declarations only in traits or abstract classes
+ * - declarations only in mixins or abstract classes
*/
def validate(sym: Symbol): unit = {
def checkNoConflict(flag1: int, flag2: int): unit =
@@ -512,13 +516,15 @@ trait Namers: Analyzer {
Flags.flagsToString(flag1) + " and " + Flags.flagsToString(flag2));
if (sym.hasFlag(IMPLICIT) && !sym.isTerm)
context.error(sym.pos, "`implicit' modifier can be used only for values, variables and methods");
+ if (sym.hasFlag(MIXIN) && !sym.isClass)
+ context.error(sym.pos, "`mixin' modifier can be used only for classes");
if (sym.hasFlag(ABSTRACT) && !sym.isClass)
context.error(sym.pos, "`abstract' modifier can be used only for classes; " +
"\nit should be omitted for abstract members");
if (sym.hasFlag(OVERRIDE | ABSOVERRIDE) && sym.isClass)
context.error(sym.pos, "`override' modifier not allowed for classes");
- if (sym.hasFlag(ABSOVERRIDE) && !sym.owner.isTrait)
- context.error(sym.pos, "`abstract override' modifier only allowed for members of traits");
+ if (sym.hasFlag(ABSOVERRIDE) && !sym.owner.isMixin)
+ context.error(sym.pos, "`abstract override' modifier only allowed for members of mixin classes");
if (sym.info.symbol == FunctionClass(0) &&
sym.isValueParameter && sym.owner.isClass && sym.owner.hasFlag(CASE))
context.error(sym.pos, "pass-by-name arguments not allowed for case class parameters");