Skip to content

Commit 7e201e2

Browse files
committed
Split Name into TermName and TypeName
Saves some Type classes and is closer to how compilers handle it.
1 parent 760f329 commit 7e201e2

File tree

1 file changed

+43
-40
lines changed

1 file changed

+43
-40
lines changed

tests/pos/TastyADT.scala

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,27 @@ object tasty {
22

33
// ------ Names --------------------------------
44

5+
trait Name
56
trait PossiblySignedName
67

7-
enum Name extends PossiblySignedName {
8+
enum TermName extends Name with PossiblySignedName {
89
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
2021
}
2122

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
2326

2427
// ------ Positions ---------------------------
2528

@@ -45,21 +48,21 @@ object tasty {
4548
}
4649

4750
class ValDef(
48-
val name: Name,
51+
val name: TermName,
4952
val tpt: Term,
5053
rhsExp: ValDef => Term | Empty,
5154
val mods: List[Modifier])
5255
extends Definition {
5356
lazy val rhs = rhsExp(this)
5457
}
5558
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) =
5760
new ValDef(name, tpt, _ => rhs, mods)
5861
def unapply(vdef: ValDef) = Some((vdef.name, vdef.tpt, vdef.rhs, vdef.mods))
5962
}
6063

6164
class DefDef(
62-
val name: Name,
65+
val name: TermName,
6366
typeParamsExp: DefDef => List[TypeDef],
6467
paramssExp: DefDef => List[List[ValDef]],
6568
returnTptExp: DefDef => Term,
@@ -72,32 +75,32 @@ object tasty {
7275
lazy val rhs = rhsExp(this)
7376
}
7477
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) =
7679
new DefDef(name, _ => typeParams, _ => paramss, _ => returnTpt, _ => rhs, mods)
7780
def unapply(ddef: DefDef) = Some((ddef.name, ddef.typeParams, ddef.paramss, ddef.returnTpt, ddef.rhs, ddef.mods))
7881
}
7982

8083
class TypeDef(
81-
val name: Name,
84+
val name: TypeName,
8285
rhsExp: TypeDef => Term,
8386
val mods: List[Modifier])
8487
extends Definition {
8588
val rhs = rhsExp(this),
8689
}
8790
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)
8992
def unapply(tdef: TypeDef) = Some((tdef.name, tdef.rhs, tdef.mods))
9093
}
9194

9295
class ClassDef(
93-
val name: Name,
96+
val name: TypeName,
9497
rhsExp: ClassDef => Template,
9598
val mods: List[Modifier])
9699
extends Definition {
97100
val rhs = rhsExp(this)
98101
}
99102
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)
101104
def unapply(tdef: ClassDef) = Some((tdef.name, tdef.rhs, tdef.mods))
102105
}
103106

@@ -116,19 +119,19 @@ object tasty {
116119
case Omit(id1: Id)
117120
}
118121

119-
case class Id(name: Name) extends Positioned // untyped ident
122+
case class Id(name: String) extends Positioned // untyped ident
120123

121124
// ------ Terms ---------------------------------
122125

