Skip to content

Commit 50a0ef5

Browse files
committed
Optimize LinearMap
Using AbstractMap instead of Map speeds up type tests
1 parent 07f3f73 commit 50a0ef5

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

compiler/src/dotty/tools/dotc/core/Names.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ object Names {
182182
def underlying: TermName = unsupported("underlying")
183183

184184
@sharable // because of synchronized block in `and`
185-
private var derivedNames: LinearMap[NameInfo, DerivedName] = LinearMap.Empty
185+
private var derivedNames: LinearMap[NameInfo, DerivedName] = LinearMap.empty
186186

187187
private def add(info: NameInfo): TermName = synchronized {
188188
derivedNames.lookup(info) match

compiler/src/dotty/tools/dotc/util/LinearMap.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ opaque type LinearMap[K <: AnyRef, V >: Null <: AnyRef] =
1212

1313
object LinearMap:
1414

15-
def Empty[K <: AnyRef, V >: Null <: AnyRef]: LinearMap[K, V] =
15+
def empty[K <: AnyRef, V >: Null <: AnyRef]: LinearMap[K, V] =
1616
immutable.Map.empty[K, V]
1717

1818
extension [K <: AnyRef, V >: Null <: AnyRef](m: LinearMap[K, V]):
1919

20-
def lookup(key: K): V /*| Null*/ = m match
21-
case m: immutable.Map[K, V] @unchecked =>
20+
def lookup(key: K): V /*| Null*/ = (m: @unchecked) match
21+
case m: immutable.AbstractMap[K, V] @unchecked =>
2222
if m.contains(key) then m(key) else null
2323
case m: HashMap[K, V] @unchecked =>
2424
m.lookup(key)
2525

26-
def updated(key: K, value: V): LinearMap[K, V] = m match
27-
case m: immutable.Map[K, V] @unchecked =>
26+
def updated(key: K, value: V): LinearMap[K, V] = (m: @unchecked) match
27+
case m: immutable.AbstractMap[K, V] @unchecked =>
2828
if m.size < 4 then
2929
m.updated(key, value)
3030
else
@@ -36,8 +36,8 @@ object LinearMap:
3636
m(key) = value
3737
m
3838

39-
def size = m match
40-
case m: immutable.Map[K, V] @unchecked => m.size
39+
def size = (m: @unchecked) match
40+
case m: immutable.AbstractMap[K, V] @unchecked => m.size
4141
case m: HashMap[K, V] @unchecked => m.size
4242

4343
end LinearMap

0 commit comments

Comments
 (0)