diff options
author | Martin Odersky <odersky@gmail.com> | 2004-01-08 17:00:15 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-01-08 17:00:15 +0000 |
commit | 3f6a2d9a54c85b77aec5040e82fe17bb95aab195 (patch) | |
tree | 23668b96f98c634f5a23954a14030583bf11a1fa /sources | |
parent | d8888a99cf2675e698744d1f21f90cdee42609b1 (diff) | |
download | scala-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.scala | 28 |
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 { |