@@ -6,7 +6,7 @@ package tasty
66import dotty .tools .tasty .TastyBuffer
77import TastyBuffer ._
88
9- import collection .mutable
9+ import collection .mutable . ArrayBuffer
1010import Names .{Name , chrs , SimpleName , DerivedName , TypeName }
1111import NameKinds ._
1212import NameOps ._
@@ -16,42 +16,43 @@ import NameTags.{SIGNED, TARGETSIGNED}
1616class NameBuffer extends TastyBuffer (10000 ) {
1717 import NameBuffer ._
1818
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 ]
2021
21- def nameIndex (name : Name ): NameRef = {
22+ def nameIndex (name : Name ): NameRef =
2223 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
5149
52- private def withLength (op : => Unit , lengthWidth : Int = 1 ): Unit = {
50+ private inline def withLength (inline op : Unit , lengthWidth : Int = 1 ): Unit = {
5351 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
5556 op
5657 val length = currentAddr.index - lengthAddr.index - lengthWidth
5758 putNat(lengthAddr, length, lengthWidth)
@@ -111,11 +112,11 @@ class NameBuffer extends TastyBuffer(10000) {
111112
112113 override def assemble (): Unit = {
113114 var i = 0
114- for ((name, ref) <- nameRefs) {
115+ for name <- nameBuf do
116+ val ref = nameRefs(name)
115117 assert(ref.index == i)
116118 i += 1
117119 pickleNameContents(name)
118- }
119120 }
120121}
121122
0 commit comments