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