summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-07-18 21:00:52 +0000
committerMartin Odersky <odersky@gmail.com>2006-07-18 21:00:52 +0000
commitcedd6024fbd9a53dd4e83a6494b64df9e0a0e599 (patch)
tree880f9b23ae0d555ee7b3d971f13e92badb755d0f
parentb56a24bbc73933ea306bd6377e7c236ac146a6bf (diff)
downloadscala-cedd6024fbd9a53dd4e83a6494b64df9e0a0e599.tar.gz
scala-cedd6024fbd9a53dd4e83a6494b64df9e0a0e599.tar.bz2
scala-cedd6024fbd9a53dd4e83a6494b64df9e0a0e599.zip
Fixed bugs 663,664,665
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala1
-rw-r--r--src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala6
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala3
3 files changed, 5 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index 77aed1d1c9..7a42c54158 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -534,7 +534,6 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
}
private def resetPackageClass(pclazz: Symbol): unit = {
- assert(pclazz.isPackageClass, pclazz)
atPhase(firstPhase) {
pclazz.setInfo(atPhase(typerPhase)(pclazz.info))
}
diff --git a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
index d225e104db..bd2edaa47b 100644
--- a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
+++ b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
@@ -319,7 +319,7 @@ abstract class ExplicitOuter extends InfoTransform {
* 2. Remove private modifiers from members M of mixins T. (@see makeNotPrivate)
* 3. Remove `private' modifier from class members M that are accessed from an inner class.
* 4. Remove `protected' modifier from class members M that are accessed
- * without a super qualifier accessed from an inner class.
+ * without a super qualifier accessed from an inner class or trait.
* 5. Remove `private' and `protected' modifiers from type symbols
*/
private val secondTransformer = new Transformer {
@@ -337,9 +337,9 @@ abstract class ExplicitOuter extends InfoTransform {
val enclClass = currentOwner.enclClass
if (enclClass != sym.owner && enclClass != sym.moduleClass) // (3)
sym.makeNotPrivate(sym.owner);
+ val qsym = qual.tpe.widen.symbol
if ((sym hasFlag PROTECTED) && //(4)
- !(qual.isInstanceOf[Super] ||
- (qual.tpe.widen.symbol isSubClass enclClass)))
+ (qsym.isTrait || !(qual.isInstanceOf[Super] || (qsym isSubClass enclClass))))
sym setFlag notPROTECTED;
tree1
case _ =>
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index a2171bf600..1d623aaf99 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -504,6 +504,7 @@ trait Typers requires Analyzer {
def adaptToMember(qual: Tree, name: Name, tp: Type): Tree = {
val qtpe = qual.tpe.widen;
+ Console.println("adapt to mem "+qual+":"+qtpe+"/"+tp)//debug
if (qual.isTerm && (qual.symbol == null || !qual.symbol.isTerm || qual.symbol.isValue) &&
phase.id <= currentRun.typerPhase.id && !qtpe.isError && !tp.isError &&
qtpe.symbol != AllRefClass && qtpe.symbol != AllClass && qtpe != WildcardType) {
@@ -1289,7 +1290,7 @@ trait Typers requires Analyzer {
case _ =>
qual.tpe.nonLocalMember(name)
}
- if (sym == NoSymbol) {
+ if (sym == NoSymbol && name != nme.CONSTRUCTOR && (mode & EXPRmode) != 0) {
val qual1 = adaptToName(qual, name)
if (qual1 ne qual) return typed(copy.Select(tree, qual1, name), mode, pt)
}