Skip to content

Commit ed32ab0

Browse files
committed
More fixes
Avoid `Empty` and `Tpt`
1 parent 55c917d commit ed32ab0

File tree

1 file changed

+52
-58
lines changed

1 file changed

+52
-58
lines changed

tests/pos/TastyADT.scala

Lines changed: 52 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ object tasty {
1212
case DefaultGetter(methodName: TermName, idx: String) // s"$methodName${"$default$"}${idx+1}"
1313
case Variant(underlying: TermName, covariant: Boolean) // s"${if (covariant) "+" else "-"}$underlying"
1414
case SuperAccessor(underlying: TermName) // s"${"super$"}$underlying"
15-
case ProtectedAccessor(underlying: TermName) // s"${"protectded$"}$underlying"
16-
case ProtectecSetter(underlying: TermName) // s"${"protectded$set"}$underlying"
15+
case ProtectedAccessor(underlying: TermName) // s"${"protected$"}$underlying"
16+
case ProtectedSetter(underlying: TermName) // s"${"protected$set"}$underlying"
1717
case ObjectClass(underlying: TermName) // s"$underlying${"$"}"
1818

1919
case Expanded(prefix: TermName, selector: String) // s"$prefix${"$$"}$name" , used only for symbols coming from Scala 2
@@ -34,8 +34,8 @@ object tasty {
3434

3535
// ------ Statements ---------------------------------
3636

37-
trait TopLevelStatement extends Positioned
38-
trait Statement extends TopLevelStatement
37+
sealed trait TopLevelStatement extends Positioned
38+
sealed trait Statement extends TopLevelStatement
3939

4040
case class Package(pkg: Term, body: List[TopLevelStatement]) extends TopLevelStatement
4141

@@ -51,22 +51,17 @@ object tasty {
5151

5252
// ------ Definitions ---------------------------------
5353

54-
class Symbol {
55-
def owner: Symbol = ???
56-
def definition: Definition = ???
54+
trait Definition extends Statement {
55+
def name: Name
56+
def owner: Definition
5757
}
58-
object NoSymbol extends Symbol
5958

60-
trait Definition {
61-
def sym: Symbol = ???
62-
}
63-
64-
case class ValDef(name: TermName, tpt: Term, rhs: Term | Empty, mods: List[Modifier]) extends Definition
59+
case class ValDef(name: TermName, tpt: Term, rhs: Option[Term], mods: List[Modifier]) extends Definition
6560
case class DefDef(name: TermName, typeParams: List[TypeDef], paramss: List[List[ValDef]],
66-
returnTpt: Term, rhs: Term | Empty, mods: List[Modifier]) extends Definition
61+
returnTpt: Term, rhs: Option[Term], mods: List[Modifier]) extends Definition
6762
case class TypeDef(name: TypeName, rhs: Term, mods: List[Modifier]) extends Definition
6863
case class ClassDef(name: TypeName, constructor: DefDef, parents: List[Term],
69-
self: ValDef | Empty, body: List[Statement], mods: List[Modifier]) extends Definition
64+
self: Option[ValDef], body: List[Statement], mods: List[Modifier]) extends Definition
7065

7166
// ------ Terms ---------------------------------
7267

@@ -76,39 +71,39 @@ object tasty {
7671
case Ident(name: TermName, override val tpe: Type)
7772
case Select(prefix: Term, name: PossiblySignedName)
7873
case Literal(value: Constant)
79-
case This(id: Id | Empty)
80-
case New(tpt: Term)
74+
case This(id: Option[Id])
75+
case New(tpt: TypeTree)
8176
case NamedArg(name: TermName, arg: Term)
8277
case Apply(fn: Term, args: List[Term])
83-
case TypeApply(fn: Term, args: List[Term])
84-
case Super(thiz: Term, mixin: Id | Empty)
85-
case Typed(expr: Term, tpt: Term)
78+
case TypeApply(fn: Term, args: List[TypeTree])
79+
case Super(thiz: Term, mixin: Option[Id])
80+
case Typed(expr: Term, tpt: TypeTree)
8681
case Assign(lhs: Term, rhs: Term)
8782
case Block(stats: List[Statement], expr: Term)
8883
case Inlined(call: Term, bindings: List[Definition], expr: Term)
89-
case Lambda(method: Term, tpt: Term | Empty)
84+
case Lambda(method: Term, tpt: Option[TypeTree])
9085
case If(cond: Term, thenPart: Term, elsePart: Term)
9186
case Match(scrutinee: Term, cases: List[CaseDef])
92-
case Try(body: Term, catches: List[CaseDef], finalizer: Term | Empty)
87+
case Try(body: Term, catches: List[CaseDef], finalizer: Option[Term])
9388
case Return(expr: Term)
9489
case Repeated(args: List[Term])
9590
case SelectOuter(from: Term, levels: Int, target: Type) // can be generated by inlining
96-
case Tpt(underlying: TypeTerm | Empty)
9791
}
9892

9993
/** Trees denoting types */
100-
enum TypeTerm extends Positioned {
94+
enum TypeTree extends Positioned {
10195
def tpe: Type = ???
96+
case Synthetic()
10297
case Ident(name: TypeName, override val tpe: Type)
10398
case Select(prefix: Term, name: TypeName)
10499
case Singleton(ref: Term)
105-
case Refined(underlying: TypeTerm, refinements: List[Definition])
106-
case Applied(tycon: TypeTerm, args: List[TypeTerm])
107-
case TypeBounds(loBound: TypeTerm, hiBound: TypeTerm)
108-
case Annotated(tpt: TypeTerm, annotation: Term)
109-
case And(left: TypeTerm, right: TypeTerm)
110-
case Or(left: TypeTerm, right: TypeTerm)
111-
case ByName(tpt: TypeTerm)
100+
case Refined(underlying: TypeTree, refinements: List[Definition])
101+
case Applied(tycon: TypeTree, args: List[TypeTree])
102+
case TypeBounds(loBound: TypeTree, hiBound: TypeTree)
103+
case Annotated(tpt: TypeTree, annotation: Term)
104+
case And(left: TypeTree, right: TypeTree)
105+
case Or(left: TypeTree, right: TypeTree)
106+
case ByName(tpt: TypeTree)
112107
}
113108

114109
/** Trees denoting patterns */
@@ -118,22 +113,22 @@ object tasty {
118113
case Bind(name: TermName, pat: Pattern)
119114
case Unapply(unapply: Term, implicits: List[Term], pats: List[Pattern])
120115
case Alternative(pats: List[Pattern])
121-
case TypeTest(tpt: Term)
116+
case TypeTest(tpt: TypeTree)
122117
case Wildcard()
123118
}
124119

125-
case class CaseDef(pat: Pattern, guard: Term | Empty, rhs: Term) extends Positioned
120+
case class CaseDef(pat: Pattern, guard: Option[Term], rhs: Term) extends Positioned
126121

127122
// ------ Types ---------------------------------
128123

129124
sealed trait Type
130125

131126
object Type {
132-
private val PlaceHolder = SymRef(NoSymbol, Empty)
127+
private val PlaceHolder = ConstantType(Constant.Unit)
133128

134129
case class ConstantType(value: Constant) extends Type
135-
case class SymRef(sym: Symbol, qualifier: Type | Empty = Empty) extends Type
136-
case class NameRef(name: Name, qualifier: Type | Empty = Empty) extends Type // Empty means: select from _root_
130+
case class SymRef(sym: Definition, qualifier: Type | NoPrefix = NoPrefix) extends Type
131+
case class NameRef(name: Name, qualifier: Type | NoPrefix = NoPrefix) extends Type // NoPrefix means: select from _root_
137132
case class SuperType(thistp: Type, underlying: Type) extends Type
138133
case class Refinement(underlying: Type, name: Name, tpe: Type) extends Type
139134
case class AppliedType(tycon: Type, args: List[Type | TypeBounds]) extends Type
@@ -202,6 +197,8 @@ object tasty {
202197
object ErasedImplicitMethodType extends SpecializedMethodTypeCompanion
203198

204199
case class TypeBounds(loBound: Type, hiBound: Type)
200+
case class NoPrefix()
201+
object NoPrefix extends NoPrefix
205202
}
206203

207204
// ------ Modifiers ---------------------------------
@@ -232,35 +229,32 @@ object tasty {
232229

233230
// ------ Constants ---------------------------------
234231

235-
enum Constant(value: Any) {
236-
case Unit extends Constant(())
237-
case False extends Constant(false)
238-
case True extends Constant(true)
239-
case Null extends Constant(null)
240-
case Byte(value: scala.Byte) extends Constant(value)
241-
case Short(value: scala.Short) extends Constant(value)
242-
case Char(value: scala.Char) extends Constant(value)
243-
case Int(value: scala.Int) extends Constant(value)
244-
case Long(value: scala.Long) extends Constant(value)
245-
case Float(value: scala.Float) extends Constant(value)
246-
case Double(value: scala.Double) extends Constant(value)
247-
case String(value: java.lang.String) extends Constant(value)
248-
case Class(value: Type) extends Constant(value)
249-
case Enum(value: Type) extends Constant(value)
232+
enum Constant(val value: Any) {
233+
case Unit extends Constant(())
234+
case False extends Constant(false)
235+
case True extends Constant(true)
236+
case Null extends Constant(null)
237+
case Byte(v: scala.Byte) extends Constant(v)
238+
case Short(v: scala.Short) extends Constant(v)
239+
case Char(v: scala.Char) extends Constant(v)
240+
case Int(v: scala.Int) extends Constant(v)
241+
case Long(v: scala.Long) extends Constant(v)
242+
case Float(v: scala.Float) extends Constant(v)
243+
case Double(v: scala.Double) extends Constant(v)
244+
case String(v: java.lang.String) extends Constant(v)
245+
case Class(v: Type) extends Constant(v)
246+
case Enum(v: Type) extends Constant(v)
250247
}
251-
252-
sealed class Empty()
253-
object Empty extends Empty
254248
}
255249

256250
object Test {
257251
import tasty._
258252
import Type._
259253

260-
def show(tp: Type) = tp match {
261-
case ConstantType(value) => ???
262-
case SymRef(sym, Empty) => ???
263-
case SymRef(sym, qual) => ???
254+
def show(tp: Type): String = tp match {
255+
case ConstantType(c) => c.value.toString
256+
case SymRef(sym, NoPrefix) => ???
257+
case SymRef(sym, NoPrefix) => ???
264258
case NameRef(name: Name, qualifier) => ???
265259
case SuperType(thistp: Type, underlying: Type) => ???
266260
case Refinement(underlying: Type, name: Name, tpe: Type) => ???

0 commit comments

Comments
 (0)