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