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