@@ -11,6 +11,7 @@ import Decorators._
11
11
import Contexts .Context
12
12
import collection .mutable
13
13
14
+ /** Defines possible kinds of NameInfo of a derived name */
14
15
object NameKinds {
15
16
16
17
// These are sharable since all NameKinds are created eagerly at the start of the program
@@ -20,12 +21,14 @@ object NameKinds {
20
21
@ sharable private val qualifiedNameKinds = new mutable.HashMap [Int , QualifiedNameKind ]
21
22
@ sharable private val uniqueNameKinds = new mutable.HashMap [String , UniqueNameKind ]
22
23
24
+ /** A class for the info stored in a derived name */
23
25
abstract class NameInfo extends DotClass {
24
26
def kind : NameKind
25
27
def mkString (underlying : TermName ): String
26
- def map (f : SimpleTermName => SimpleTermName ): NameInfo = this
28
+ def map (f : SimpleName => SimpleName ): NameInfo = this
27
29
}
28
30
31
+ /** The kind of a derived name info */
29
32
abstract class NameKind (val tag : Int ) extends DotClass { self =>
30
33
type ThisInfo <: Info
31
34
class Info extends NameInfo { this : ThisInfo =>
@@ -34,12 +37,12 @@ object NameKinds {
34
37
override def toString = infoString
35
38
}
36
39
def definesNewName = false
37
- def unmangle (name : SimpleTermName ): TermName = name
40
+ def unmangle (name : SimpleName ): TermName = name
38
41
def mkString (underlying : TermName , info : ThisInfo ): String
39
42
def infoString : String
40
43
}
41
44
42
- object SimpleTermNameKind extends NameKind (UTF8 ) { self =>
45
+ object SimpleNameKind extends NameKind (UTF8 ) { self =>
43
46
type ThisInfo = Info
44
47
val info = new Info
45
48
def mkString (underlying : TermName , info : ThisInfo ) = unsupported(" mkString" )
@@ -51,8 +54,8 @@ object NameKinds {
51
54
val info = new Info
52
55
def apply (qual : TermName ) =
53
56
qual.derived(info)
54
- def unapply (name : DerivedTermName ): Option [TermName ] = name match {
55
- case DerivedTermName (underlying, `info`) => Some (underlying)
57
+ def unapply (name : DerivedName ): Option [TermName ] = name match {
58
+ case DerivedName (underlying, `info`) => Some (underlying)
56
59
case _ => None
57
60
}
58
61
simpleNameKinds(tag) = this
@@ -62,44 +65,44 @@ object NameKinds {
62
65
extends ClassifiedNameKind (tag, if (optInfoString.isEmpty) s " Prefix $prefix" else optInfoString) {
63
66
def mkString (underlying : TermName , info : ThisInfo ) =
64
67
underlying.mapLast(n => termName(prefix + n.toString)).toString
65
- override def unmangle (name : SimpleTermName ): TermName =
68
+ override def unmangle (name : SimpleName ): TermName =
66
69
if (name.startsWith(prefix)) apply(name.drop(prefix.length).asSimpleName)
67
70
else name
68
71
}
69
72
70
73
class SuffixNameKind (tag : Int , suffix : String , optInfoString : String = " " )
71
74
extends ClassifiedNameKind (tag, if (optInfoString.isEmpty) s " Suffix $suffix" else optInfoString) {
72
75
def mkString (underlying : TermName , info : ThisInfo ) = underlying.toString ++ suffix
73
- override def unmangle (name : SimpleTermName ): TermName =
76
+ override def unmangle (name : SimpleName ): TermName =
74
77
if (name.endsWith(suffix)) apply(name.take(name.length - suffix.length).asSimpleName)
75
78
else name
76
79
}
77
80
78
81
trait QualifiedInfo extends NameInfo {
79
- val name : SimpleTermName
82
+ val name : SimpleName
80
83
}
81
84
82
85
class QualifiedNameKind (tag : Int , val separator : String )
83
86
extends NameKind (tag) {
84
87
type ThisInfo = QualInfo
85
- case class QualInfo (val name : SimpleTermName ) extends Info with QualifiedInfo {
86
- override def map (f : SimpleTermName => SimpleTermName ): NameInfo = new QualInfo (f(name))
88
+ case class QualInfo (val name : SimpleName ) extends Info with QualifiedInfo {
89
+ override def map (f : SimpleName => SimpleName ): NameInfo = new QualInfo (f(name))
87
90
override def toString = s " $infoString $name"
88
91
}
89
- def apply (qual : TermName , name : SimpleTermName ): TermName =
92
+ def apply (qual : TermName , name : SimpleName ): TermName =
90
93
qual.derived(new QualInfo (name))
91
94
92
95
/** Overloaded version used only for ExpandedName and TraitSetterName.
93
96
* Needed because the suffix of an expanded name may itself be expanded.
94
97
* For example, look at javap of scala.App.initCode
95
98
*/
96
99
def apply (qual : TermName , name : TermName ): TermName = name rewrite {
97
- case name : SimpleTermName => apply(qual, name)
100
+ case name : SimpleName => apply(qual, name)
98
101
case AnyQualifiedName (_, _) => apply(qual, name.toSimpleName)
99
102
}
100
103
101
- def unapply (name : DerivedTermName ): Option [(TermName , SimpleTermName )] = name match {
102
- case DerivedTermName (qual, info : this .QualInfo ) => Some ((qual, info.name))
104
+ def unapply (name : DerivedName ): Option [(TermName , SimpleName )] = name match {
105
+ case DerivedName (qual, info : this .QualInfo ) => Some ((qual, info.name))
103
106
case _ => None
104
107
}
105
108
@@ -113,8 +116,8 @@ object NameKinds {
113
116
}
114
117
115
118
object AnyQualifiedName {
116
- def unapply (name : DerivedTermName ): Option [(TermName , SimpleTermName )] = name match {
117
- case DerivedTermName (qual, info : QualifiedInfo ) =>
119
+ def unapply (name : DerivedName ): Option [(TermName , SimpleName )] = name match {
120
+ case DerivedName (qual, info : QualifiedInfo ) =>
118
121
Some ((name.underlying, info.name))
119
122
case _ => None
120
123
}
@@ -131,11 +134,11 @@ object NameKinds {
131
134
}
132
135
def apply (qual : TermName , num : Int ) =
133
136
qual.derived(new NumberedInfo (num))
134
- def unapply (name : DerivedTermName ): Option [(TermName , Int )] = name match {
135
- case DerivedTermName (underlying, info : this .NumberedInfo ) => Some ((underlying, info.num))
137
+ def unapply (name : DerivedName ): Option [(TermName , Int )] = name match {
138
+ case DerivedName (underlying, info : this .NumberedInfo ) => Some ((underlying, info.num))
136
139
case _ => None
137
140
}
138
- protected def skipSeparatorAndNum (name : SimpleTermName , separator : String ): Int = {
141
+ protected def skipSeparatorAndNum (name : SimpleName , separator : String ): Int = {
139
142
var i = name.length
140
143
while (i > 0 && name(i - 1 ).isDigit) i -= 1
141
144
if (i > separator.length && i < name.length &&
@@ -145,8 +148,8 @@ object NameKinds {
145
148
}
146
149
147
150
object AnyNumberedName {
148
- def unapply (name : DerivedTermName ): Option [(TermName , Int )] = name match {
149
- case DerivedTermName (qual, info : NumberedInfo ) => Some ((qual, info.num))
151
+ def unapply (name : DerivedName ): Option [(TermName , Int )] = name match {
152
+ case DerivedName (qual, info : NumberedInfo ) => Some ((qual, info.num))
150
153
case _ => None
151
154
}
152
155
}
@@ -166,8 +169,8 @@ object NameKinds {
166
169
}
167
170
168
171
object AnyUniqueName {
169
- def unapply (name : DerivedTermName ): Option [(TermName , String , Int )] = name match {
170
- case DerivedTermName (qual, info : NumberedInfo ) =>
172
+ def unapply (name : DerivedName ): Option [(TermName , String , Int )] = name match {
173
+ case DerivedName (qual, info : NumberedInfo ) =>
171
174
info.kind match {
172
175
case unique : UniqueNameKind => Some ((qual, unique.separator, info.num))
173
176
case _ => None
@@ -184,7 +187,7 @@ object NameKinds {
184
187
private val FalseSuper = termName(" $$super" )
185
188
private val FalseSuperLength = FalseSuper .length
186
189
187
- override def unmangle (name : SimpleTermName ): TermName = {
190
+ override def unmangle (name : SimpleName ): TermName = {
188
191
var i = name.lastIndexOfSlice(str.EXPAND_SEPARATOR )
189
192
if (i < 0 ) name
190
193
else {
@@ -223,7 +226,7 @@ object NameKinds {
223
226
val LiftedTreeName = new UniqueNameKind (" liftedTree" )
224
227
225
228
val UniqueExtMethName = new UniqueNameKind (" $extension" ) {
226
- override def unmangle (name : SimpleTermName ): TermName = {
229
+ override def unmangle (name : SimpleName ): TermName = {
227
230
val i = skipSeparatorAndNum(name, separator)
228
231
if (i > 0 ) {
229
232
val index = name.drop(i).toString.toInt
@@ -248,7 +251,7 @@ object NameKinds {
248
251
prefix.toString + str.DEFAULT_GETTER + (info.num + 1 )
249
252
}
250
253
// TODO: Reduce code duplication with UniqueExtMethName
251
- override def unmangle (name : SimpleTermName ): TermName = {
254
+ override def unmangle (name : SimpleName ): TermName = {
252
255
val i = skipSeparatorAndNum(name, str.DEFAULT_GETTER )
253
256
if (i > 0 ) {
254
257
val index = name.drop(i).toString.toInt - 1
@@ -299,8 +302,8 @@ object NameKinds {
299
302
300
303
def apply (qual : TermName , sig : Signature ) =
301
304
qual.derived(new SignedInfo (sig))
302
- def unapply (name : DerivedTermName ): Option [(TermName , Signature )] = name match {
303
- case DerivedTermName (underlying, info : SignedInfo ) => Some ((underlying, info.sig))
305
+ def unapply (name : DerivedName ): Option [(TermName , Signature )] = name match {
306
+ case DerivedName (underlying, info : SignedInfo ) => Some ((underlying, info.sig))
304
307
case _ => None
305
308
}
306
309
0 commit comments