Skip to content

Commit a2a18d3

Browse files
committed
Use Symbol in SymRef in TASTy reflect
1 parent ff2162d commit a2a18d3

16 files changed

+153
-134
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait StandardDefinitions extends scala.tasty.reflect.StandardDefinitions {
1313

1414
// TODO return Symbols instead of Definitions
1515

16-
def RootPackage: PackageDef = packageDefFromSym(defn.RootPackage)
16+
def RootPackage: Symbol = defn.RootPackage
1717
def RootClass: Symbol = defn.RootClass
1818

1919
def EmptyPackageClass: Symbol = defn.EmptyPackageClass

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,22 @@ import dotty.tools.dotc.core.Symbols._
55
trait SymbolOpsImpl extends scala.tasty.reflect.SymbolOps with TastyCoreImpl {
66

77
def SymbolDeco(symbol: Symbol): SymbolAPI = new SymbolAPI {
8+
9+
def owner(implicit ctx: Context): Symbol = symbol.owner
10+
811
def isEmpty(implicit ctx: Context): Boolean = symbol eq NoSymbol
912
def isClass(implicit ctx: Context): Boolean = symbol.isClass
13+
1014
def flags(implicit ctx: Context): FlagSet = new FlagSet(symbol.flags)
15+
1116
def name(implicit ctx: Context): String = symbol.name.toString
1217
def fullName(implicit ctx: Context): String = symbol.fullName.toString
18+
1319
def localContext(implicit ctx: Context): Context = ctx.withOwner(symbol)
20+
1421
def tree(implicit ctx: Context): Option[Definition] =
1522
if (isEmpty) None else Some(FromSymbol.definitionFromSym(symbol))
23+
1624
}
1725

1826
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ trait TypeOrBoundsOpsImpl extends scala.tasty.reflect.TypeOrBoundsOps with Tasty
5151
}
5252

5353
object SymRef extends SymRefExtractor {
54-
def unapply(x: TypeOrBounds)(implicit ctx: Context): Option[(Definition, TypeOrBounds /* Type | NoPrefix */)] = x match {
54+
def unapply(x: TypeOrBounds)(implicit ctx: Context): Option[(Symbol, TypeOrBounds /* Type | NoPrefix */)] = x match {
5555
case tp: Types.NamedType =>
5656
tp.designator match {
57-
case sym: Symbol => Some((definitionFromSym(sym), tp.prefix))
57+
case sym: Symbol => Some((sym, tp.prefix))
5858
case _ => None
5959
}
6060
case _ => None

library/src/scala/tasty/reflect/StandardDefinitions.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ trait StandardDefinitions extends TastyCore {
1414
trait DefinitionsApi extends StandardTypes {
1515

1616
/** The module symbol of root package `_root_`. */
17-
def RootPackage: PackageDef
17+
def RootPackage: Symbol
1818

1919
/** The class symbol of root package `_root_`. */
2020
def RootClass: Symbol

library/src/scala/tasty/reflect/SymbolOps.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ trait SymbolOps extends TastyCore {
66

77
trait SymbolAPI {
88

9+
def owner(implicit ctx: Context): Symbol
10+
911
def isEmpty(implicit ctx: Context): Boolean
1012
def isClass(implicit ctx: Context): Boolean
1113

library/src/scala/tasty/reflect/TypeOrBoundsOps.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ trait TypeOrBoundsOps extends TastyCore {
4949

5050
val SymRef: SymRefExtractor
5151
abstract class SymRefExtractor {
52-
def unapply(typeOrBounds: TypeOrBounds)(implicit ctx: Context): Option[(Definition, TypeOrBounds /* Type | NoPrefix */)]
52+
def unapply(typeOrBounds: TypeOrBounds)(implicit ctx: Context): Option[(Symbol, TypeOrBounds /* Type | NoPrefix */)]
5353
}
5454

5555
val TermRef: TermRefExtractor

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,15 +160,8 @@ class ShowExtractors[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
160160
case Type.ConstantType(value) =>
161161
this += "Type.ConstantType(" += value += ")"
162162
case Type.SymRef(sym, qual) =>
163-
def visitName(sym: Definition): Buffer = sym match {
164-
case ValDef(name, _, _) => this += "ValDef(\"" += name += "\", _, _)"
165-
case DefDef(name, _, _, _, _) => this += "DefDef(\"" += name += "\", _, _, _, _)"
166-
case TypeDef(name, _) => this += "TypeDef(\"" += name += "\", _)"
167-
case ClassDef(name, _, _, _, _) => this += "ClassDef(\"" += name += "\", _, _, _, _)"
168-
case PackageDef(name, _) => this += "PackageDef(\"" += name += "\", _)"
169-
}
170163
this += "Type.SymRef("
171-
visitName(sym)
164+
this += "<" += sym.fullName += ">"
172165
this += ", " += qual += ")"
173166
case Type.TermRef(name, qual) =>
174167
this += "Type.TermRef(\"" += name += "\", " += qual += ")"

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -743,10 +743,10 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
743743
printTypeAndAnnots(tp)
744744
this += " "
745745
printAnnotation(annot)
746-
case Type.SymRef(sym, _) if sym.symbol.isClass && (sym.symbol.fullName == "scala.runtime.Null$" || sym.symbol.fullName == "scala.runtime.Nothing$") =>
746+
case Type.SymRef(sym, _) if sym.isClass && (sym.fullName == "scala.runtime.Null$" || sym.fullName == "scala.runtime.Nothing$") =>
747747
// scala.runtime.Null$ and scala.runtime.Nothing$ are not modules, those are their actual names
748748
printType(tpe)
749-
case tpe @ Type.SymRef(sym, _) if sym.symbol.isClass && sym.name.endsWith("$") =>
749+
case tpe @ Type.SymRef(sym, _) if sym.isClass && sym.name.endsWith("$") =>
750750
printType(tpe)
751751
this += ".type"
752752
case tpe => printType(tpe)
@@ -826,7 +826,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
826826
case Type.SymRef(sym, prefix) =>
827827
prefix match {
828828
case Types.EmptyPrefix() =>
829-
case IsType(prefix @ Type.SymRef(sym, _)) if sym.symbol.isClass =>
829+
case IsType(prefix @ Type.SymRef(sym, _)) if sym.isClass =>
830830
printType(prefix)
831831
this += "#"
832832
case IsType(prefix) =>
@@ -958,7 +958,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
958958
val annots = definition.annots.filter {
959959
case Annotation(annot, _) =>
960960
annot.tpe match {
961-
case Type.TypeRef(_, Type.SymRef(sym, _)) if sym.symbol.fullName == "scala.annotation.internal" => false
961+
case Type.TypeRef(_, Type.SymRef(sym, _)) if sym.fullName == "scala.annotation.internal" => false
962962
case Type.TypeRef("forceInline", Types.ScalaPackage()) => false
963963
case _ => true
964964
}
@@ -1055,7 +1055,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
10551055
def printProtectedOrPrivate(definition: Definition): Boolean = {
10561056
var prefixWasPrinted = false
10571057
def printWithin(within: Type) = within match {
1058-
case Type.SymRef(sym @ PackageDef(name, _), _) =>
1058+
case Type.SymRef(sym, _) =>
10591059
this += sym.name
10601060
case _ => printFullClassName(within)
10611061
}
@@ -1083,7 +1083,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
10831083

10841084
def printFullClassName(tp: TypeOrBounds): Unit = {
10851085
def printClassPrefix(prefix: TypeOrBounds): Unit = prefix match {
1086-
case Type.SymRef(sym, prefix2) if sym.symbol.isClass =>
1086+
case Type.SymRef(sym, prefix2) if sym.isClass =>
10871087
printClassPrefix(prefix2)
10881088
this += sym.name += "."
10891089
case _ =>
@@ -1122,8 +1122,11 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
11221122
def unapply(arg: Tree)(implicit ctx: Context): Option[(String, List[Term])] = arg match {
11231123
case IsTerm(arg @ Term.Apply(fn, args)) =>
11241124
fn.tpe match {
1125-
case Type.SymRef(DefDef(op, _, _, _, _), Type.ThisType(Type.SymRef(sym2, _))) if sym2.name == "<special-ops>" =>
1126-
Some((op, args))
1125+
case Type.SymRef(sym, Type.ThisType(Type.SymRef(sym2, _))) if sym2.name == "<special-ops>" =>
1126+
sym.tree match {
1127+
case Some(DefDef(op, _, _, _, _)) => Some((op, args))
1128+
case _ => None
1129+
}
11271130
case _ => None
11281131
}
11291132
case _ => None
@@ -1144,7 +1147,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
11441147

11451148
object JavaLangObject {
11461149
def unapply(tpe: Type)(implicit ctx: Context): Boolean = tpe match {
1147-
case Type.TypeRef("Object", Type.SymRef(sym, _)) if sym.symbol.fullName == "java.lang" => true
1150+
case Type.TypeRef("Object", Type.SymRef(sym, _)) if sym.fullName == "java.lang" => true
11481151
case _ => false
11491152
}
11501153
}
@@ -1158,21 +1161,21 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
11581161

11591162
object ScalaPackage {
11601163
def unapply(tpe: TypeOrBounds)(implicit ctx: Context): Boolean = tpe match {
1161-
case Type.SymRef(sym, _) => sym.symbol == definitions.ScalaPackage
1164+
case Type.SymRef(sym, _) => sym == definitions.ScalaPackage
11621165
case _ => false
11631166
}
11641167
}
11651168

11661169
object RootPackage {
11671170
def unapply(tpe: TypeOrBounds)(implicit ctx: Context): Boolean = tpe match {
1168-
case Type.SymRef(sym, _) => sym.symbol == definitions.RootClass
1171+
case Type.SymRef(sym, _) => sym.fullName == "<root>" // TODO use Symbol.==
11691172
case _ => false
11701173
}
11711174
}
11721175

11731176
object EmptyPackage {
11741177
def unapply(tpe: TypeOrBounds)(implicit ctx: Context): Boolean = tpe match {
1175-
case Type.SymRef(sym, _) => sym.symbol == definitions.EmptyPackageClass
1178+
case Type.SymRef(sym, _) => sym.fullName == "<empty>"
11761179
case _ => false
11771180
}
11781181
}

tests/neg/tasty-macro-assert/quoted_1.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ object Asserts {
2020
val tree = cond.toTasty
2121

2222
def isOps(tpe: TypeOrBounds): Boolean = tpe match {
23-
case Type.SymRef(DefDef("Ops", _, _, _, _), _) => true // TODO check that the parent is Asserts
23+
case Type.SymRef(sym, _) =>
24+
sym.tree match {
25+
case Some(DefDef("Ops", _, _, _, _)) => true // TODO check that the parent is Asserts
26+
case _ => false
27+
}
2428
case _ => false
2529
}
2630

tests/run/tasty-definitions-1.check

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,17 @@ Tuple21
155155
Tuple22
156156
List(Unit, Boolean, Byte, Short, Int, Long, Float, Double, Char)
157157
List(Byte, Short, Int, Long, Float, Double, Char)
158-
Type.SymRef(ClassDef("Unit", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
159-
Type.SymRef(ClassDef("Byte", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
160-
Type.SymRef(ClassDef("Char", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
161-
Type.SymRef(ClassDef("Int", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
162-
Type.SymRef(ClassDef("Long", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
163-
Type.SymRef(ClassDef("Float", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
164-
Type.SymRef(ClassDef("Double", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
165-
Type.SymRef(ClassDef("Boolean", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
166-
Type.SymRef(ClassDef("Any", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
167-
Type.SymRef(ClassDef("AnyVal", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
168-
Type.SymRef(TypeDef("AnyRef", _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
169-
Type.SymRef(ClassDef("Object", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("lang", _), NoPrefix())))
170-
Type.SymRef(ClassDef("Nothing", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
171-
Type.SymRef(ClassDef("Null", _, _, _, _), Type.ThisType(Type.SymRef(PackageDef("scala", _), NoPrefix())))
158+
Type.SymRef(<scala.Unit>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
159+
Type.SymRef(<scala.Byte>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
160+
Type.SymRef(<scala.Char>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
161+
Type.SymRef(<scala.Int>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
162+
Type.SymRef(<scala.Long>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
163+
Type.SymRef(<scala.Float>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
164+
Type.SymRef(<scala.Double>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
165+
Type.SymRef(<scala.Boolean>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
166+
Type.SymRef(<scala.Any>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
167+
Type.SymRef(<scala.AnyVal>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
168+
Type.SymRef(<scala.AnyRef>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
169+
Type.SymRef(<java.lang.Object>, Type.ThisType(Type.SymRef(<java.lang>, NoPrefix())))
170+
Type.SymRef(<scala.Nothing>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))
171+
Type.SymRef(<scala.Null>, Type.ThisType(Type.SymRef(<scala>, NoPrefix())))

tests/run/tasty-eval/quoted_1.scala

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,16 @@ object Macros {
2323
import tasty._
2424

2525
e.toTasty.tpe match {
26-
case Type.SymRef(ValDef(_, tpt, _), pre) =>
27-
tpt.tpe match {
28-
case Type.ConstantType(Constant.Int(i)) => Some(i)
26+
case Type.SymRef(sym, pre) =>
27+
sym.tree match {
28+
case Some(ValDef(_, tpt, _)) =>
29+
tpt.tpe match {
30+
case Type.ConstantType(Constant.Int(i)) => Some(i)
31+
case _ => None
32+
}
2933
case _ => None
3034
}
35+
3136
case Type.ConstantType(Constant.Int(i)) => Some(i)
3237
case _ => None
3338
}

0 commit comments

Comments
 (0)