@@ -2,24 +2,27 @@ object tasty {
2
2
3
3
// ------ Names --------------------------------
4
4
5
+ trait Name
5
6
trait PossiblySignedName
6
7
7
- enum Name extends PossiblySignedName {
8
+ enum TermName extends Name with PossiblySignedName {
8
9
case Simple (str : String )
9
- case Qualified (prefix : Name , selector : String ) // s"$prefix.$name"
10
- case Unique (underlying : Name , separator : String , idx : Int ) // s"$underlying$separator$idx"
11
- case DefaultGetter (methodName : Name , idx : String ) // s"$methodName${"$default$"}${idx+1}"
12
- case Variant (underlying : Name , covariant : Boolean ) // s"${if (covariant) "+" else "-"}$underlying"
13
- case SuperAccessor (underlying : Name ) // s"${"super$"}$underlying"
14
- case ProtectedAccessor (underlying : Name ) // s"${"protectded$"}$underlying"
15
- case ProtectedSetter (underlying : Name ) // s"${"protectded$set"}$underlying"
16
- case ObjectClass (underlying : Name ) // s"$underlying${"$"}"
17
-
18
- case Expanded (prefix : Name , selector : String ) // s"$prefix${"$$"}$name" , used only for symbols coming from Scala 2
19
- case ExpandedPrefix (prefix : Name , selector : String ) // s"$prefix${"$"}$name" , used only for symbols coming from Scala 2
10
+ case Qualified (prefix : TermName , selector : String ) // s"$prefix.$name"
11
+ case Unique (underlying : TermName , separator : String , idx : Int ) // s"$underlying$separator$idx"
12
+ case DefaultGetter (methodName : TermName , idx : String ) // s"$methodName${"$default$"}${idx+1}"
13
+ case Variant (underlying : TermName , covariant : Boolean ) // s"${if (covariant) "+" else "-"}$underlying"
14
+ case SuperAccessor (underlying : TermName ) // s"${"super$"}$underlying"
15
+ case ProtectedAccessor (underlying : TermName ) // s"${"protectded$"}$underlying"
16
+ case ProtectedSetter (underlying : TermName ) // s"${"protectded$set"}$underlying"
17
+ case ObjectClass (underlying : TermName ) // s"$underlying${"$"}"
18
+
19
+ case Expanded (prefix : TermName , selector : String ) // s"$prefix${"$$"}$name" , used only for symbols coming from Scala 2
20
+ case ExpandedPrefix (prefix : TermName , selector : String ) // s"$prefix${"$"}$name" , used only for symbols coming from Scala 2
20
21
}
21
22
22
- case class SignedName (name : Name , resultSig : Name , paramSigs : List [Name ]) extends PossiblySignedName
23
+ case class SignedName (name : TermName , resultSig : TypeName , paramSigs : List [TypeName ]) extends PossiblySignedName
24
+
25
+ case class TypeName (name : TermName ) extends Name
23
26
24
27
// ------ Positions ---------------------------
25
28
@@ -45,21 +48,21 @@ object tasty {
45
48
}
46
49
47
50
class ValDef (
48
- val name : Name ,
51
+ val name : TermName ,
49
52
val tpt : Term ,
50
53
rhsExp : ValDef => Term | Empty ,
51
54
val mods : List [Modifier ])
52
55
extends Definition {
53
56
lazy val rhs = rhsExp(this )
54
57
}
55
58
object ValDef {
56
- def apply (name : Name , tpt : Term , rhs : Term | Empty , mods : List [Modifier ] = Nil ) =
59
+ def apply (name : TermName , tpt : Term , rhs : Term | Empty , mods : List [Modifier ] = Nil ) =
57
60
new ValDef (name, tpt, _ => rhs, mods)
58
61
def unapply (vdef : ValDef ) = Some ((vdef.name, vdef.tpt, vdef.rhs, vdef.mods))
59
62
}
60
63
61
64
class DefDef (
62
- val name : Name ,
65
+ val name : TermName ,
63
66
typeParamsExp : DefDef => List [TypeDef ],
64
67
paramssExp : DefDef => List [List [ValDef ]],
65
68
returnTptExp : DefDef => Term ,
@@ -72,32 +75,32 @@ object tasty {
72
75
lazy val rhs = rhsExp(this )
73
76
}
74
77
object DefDef {
75
- def apply (name : Name , typeParams : List [TypeDef ], paramss : List [List [ValDef ]], returnTpt : Term , rhs : Term | Empty , mods : List [Modifier ] = Nil ) =
78
+ def apply (name : TermName , typeParams : List [TypeDef ], paramss : List [List [ValDef ]], returnTpt : Term , rhs : Term | Empty , mods : List [Modifier ] = Nil ) =
76
79
new DefDef (name, _ => typeParams, _ => paramss, _ => returnTpt, _ => rhs, mods)
77
80
def unapply (ddef : DefDef ) = Some ((ddef.name, ddef.typeParams, ddef.paramss, ddef.returnTpt, ddef.rhs, ddef.mods))
78
81
}
79
82
80
83
class TypeDef (
81
- val name : Name ,
84
+ val name : TypeName ,
82
85
rhsExp : TypeDef => Term ,
83
86
val mods : List [Modifier ])
84
87
extends Definition {
85
88
val rhs = rhsExp(this ),
86
89
}
87
90
object TypeDef {
88
- def apply (name : Name , rhs : Term , mods : List [Modifier ] = Nil ) = new TypeDef (name, _ => rhs, mods)
91
+ def apply (name : TypeName , rhs : Term , mods : List [Modifier ] = Nil ) = new TypeDef (name, _ => rhs, mods)
89
92
def unapply (tdef : TypeDef ) = Some ((tdef.name, tdef.rhs, tdef.mods))
90
93
}
91
94
92
95
class ClassDef (
93
- val name : Name ,
96
+ val name : TypeName ,
94
97
rhsExp : ClassDef => Template ,
95
98
val mods : List [Modifier ])
96
99
extends Definition {
97
100
val rhs = rhsExp(this )
98
101
}
99
102
object ClassDef {
100
- def apply (name : Name , rhs : Template , mods : List [Modifier ] = Nil ) = new ClassDef (name, _ => rhs, mods)
103
+ def apply (name : TypeName , rhs : Template , mods : List [Modifier ] = Nil ) = new ClassDef (name, _ => rhs, mods)
101
104
def unapply (tdef : ClassDef ) = Some ((tdef.name, tdef.rhs, tdef.mods))
102
105
}
103
106
@@ -116,19 +119,19 @@ object tasty {
116
119
case Omit (id1 : Id )
117
120
}
118
121
119
- case class Id (name : Name ) extends Positioned // untyped ident
122
+ case class Id (name : String ) extends Positioned // untyped ident
120
123
121
124
// ------ Terms ---------------------------------
122
125
123
126
/** Trees denoting terms */
124
127
enum Term extends Statement {
125
128
def tpe : Type = ???
126
- case Ident (name : Name , override val tpe : Type )
129
+ case Ident (name : TermName , override val tpe : Type )
127
130
case Select (prefix : Term , name : PossiblySignedName )
128
131
case Literal (value : Constant )
129
132
case This (id : Id | Empty )
130
133
case New (tpt : Term )
131
- case NamedArg (name : Name , arg : Term )
134
+ case NamedArg (name : TermName , arg : Term )
132
135
case Apply (fn : Term , args : List [Term ])
133
136
case TypeApply (fn : Term , args : List [Term ])
134
137
case Super (thiz : Term , mixin : Id | Empty )
@@ -149,8 +152,8 @@ object tasty {
149
152
/** Trees denoting types */
150
153
enum TypeTerm extends Positioned {
151
154
def tpe : Type = ???
152
- case Ident (name : Name , override val tpe : Type )
153
- case Select (prefix : Term , name : Name )
155
+ case Ident (name : TypeName , override val tpe : Type )
156
+ case Select (prefix : Term , name : TypeName )
154
157
case Singleton (ref : Term )
155
158
case Refined (underlying : TypeTerm , refinements : List [Definition ])
156
159
case Applied (tycon : TypeTerm , args : List [TypeTerm ])
@@ -165,7 +168,7 @@ object tasty {
165
168
enum Pattern extends Positioned {
166
169
def tpe : Type = ???
167
170
case Value (v : Term )
168
- case Bind (name : Name , pat : Pattern )
171
+ case Bind (name : TermName , pat : Pattern )
169
172
case Unapply (unapply : Term , implicits : List [Term ], pats : List [Pattern ])
170
173
case Alternative (pats : List [Pattern ])
171
174
case TypeTest (tpt : Term )
@@ -181,11 +184,9 @@ object tasty {
181
184
object Type {
182
185
case class ConstantType (value : Constant ) extends Type
183
186
case class SymRef (sym : Definition , qualifier : Type | Empty = Empty ) extends Type
184
- case class TypeNameRef (name : Name , qualifier : Type | Empty = Empty ) extends Type // Empty means: select from _root_
185
- case class TermNameRef (name : Name , qualifier : Type | Empty = Empty ) extends Type // Empty means: select from _root_
187
+ case class NameRef (name : Name , qualifier : Type | Empty = Empty ) extends Type // Empty means: select from _root_
186
188
case class SuperType (thistp : Type , underlying : Type ) extends Type
187
- case class TermRefinement (underlying : Type , name : Name , tpe : Type ) extends Type
188
- case class TypeRefinement (underlying : Type , name : Name , info : TypeBounds ) extends Type
189
+ case class Refinement (underlying : Type , name : Name , tpe : Type ) extends Type
189
190
case class AppliedType (tycon : Type , args : Type | TypeBounds ) extends Type
190
191
case class AnnotatedType (underlying : Type , annotation : Term ) extends Type
191
192
case class AndType (left : Type , right : Type ) extends Type
@@ -205,49 +206,51 @@ object tasty {
205
206
}
206
207
207
208
trait LambdaType extends Type {
209
+ type ParamName
208
210
type ParamInfo
209
- def paramNames : List [Name ]
211
+ def paramNames : List [ParamName ]
210
212
def paramInfos : List [ParamInfo ]
211
213
def resultType : Type
212
214
}
213
215
214
- class MethodType (val paramNames : List [Name ], paramTypesExp : MethodType => List [Type ],
216
+ class MethodType (val paramNames : List [TermName ], paramTypesExp : MethodType => List [Type ],
215
217
resultTypeExp : MethodType => Type , val mods : List [Modifier ]) extends LambdaType {
218
+ type ParamName = TermName
216
219
type ParamInfo = Type
217
220
val paramTypes = paramTypesExp(this )
218
221
val resultType = resultTypeExp(this )
219
222
def paramInfos = paramTypes
220
223
}
221
224
object MethodType {
222
- def apply (paramNames : List [Name ], paramTypes : List [Type ], resultType : Type , mods : List [Modifier ] = Nil ) =
225
+ def apply (paramNames : List [TermName ], paramTypes : List [Type ], resultType : Type , mods : List [Modifier ] = Nil ) =
223
226
new MethodType (paramNames, _ => paramTypes, _ => resultType, mods)
224
227
def unapply (tp : MethodType ) = Some ((tp.paramNames, tp.paramTypes, tp.resultType, tp.mods))
225
228
}
226
229
227
- class PolyType (val paramNames : List [Name ], paramBoundsExp : PolyType => List [TypeBounds ],
230
+ class PolyType (val paramNames : List [TypeName ], paramBoundsExp : PolyType => List [TypeBounds ],
228
231
resultTypeExp : PolyType => Type ) extends LambdaType {
229
- type This = PolyType
232
+ type ParamName = TypeName
230
233
type ParamInfo = TypeBounds
231
234
val paramBounds = paramBoundsExp(this )
232
235
val resultType = resultTypeExp(this )
233
236
def paramInfos = paramBounds
234
237
}
235
238
object PolyType {
236
- def apply (paramNames : List [Name ], paramBounds : List [TypeBounds ], resultType : Type ) =
239
+ def apply (paramNames : List [TypeName ], paramBounds : List [TypeBounds ], resultType : Type ) =
237
240
new PolyType (paramNames, _ => paramBounds, _ => resultType)
238
241
def unapply (tp : PolyType ) = Some ((tp.paramNames, tp.paramBounds, tp.resultType))
239
242
}
240
243
241
- class TypeLambda (val paramNames : List [Name ], paramBoundsExp : TypeLambda => List [TypeBounds ],
244
+ class TypeLambda (val paramNames : List [TypeName ], paramBoundsExp : TypeLambda => List [TypeBounds ],
242
245
resultTypeExp : TypeLambda => Type ) extends LambdaType {
243
- type This = TypeLambda
246
+ type ParamName = TypeName
244
247
type ParamInfo = TypeBounds
245
248
val paramBounds = paramBoundsExp(this )
246
249
val resultType = resultTypeExp(this )
247
250
def paramInfos = paramBounds
248
251
}
249
252
object TypeLambda {
250
- def apply (paramNames : List [Name ], paramBounds : List [TypeBounds ], resultType : Type ) =
253
+ def apply (paramNames : List [TypeName ], paramBounds : List [TypeBounds ], resultType : Type ) =
251
254
new TypeLambda (paramNames, _ => paramBounds, _ => resultType)
252
255
def unapply (tp : TypeLambda ) = Some ((tp.paramNames, tp.paramBounds, tp.resultType))
253
256
}
0 commit comments