aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools
diff options
context:
space:
mode:
authorVladimirNik <vladimir.nikolaev9@gmail.com>2015-11-16 14:55:42 +0300
committerVladimirNik <vladimir.nikolaev9@gmail.com>2015-11-17 22:04:24 +0300
commit9c30c9b13d2eb95f4d86368ed27cf7e63e468dee (patch)
treef7ba509fcd671b8c6ada06b23afb8148daced636 /src/dotty/tools
parenteefa6112cc2c9e26dfd22bbc7532332d71aa6b43 (diff)
downloaddotty-9c30c9b13d2eb95f4d86368ed27cf7e63e468dee.tar.gz
dotty-9c30c9b13d2eb95f4d86368ed27cf7e63e468dee.tar.bz2
dotty-9c30c9b13d2eb95f4d86368ed27cf7e63e468dee.zip
Links between companions after unpickling are added
Diffstat (limited to 'src/dotty/tools')
-rw-r--r--src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala10
-rw-r--r--src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala13
-rw-r--r--src/dotty/tools/dotc/transform/SymUtils.scala9
3 files changed, 20 insertions, 12 deletions
diff --git a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
index e76b2e764..552d931d7 100644
--- a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
+++ b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
@@ -588,9 +588,15 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
sym.info = readType()
ValDef(sym.asTerm, readRhs(localCtx))
case TYPEDEF | TYPEPARAM =>
- if (sym.isClass)
+ if (sym.isClass) {
+ val companion = sym.scalacLinkedClass
+ if (companion != NoSymbol) {
+ import transform.SymUtils._
+ if (sym is Flags.ModuleClass) sym.registerCompanionMethod(nme.COMPANION_CLASS_METHOD, companion)
+ else sym.registerCompanionMethod(nme.COMPANION_MODULE_METHOD, companion)
+ }
ta.assignType(untpd.TypeDef(sym.name.asTypeName, readTemplate(localCtx)), sym)
- else {
+ } else {
sym.info = readType()
TypeDef(sym.asType)
}
diff --git a/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala b/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala
index d58122f2d..d14423b7b 100644
--- a/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala
+++ b/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala
@@ -117,17 +117,10 @@ object Scala2Unpickler {
val scalacCompanion = denot.classSymbol.scalacLinkedClass
def registerCompanionPair(module: Symbol, claz: Symbol) = {
- def registerCompanionMethod(name: Name, target: Symbol, owner: Symbol) = {
- if (!owner.unforcedDecls.lookup(name).exists) {
- val companionMethod = ctx.synthesizeCompanionMethod(name, target, owner)
- if (companionMethod.exists) {
- companionMethod.entered
- }
- }
- }
- registerCompanionMethod(nme.COMPANION_CLASS_METHOD, claz, module)
+ import transform.SymUtils._
+ module.registerCompanionMethod(nme.COMPANION_CLASS_METHOD, claz)
if (claz.isClass) {
- registerCompanionMethod(nme.COMPANION_MODULE_METHOD, module, claz)
+ claz.registerCompanionMethod(nme.COMPANION_MODULE_METHOD, module)
}
}
diff --git a/src/dotty/tools/dotc/transform/SymUtils.scala b/src/dotty/tools/dotc/transform/SymUtils.scala
index 14f6a2e22..9d4fa9788 100644
--- a/src/dotty/tools/dotc/transform/SymUtils.scala
+++ b/src/dotty/tools/dotc/transform/SymUtils.scala
@@ -99,4 +99,13 @@ class SymUtils(val self: Symbol) extends AnyVal {
self.addAnnotations(from.annotationsCarrying(meta))
self
}
+
+ def registerCompanionMethod(name: Name, target: Symbol)(implicit ctx: Context) = {
+ if (!self.unforcedDecls.lookup(name).exists) {
+ val companionMethod = ctx.synthesizeCompanionMethod(name, target, self)
+ if (companionMethod.exists) {
+ companionMethod.entered
+ }
+ }
+ }
}