@@ -6,7 +6,7 @@ package tasty
66import dotty .tools .tasty .TastyBuffer
77import TastyBuffer ._
88
9- import collection .mutable . ArrayBuffer
9+ import collection .mutable
1010import Names .{Name , chrs , SimpleName , DerivedName , TypeName }
1111import NameKinds ._
1212import NameOps ._
@@ -16,36 +16,38 @@ import NameTags.{SIGNED, TARGETSIGNED}
1616class NameBuffer extends TastyBuffer (10000 ) {
1717 import NameBuffer ._
1818
19- private val nameRefs = new util.EqHashMap [Name , NameRef ]
20- private val nameBuf = new ArrayBuffer [Name ]
19+ private val nameRefs = new mutable.LinkedHashMap [Name , NameRef ]
2120
22- def nameIndex (name : Name ): NameRef =
21+ def nameIndex (name : Name ): NameRef = {
2322 val name1 = name.toTermName
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
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+ }
4951
5052 private inline def withLength (inline op : Unit , lengthWidth : Int = 1 ): Unit = {
5153 val lengthAddr = currentAddr
@@ -112,7 +114,7 @@ class NameBuffer extends TastyBuffer(10000) {
112114
113115 override def assemble (): Unit = {
114116 var i = 0
115- for name <- nameBuf do
117+ for ( name, ref) <- nameRefs do
116118 val ref = nameRefs(name)
117119 assert(ref.index == i)
118120 i += 1
0 commit comments