@@ -11,22 +11,22 @@ import Decorators._
11
11
import Contexts .Context
12
12
import collection .mutable
13
13
14
- object NameExtractors {
14
+ object NameKinds {
15
15
16
- @ sharable private val simpleExtractors = new mutable.HashMap [Int , ClassifiedNameExtractor ]
17
- @ sharable private val uniqueExtractors = new mutable.HashMap [String , UniqueNameExtractor ]
18
- @ sharable private val qualifiedExtractors = new mutable.HashMap [String , QualifiedNameExtractor ]
16
+ @ sharable private val simpleNameKinds = new mutable.HashMap [Int , ClassifiedNameKind ]
17
+ @ sharable private val uniqueNameKinds = new mutable.HashMap [String , UniqueNameKind ]
18
+ @ sharable private val qualifiedNameKinds = new mutable.HashMap [String , QualifiedNameKind ]
19
19
20
20
abstract class NameInfo extends DotClass {
21
- def extractor : NameExtractor
21
+ def kind : NameKind
22
22
def mkString (underlying : TermName ): String
23
23
def map (f : SimpleTermName => SimpleTermName ): NameInfo = this
24
24
}
25
25
26
- abstract class NameExtractor (val tag : Int ) extends DotClass { self =>
26
+ abstract class NameKind (val tag : Int ) extends DotClass { self =>
27
27
type ThisInfo <: Info
28
28
class Info extends NameInfo { this : ThisInfo =>
29
- def extractor = self
29
+ def kind = self
30
30
def mkString (underlying : TermName ) = self.mkString(underlying, this )
31
31
override def toString = infoString
32
32
}
@@ -35,14 +35,14 @@ object NameExtractors {
35
35
def infoString : String
36
36
}
37
37
38
- object SimpleTermNameExtractor extends NameExtractor (UTF8 ) { self =>
38
+ object SimpleTermNameKind extends NameKind (UTF8 ) { self =>
39
39
type ThisInfo = Info
40
40
val info = new Info
41
41
def mkString (underlying : TermName , info : ThisInfo ) = unsupported(" mkString" )
42
42
def infoString = unsupported(" infoString" )
43
43
}
44
44
45
- abstract class ClassifiedNameExtractor (tag : Int , val infoString : String ) extends NameExtractor (tag) {
45
+ abstract class ClassifiedNameKind (tag : Int , val infoString : String ) extends NameKind (tag) {
46
46
type ThisInfo = Info
47
47
val info = new Info
48
48
def apply (qual : TermName ) =
@@ -51,26 +51,26 @@ object NameExtractors {
51
51
case DerivedTermName (underlying, `info`) => Some (underlying)
52
52
case _ => None
53
53
}
54
- simpleExtractors (tag) = this
54
+ simpleNameKinds (tag) = this
55
55
}
56
56
57
- class PrefixNameExtractor (tag : Int , prefix : String , optInfoString : String = " " )
58
- extends ClassifiedNameExtractor (tag, if (optInfoString.isEmpty) s " Prefix $prefix" else optInfoString) {
57
+ class PrefixNameKind (tag : Int , prefix : String , optInfoString : String = " " )
58
+ extends ClassifiedNameKind (tag, if (optInfoString.isEmpty) s " Prefix $prefix" else optInfoString) {
59
59
def mkString (underlying : TermName , info : ThisInfo ) =
60
60
underlying.mapLast(n => termName(prefix + n.toString)).toString
61
61
}
62
62
63
- class SuffixNameExtractor (tag : Int , suffix : String , optInfoString : String = " " )
64
- extends ClassifiedNameExtractor (tag, if (optInfoString.isEmpty) s " Suffix $suffix" else optInfoString) {
63
+ class SuffixNameKind (tag : Int , suffix : String , optInfoString : String = " " )
64
+ extends ClassifiedNameKind (tag, if (optInfoString.isEmpty) s " Suffix $suffix" else optInfoString) {
65
65
def mkString (underlying : TermName , info : ThisInfo ) = underlying.toString ++ suffix
66
66
}
67
67
68
68
trait QualifiedInfo extends NameInfo {
69
69
val name : SimpleTermName
70
70
}
71
71
72
- class QualifiedNameExtractor (tag : Int , val separator : String )
73
- extends NameExtractor (tag) {
72
+ class QualifiedNameKind (tag : Int , val separator : String )
73
+ extends NameKind (tag) {
74
74
type ThisInfo = QualInfo
75
75
case class QualInfo (val name : SimpleTermName ) extends Info with QualifiedInfo {
76
76
override def map (f : SimpleTermName => SimpleTermName ): NameInfo = new QualInfo (f(name))
@@ -89,7 +89,7 @@ object NameExtractors {
89
89
s " $underlying$separator${info.name}"
90
90
def infoString = s " Qualified $separator"
91
91
92
- qualifiedExtractors (separator) = this
92
+ qualifiedNameKinds (separator) = this
93
93
}
94
94
95
95
object AnyQualifiedName {
@@ -100,14 +100,13 @@ object NameExtractors {
100
100
}
101
101
}
102
102
103
- trait NumberedInfo {
103
+ trait NumberedInfo extends NameInfo {
104
104
def num : Int
105
- def extractor : NameExtractor
106
105
}
107
106
108
- abstract class NumberedNameExtractor (tag : Int , val infoString : String ) extends NameExtractor (tag) { self =>
107
+ abstract class NumberedNameKind (tag : Int , val infoString : String ) extends NameKind (tag) { self =>
109
108
type ThisInfo = NumberedInfo
110
- case class NumberedInfo (val num : Int ) extends Info with NameExtractors .NumberedInfo {
109
+ case class NumberedInfo (val num : Int ) extends Info with NameKinds .NumberedInfo {
111
110
override def toString = s " $infoString $num"
112
111
}
113
112
def apply (qual : TermName , num : Int ) =
@@ -118,8 +117,8 @@ object NameExtractors {
118
117
}
119
118
}
120
119
121
- case class UniqueNameExtractor (val separator : String )
122
- extends NumberedNameExtractor (UNIQUE , s " Unique $separator" ) {
120
+ case class UniqueNameKind (val separator : String )
121
+ extends NumberedNameKind (UNIQUE , s " Unique $separator" ) {
123
122
override def definesNewName = true
124
123
def mkString (underlying : TermName , info : ThisInfo ) = {
125
124
val safePrefix = str.sanitize(underlying.toString + separator)
@@ -129,76 +128,76 @@ object NameExtractors {
129
128
def fresh (prefix : TermName = EmptyTermName )(implicit ctx : Context ): TermName =
130
129
ctx.freshNames.newName(prefix, this )
131
130
132
- uniqueExtractors (separator) = this
131
+ uniqueNameKinds (separator) = this
133
132
}
134
133
135
134
object AnyUniqueName {
136
135
def unapply (name : DerivedTermName ): Option [(TermName , String , Int )] = name match {
137
136
case DerivedTermName (qual, info : NumberedInfo ) =>
138
- info.extractor match {
139
- case unique : UniqueNameExtractor => Some ((qual, unique.separator, info.num))
137
+ info.kind match {
138
+ case unique : UniqueNameKind => Some ((qual, unique.separator, info.num))
140
139
case _ => None
141
140
}
142
141
case _ => None
143
142
}
144
143
}
145
144
146
- val QualifiedName = new QualifiedNameExtractor (QUALIFIED , " ." )
147
- val FlattenedName = new QualifiedNameExtractor (FLATTENED , " $" )
148
- val ExpandedName = new QualifiedNameExtractor (EXPANDED , str.EXPAND_SEPARATOR )
149
- val TraitSetterName = new QualifiedNameExtractor (TRAITSETTER , str.TRAIT_SETTER_SEPARATOR )
145
+ val QualifiedName = new QualifiedNameKind (QUALIFIED , " ." )
146
+ val FlattenedName = new QualifiedNameKind (FLATTENED , " $" )
147
+ val ExpandedName = new QualifiedNameKind (EXPANDED , str.EXPAND_SEPARATOR )
148
+ val TraitSetterName = new QualifiedNameKind (TRAITSETTER , str.TRAIT_SETTER_SEPARATOR )
150
149
151
- val UniqueName = new UniqueNameExtractor (" $" ) {
150
+ val UniqueName = new UniqueNameKind (" $" ) {
152
151
override def mkString (underlying : TermName , info : ThisInfo ) =
153
152
if (underlying.isEmpty) " $" + info.num + " $" else super .mkString(underlying, info)
154
153
}
155
154
156
- val InlineAccessorName = new UniqueNameExtractor (" $_inlineAccessor_$" )
157
- val TempResultName = new UniqueNameExtractor (" ev$" )
158
- val EvidenceParamName = new UniqueNameExtractor (" evidence$" )
159
- val DepParamName = new UniqueNameExtractor (" <param>" )
160
- val LazyImplicitName = new UniqueNameExtractor (" $_lazy_implicit_$" )
161
- val LazyLocalName = new UniqueNameExtractor (" $lzy" )
162
- val LazyLocalInitName = new UniqueNameExtractor (" $lzyINIT" )
163
- val LazyFieldOffsetName = new UniqueNameExtractor (" $OFFSET" )
164
- val LazyBitMapName = new UniqueNameExtractor (nme.BITMAP_PREFIX .toString)
165
- val NonLocalReturnKeyName = new UniqueNameExtractor (" nonLocalReturnKey" )
166
- val WildcardParamName = new UniqueNameExtractor (" _$" )
167
- val TailLabelName = new UniqueNameExtractor (" tailLabel" )
168
- val ExceptionBinderName = new UniqueNameExtractor (" ex" )
169
- val SkolemName = new UniqueNameExtractor (" ?" )
170
- val LiftedTreeName = new UniqueNameExtractor (" liftedTree" )
171
-
172
- val PatMatStdBinderName = new UniqueNameExtractor (" x" )
173
- val PatMatPiName = new UniqueNameExtractor (" pi" ) // FIXME: explain what this is
174
- val PatMatPName = new UniqueNameExtractor (" p" ) // FIXME: explain what this is
175
- val PatMatOName = new UniqueNameExtractor (" o" ) // FIXME: explain what this is
176
- val PatMatCaseName = new UniqueNameExtractor (" case" )
177
- val PatMatMatchFailName = new UniqueNameExtractor (" matchFail" )
178
- val PatMatSelectorName = new UniqueNameExtractor (" selector" )
179
-
180
- object DefaultGetterName extends NumberedNameExtractor (DEFAULTGETTER , " DefaultGetter" ) {
155
+ val InlineAccessorName = new UniqueNameKind (" $_inlineAccessor_$" )
156
+ val TempResultName = new UniqueNameKind (" ev$" )
157
+ val EvidenceParamName = new UniqueNameKind (" evidence$" )
158
+ val DepParamName = new UniqueNameKind (" <param>" )
159
+ val LazyImplicitName = new UniqueNameKind (" $_lazy_implicit_$" )
160
+ val LazyLocalName = new UniqueNameKind (" $lzy" )
161
+ val LazyLocalInitName = new UniqueNameKind (" $lzyINIT" )
162
+ val LazyFieldOffsetName = new UniqueNameKind (" $OFFSET" )
163
+ val LazyBitMapName = new UniqueNameKind (nme.BITMAP_PREFIX .toString)
164
+ val NonLocalReturnKeyName = new UniqueNameKind (" nonLocalReturnKey" )
165
+ val WildcardParamName = new UniqueNameKind (" _$" )
166
+ val TailLabelName = new UniqueNameKind (" tailLabel" )
167
+ val ExceptionBinderName = new UniqueNameKind (" ex" )
168
+ val SkolemName = new UniqueNameKind (" ?" )
169
+ val LiftedTreeName = new UniqueNameKind (" liftedTree" )
170
+
171
+ val PatMatStdBinderName = new UniqueNameKind (" x" )
172
+ val PatMatPiName = new UniqueNameKind (" pi" ) // FIXME: explain what this is
173
+ val PatMatPName = new UniqueNameKind (" p" ) // FIXME: explain what this is
174
+ val PatMatOName = new UniqueNameKind (" o" ) // FIXME: explain what this is
175
+ val PatMatCaseName = new UniqueNameKind (" case" )
176
+ val PatMatMatchFailName = new UniqueNameKind (" matchFail" )
177
+ val PatMatSelectorName = new UniqueNameKind (" selector" )
178
+
179
+ object DefaultGetterName extends NumberedNameKind (DEFAULTGETTER , " DefaultGetter" ) {
181
180
def mkString (underlying : TermName , info : ThisInfo ) = {
182
181
val prefix = if (underlying.isConstructorName) nme.DEFAULT_GETTER_INIT else underlying
183
182
prefix.toString + nme.DEFAULT_GETTER + (info.num + 1 )
184
183
}
185
184
}
186
185
187
- object VariantName extends NumberedNameExtractor (VARIANT , " Variant" ) {
186
+ object VariantName extends NumberedNameKind (VARIANT , " Variant" ) {
188
187
val varianceToPrefix = Map (- 1 -> '-' , 0 -> '=' , 1 -> '+' )
189
188
val prefixToVariance = Map ('-' -> - 1 , '=' -> 0 , '+' -> 1 )
190
189
def mkString (underlying : TermName , info : ThisInfo ) = {
191
190
varianceToPrefix(info.num).toString + underlying
192
191
}
193
192
}
194
193
195
- val SuperAccessorName = new PrefixNameExtractor (SUPERACCESSOR , " super$" )
196
- val InitializerName = new PrefixNameExtractor (INITIALIZER , " initial$" )
197
- val ShadowedName = new PrefixNameExtractor (SHADOWED , " (shadowed)" )
198
- val AvoidClashName = new SuffixNameExtractor (AVOIDCLASH , " $_avoid_name_clash_$" )
199
- val ModuleClassName = new SuffixNameExtractor (OBJECTCLASS , " $" , optInfoString = " ModuleClass" )
194
+ val SuperAccessorName = new PrefixNameKind (SUPERACCESSOR , " super$" )
195
+ val InitializerName = new PrefixNameKind (INITIALIZER , " initial$" )
196
+ val ShadowedName = new PrefixNameKind (SHADOWED , " (shadowed)" )
197
+ val AvoidClashName = new SuffixNameKind (AVOIDCLASH , " $_avoid_name_clash_$" )
198
+ val ModuleClassName = new SuffixNameKind (OBJECTCLASS , " $" , optInfoString = " ModuleClass" )
200
199
201
- object SignedName extends NameExtractor (63 ) {
200
+ object SignedName extends NameKind (63 ) {
202
201
203
202
/** @param parts resultSig followed by paramsSig */
204
203
case class SignedInfo (sig : Signature ) extends Info {
@@ -217,7 +216,7 @@ object NameExtractors {
217
216
def infoString : String = " Signed"
218
217
}
219
218
220
- def simpleExtractorOfTag : collection.Map [Int , ClassifiedNameExtractor ] = simpleExtractors
221
- def qualifiedExtractorOfSeparator : collection.Map [String , QualifiedNameExtractor ] = qualifiedExtractors
222
- def uniqueExtractorOfSeparator : collection.Map [String , UniqueNameExtractor ] = uniqueExtractors
219
+ def simpleNameKindOfTag : collection.Map [Int , ClassifiedNameKind ] = simpleNameKinds
220
+ def qualifiedNameKindOfSeparator : collection.Map [String , QualifiedNameKind ] = qualifiedNameKinds
221
+ def uniqueNameKindOfSeparator : collection.Map [String , UniqueNameKind ] = uniqueNameKinds
223
222
}
0 commit comments