diff options
author | paltherr <paltherr@epfl.ch> | 2004-08-11 16:36:11 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-08-11 16:36:11 +0000 |
commit | dc580cf37ef6534b74dc86e83c5c1d527b524fcb (patch) | |
tree | d15f16f2f49f03961dac63ccdede48236f941eca | |
parent | a0b45320243d2db8498899f0b0ff14666f5f0c71 (diff) | |
download | scala-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.scala | 22 |
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. |