summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-09-20 16:28:04 +0000
committerMartin Odersky <odersky@gmail.com>2006-09-20 16:28:04 +0000
commit0e61f9c37e37e8338178b144b9294cb085100289 (patch)
treee1e6b4f9728c0491c51beab7254505f745a634ca
parentbc14c4aa87d8df3569785fa77fe67693c57cf6c7 (diff)
downloadscala-0e61f9c37e37e8338178b144b9294cb085100289.tar.gz
scala-0e61f9c37e37e8338178b144b9294cb085100289.tar.bz2
scala-0e61f9c37e37e8338178b144b9294cb085100289.zip
fixed bug724
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala8
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala3
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Contexts.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala2
4 files changed, 8 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
index 3b7c2f6874..ff76e46366 100644
--- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
@@ -118,7 +118,7 @@ trait Symbols requires SymbolTable {
new ThisSkolem(owner, pos, name, this)
.setFlag(SYNTHETIC | FINAL)
final def newImport(pos: PositionType) =
- newValue(pos, nme.IMPORT).setFlag(SYNTHETIC)
+ newValue(pos, nme.IMPORT)
final def newOverloaded(pre: Type, alternatives: List[Symbol]): Symbol =
newValue(alternatives.head.pos, alternatives.head.name)
.setFlag(OVERLOADED)
@@ -848,9 +848,10 @@ trait Symbols requires SymbolTable {
final def kindString: String =
if (isPackageClass)
if (settings.debug.value) "package class" else "package"
+ else if (isModuleClass)
+ if (settings.debug.value) "singleton class" else "object"
else if (isAnonymousClass) "template"
else if (isRefinementClass) ""
- else if (isModuleClass) "singleton class"
else if (isTrait) "trait"
else if (isClass) "class"
else if (isType) "type"
@@ -904,8 +905,7 @@ trait Symbols requires SymbolTable {
final def locationString: String =
if (owner.isClass &&
(!owner.isAnonymousClass && !owner.isRefinementClass || settings.debug.value))
- " in " + (if (owner.isModuleClass) "object " + owner.nameString else owner)
- else ""
+ " in " + owner else ""
/** String representation of symbol's definition following its name */
final def infoString(tp: Type): String = {
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index d083a0ba98..554534a9d9 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -651,7 +651,8 @@ trait Types requires SymbolTable {
val index = new Array[int](nparents)
var i = 0
for (val p <- parents) {
- pclosure(i) = p.closure
+ pclosure(i) = if (p.closure == null) AnyClass.info.closure // cyclic reference
+ else p.closure
index(i) = 0
i = i + 1
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
index cfedec9775..69782a7483 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
@@ -39,7 +39,7 @@ trait Contexts requires Analyzer {
val qual = gen.mkAttributedStableRef(pkg)
sc = sc.makeNewImport(
Import(qual, List(Pair(nme.WILDCARD, null)))
- .setSymbol(NoSymbol.newImport(NoPos).setInfo(ImportType(qual)))
+ .setSymbol(NoSymbol.newImport(NoPos).setFlag(SYNTHETIC).setInfo(ImportType(qual)))
.setType(NoType))
sc.depth = sc.depth + 1
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index e7e6a946a4..25b30c9c35 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -516,7 +516,7 @@ trait Namers requires Analyzer {
val base = expr1.tpe
typer.checkStable(expr1)
def checkNotRedundant(pos: PositionType, from: Name, to: Name): boolean = {
- if (!base.symbol.isPackage && base.member(from) != NoSymbol) {
+ if (!tree.symbol.hasFlag(SYNTHETIC) && base.member(from) != NoSymbol) {
val e = context.scope.lookupEntry(to)
def warnRedundant(sym: Symbol) =
context.unit.warning(pos, "imported `"+to+