@@ -6,7 +6,7 @@ package tasty
6
6
import dotty .tools .tasty .TastyBuffer
7
7
import TastyBuffer ._
8
8
9
- import collection .mutable
9
+ import collection .mutable . ArrayBuffer
10
10
import Names .{Name , chrs , SimpleName , DerivedName , TypeName }
11
11
import NameKinds ._
12
12
import NameOps ._
@@ -16,42 +16,43 @@ import NameTags.{SIGNED, TARGETSIGNED}
16
16
class NameBuffer extends TastyBuffer (10000 ) {
17
17
import NameBuffer ._
18
18
19
- private val nameRefs = new mutable.LinkedHashMap [Name , NameRef ]
19
+ private val nameRefs = new util.EqHashMap [Name , NameRef ]
20
+ private val nameBuf = new ArrayBuffer [Name ]
20
21
21
- def nameIndex (name : Name ): NameRef = {
22
+ def nameIndex (name : Name ): NameRef =
22
23
val name1 = name.toTermName
23
- nameRefs.get(name1) match {
24
- case Some (ref) =>
25
- ref
26
- case None =>
27
- name1 match {
28
- case SignedName (original, Signature (params, result), target) =>
29
- nameIndex(original)
30
- if ! original.matchesTargetName(target) then nameIndex(target)
31
- nameIndex(result)
32
- params.foreach {
33
- case param : TypeName =>
34
- nameIndex(param)
35
- case _ =>
36
- }
37
- case AnyQualifiedName (prefix, name) =>
38
- nameIndex(prefix); nameIndex(name)
39
- case AnyUniqueName (original, separator, num) =>
40
- nameIndex(separator)
41
- if (! original.isEmpty) nameIndex(original)
42
- case DerivedName (original, _) =>
43
- nameIndex(original)
44
- case _ =>
45
- }
46
- val ref = NameRef (nameRefs.size)
47
- nameRefs(name1) = ref
48
- ref
49
- }
50
- }
24
+ val ref : NameRef | Null = nameRefs.lookup(name1)
25
+ if ref != null then ref.uncheckedNN
26
+ else
27
+ name1 match
28
+ case SignedName (original, Signature (params, result), target) =>
29
+ nameIndex(original)
30
+ if ! original.matchesTargetName(target) then nameIndex(target)
31
+ nameIndex(result)
32
+ params.foreach {
33
+ case param : TypeName =>
34
+ nameIndex(param)
35
+ case _ =>
36
+ }
37
+ case AnyQualifiedName (prefix, name) =>
38
+ nameIndex(prefix); nameIndex(name)
39
+ case AnyUniqueName (original, separator, num) =>
40
+ nameIndex(separator)
41
+ if (! original.isEmpty) nameIndex(original)
42
+ case DerivedName (original, _) =>
43
+ nameIndex(original)
44
+ case _ =>
45
+ val ref1 = NameRef (nameRefs.size)
46
+ nameRefs(name1) = ref1
47
+ nameBuf += name1
48
+ ref1
51
49
52
- private def withLength (op : => Unit , lengthWidth : Int = 1 ): Unit = {
50
+ private inline def withLength (inline op : Unit , lengthWidth : Int = 1 ): Unit = {
53
51
val lengthAddr = currentAddr
54
- for (i <- 0 until lengthWidth) writeByte(0 )
52
+ var i = 0
53
+ while i < lengthWidth do
54
+ writeByte(0 )
55
+ i += 1
55
56
op
56
57
val length = currentAddr.index - lengthAddr.index - lengthWidth
57
58
putNat(lengthAddr, length, lengthWidth)
@@ -111,11 +112,11 @@ class NameBuffer extends TastyBuffer(10000) {
111
112
112
113
override def assemble (): Unit = {
113
114
var i = 0
114
- for ((name, ref) <- nameRefs) {
115
+ for name <- nameBuf do
116
+ val ref = nameRefs(name)
115
117
assert(ref.index == i)
116
118
i += 1
117
119
pickleNameContents(name)
118
- }
119
120
}
120
121
}
121
122
0 commit comments