@@ -679,4 +679,70 @@ object Symbols {
679679 def currentClass (implicit ctx : Context ): ClassSymbol = ctx.owner.enclosingClass.asClass
680680
681681 @ 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+
682748}
0 commit comments