@@ -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
256250object 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