@@ -4,63 +4,38 @@ package core
4
4
package tasty
5
5
6
6
import collection .mutable
7
- import Names .{Name , chrs , SimpleTermName }
7
+ import Names .{Name , chrs , SimpleTermName , DerivedTermName }
8
8
import NameOps .NameDecorator
9
9
import NameExtractors ._
10
10
import Decorators ._
11
11
import TastyBuffer ._
12
12
import scala .io .Codec
13
- import TastyName ._
14
13
import TastyFormat ._
15
14
16
15
class NameBuffer extends TastyBuffer (10000 ) {
17
16
import NameBuffer ._
18
17
19
- private val nameRefs = new mutable.LinkedHashMap [TastyName , NameRef ]
18
+ private val nameRefs = new mutable.LinkedHashMap [Name , NameRef ]
20
19
21
- def nameIndex (name : TastyName ): NameRef = nameRefs.get(name) match {
22
- case Some (ref) =>
23
- ref
24
- case None =>
25
- val ref = NameRef (nameRefs.size)
26
- nameRefs(name) = ref
27
- ref
28
- }
29
-
30
- def nameIndex (name : Name , toTasty : SimpleTermName => TastyName ): NameRef = {
31
- val tname = name.toTermName match {
32
- case ModuleClassName (name1) =>
33
- ModuleClass (nameIndex(name1, toTasty))
34
- case SuperAccessorName (name1) =>
35
- SuperAccessor (nameIndex(name1, toTasty))
36
- case QualifiedName (prefix, selector) =>
37
- Qualified (nameIndex(prefix, toTasty), nameIndex(selector))
38
- case FlattenedName (prefix, selector) =>
39
- Flattened (nameIndex(prefix, toTasty), nameIndex(selector))
40
- case XpandedName (prefix, selector) =>
41
- Expanded (nameIndex(prefix, toTasty), nameIndex(selector))
42
- case DefaultGetterName (prefix, num) =>
43
- DefaultGetter (nameIndex(prefix, toTasty), num)
44
- case VariantName (prefix, sign) =>
45
- Variant (nameIndex(prefix, toTasty), sign)
46
- case name1 =>
47
- if (name1.isShadowedName) Shadowed (nameIndex(name1.revertShadowed, toTasty))
48
- else toTasty(name1.asSimpleName)
49
- }
50
- nameIndex(tname)
51
- }
52
-
53
- def nameIndex (name : Name ): NameRef = nameIndex(name, Simple )
54
-
55
- def nameIndex (str : String ): NameRef = nameIndex(str.toTermName)
56
-
57
- def fullNameIndex (name : Name ): NameRef = {
58
- def split (name : SimpleTermName ): TastyName = {
59
- val pos = name.lastIndexOf('.' )
60
- if (pos <= 0 ) Simple (name)
61
- else Qualified (fullNameIndex(name.take(pos)), nameIndex(name.drop(pos + 1 )))
62
- }
63
- nameIndex(name, split)
20
+ def nameIndex (name : Name ): NameRef = {
21
+ val name1 = name.toTermName
22
+ nameRefs.get(name1) match {
23
+ case Some (ref) =>
24
+ ref
25
+ case None =>
26
+ name1 match {
27
+ case SignedName (original, Signature (params, result)) =>
28
+ nameIndex(original); nameIndex(result); params.foreach(nameIndex)
29
+ case AnyQualifiedName (prefix, info) =>
30
+ nameIndex(prefix); nameIndex(info.name)
31
+ case DerivedTermName (prefix, _) =>
32
+ nameIndex(prefix)
33
+ case _ =>
34
+ }
35
+ val ref = NameRef (nameRefs.size)
36
+ nameRefs(name1) = ref
37
+ ref
38
+ }
64
39
}
65
40
66
41
private def withLength (op : => Unit , lengthWidth : Int = 1 ): Unit = {
@@ -71,43 +46,44 @@ class NameBuffer extends TastyBuffer(10000) {
71
46
putNat(lengthAddr, length, lengthWidth)
72
47
}
73
48
74
- def writeNameRef (ref : NameRef ) = writeNat(ref.index)
49
+ def writeNameRef (ref : NameRef ): Unit = writeNat(ref.index)
50
+ def writeNameRef (name : Name ): Unit = writeNameRef(nameRefs(name.toTermName))
75
51
76
- def pickleName (name : TastyName ): Unit = name match {
77
- case Simple ( name) =>
52
+ def pickleNameContents (name : Name ): Unit = name.toTermName match {
53
+ case name : SimpleTermName =>
78
54
val bytes =
79
55
if (name.length == 0 ) new Array [Byte ](0 )
80
56
else Codec .toUTF8(chrs, name.start, name.length)
81
57
writeByte(UTF8 )
82
58
writeNat(bytes.length)
83
59
writeBytes(bytes, bytes.length)
84
- case Qualified (qualified, selector) =>
60
+ case QualifiedName (qualified, selector) =>
85
61
writeByte(QUALIFIED )
86
62
withLength { writeNameRef(qualified); writeNameRef(selector) }
87
- case Flattened (qualified, selector) =>
63
+ case FlattenedName (qualified, selector) =>
88
64
writeByte(FLATTENED )
89
65
withLength { writeNameRef(qualified); writeNameRef(selector) }
90
- case Expanded (prefix, original) =>
66
+ case XpandedName (prefix, original) =>
91
67
writeByte(EXPANDED )
92
68
withLength { writeNameRef(prefix); writeNameRef(original) }
93
- case Signed (original, params, result) =>
69
+ case SignedName (original, Signature ( params, result) ) =>
94
70
writeByte(SIGNED )
95
71
withLength(
96
72
{ writeNameRef(original); writeNameRef(result); params.foreach(writeNameRef) },
97
73
if ((params.length + 2 ) * maxIndexWidth <= maxNumInByte) 1 else 2 )
98
- case ModuleClass (module) =>
74
+ case ModuleClassName (module) =>
99
75
writeByte(OBJECTCLASS )
100
76
withLength { writeNameRef(module) }
101
- case SuperAccessor (accessed) =>
77
+ case SuperAccessorName (accessed) =>
102
78
writeByte(SUPERACCESSOR )
103
79
withLength { writeNameRef(accessed) }
104
- case DefaultGetter (method, paramNumber) =>
80
+ case DefaultGetterName (method, paramNumber) =>
105
81
writeByte(DEFAULTGETTER )
106
82
withLength { writeNameRef(method); writeNat(paramNumber) }
107
- case Shadowed (original) =>
83
+ case ShadowedName (original) =>
108
84
writeByte(SHADOWED )
109
85
withLength { writeNameRef(original) }
110
- case Variant (original, sign) =>
86
+ case VariantName (original, sign) =>
111
87
writeByte(VARIANT )
112
88
withLength { writeNameRef(original); writeNat(sign + 1 ) }
113
89
}
@@ -117,7 +93,7 @@ class NameBuffer extends TastyBuffer(10000) {
117
93
for ((name, ref) <- nameRefs) {
118
94
assert(ref.index == i)
119
95
i += 1
120
- pickleName (name)
96
+ pickleNameContents (name)
121
97
}
122
98
}
123
99
}
0 commit comments