diff options
author | Martin Odersky <odersky@gmail.com> | 2013-03-13 14:11:44 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-03-13 14:11:44 +0100 |
commit | 3c7a8eada3630989b07bd3022797fd42a3b8cfcc (patch) | |
tree | 0036fee8aa025e3eea8502ea08f413f6baec3a56 /src/dotty/tools/dotc/core/Definitions.scala | |
parent | d1794c15f5a5743763adeb8f8e248f9ca5f53869 (diff) | |
download | dotty-3c7a8eada3630989b07bd3022797fd42a3b8cfcc.tar.gz dotty-3c7a8eada3630989b07bd3022797fd42a3b8cfcc.tar.bz2 dotty-3c7a8eada3630989b07bd3022797fd42a3b8cfcc.zip |
Various fixes to get past Definitions#init.
Diffstat (limited to 'src/dotty/tools/dotc/core/Definitions.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/Definitions.scala | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/dotty/tools/dotc/core/Definitions.scala b/src/dotty/tools/dotc/core/Definitions.scala index d8235b1e4..880182614 100644 --- a/src/dotty/tools/dotc/core/Definitions.scala +++ b/src/dotty/tools/dotc/core/Definitions.scala @@ -31,19 +31,22 @@ class Definitions(implicit ctx: Context) { scope.enter(tparam) } - private def specialPolyClass(name: TypeName, flags: FlagSet, parentConstrs: Type*): ClassSymbol = - ctx.newClassSymbolDenoting { cls => - val paramDecls = newScope - val typeParam = newSyntheticTypeParam(cls, paramDecls) - def instantiate(tpe: Type) = - if (tpe.typeParams.nonEmpty) tpe.appliedTo(typeParam.symbolicRef) - else tpe - val parents = parentConstrs.toList map instantiate - val parentRefs: List[TypeRef] = ctx.normalizeToRefs(parents, cls, paramDecls) - ctx.SymDenotation( - cls, ScalaPackageClass, name, flags, - ClassInfo(ScalaPackageClass.thisType, cls, parentRefs, paramDecls)) + private def specialPolyClass(name: TypeName, flags: FlagSet, parentConstrs: Type*): ClassSymbol = { + val completer = new LazyType { + def complete(denot: SymDenotation): Unit = { + val cls = denot.asClass.classSymbol + val paramDecls = newScope + val typeParam = newSyntheticTypeParam(cls, paramDecls) + def instantiate(tpe: Type) = + if (tpe.typeParams.nonEmpty) tpe.appliedTo(typeParam.symbolicRef) + else tpe + val parents = parentConstrs.toList map instantiate + val parentRefs: List[TypeRef] = ctx.normalizeToRefs(parents, cls, paramDecls) + denot.info = ClassInfo(ScalaPackageClass.thisType, cls, parentRefs, paramDecls) + } } + ctx.newClassSymbol(ScalaPackageClass, name, flags, completer) + } private def mkArityArray(name: String, arity: Int, countFrom: Int): Array[ClassSymbol] = { val arr = new Array[ClassSymbol](arity) |