@@ -678,4 +678,70 @@ object Symbols {
678
678
def currentClass (implicit ctx : Context ): ClassSymbol = ctx.owner.enclosingClass.asClass
679
679
680
680
@ sharable var stubs : List [Symbol ] = Nil // diagnostic only
681
+
682
+ /* Mutable map from symbols any T */
683
+ class MutableSymbolMap [T ](private [Symbols ] val value : java.util.IdentityHashMap [Symbol , T ]) extends AnyVal {
684
+
685
+ def apply (sym : Symbol ): T = value.get(sym)
686
+
687
+ def get (sym : Symbol ): Option [T ] = Option (value.get(sym))
688
+
689
+ def getOrElse [U >: T ](sym : Symbol , default : => U ): U = {
690
+ val v = value.get(sym)
691
+ if (v != null ) v else default
692
+ }
693
+
694
+ def getOrElseUpdate (sym : Symbol , op : => T ): T = {
695
+ val v = value.get(sym)
696
+ if (v != null ) v
697
+ else {
698
+ val v = op
699
+ assert(v != null )
700
+ value.put(sym, v)
701
+ v
702
+ }
703
+ }
704
+
705
+ def update (sym : Symbol , x : T ): Unit = {
706
+ assert(x != null )
707
+ value.put(sym, x)
708
+ }
709
+ def put (sym : Symbol , x : T ): T = {
710
+ assert(x != null )
711
+ value.put(sym, x)
712
+ }
713
+
714
+ def -= (sym : Symbol ): Unit = value.remove(sym)
715
+ def remove (sym : Symbol ): Option [T ] = Option (value.remove(sym))
716
+
717
+ def contains (sym : Symbol ): Boolean = value.containsKey(sym)
718
+
719
+ def isEmpty : Boolean = value.isEmpty
720
+
721
+ def clear (): Unit = value.clear()
722
+
723
+ def filter (p : ((Symbol , T )) => Boolean ): Map [Symbol , T ] = {
724
+ import scala .collection .JavaConversions ._
725
+ value.toMap.filter(p)
726
+ }
727
+
728
+ def iterator : Iterator [(Symbol , T )] = {
729
+ import scala .collection .JavaConversions ._
730
+ value.iterator
731
+ }
732
+
733
+ def keysIterator : Iterator [Symbol ] = {
734
+ import scala .collection .JavaConversions ._
735
+ value.keySet().iterator
736
+ }
737
+
738
+ def toMap : Map [Symbol , T ] = {
739
+ import scala .collection .JavaConversions ._
740
+ value.toMap
741
+ }
742
+ }
743
+
744
+ @ inline def newMutableSymbolMap [T ]: MutableSymbolMap [T ] =
745
+ new MutableSymbolMap (new java.util.IdentityHashMap [Symbol , T ]())
746
+
681
747
}
0 commit comments