summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-01-23 18:57:47 +0000
committerMartin Odersky <odersky@gmail.com>2006-01-23 18:57:47 +0000
commit91cb19d56861c80c2968e3ede2fef7ccab5f38ec (patch)
tree32ffaeae5a79367c0f96c66f0012b610d8914466 /src/compiler/scala/tools/nsc
parent9007f0b447640219b942d2fab29a0cd22c7b5b26 (diff)
downloadscala-91cb19d56861c80c2968e3ede2fef7ccab5f38ec.tar.gz
scala-91cb19d56861c80c2968e3ede2fef7ccab5f38ec.tar.bz2
scala-91cb19d56861c80c2968e3ede2fef7ccab5f38ec.zip
Diffstat (limited to 'src/compiler/scala/tools/nsc')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala39
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala11
3 files changed, 32 insertions, 20 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
index 4cf036339e..e8cece91d5 100644
--- a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
+++ b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
@@ -33,10 +33,12 @@ abstract class SymbolLoaders {
/** The kind of file that's processed by this loader */
protected def kindString: String;
private var ok = false;
+/*
private def setSource(sym: Symbol, sourceFile0: AbstractFile): unit = sym match {
case clazz: ClassSymbol => if (sourceFile0 != null) clazz.sourceFile = sourceFile0;
case _ => if (sourceFile0 != null) if (false) System.err.println("YYY: " + sym + " " + sourceFile0);
}
+*/
def sourceFile : AbstractFile = null;
protected def sourceString : String;
@@ -50,12 +52,14 @@ abstract class SymbolLoaders {
informTime("loaded " + source, start);
if (root.rawInfo != this) {
ok = true;
+/*
val sourceFile0 = if (sourceFile == null) (root match {
case clazz: ClassSymbol => clazz.sourceFile;
case _ => null;
}) else sourceFile;
- setSource(root.linkedModule, sourceFile0);
+ setSource(root.linkedModule.moduleClass, sourceFile0);
setSource(root.linkedClass, sourceFile0);
+*/
} else error(source + " does not define " + root)
} catch {
case ex: IOException =>
@@ -107,15 +111,20 @@ abstract class SymbolLoaders {
val name = newTermName(str);
val clazz = owner.newClass(Position.NOPOS, name.toTypeName);
val module = owner.newModule(Position.NOPOS, name);
- if (completer.sourceFile != null) clazz.sourceFile = completer.sourceFile;
- clazz.setInfo(completer);
- module.setInfo(completer);
- module.moduleClass.setInfo(moduleClassLoader);
- owner.info.decls.enter(clazz);
- owner.info.decls.enter(module);
- assert(clazz.linkedModule == module, module);
- assert(module.linkedClass == clazz, clazz);
- }
+ clazz.setInfo(completer);
+ module.setInfo(completer);
+ module.moduleClass.setInfo(moduleClassLoader);
+ owner.info.decls.enter(clazz);
+ owner.info.decls.enter(module);
+/*
+ if (completer.sourceFile != null) {
+ clazz.sourceFile = completer.sourceFile;
+ module.moduleClass.sourceFile = completer.sourceFile
+ }
+*/
+ assert(clazz.linkedModule == module, module);
+ assert(module.linkedClass == clazz, clazz);
+ }
val classes = new HashMap[String, ClassPath.Context];
val packages = new HashMap[String, ClassPath.Context];
@@ -192,16 +201,14 @@ abstract class SymbolLoaders {
protected def kindString: String = "symbl file";
}
*/
- class SourcefileLoader(sourceFile0: AbstractFile) extends SymbolLoader {
- protected def doComplete(root: Symbol): unit = global.currentRun.compileLate(sourceFile0);
+ class SourcefileLoader(override val sourceFile: AbstractFile) extends SymbolLoader {
+ protected def doComplete(root: Symbol): unit = global.currentRun.compileLate(sourceFile);
protected def kindString: String = "source file";
- override def sourceFile = sourceFile0;
- protected def sourceString = sourceFile0.toString();
+ protected def sourceString = sourceFile.toString();
}
object moduleClassLoader extends SymbolLoader {
- protected def doComplete(root: Symbol): unit =
- root.sourceModule.initialize;
+ protected def doComplete(root: Symbol): unit = root.sourceModule.initialize;
protected def kindString: String = "";
protected def sourceString = "";
}
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
index c73689ac98..538b481a52 100644
--- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
@@ -955,7 +955,7 @@ mixin class Symbols requires SymbolTable {
class ClassSymbol(initOwner: Symbol, initPos: int, initName: Name) extends TypeSymbol(initOwner, initPos, initName) {
private var source: AbstractFile = null;
- override def sourceFile = source
+ override def sourceFile = if (owner.isPackageClass) source else super.sourceFile;
override def sourceFile_=(f: AbstractFile): unit = { source = f }
private var thissym: Symbol = this;
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 1850d2dc29..5ab522b101 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -82,17 +82,21 @@ trait Namers requires Analyzer {
(if (sym.hasFlag(CASE)) "case class " + sym.name else sym.toString()));
def enterInScope(sym: Symbol): Symbol = {
+ // allow for overloaded methods
if (!(sym.isSourceMethod && sym.owner.isClass)) {
val prev = context.scope.lookupEntry(sym.name);
if (prev != null && prev.owner == context.scope && !prev.sym.isSourceMethod) {
+/*
if (sym.sourceFile == null && prev.sym.sourceFile == null) {}
+
else if (sym.sourceFile != null && prev.sym.sourceFile != null &&
sym.sourceFile.equals(prev.sym.sourceFile)) {}
else {
System.err.println("SYM: " + sym.sourceFile);
System.err.println("PRV: " + prev.sym.sourceFile);
- doubleDefError(sym.pos, prev.sym);
- }
+*/
+ doubleDefError(sym.pos, prev.sym);
+// }
}
}
context.scope enter sym;
@@ -151,7 +155,8 @@ trait Namers requires Analyzer {
m = context.owner.newModule(pos, name);
m.setFlag(flags);
m.moduleClass.setFlag(flags | inConstructorFlag);
- m.moduleClass.sourceFile = context.unit.source.getFile();
+ if (m.owner.isPackageClass)
+ m.moduleClass.sourceFile = context.unit.source.getFile();
enterInScope(m)
}
if (m.owner.isPackageClass) currentRun.symSource(m) = context.unit.source.getFile();