aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/core/Definitions.scala2
-rw-r--r--src/dotty/tools/dotc/core/Flags.scala4
-rw-r--r--src/dotty/tools/dotc/core/Scopes.scala3
-rw-r--r--src/dotty/tools/dotc/core/SymDenotations.scala10
-rw-r--r--src/dotty/tools/dotc/core/SymbolLoaders.scala5
-rw-r--r--src/dotty/tools/dotc/core/TypeOps.scala4
-rw-r--r--src/dotty/tools/dotc/core/pickling/ClassfileParser.scala2
-rw-r--r--src/dotty/tools/dotc/core/pickling/UnPickler.scala26
-rw-r--r--src/dotty/tools/dotc/reporting/Reporter.scala3
-rw-r--r--src/test/showClass.scala38
10 files changed, 51 insertions, 46 deletions
diff --git a/src/dotty/tools/dotc/core/Definitions.scala b/src/dotty/tools/dotc/core/Definitions.scala
index 95ad16b54..8ac67dd02 100644
--- a/src/dotty/tools/dotc/core/Definitions.scala
+++ b/src/dotty/tools/dotc/core/Definitions.scala
@@ -66,7 +66,7 @@ class Definitions(implicit ctx: Context) {
lazy val AnyRefAlias: TypeSymbol = {
val anyRef = ctx.newSymbol(
ScalaPackageClass, tpnme.AnyRef, EmptyFlags, TypeAlias(ObjectClass.typeConstructor))
- ScalaPackageClass.preCompleteDecls.openForMutations.enter(anyRef) // @@@ ScalaPackageClass.enter(anyRef, ScalaPackageClass.preCompleteDecls)
+ ScalaPackageClass.enter(anyRef, ScalaPackageClass.preCompleteDecls)
anyRef
}
lazy val AnyClass: ClassSymbol = ctx.newCompleteClassSymbol(
diff --git a/src/dotty/tools/dotc/core/Flags.scala b/src/dotty/tools/dotc/core/Flags.scala
index 43d5e5cd1..4e7e74862 100644
--- a/src/dotty/tools/dotc/core/Flags.scala
+++ b/src/dotty/tools/dotc/core/Flags.scala
@@ -328,7 +328,7 @@ object Flags {
final val Touched = commonFlag(48, "<touched>")
/** Class is not allowed to accept new members because fingerprint of subclass has been taken */
- final val Frozen = typeFlag(49, "<frozen>")
+ final val Frozen = commonFlag(49, "<frozen>")
/** An error symbol */
final val Erroneous = commonFlag(50, "<is-error>")
@@ -371,7 +371,7 @@ object Flags {
/** Flags guaranteed to be set upon symbol creation */
final val FromStartFlags =
AccessFlags | Module | Package | Deferred | Param | Scala2ExistentialCommon | Touched |
- Static | CovariantCommon | ContravariantCommon | ExpandedName | AccessorOrSealed
+ Static | CovariantCommon | ContravariantCommon | ExpandedName | AccessorOrSealed | Frozen
assert(FromStartFlags.isTermFlags && FromStartFlags.isTypeFlags)
// TODO: Should check that FromStartFlags do not changed in completion
diff --git a/src/dotty/tools/dotc/core/Scopes.scala b/src/dotty/tools/dotc/core/Scopes.scala
index f3fde7209..d39194bf1 100644
--- a/src/dotty/tools/dotc/core/Scopes.scala
+++ b/src/dotty/tools/dotc/core/Scopes.scala
@@ -108,9 +108,6 @@ object Scopes {
syms
}
- /** Cast this scope to a mutable scope @@@ */
- final def openForMutations: MutableScope = this.asInstanceOf[MutableScope]
-
final def toText(implicit ctx: Context): Text = ctx.toText(this)
}
diff --git a/src/dotty/tools/dotc/core/SymDenotations.scala b/src/dotty/tools/dotc/core/SymDenotations.scala
index 3a6737403..93de8e4ff 100644
--- a/src/dotty/tools/dotc/core/SymDenotations.scala
+++ b/src/dotty/tools/dotc/core/SymDenotations.scala
@@ -98,11 +98,11 @@ object SymDenotations {
private def completeFrom(completer: LazyType): Unit = {
if (_flags is Touched) throw new CyclicReference(this)
_flags |= Touched
- Context.theBase.initialCtx.traceIndented( // !!! DEBUG
- ">>>> completing "+this.debugString+"/"+owner.id,
- "<<<< completed: "+this.debugString) {
+// Context.theBase.initialCtx.traceIndented( // !!! DEBUG
+// ">>>> completing "+this.debugString+"/"+owner.id,
+// "<<<< completed: "+this.debugString) {
completer.complete(this)
- }
+// }
}
protected[core] final def info_=(tp: Type) = {
@@ -740,7 +740,7 @@ object SymDenotations {
var fp = FingerPrint()
var e = info.decls.lastEntry
while (e != null) {
- fp.include(name)
+ fp.include(e.sym.name)
e = e.prev
}
var ps = classInfo.classParents
diff --git a/src/dotty/tools/dotc/core/SymbolLoaders.scala b/src/dotty/tools/dotc/core/SymbolLoaders.scala
index c2b873bc9..cb20b894a 100644
--- a/src/dotty/tools/dotc/core/SymbolLoaders.scala
+++ b/src/dotty/tools/dotc/core/SymbolLoaders.scala
@@ -29,10 +29,7 @@ class SymbolLoaders {
owner: Symbol, member: Symbol,
completer: SymbolLoader, scope: Scope = EmptyScope)(implicit ctx: Context): Symbol = {
assert(scope.lookup(member.name) == NoSymbol, owner.fullName + "." + member.name)
- scope match {
- case scope: MutableScope => scope.enter(member)
- case _ => owner.asClass.enter(member)
- }
+ owner.asClass.enter(member, scope)
member
}
diff --git a/src/dotty/tools/dotc/core/TypeOps.scala b/src/dotty/tools/dotc/core/TypeOps.scala
index c19b0e387..847fb0ebd 100644
--- a/src/dotty/tools/dotc/core/TypeOps.scala
+++ b/src/dotty/tools/dotc/core/TypeOps.scala
@@ -165,7 +165,7 @@ trait TypeOps { this: Context =>
* to a list of typerefs, by converting all refinements to member
* definitions in scope `decls`. Can add members to `decls` as a side-effect.
*/
- def normalizeToRefs(parents: List[Type], cls: ClassSymbol, decls: MutableScope /*@@@*/): List[TypeRef] = {
+ def normalizeToRefs(parents: List[Type], cls: ClassSymbol, decls: Scope): List[TypeRef] = {
// println(s"normalizing $parents of $cls in ${cls.owner}") // !!! DEBUG
var refinements = Map[TypeName, Type]()
var formals = Map[TypeName, Symbol]()
@@ -190,7 +190,7 @@ trait TypeOps { this: Context =>
assert(decls.lookup(name) == NoSymbol, // DEBUG
s"redefinition of ${decls.lookup(name).debugString} in ${cls.showLocated}")
val sym = ctx.newSymbol(cls, name, formal.flags & RetainedTypeArgFlags, bounds)
- decls.enter(sym) // @@@ cls.enter(sym, decls)
+ cls.enter(sym, decls)
}
parentRefs
}
diff --git a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
index 60dfc9d9b..11dcd2152 100644
--- a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
+++ b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala
@@ -125,7 +125,7 @@ class ClassfileParser(
instanceScope.lookup(nme.CONSTRUCTOR) == NoSymbol && !(sflags is Flags.Interface)
if (needsConstructor)
- instanceScope enter cctx.newDefaultConstructor(classRoot.symbol.asClass)
+ classRoot.enter(cctx.newDefaultConstructor(classRoot.symbol.asClass), instanceScope)
classInfo = parseAttributes(classRoot.symbol, classInfo)
setClassInfo(classRoot, classInfo)
diff --git a/src/dotty/tools/dotc/core/pickling/UnPickler.scala b/src/dotty/tools/dotc/core/pickling/UnPickler.scala
index 982cbd622..f86d7cc26 100644
--- a/src/dotty/tools/dotc/core/pickling/UnPickler.scala
+++ b/src/dotty/tools/dotc/core/pickling/UnPickler.scala
@@ -29,7 +29,7 @@ object UnPickler {
}
/** Temporary type for classinfos, will be decomposed on completion of the class */
- case class TempClassInfoType(parentTypes: List[Type], decls: /*@@@*/MutableScope, clazz: Symbol) extends UncachedGroundType
+ case class TempClassInfoType(parentTypes: List[Type], decls: Scope, clazz: Symbol) extends UncachedGroundType
/** Convert temp poly type to some native Dotty idiom.
* @param forSym The symbol that gets the converted type as info.
@@ -108,7 +108,7 @@ object UnPickler {
for (tparam <- tparams) {
val tsym = decls.lookup(tparam.name)
if (tsym.exists) tsym.setFlag(TypeParam)
- else decls.enter(tparam) // @@@ denot.enter(tparam, decls)
+ else denot.enter(tparam, decls)
}
var ost = optSelfType
if (ost == NoType && (denot is ModuleClass))
@@ -378,7 +378,7 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot:
nestedObjectSymbol orElse {
// // (4) Call the mirror's "missing" hook.
adjust(cctx.base.missingHook(owner, name)) orElse {
- println(owner.info.decls.toList.map(_.debugString).mkString("\n ")) // !!! DEBUG
+ // println(owner.info.decls.toList.map(_.debugString).mkString("\n ")) // !!! DEBUG
// }
// (5) Create a stub symbol to defer hard failure a little longer.
cctx.newStubSymbol(owner, name, source)
@@ -404,9 +404,9 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot:
def isModuleClassRoot = (name == moduleClassRoot.name) && (owner == moduleClassRoot.owner) && (flags is Module)
def isModuleRoot = (name == moduleClassRoot.name.toTermName) && (owner == moduleClassRoot.owner) && (flags is Module)
- if (isClassRoot) println(s"classRoot of $classRoot found at $readIndex, flags = $flags") // !!! DEBUG
- if (isModuleRoot) println(s"moduleRoot of $moduleRoot found at $readIndex, flags = $flags") // !!! DEBUG
- if (isModuleClassRoot) println(s"moduleClassRoot of $moduleClassRoot found at $readIndex, flags = $flags") // !!! DEBUG
+ //if (isClassRoot) println(s"classRoot of $classRoot found at $readIndex, flags = $flags") // !!! DEBUG
+ //if (isModuleRoot) println(s"moduleRoot of $moduleRoot found at $readIndex, flags = $flags") // !!! DEBUG
+ //if (isModuleClassRoot) println(s"moduleClassRoot of $moduleClassRoot found at $readIndex, flags = $flags") // !!! DEBUG
def completeRoot(denot: ClassDenotation, completer: LazyType): Symbol = {
denot.setFlag(flags)
@@ -422,7 +422,7 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot:
|| ((sym is TypeParam) && !sym.owner.isClass)
|| isRefinementClass(sym)
)
- ) symScope(sym.owner).openForMutations.enter(sym) // @@@ sym.owner.asClass.enter(sym, symScope(sym.owner))
+ ) sym.owner.asClass.enter(sym, symScope(sym.owner))
sym
}
@@ -474,7 +474,7 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot:
inforef = readNat()
pw
}
- println("reading type for "+denot)
+ // println("reading type for "+denot) // !!! DEBUG
val tp = at(inforef, () => readType(forceProperType = denot.isTerm))
denot match {
case denot: ClassDenotation =>
@@ -493,7 +493,7 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot:
denot.addAnnotation(Annotation.makeAlias(alias))
}
}
- println(s"unpickled ${denot.debugString}, info = ${denot.info}")
+ // println(s"unpickled ${denot.debugString}, info = ${denot.info}") !!! DEBUG
}
def startCoord(denot: SymDenotation): Coord = denot.symbol.coord
def complete(denot: SymDenotation): Unit = try {
@@ -620,9 +620,9 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot:
sym.asType)
} else TypeRef(pre, sym.name.asTypeName)
val args = until(end, readTypeRef)
- if (args.nonEmpty) { // DEBUG
- println(s"reading app type $tycon $args")
- }
+// if (args.nonEmpty) { // DEBUG
+// println(s"reading app type $tycon $args")
+// }
tycon.appliedTo(args)
case TYPEBOUNDStpe =>
TypeBounds(readTypeRef(), readTypeRef())
@@ -643,7 +643,7 @@ class UnPickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClassRoot:
}
case CLASSINFOtpe =>
val clazz = readSymbolRef()
- TempClassInfoType(until(end, readTypeRef), symScope(clazz).openForMutations /*@@@*/, clazz)
+ TempClassInfoType(until(end, readTypeRef), symScope(clazz), clazz)
case METHODtpe | IMPLICITMETHODtpe =>
val restpe = readTypeRef()
val params = until(end, readSymbolRef)
diff --git a/src/dotty/tools/dotc/reporting/Reporter.scala b/src/dotty/tools/dotc/reporting/Reporter.scala
index dac2b6874..77cbc3662 100644
--- a/src/dotty/tools/dotc/reporting/Reporter.scala
+++ b/src/dotty/tools/dotc/reporting/Reporter.scala
@@ -15,8 +15,7 @@ trait Reporting { this: Context =>
def inform(msg: String, pos: Position = NoPosition): Unit = reporter.info(msg, pos)
def log(msg: => String): Unit =
- if (true || // !!! for now
- this.settings.log.value.containsPhase(phase))
+ if (this.settings.log.value.containsPhase(phase))
inform(s"[log ${ctx.phasesStack.reverse.mkString(" -> ")}] $msg")
def debuglog(msg: => String): Unit =
diff --git a/src/test/showClass.scala b/src/test/showClass.scala
index 5412e25c7..55752eae5 100644
--- a/src/test/showClass.scala
+++ b/src/test/showClass.scala
@@ -2,20 +2,31 @@ package test
import dotty.tools.dotc.core._
import Contexts._
-import Symbols._, Types._, dotty.tools.dotc.util.Texts._
+import Symbols._, Flags._, Types._, dotty.tools.dotc.util.Texts._
import Decorators._
object showClass {
- def showClasses(path: String)(implicit ctx: Context): Unit = {
- def showClass(cls: Symbol) = {
- println(s"showing $path -> ${cls.denot}")
- val cinfo = cls.info
- val infoText: Text = if (cinfo.exists) cinfo.toText else " is missing"
- println("======================================")
- println((cls.toText ~ infoText).show)
+ def showPackage(pkg: TermSymbol)(implicit ctx: Context) {
+ for (sym <- pkg.info.decls
+ if sym.owner == pkg.moduleClass && !(sym.name contains '$')) {
+ println(s"showing $sym in ${pkg.fullName}")
+ if (sym is Package) showPackage(sym.asTerm)
+ else if (sym.isClass) showClass(sym)
+ else showClass(sym.moduleClass)
}
- println(s"showing $path")
+ }
+
+ def showClass(cls: Symbol)(implicit ctx: Context) = {
+ println(s"showing ${cls.denot}")
+ val cinfo = cls.info
+ val infoText: Text = if (cinfo.exists) cinfo.toText else " is missing"
+ println("======================================")
+ println((cls.toText ~ infoText).show)
+ }
+
+ def showClasses(path: String)(implicit ctx: Context): Unit = {
+ println(s"showing file $path")
val cls = ctx.requiredClass(path.toTypeName)
showClass(cls)
showClass(cls.linkedClass)
@@ -40,15 +51,16 @@ object showClass {
println(ctx.settings)
base.definitions.init()
- for (arg <- args) showClasses(arg)
+ for (arg <- args) showPackage(ctx.requiredPackage(arg))
-// showClasses("java.util.Map")
+ showClasses("scala.Predef")
// showClasses("scala.Boolean")
// showClasses("scala.Array")
// showClasses("scala.math.Ordering")
// showClasses("scala.collection.JavaConversions")
- showClasses("scala.collection.convert.Wrappers")
- showClasses("scala.collection.mutable.WeakHashMap")
+// showClasses("scala.collection.convert.Wrappers")
+// showClasses("scala.collection.mutable.WeakHashMap")
+// showClasses("scala.collection.GenIterable")
// showClasses("scala.collection.Traversable")
// showClasses("scala.collection.LinearSeqLike")
// showClasses("scala.collection.immutable.List")