summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-01-08 17:00:15 +0000
committerMartin Odersky <odersky@gmail.com>2004-01-08 17:00:15 +0000
commit3f6a2d9a54c85b77aec5040e82fe17bb95aab195 (patch)
tree23668b96f98c634f5a23954a14030583bf11a1fa /sources
parentd8888a99cf2675e698744d1f21f90cdee42609b1 (diff)
downloadscala-3f6a2d9a54c85b77aec5040e82fe17bb95aab195.tar.gz
scala-3f6a2d9a54c85b77aec5040e82fe17bb95aab195.tar.bz2
scala-3f6a2d9a54c85b77aec5040e82fe17bb95aab195.zip
*** empty log message ***
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalac/typechecker/Analyzer.scala28
1 files changed, 20 insertions, 8 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala
index c80cf712ab..155ef37c2e 100644
--- a/sources/scala/tools/scalac/typechecker/Analyzer.scala
+++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala
@@ -2454,20 +2454,16 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val constr: Symbol = c.allConstructors();
val fn0: Tree = fn1;
fn1 = gen.mkRef(fn1.pos, pre, constr);
+ var enclClassOrConstructorContext = Context.NONE;
if (constr.owner().isPackage()) {
var c = context;
while (c != Context.NONE &&
!c.tree.isInstanceOf[Tree$ClassDef] &&
!c.tree.isInstanceOf[Tree$Template])
c = c.outer;
- if (c.owner.isConstructor())
- // we are in a superclass constructor call
- fn1.setType(checkAccessible(
- fn1.pos, constr, fn1.getType(), make.Super(tree.pos, Names.EMPTY.toTypeName(), Names.EMPTY.toTypeName()), c.owner.constructorClass().typeConstructor()));
- else
- fn1.setType(checkAccessible(
- fn1.pos, constr, fn1.getType(), c.tree, c.owner.typeConstructor()));
- } else {
+ enclClassOrConstructorContext = c
+ }
+ if (enclClassOrConstructorContext == Context.NONE) {
fn1 match {
case Tree$Select(fn1qual, _) =>
fn1.setType(checkAccessible(
@@ -2477,6 +2473,22 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
fn1.setType(checkAccessible(
fn1.pos, constr, fn1.getType(), Tree.Empty, constr.owner().getType()));
}
+ } else {
+ val cowner = enclClassOrConstructorContext.owner;
+ if (cowner.isConstructor())
+ // we are in a superclass constructor call
+ fn1.setType(
+ checkAccessible(
+ fn1.pos, constr, fn1.getType(),
+ make.Super(tree.pos,
+ Names.EMPTY.toTypeName(),
+ Names.EMPTY.toTypeName()),
+ cowner.constructorClass().typeConstructor()));
+ else
+ fn1.setType(checkAccessible(
+ fn1.pos, constr, fn1.getType(),
+ enclClassOrConstructorContext.tree,
+ cowner.typeConstructor()));
}
if (tsym == c) {
fn0 match {