Skip to content

Commit 3032f08

Browse files
Replace pickling of sub matches to use an annotation
s.t. the TastyFormat is unchanged Co-authored-by: Hamza Remmal <[email protected]>
1 parent d68dbaf commit 3032f08

File tree

5 files changed

+18
-6
lines changed

5 files changed

+18
-6
lines changed

compiler/src/dotty/tools/dotc/core/Definitions.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,7 @@ class Definitions {
10611061
@tu lazy val ScalaStaticAnnot: ClassSymbol = requiredClass("scala.annotation.static")
10621062
@tu lazy val SerialVersionUIDAnnot: ClassSymbol = requiredClass("scala.SerialVersionUID")
10631063
@tu lazy val SilentIntoAnnot: ClassSymbol = requiredClass("scala.annotation.internal.$into")
1064+
@tu lazy val SilentSubMatchAnnot: ClassSymbol = requiredClass("scala.annotation.internal.$subMatch")
10641065
@tu lazy val TailrecAnnot: ClassSymbol = requiredClass("scala.annotation.tailrec")
10651066
@tu lazy val ThreadUnsafeAnnot: ClassSymbol = requiredClass("scala.annotation.threadUnsafe")
10661067
@tu lazy val ConstructorOnlyAnnot: ClassSymbol = requiredClass("scala.annotation.constructorOnly")

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,10 @@ class TreePickler(pickler: TastyPickler, attributes: Attributes) {
590590
if (tree.isInline)
591591
if (selector.isEmpty) writeByte(IMPLICIT)
592592
else { writeByte(INLINE); pickleTree(selector) }
593-
else if tree.isSubMatch then { writeByte(LAZY); pickleTree(selector) }
593+
else if tree.isSubMatch then
594+
// Temporary measure until we can change TastyFormat
595+
val annot = New(defn.SilentSubMatchAnnot.typeRef, Nil)
596+
pickleTree(selector.annotated(annot))
594597
else pickleTree(selector)
595598
tree.cases.foreach(pickleTree)
596599
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1542,7 +1542,7 @@ class TreeUnpickler(reader: TastyReader,
15421542
val tpt = ifBefore(end)(readTpt(), EmptyTree)
15431543
Closure(Nil, meth, tpt)
15441544
case MATCH =>
1545-
simplifyLub(
1545+
simplifyLub:
15461546
if (nextByte == IMPLICIT) {
15471547
readByte()
15481548
InlineMatch(EmptyTree, readCases(end))
@@ -1551,10 +1551,9 @@ class TreeUnpickler(reader: TastyReader,
15511551
readByte()
15521552
InlineMatch(readTree(), readCases(end))
15531553
}
1554-
else if nextByte == LAZY then // similarly to InlineMatch we use an arbitrary Cat.1 tag
1555-
readByte()
1556-
SubMatch(readTree(), readCases(end))
1557-
else Match(readTree(), readCases(end)))
1554+
else readTree() match
1555+
case Typed(sel, tpt) if tpt.tpe.hasAnnotation(defn.SilentSubMatchAnnot) => SubMatch(sel, readCases(end))
1556+
case sel => Match(sel, readCases(end))
15581557
case RETURN =>
15591558
val from = readSymRef()
15601559
val expr = ifBefore(end)(readTree(), EmptyTree)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package scala.annotation.internal
2+
3+
import scala.annotation.experimental
4+
5+
/** An internal annotation on (part of) that serves as a marker for sub matches. */
6+
@experimental
7+
class $subMatch extends annotation.StaticAnnotation

project/Build.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,6 +1201,7 @@ object Build {
12011201
file(s"${baseDirectory.value}/src/scala/annotation/internal/SourceFile.scala"),
12021202
file(s"${baseDirectory.value}/src/scala/annotation/internal/reachCapability.scala"),
12031203
file(s"${baseDirectory.value}/src/scala/annotation/internal/$$into.scala"),
1204+
file(s"${baseDirectory.value}/src/scala/annotation/internal/$$subMatch.scala"),
12041205
file(s"${baseDirectory.value}/src/scala/annotation/internal/TASTYLongSignature.java"),
12051206
file(s"${baseDirectory.value}/src/scala/annotation/internal/readOnlyCapability.scala"),
12061207
file(s"${baseDirectory.value}/src/scala/annotation/internal/unshared.scala"),
@@ -1339,6 +1340,7 @@ object Build {
13391340
file(s"${baseDirectory.value}/src/scala/annotation/internal/SourceFile.scala"),
13401341
file(s"${baseDirectory.value}/src/scala/annotation/internal/reachCapability.scala"),
13411342
file(s"${baseDirectory.value}/src/scala/annotation/internal/$$into.scala"),
1343+
file(s"${baseDirectory.value}/src/scala/annotation/internal/$$subMatch.scala"),
13421344
file(s"${baseDirectory.value}/src/scala/annotation/internal/TASTYLongSignature.java"),
13431345
file(s"${baseDirectory.value}/src/scala/annotation/internal/readOnlyCapability.scala"),
13441346
file(s"${baseDirectory.value}/src/scala/annotation/internal/unshared.scala"),

0 commit comments

Comments
 (0)