Skip to content

Commit e72b80b

Browse files
Merge pull request #4874 from dotty-staging/add-scala-symbol-constants-to-tasty-reflect
Add scala.Symbol constants to Tasty reflect
2 parents 608caab + 60e9e08 commit e72b80b

File tree

6 files changed

+16
-15
lines changed

6 files changed

+16
-15
lines changed

compiler/src/dotty/tools/dotc/tastyreflect/TastyImpl.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,6 +1072,12 @@ class TastyImpl(val rootContext: Contexts.Context) extends scala.tasty.Tasty { s
10721072
}
10731073
}
10741074

1075+
object Symbol extends SymbolExtractor {
1076+
def unapply(x: Constant): Option[scala.Symbol] = x match {
1077+
case x: Constants.Constant if x.tag == Constants.ScalaSymbolTag => Some(x.scalaSymbolValue)
1078+
case _ => None
1079+
}
1080+
}
10751081
}
10761082

10771083
// ===== Signature ================================================

compiler/test/dotc/pos-decompilation.blacklist

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
# Constant(Symbol)
2-
desugar.scala
3-
sip23-symbols.scala
4-
t389.scala
5-
t4812.scala
6-
t4579.scala
7-
81
# assertion failed: asTerm called on not-a-Term val <none>
92
cls.scala
103
escapes2.scala

compiler/test/dotc/run-decompilation.blacklist

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,6 @@ t3651.scala
3232
protectedacc.scala
3333
t7436.scala
3434

35-
# Constant(Symbol)
36-
fors.scala
37-
t6634.scala
38-
t6632.scala
39-
t4601.scala
40-
t6633.scala
41-
arrays.scala
42-
4335
# scala.MatchError: SeqLiteral in pattern
4436
i3248.scala
4537
t6541.scala

library/src/scala/tasty/Tasty.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,13 @@ abstract class Tasty { tasty =>
825825
abstract class ClassTagExtractor {
826826
def unapply(x: Constant): Option[Type]
827827
}
828+
829+
/** Extractor for scala.Symbol literals */
830+
val Symbol: SymbolExtractor
831+
/** Extractor for scala.Symbol literals */
832+
abstract class SymbolExtractor {
833+
def unapply(x: Constant): Option[scala.Symbol]
834+
}
828835
}
829836

830837
// ===== Signature ================================================

library/src/scala/tasty/util/ShowExtractors.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ class ShowExtractors[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
153153
case Constant.Double(value) => this += "Constant.Double(" += value += ")"
154154
case Constant.String(value) => this += "Constant.String(\"" += value += "\")"
155155
case Constant.ClassTag(value) => this += "Constant.ClassTag(" += value += ")"
156+
case Constant.Symbol(value) => this += "Constant.Symbol('" += value.name += ")"
156157
}
157158

158159
def visitType(x: TypeOrBounds): Buffer = x match {

library/src/scala/tasty/util/ShowSourceCode.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,8 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
722722
case Constant.ClassTag(v) =>
723723
this += "classOf"
724724
inSquare(printType(v))
725+
case Constant.Symbol(v) =>
726+
this += "'" += v.name
725727
}
726728

727729
def printTypeOrBoundsTree(tpt: TypeOrBoundsTree): Buffer = tpt match {

0 commit comments

Comments
 (0)