Skip to content

Commit 3f291da

Browse files
committed
Clean up treatment of local contexts in unpickler
1 parent d0a8606 commit 3f291da

File tree

1 file changed

+13
-22
lines changed

1 file changed

+13
-22
lines changed

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -386,10 +386,8 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
386386
private def noRhs(end: Addr): Boolean =
387387
currentAddr == end || isModifierTag(nextByte)
388388

389-
private def localContext(owner: Symbol)(implicit ctx: Context) = {
390-
val lctx = ctx.fresh.setOwner(owner)
391-
if (owner.isClass) lctx.setScope(owner.unforcedDecls) else lctx.setNewScope
392-
}
389+
private def localContext(owner: Symbol)(implicit ctx: Context) =
390+
ctx.fresh.setOwner(owner)
393391

394392
private def normalizeFlags(tag: Int, givenFlags: FlagSet, name: Name, isAbsType: Boolean, rhsIsEmpty: Boolean)(implicit ctx: Context): FlagSet = {
395393
val lacksDefinition =
@@ -646,19 +644,18 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
646644
}
647645
}
648646

647+
val localCtx = localContext(sym)
648+
649649
def readRhs(implicit ctx: Context) =
650650
if (noRhs(end)) EmptyTree
651651
else readLater(end, rdr => ctx => rdr.readTerm()(ctx))
652652

653-
def localCtx = localContext(sym)
654-
655653
def ValDef(tpt: Tree) =
656654
ta.assignType(untpd.ValDef(sym.name.asTermName, tpt, readRhs(localCtx)), sym)
657655

658656
def DefDef(tparams: List[TypeDef], vparamss: List[List[ValDef]], tpt: Tree) =
659657
ta.assignType(
660-
untpd.DefDef(
661-
sym.name.asTermName, tparams, vparamss, tpt, readRhs(localCtx)),
658+
untpd.DefDef(sym.name.asTermName, tparams, vparamss, tpt, readRhs(localCtx)),
662659
sym)
663660

664661
def TypeDef(rhs: Tree) =
@@ -672,7 +669,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
672669
case DEFDEF =>
673670
val tparams = readParams[TypeDef](TYPEPARAM)(localCtx)
674671
val vparamss = readParamss(localCtx)
675-
val tpt = readTpt()
672+
val tpt = readTpt()(localCtx)
676673
val typeParams = tparams.map(_.symbol)
677674
val valueParamss = ctx.normalizeIfConstructor(
678675
vparamss.nestedMap(_.symbol), name == nme.CONSTRUCTOR)
@@ -685,7 +682,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
685682
}
686683
DefDef(tparams, vparamss, tpt)
687684
case VALDEF =>
688-
val tpt = readTpt()
685+
val tpt = readTpt()(localCtx)
689686
sym.info = tpt.tpe
690687
ValDef(tpt)
691688
case TYPEDEF | TYPEPARAM =>
@@ -704,7 +701,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
704701
}
705702
TypeDef(readTemplate(localCtx))
706703
} else {
707-
val rhs = readTpt()
704+
val rhs = readTpt()(localCtx)
708705
sym.info = NoCompleter
709706
sym.info = rhs.tpe match {
710707
case _: TypeBounds | _: ClassInfo => checkNonCyclic(sym, rhs.tpe, reportErrors = false)
@@ -713,7 +710,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
713710
TypeDef(rhs)
714711
}
715712
case PARAM =>
716-
val tpt = readTpt()
713+
val tpt = readTpt()(localCtx)
717714
if (noRhs(end)) {
718715
sym.info = tpt.tpe
719716
ValDef(tpt)
@@ -934,9 +931,8 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
934931
def readBlock(mkTree: (List[Tree], Tree) => Tree): Tree = {
935932
val exprReader = fork
936933
skipTree()
937-
val localCtx = ctx.fresh.setNewScope
938-
val stats = readStats(ctx.owner, end)(localCtx)
939-
val expr = exprReader.readTerm()(localCtx)
934+
val stats = readStats(ctx.owner, end)
935+
val expr = exprReader.readTerm()
940936
mkTree(stats, expr)
941937
}
942938

@@ -1034,13 +1030,8 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
10341030
case ANNOTATEDtpt =>
10351031
Annotated(readTpt(), readTerm())
10361032
case LAMBDAtpt =>
1037-
var localCtx = ctx.fresh.setNewScope
1038-
ctx.owner match {
1039-
case cls: ClassSymbol => localCtx = localCtx.setOwner(localDummies(cls))
1040-
case _ =>
1041-
}
1042-
val tparams = readParams[TypeDef](TYPEPARAM)(localCtx)
1043-
val body = readTpt()(localCtx)
1033+
val tparams = readParams[TypeDef](TYPEPARAM)
1034+
val body = readTpt()
10441035
LambdaTypeTree(tparams, body)
10451036
case TYPEBOUNDStpt =>
10461037
TypeBoundsTree(readTpt(), readTpt())

0 commit comments

Comments
 (0)