summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-08-11 16:36:11 +0000
committerpaltherr <paltherr@epfl.ch>2004-08-11 16:36:11 +0000
commitdc580cf37ef6534b74dc86e83c5c1d527b524fcb (patch)
treed15f16f2f49f03961dac63ccdede48236f941eca
parenta0b45320243d2db8498899f0b0ff14666f5f0c71 (diff)
downloadscala-dc580cf37ef6534b74dc86e83c5c1d527b524fcb.tar.gz
scala-dc580cf37ef6534b74dc86e83c5c1d527b524fcb.tar.bz2
scala-dc580cf37ef6534b74dc86e83c5c1d527b524fcb.zip
- Changed method updateFlagsAndPos to also upda...
- Changed method updateFlagsAndPos to also update the linked symbols
-rw-r--r--sources/scala/tools/scalac/typechecker/Analyzer.scala22
1 files changed, 15 insertions, 7 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala
index 4a62d8cdef..46692e3508 100644
--- a/sources/scala/tools/scalac/typechecker/Analyzer.scala
+++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala
@@ -706,13 +706,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
def moduleSymbol(pos: int, name: Name, owner: Symbol, flags: int, scope: Scope): Symbol = {
val symbol = termSymbolOrNone(scope, pos, name, flags | MODUL | FINAL);
- if (symbol.isNone()) owner.newModule(pos, flags, name) else {
- val clasz = symbol.moduleClass();
- updateFlagsAndPos(clasz, pos, clasz.flags & ~(JAVA | PACKAGE));
- val constr = clasz.primaryConstructor();
- updateFlagsAndPos(constr, pos, constr.flags & ~JAVA);
- symbol
- }
+ if (symbol.isNone()) owner.newModule(pos, flags, name) else symbol;
}
def termSymbol(pos: int, name: Name, owner: Symbol, flags: int, scope: Scope): Symbol = {
@@ -779,6 +773,20 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val oldflags = symbol.flags & (INITIALIZED | LOCKED);
val newflags = flags & ~(INITIALIZED | LOCKED);
symbol.flags = oldflags | newflags;
+ if (symbol.isModule()) {
+ // here we repeat what is done in the constructor of ModuleClassSymbol
+ val clasz = symbol.moduleClass();
+ val classFlags = (flags & MODULE2CLASSFLAGS) | MODUL | FINAL;
+ updateFlagsAndPos(clasz, pos, classFlags);
+ clasz.primaryConstructor().flags =
+ clasz.primaryConstructor().flags | PRIVATE;
+ }
+ if (symbol.isType()) {
+ // here we repeat what is done in the constructor of TypeSymbol
+ val constr = symbol.primaryConstructor();
+ val constrFlags = flags & CONSTRFLAGS;
+ updateFlagsAndPos(constr, pos, constrFlags);
+ }
}
/** Enter symbol `sym' in current scope. Check for double definitions.