@@ -2,40 +2,6 @@ package tasty
2
2
3
3
object definitions {
4
4
5
- // ====== Names ======================================
6
-
7
- trait Name
8
- trait PossiblySignedName
9
-
10
- enum TermName extends Name with PossiblySignedName {
11
- case Simple (str : String )
12
- case Qualified (prefix : TermName , selector : String ) // s"$prefix.$name"
13
-
14
- case DefaultGetter (methodName : TermName , idx : String ) // s"$methodName${"$default$"}${idx+1}"
15
- case Variant (underlying : TermName , covariant : Boolean ) // s"${if (covariant) "+" else "-"}$underlying"
16
- case SuperAccessor (underlying : TermName ) // s"${"super$"}$underlying"
17
- case ProtectedAccessor (underlying : TermName ) // s"${"protected$"}$underlying"
18
- case ProtectedSetter (underlying : TermName ) // s"${"protected$set"}$underlying"
19
- case ObjectClass (underlying : TermName ) // s"$underlying${"$"}"
20
- }
21
-
22
- case class SignedName (name : TermName , resultSig : TypeName , paramSigs : List [TypeName ]) extends PossiblySignedName
23
-
24
- case class TypeName (name : TermName ) extends Name
25
-
26
- // ====== Positions ==================================
27
-
28
- case class Position (firstOffset : Int , lastOffset : Int , sourceFile : String ) {
29
- def startLine : Int = ???
30
- def startColumn : Int = ???
31
- def endLine : Int = ???
32
- def endColumn : Int = ???
33
- }
34
-
35
- trait Positioned {
36
- def pos : Position = ???
37
- }
38
-
39
5
// ====== Trees ======================================
40
6
41
7
trait Tree extends Positioned
@@ -64,34 +30,34 @@ object definitions {
64
30
}
65
31
66
32
// Does DefDef need a `def tpe: MethodType | PolyType`?
67
- case class ValDef (name : TermName , tpt : TypeTree , rhs : Option [Term ]) extends Definition {
33
+ case class ValDef (name : String , tpt : TypeTree , rhs : Option [Term ]) extends Definition {
68
34
def mods : List [Modifier ] = ???
69
35
}
70
- case class DefDef (name : TermName , typeParams : List [TypeDef ], paramss : List [List [ValDef ]],
36
+ case class DefDef (name : String , typeParams : List [TypeDef ], paramss : List [List [ValDef ]],
71
37
returnTpt : TypeTree , rhs : Option [Term ]) extends Definition {
72
38
def mods : List [Modifier ] = ???
73
39
}
74
- case class TypeDef (name : TypeName , rhs : TypeTree | TypeBoundsTree ) extends Definition {
40
+ case class TypeDef (name : String , rhs : TypeTree | TypeBoundsTree ) extends Definition {
75
41
def mods : List [Modifier ] = ???
76
42
}
77
- case class ClassDef (name : TypeName , constructor : DefDef , parents : List [Term | TypeTree ],
43
+ case class ClassDef (name : String , constructor : DefDef , parents : List [Term | TypeTree ],
78
44
self : Option [ValDef ], body : List [Statement ]) extends Definition {
79
45
def mods : List [Modifier ] = ???
80
46
}
81
- case class PackageDef (name : TermName , members : List [Statement ]) extends Definition
47
+ case class PackageDef (name : String , members : List [Statement ]) extends Definition
82
48
83
49
// ------ Terms ---------------------------------
84
50
85
51
/** Trees denoting terms */
86
52
enum Term extends Statement {
87
53
def tpe : Type = ???
88
- case Ident (name : TermName , override val tpe : Type )
89
- case Select (prefix : Term , name : PossiblySignedName )
54
+ case Ident (name : String , override val tpe : Type )
55
+ case Select (prefix : Term , name : String , signature : Option [ Signature ] )
90
56
case Literal (value : Constant )
91
57
case This (id : Option [Id ])
92
58
case New (tpt : TypeTree )
93
59
case Throw (expr : Term )
94
- case NamedArg (name : TermName , arg : Term )
60
+ case NamedArg (name : String , arg : Term )
95
61
case Apply (fn : Term , args : List [Term ])
96
62
case TypeApply (fn : Term , args : List [TypeTree ])
97
63
case Super (thiz : Term , mixin : Option [Id ])
@@ -112,8 +78,8 @@ object definitions {
112
78
enum TypeTree extends Tree {
113
79
def tpe : Type = ???
114
80
case Synthetic ()
115
- case Ident (name : TypeName , override val tpe : Type )
116
- case Select (prefix : Term , name : TypeName )
81
+ case Ident (name : String , override val tpe : Type )
82
+ case Select (prefix : Term , name : String )
117
83
case Singleton (ref : Term )
118
84
case Refined (underlying : TypeTree , refinements : List [Definition ])
119
85
case Applied (tycon : TypeTree , args : List [TypeTree ])
@@ -132,7 +98,7 @@ object definitions {
132
98
enum Pattern extends Tree {
133
99
def tpe : Type = ???
134
100
case Value (v : Term )
135
- case Bind (name : TermName , pat : Pattern )
101
+ case Bind (name : String , pat : Pattern )
136
102
case Unapply (unapply : Term , implicits : List [Term ], pats : List [Pattern ])
137
103
case Alternative (pats : List [Pattern ])
138
104
case TypeTest (tpt : TypeTree )
@@ -150,15 +116,16 @@ object definitions {
150
116
151
117
case class ConstantType (value : Constant ) extends Type
152
118
case class SymRef (sym : Definition , qualifier : Type | NoPrefix = NoPrefix ) extends Type
153
- case class NameRef (name : Name , qualifier : Type | NoPrefix = NoPrefix ) extends Type // NoPrefix means: select from _root_
119
+ case class TypeNameRef (name : String , qualifier : Type | NoPrefix = NoPrefix ) extends Type // NoPrefix means: select from _root_
120
+ case class TermNameRef (name : String , qualifier : Type | NoPrefix = NoPrefix ) extends Type // NoPrefix means: select from _root_
154
121
case class SuperType (thistp : Type , underlying : Type ) extends Type
155
- case class Refinement (underlying : Type , name : Name , tpe : Type | TypeBounds ) extends Type
122
+ case class Refinement (underlying : Type , name : String , tpe : Type | TypeBounds ) extends Type
156
123
case class AppliedType (tycon : Type , args : List [Type | TypeBounds ]) extends Type
157
124
case class AnnotatedType (underlying : Type , annotation : Term ) extends Type
158
125
case class AndType (left : Type , right : Type ) extends Type
159
126
case class OrType (left : Type , right : Type ) extends Type
160
127
case class ByNameType (underlying : Type ) extends Type
161
- case class ParamRef (binder : LambdaType [_, _, _ ], idx : Int ) extends Type
128
+ case class ParamRef (binder : LambdaType [_, _], idx : Int ) extends Type
162
129
case class ThisType (tp : Type ) extends Type
163
130
case class RecursiveThis (binder : RecursiveType ) extends Type
164
131
@@ -173,46 +140,46 @@ object definitions {
173
140
}
174
141
}
175
142
176
- abstract class LambdaType [ParamName , ParamInfo , This <: LambdaType [ParamName , ParamInfo , This ]](
177
- val companion : LambdaTypeCompanion [ParamName , ParamInfo , This ]
143
+ abstract class LambdaType [ParamInfo , This <: LambdaType [ParamInfo , This ]](
144
+ val companion : LambdaTypeCompanion [ParamInfo , This ]
178
145
) extends Type {
179
146
private [Type ] var _pinfos : List [ParamInfo ]
180
147
private [Type ] var _restpe : Type
181
148
182
- def paramNames : List [ParamName ]
149
+ def paramNames : List [String ]
183
150
def paramInfos : List [ParamInfo ] = _pinfos
184
151
def resultType : Type = _restpe
185
152
}
186
153
187
- abstract class LambdaTypeCompanion [ParamName , ParamInfo , This <: LambdaType [ParamName , ParamInfo , This ]] {
188
- def apply (pnames : List [ParamName ], ptypes : List [ParamInfo ], restpe : Type ): This
154
+ abstract class LambdaTypeCompanion [ParamInfo , This <: LambdaType [ParamInfo , This ]] {
155
+ def apply (pnames : List [String ], ptypes : List [ParamInfo ], restpe : Type ): This
189
156
190
- def apply (pnames : List [ParamName ], ptypesExp : This => List [ParamInfo ], restpeExp : This => Type ): This = {
157
+ def apply (pnames : List [String ], ptypesExp : This => List [ParamInfo ], restpeExp : This => Type ): This = {
191
158
val lambda = apply(pnames, Nil , PlaceHolder )
192
159
lambda._pinfos = ptypesExp(lambda)
193
160
lambda._restpe = restpeExp(lambda)
194
161
lambda
195
162
}
196
163
}
197
164
198
- case class MethodType (paramNames : List [TermName ], private [Type ] var _pinfos : List [Type ], private [Type ] var _restpe : Type )
199
- extends LambdaType [TermName , Type , MethodType ](MethodType ) {
165
+ case class MethodType (paramNames : List [String ], private [Type ] var _pinfos : List [Type ], private [Type ] var _restpe : Type )
166
+ extends LambdaType [Type , MethodType ](MethodType ) {
200
167
def isImplicit = (companion `eq` ImplicitMethodType ) || (companion `eq` ErasedImplicitMethodType )
201
168
def isErased = (companion `eq` ErasedMethodType ) || (companion `eq` ErasedImplicitMethodType )
202
169
}
203
170
204
- case class PolyType (paramNames : List [TypeName ], private [Type ] var _pinfos : List [TypeBounds ], private [Type ] var _restpe : Type )
205
- extends LambdaType [TypeName , TypeBounds , PolyType ](PolyType )
171
+ case class PolyType (paramNames : List [String ], private [Type ] var _pinfos : List [TypeBounds ], private [Type ] var _restpe : Type )
172
+ extends LambdaType [TypeBounds , PolyType ](PolyType )
206
173
207
- case class TypeLambda (paramNames : List [TypeName ], private [Type ] var _pinfos : List [TypeBounds ], private [Type ] var _restpe : Type )
208
- extends LambdaType [TypeName , TypeBounds , TypeLambda ](TypeLambda )
174
+ case class TypeLambda (paramNames : List [String ], private [Type ] var _pinfos : List [TypeBounds ], private [Type ] var _restpe : Type )
175
+ extends LambdaType [TypeBounds , TypeLambda ](TypeLambda )
209
176
210
- object TypeLambda extends LambdaTypeCompanion [TypeName , TypeBounds , TypeLambda ]
211
- object PolyType extends LambdaTypeCompanion [TypeName , TypeBounds , PolyType ]
212
- object MethodType extends LambdaTypeCompanion [TermName , Type , MethodType ]
177
+ object TypeLambda extends LambdaTypeCompanion [TypeBounds , TypeLambda ]
178
+ object PolyType extends LambdaTypeCompanion [TypeBounds , PolyType ]
179
+ object MethodType extends LambdaTypeCompanion [Type , MethodType ]
213
180
214
- class SpecializedMethodTypeCompanion extends LambdaTypeCompanion [TermName , Type , MethodType ] { self =>
215
- def apply (pnames : List [TermName ], ptypes : List [Type ], restpe : Type ): MethodType =
181
+ class SpecializedMethodTypeCompanion extends LambdaTypeCompanion [Type , MethodType ] { self =>
182
+ def apply (pnames : List [String ], ptypes : List [Type ], restpe : Type ): MethodType =
216
183
new MethodType (pnames, ptypes, restpe) { override val companion = self }
217
184
}
218
185
object ImplicitMethodType extends SpecializedMethodTypeCompanion
@@ -227,7 +194,6 @@ object definitions {
227
194
228
195
// ====== Modifiers ==================================
229
196
230
-
231
197
enum Modifier {
232
198
case Flags (flags : FlagSet )
233
199
case QualifiedPrivate (boundary : Type )
@@ -264,6 +230,21 @@ object definitions {
264
230
def isStable : Boolean // Method that is assumed to be stable
265
231
}
266
232
233
+ case class Signature (paramSigs : List [String ], resultSig : String )
234
+
235
+ // ====== Positions ==================================
236
+
237
+ case class Position (firstOffset : Int , lastOffset : Int , sourceFile : String ) {
238
+ def startLine : Int = ???
239
+ def startColumn : Int = ???
240
+ def endLine : Int = ???
241
+ def endColumn : Int = ???
242
+ }
243
+
244
+ trait Positioned {
245
+ def pos : Position = ???
246
+ }
247
+
267
248
// ====== Constants ==================================
268
249
269
250
enum Constant (val value : Any ) {
0 commit comments