123126
/** Trees denoting terms */
124127
enum Term extends Statement {
125128
def tpe: Type = ???
126-
case Ident(name: Name, override val tpe: Type)
129+
case Ident(name: TermName, override val tpe: Type)
127130
case Select(prefix: Term, name: PossiblySignedName)
128131
case Literal(value: Constant)
129132
case This(id: Id | Empty)
130133
case New(tpt: Term)
131-
case NamedArg(name: Name, arg: Term)
134+
case NamedArg(name: TermName, arg: Term)
132135
case Apply(fn: Term, args: List[Term])
133136
case TypeApply(fn: Term, args: List[Term])
134137
case Super(thiz: Term, mixin: Id | Empty)
@@ -149,8 +152,8 @@ object tasty {
149152
/** Trees denoting types */
150153
enum TypeTerm extends Positioned {
151154
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)
154157
case Singleton(ref: Term)
155158
case Refined(underlying: TypeTerm, refinements: List[Definition])
156159
case Applied(tycon: TypeTerm, args: List[TypeTerm])
@@ -165,7 +168,7 @@ object tasty {
165168
enum Pattern extends Positioned {
166169
def tpe: Type = ???
167170
case Value(v: Term)
168-
case Bind(name: Name, pat: Pattern)
171+
case Bind(name: TermName, pat: Pattern)
169172
case Unapply(unapply: Term, implicits: List[Term], pats: List[Pattern])
170173
case Alternative(pats: List[Pattern])
171174
case TypeTest(tpt: Term)
@@ -181,11 +184,9 @@ object tasty {
181184
object Type {
182185
case class ConstantType(value: Constant) extends Type
183186
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_
186188
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
189190
case class AppliedType(tycon: Type, args: Type | TypeBounds) extends Type
190191
case class AnnotatedType(underlying: Type, annotation: Term) extends Type
191192
case class AndType(left: Type, right: Type) extends Type
@@ -205,49 +206,51 @@ object tasty {
205206
}
206207

207208
trait LambdaType extends Type {
209+
type ParamName
208210
type ParamInfo
209-
def paramNames: List[Name]
211+
def paramNames: List[ParamName]
210212
def paramInfos: List[ParamInfo]
211213
def resultType: Type
212214
}
213215

214-
class MethodType(val paramNames: List[Name], paramTypesExp: MethodType => List[Type],
216+
class MethodType(val paramNames: List[TermName], paramTypesExp: MethodType => List[Type],
215217
resultTypeExp: MethodType => Type, val mods: List[Modifier]) extends LambdaType {
218+
type ParamName = TermName
216219
type ParamInfo = Type
217220
val paramTypes = paramTypesExp(this)
218221
val resultType = resultTypeExp(this)
219222
def paramInfos = paramTypes
220223
}
221224
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) =
223226
new MethodType(paramNames, _ => paramTypes, _ => resultType, mods)
224227
def unapply(tp: MethodType) = Some((tp.paramNames, tp.paramTypes, tp.resultType, tp.mods))
225228
}
226229

227-
class PolyType(val paramNames: List[Name], paramBoundsExp: PolyType => List[TypeBounds],
230+
class PolyType(val paramNames: List[TypeName], paramBoundsExp: PolyType => List[TypeBounds],
228231
resultTypeExp: PolyType => Type) extends LambdaType {
229-
type This = PolyType
232+
type ParamName = TypeName
230233
type ParamInfo = TypeBounds
231234
val paramBounds = paramBoundsExp(this)
232235
val resultType = resultTypeExp(this)
233236
def paramInfos = paramBounds
234237
}
235238
object PolyType {
236-
def apply(paramNames: List[Name], paramBounds: List[TypeBounds], resultType: Type) =
239+
def apply(paramNames: List[TypeName], paramBounds: List[TypeBounds], resultType: Type) =
237240
new PolyType(paramNames, _ => paramBounds, _ => resultType)
238241
def unapply(tp: PolyType) = Some((tp.paramNames, tp.paramBounds, tp.resultType))
239242
}
240243

241-
class TypeLambda(val paramNames: List[Name], paramBoundsExp: TypeLambda => List[TypeBounds],
244+
class TypeLambda(val paramNames: List[TypeName], paramBoundsExp: TypeLambda => List[TypeBounds],
242245
resultTypeExp: TypeLambda => Type) extends LambdaType {
243-
type This = TypeLambda
246+
type ParamName = TypeName
244247
type ParamInfo = TypeBounds
245248
val paramBounds = paramBoundsExp(this)
246249
val resultType = resultTypeExp(this)
247250
def paramInfos = paramBounds
248251
}
249252
object TypeLambda {
250-
def apply(paramNames: List[Name], paramBounds: List[TypeBounds], resultType: Type) =
253+
def apply(paramNames: List[TypeName], paramBounds: List[TypeBounds], resultType: Type) =
251254
new TypeLambda(paramNames, _ => paramBounds, _ => resultType)
252255
def unapply(tp: TypeLambda) = Some((tp.paramNames, tp.paramBounds, tp.resultType))
253256
}

0 commit comments

Comments
 (0)