Skip to content

Commit a2f672a

Browse files
committed
Clean up treatment of local contexts in unpickler
1 parent 61744e8 commit a2f672a

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
@@ -385,10 +385,8 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
385385
private def noRhs(end: Addr): Boolean =
386386
currentAddr == end || isModifierTag(nextByte)
387387

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

393391
private def normalizeFlags(tag: Int, givenFlags: FlagSet, name: Name, isAbsType: Boolean, rhsIsEmpty: Boolean)(implicit ctx: Context): FlagSet = {
394392
val lacksDefinition =
@@ -642,19 +640,18 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
642640
}
643641
}
644642

643+
val localCtx = localContext(sym)
644+
645645
def readRhs(implicit ctx: Context) =
646646
if (noRhs(end)) EmptyTree
647647
else readLater(end, rdr => ctx => rdr.readTerm()(ctx))
648648

649-
def localCtx = localContext(sym)
650-
651649
def ValDef(tpt: Tree) =
652650
ta.assignType(untpd.ValDef(sym.name.asTermName, tpt, readRhs(localCtx)), sym)
653651

654652
def DefDef(tparams: List[TypeDef], vparamss: List[List[ValDef]], tpt: Tree) =
655653
ta.assignType(
656-
untpd.DefDef(
657-
sym.name.asTermName, tparams, vparamss, tpt, readRhs(localCtx)),
654+
untpd.DefDef(sym.name.asTermName, tparams, vparamss, tpt, readRhs(localCtx)),
658655
sym)
659656

660657
def TypeDef(rhs: Tree) =
@@ -668,7 +665,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
668665
case DEFDEF =>
669666
val tparams = readParams[TypeDef](TYPEPARAM)(localCtx)
670667
val vparamss = readParamss(localCtx)
671-
val tpt = readTpt()
668+
val tpt = readTpt()(localCtx)
672669
val typeParams = tparams.map(_.symbol)
673670
val valueParamss = ctx.normalizeIfConstructor(
674671
vparamss.nestedMap(_.symbol), name == nme.CONSTRUCTOR)
@@ -681,7 +678,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
681678
}
682679
DefDef(tparams, vparamss, tpt)
683680
case VALDEF =>
684-
val tpt = readTpt()
681+
val tpt = readTpt()(localCtx)
685682
sym.info = tpt.tpe
686683
ValDef(tpt)
687684
case TYPEDEF | TYPEPARAM =>
@@ -700,7 +697,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
700697
}
701698
TypeDef(readTemplate(localCtx))
702699
} else {
703-
val rhs = readTpt()
700+
val rhs = readTpt()(localCtx)
704701
sym.info = NoCompleter
705702
sym.info = rhs.tpe match {
706703
case _: TypeBounds | _: ClassInfo => checkNonCyclic(sym, rhs.tpe, reportErrors = false)
@@ -709,7 +706,7 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
709706
TypeDef(rhs)
710707
}
711708
case PARAM =>
712-
val tpt = readTpt()
709+
val tpt = readTpt()(localCtx)
713710
if (noRhs(end)) {
714711
sym.info = tpt.tpe
715712
ValDef(tpt)
@@ -930,9 +927,8 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
930927
def readBlock(mkTree: (List[Tree], Tree) => Tree): Tree = {
931928
val exprReader = fork
932929
skipTree()
933-
val localCtx = ctx.fresh.setNewScope
934-
val stats = readStats(ctx.owner, end)(localCtx)
935-
val expr = exprReader.readTerm()(localCtx)
930+
val stats = readStats(ctx.owner, end)
931+
val expr = exprReader.readTerm()
936932
mkTree(stats, expr)
937933
}
938934

@@ -1030,13 +1026,8 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
10301026
case ANNOTATEDtpt =>
10311027
Annotated(readTpt(), readTerm())
10321028
case LAMBDAtpt =>
1033-
var localCtx = ctx.fresh.setNewScope
1034-
ctx.owner match {
1035-
case cls: ClassSymbol => localCtx = localCtx.setOwner(localDummies(cls))
1036-
case _ =>
1037-
}
1038-
val tparams = readParams[TypeDef](TYPEPARAM)(localCtx)
1039-
val body = readTpt()(localCtx)
1029+
val tparams = readParams[TypeDef](TYPEPARAM)
1030+
val body = readTpt()
10401031
LambdaTypeTree(tparams, body)
10411032
case TYPEBOUNDStpt =>
10421033
TypeBoundsTree(readTpt(), readTpt())

0 commit comments

Comments
 (0)