summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-11-01 17:35:15 +0000
committerMartin Odersky <odersky@gmail.com>2007-11-01 17:35:15 +0000
commit3a4750825e3b3992adcddd4666f264d508e21f7a (patch)
tree1ed1eae169a180c46ceb23a3ab93a00d0e5deed0 /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
parentb14c210baba254900b2b999b4c648526a5a7846e (diff)
downloadscala-3a4750825e3b3992adcddd4666f264d508e21f7a.tar.gz
scala-3a4750825e3b3992adcddd4666f264d508e21f7a.tar.bz2
scala-3a4750825e3b3992adcddd4666f264d508e21f7a.zip
fixed ticket 91
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index fb10d2b1b2..ffecaf5a39 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -598,8 +598,23 @@ abstract class RefChecks extends InfoTransform {
.setPos(tree.pos)
.setSymbol(sym.moduleClass)
.setType(NoType);
- if (sym.isStatic) List(transform(cdef))
- else {
+ if (sym.isStatic) {
+ if (!sym.allOverriddenSymbols.isEmpty) {
+ val factory = sym.owner.newMethod(sym.pos, sym.name)
+ .setFlag(sym.flags | STABLE).resetFlag(MODULE)
+ .setInfo(PolyType(List(), sym.moduleClass.tpe))
+ sym.owner.info.decls.enter(factory)
+ val ddef =
+ atPhase(phase.next) {
+ localTyper.typed {
+ gen.mkModuleAccessDef(factory, sym.tpe)
+ }
+ }
+ transformTrees(List(cdef, ddef))
+ } else {
+ List(transform(cdef))
+ }
+ } else {
val vdef =
localTyper.typed {
atPos(tree.pos) {
@@ -611,7 +626,7 @@ abstract class RefChecks extends InfoTransform {
atPhase(phase.next) {
localTyper.typed {
if (sym.owner.isTrait) gen.mkModuleAccessDcl(sym)
- else gen.mkModuleAccessDef(sym, vdef.symbol)
+ else gen.mkCachedModuleAccessDef(sym, vdef.symbol)
}
}