@@ -12,8 +12,8 @@ object tasty {
12
12
case DefaultGetter (methodName : TermName , idx : String ) // s"$methodName${"$default$"}${idx+1}"
13
13
case Variant (underlying : TermName , covariant : Boolean ) // s"${if (covariant) "+" else "-"}$underlying"
14
14
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"
17
17
case ObjectClass (underlying : TermName ) // s"$underlying${"$"}"
18
18
19
19
case Expanded (prefix : TermName , selector : String ) // s"$prefix${"$$"}$name" , used only for symbols coming from Scala 2
@@ -34,8 +34,8 @@ object tasty {
34
34
35
35
// ------ Statements ---------------------------------
36
36
37
- trait TopLevelStatement extends Positioned
38
- trait Statement extends TopLevelStatement
37
+ sealed trait TopLevelStatement extends Positioned
38
+ sealed trait Statement extends TopLevelStatement
39
39
40
40
case class Package (pkg : Term , body : List [TopLevelStatement ]) extends TopLevelStatement
41
41
@@ -51,22 +51,17 @@ object tasty {
51
51
52
52
// ------ Definitions ---------------------------------
53
53
54
- class Symbol {
55
- def owner : Symbol = ???
56
- def definition : Definition = ???
54
+ trait Definition extends Statement {
55
+ def name : Name
56
+ def owner : Definition
57
57
}
58
- object NoSymbol extends Symbol
59
58
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
65
60
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
67
62
case class TypeDef (name : TypeName , rhs : Term , mods : List [Modifier ]) extends Definition
68
63
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
70
65
71
66
// ------ Terms ---------------------------------
72
67
@@ -76,39 +71,39 @@ object tasty {
76
71
case Ident (name : TermName , override val tpe : Type )
77
72
case Select (prefix : Term , name : PossiblySignedName )
78
73
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 )
81
76
case NamedArg (name : TermName , arg : Term )
82
77
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 )
86
81
case Assign (lhs : Term , rhs : Term )
87
82
case Block (stats : List [Statement ], expr : Term )
88
83
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 ] )
90
85
case If (cond : Term , thenPart : Term , elsePart : Term )
91
86
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 ] )
93
88
case Return (expr : Term )
94
89
case Repeated (args : List [Term ])
95
90
case SelectOuter (from : Term , levels : Int , target : Type ) // can be generated by inlining
96
- case Tpt (underlying : TypeTerm | Empty )
97
91
}
98
92
99
93
/** Trees denoting types */
100
- enum TypeTerm extends Positioned {
94
+ enum TypeTree extends Positioned {
101
95
def tpe : Type = ???
96
+ case Synthetic ()
102
97
case Ident (name : TypeName , override val tpe : Type )
103
98
case Select (prefix : Term , name : TypeName )
104
99
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 )
112
107
}
113
108
114
109
/** Trees denoting patterns */
@@ -118,22 +113,22 @@ object tasty {
118
113
case Bind (name : TermName , pat : Pattern )
119
114
case Unapply (unapply : Term , implicits : List [Term ], pats : List [Pattern ])
120
115
case Alternative (pats : List [Pattern ])
121
- case TypeTest (tpt : Term )
116
+ case TypeTest (tpt : TypeTree )
122
117
case Wildcard ()
123
118
}
124
119
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
126
121
127
122
// ------ Types ---------------------------------
128
123
129
124
sealed trait Type
130
125
131
126
object Type {
132
- private val PlaceHolder = SymRef ( NoSymbol , Empty )
127
+ private val PlaceHolder = ConstantType ( Constant . Unit )
133
128
134
129
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_
137
132
case class SuperType (thistp : Type , underlying : Type ) extends Type
138
133
case class Refinement (underlying : Type , name : Name , tpe : Type ) extends Type
139
134
case class AppliedType (tycon : Type , args : List [Type | TypeBounds ]) extends Type
@@ -202,6 +197,8 @@ object tasty {
202
197
object ErasedImplicitMethodType extends SpecializedMethodTypeCompanion
203
198
204
199
case class TypeBounds (loBound : Type , hiBound : Type )
200
+ case class NoPrefix ()
201
+ object NoPrefix extends NoPrefix
205
202
}
206
203
207
204
// ------ Modifiers ---------------------------------
@@ -232,35 +229,32 @@ object tasty {
232
229
233
230
// ------ Constants ---------------------------------
234
231
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 )
250
247
}
251
-
252
- sealed class Empty ()
253
- object Empty extends Empty
254
248
}
255
249
256
250
object Test {
257
251
import tasty ._
258
252
import Type ._
259
253
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 ) => ???
264
258
case NameRef (name : Name , qualifier) => ???
265
259
case SuperType (thistp : Type , underlying : Type ) => ???
266
260
case Refinement (underlying : Type , name : Name , tpe : Type ) => ???
0 commit comments