diff options
author | Martin Odersky <odersky@gmail.com> | 2013-02-08 22:45:30 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-02-08 22:45:30 +0100 |
commit | dc137d37524e560e89a10e2ebd2e78c818e2205e (patch) | |
tree | d8295135f29b1b10487de16bcc7912d265dcc522 /src/dotty/tools/dotc/core/pickling/UnPickler.scala | |
parent | 00cd39af75830fe1acab0f4b3b19646375ac2ea8 (diff) | |
download | dotty-dc137d37524e560e89a10e2ebd2e78c818e2205e.tar.gz dotty-dc137d37524e560e89a10e2ebd2e78c818e2205e.tar.bz2 dotty-dc137d37524e560e89a10e2ebd2e78c818e2205e.zip |
Added methods to convert between (virtual) type application and refinements.
Refactored parent normalization from Unpickler to TypeOps.
Diffstat (limited to 'src/dotty/tools/dotc/core/pickling/UnPickler.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/UnPickler.scala | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/src/dotty/tools/dotc/core/pickling/UnPickler.scala b/src/dotty/tools/dotc/core/pickling/UnPickler.scala index b3c0a88f9..ed97217f3 100644 --- a/src/dotty/tools/dotc/core/pickling/UnPickler.scala +++ b/src/dotty/tools/dotc/core/pickling/UnPickler.scala @@ -321,7 +321,7 @@ abstract class UnPickler { var flags1 = flags if (flags is TypeParam) { name1 = name1.expandedName(owner) - flags1 |= ProtectedLocal + flags1 |= TypeParamFlags } ctx.newLazySymbol(owner, name1, flags1, completeSym(tag)) case CLASSsym => @@ -428,7 +428,7 @@ abstract class UnPickler { val tycon = if (isLocal(sym)) TypeRef(pre, sym.asType) else TypeRef(pre, sym.name.asTypeName) - tycon.applyToArgs(until(end, readTypeRef)) + tycon.appliedTo(until(end, readTypeRef)) case TYPEBOUNDStpe => TypeBounds(readTypeRef(), readTypeRef()) case REFINEDtpe => @@ -930,7 +930,7 @@ abstract class UnPickler { protected def errorMissingRequirement(name: Name, owner: Symbol): Symbol = MissingRequirementError.signal( - s"bad reference while unpickling $filename: ${ctx.showNameDetailed(name)} not found in $owner" + s"bad reference while unpickling $filename: ${ctx.showDetailed(name)} not found in $owner" ) // def inferMethodAlternative(fun: Tree, argtpes: List[Type], restpe: Type) {} // can't do it; need a compiler for that. @@ -980,26 +980,10 @@ abstract class UnPickler { case cinfo => (Nil, cinfo) } val selfType = if (j > 0) at(j, () => readType()) else denot.typeConstructor - var refinements = Map[TypeName, Type]().withDefaultValue(NoType) - def normalizeToRef(tp: Type): TypeRef = tp match { - case tp @ RefinedType(tp1, name: TypeName) => - refinements = (refinements + (name -> (refinements(name) & tp.info))) - .withDefaultValue(NoType) - normalizeToRef(tp1) - case tp: TypeRef => - tp - case _ => - throw new TypeError(s"unexpected parent type: $tp") - } - denot.parents = parents map normalizeToRef + tparams foreach decls.enter + denot.parents = ctx.normalizeToRefs(parents, cls, decls) denot.selfType = selfType - denot.decls = newScope - tparams foreach denot.decls.enter - for ((name, tpe) <- refinements) denot.decls.enter { - val formal = cls.info.member(name).symbol - val bounds = tpe.toAlias(formal) - ctx.newSymbol(cls, name, formal.flags & RetainedTypeArgFlags, bounds) - } + denot.decls = decls } catch { case e: MissingRequirementError => throw toTypeError(e) } |