Skip to content

Commit 1724f6c

Browse files
committed
handle export in tasty
1 parent 45d840b commit 1724f6c

File tree

5 files changed

+19
-7
lines changed

5 files changed

+19
-7
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,12 @@ class TreePickler(pickler: TastyPickler) {
590590
pickleTree(expr)
591591
pickleSelectors(selectors)
592592
}
593+
case Export(expr, selectors) =>
594+
writeByte(EXPORT)
595+
withLength {
596+
pickleTree(expr)
597+
pickleSelectors(selectors)
598+
}
593599
case PackageDef(pid, stats) =>
594600
writeByte(PACKAGE)
595601
withLength { pickleType(pid.tpe); pickleStats(stats) }

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ class TreeUnpickler(reader: TastyReader,
710710
else if (sym.isClass ||
711711
sym.is(Method, butNot = Deferred) && !sym.isConstructor)
712712
initsFlags &= NoInits
713-
case IMPORT =>
713+
case IMPORT | EXPORT =>
714714
skipTree()
715715
case PACKAGE =>
716716
processPackage { (pid, end) => indexStats(end) }
@@ -951,7 +951,7 @@ class TreeUnpickler(reader: TastyReader,
951951
}
952952

953953
def isTopLevel(using Context): Boolean =
954-
nextByte == IMPORT || nextByte == PACKAGE
954+
nextByte == IMPORT || nextByte == EXPORT || nextByte == PACKAGE
955955

956956
def readTopLevel()(using Context): List[Tree] = {
957957
@tailrec def read(acc: ListBuffer[Tree]): List[Tree] =
@@ -968,7 +968,9 @@ class TreeUnpickler(reader: TastyReader,
968968
case TYPEDEF | VALDEF | DEFDEF =>
969969
readIndexedDef()
970970
case IMPORT =>
971-
readImport()
971+
readImportLike(Import(_, _))()
972+
case EXPORT =>
973+
readImportLike(Export(_, _))()
972974
case PACKAGE =>
973975
val start = currentAddr
974976
processPackage { (pid, end) =>
@@ -978,14 +980,15 @@ class TreeUnpickler(reader: TastyReader,
978980
readTerm()(using ctx.withOwner(exprOwner))
979981
}
980982

981-
def readImport()(using Context): Tree = {
983+
inline def readImportLike(mkTree: (Tree, List[untpd.ImportSelector]) => Tree)()(using Context): Tree = {
982984
val start = currentAddr
983985
assert(sourcePathAt(start).isEmpty)
984986
readByte()
985987
readEnd()
986988
val expr = readTerm()
987-
setSpan(start, Import(expr, readSelectors()))
989+
setSpan(start, mkTree(expr, readSelectors()))
988990
}
991+
989992
def readSelectors()(using Context): List[untpd.ImportSelector] =
990993
if nextByte == IMPORTED then
991994
val start = currentAddr

compiler/src/dotty/tools/dotc/transform/FirstTransform.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class FirstTransform extends MiniPhase with InfoTransformer { thisPhase =>
152152
}
153153

154154
override def transformOther(tree: Tree)(using Context): Tree = tree match {
155-
case tree: Import => EmptyTree
155+
case tree: (Import | Export) => EmptyTree
156156
case tree: NamedArg => transformAllDeep(tree.arg)
157157
case tree => if (tree.isType) toTypeTree(tree) else tree
158158
}

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2656,7 +2656,7 @@ class Typer extends Namer
26562656
case Thicket(stats) :: rest =>
26572657
traverse(stats ::: rest)
26582658
case (stat: untpd.Export) :: rest =>
2659-
// buf += typed(stat)
2659+
buf += typed(stat)
26602660
buf ++= stat.attachmentOrElse(ExportForwarders, Nil)
26612661
// no attachment can happen in case of cyclic references
26622662
traverse(rest)

tasty/src/dotty/tools/tasty/TastyFormat.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Standard-Section: "ASTs" TopLevelStat*
5959
ValOrDefDef
6060
TYPEDEF Length NameRef (type_Term | Template) Modifier* -- modifiers type name (= type | bounds) | modifiers class name template
6161
IMPORT Length qual_Term Selector* -- import qual selectors
62+
EXPORT Length qual_Term Selector* -- export qual selectors
6263
ValOrDefDef = VALDEF Length NameRef type_Term rhs_Term? Modifier* -- modifiers val name : type (= rhs)?
6364
DEFDEF Length NameRef TypeParam* Params* returnType_Term
6465
rhs_Term? Modifier* -- modifiers def name [typeparams] paramss : returnType (= rhs)?
@@ -464,6 +465,7 @@ object TastyFormat {
464465
final val TERMREFin = 174
465466
final val TYPEREFin = 175
466467
final val SELECTin = 176
468+
final val EXPORT = 177
467469

468470
final val METHODtype = 180
469471

@@ -620,6 +622,7 @@ object TastyFormat {
620622
case DEFDEF => "DEFDEF"
621623
case TYPEDEF => "TYPEDEF"
622624
case IMPORT => "IMPORT"
625+
case EXPORT => "EXPORT"
623626
case TYPEPARAM => "TYPEPARAM"
624627
case PARAM => "PARAM"
625628
case IMPORTED => "IMPORTED"

0 commit comments

Comments
 (0)