4
// SI-6240: test thread-safety, make trees synchronized as well
5
private[reflect] trait SynchronizedOps extends internal.SymbolTable
6
with SynchronizedSymbols
7
with SynchronizedTypes { self: SymbolTable =>
11
private lazy val nameLock = new Object
13
override def newTermName(s: String): TermName = nameLock.synchronized { super.newTermName(s) }
14
override def newTypeName(s: String): TypeName = nameLock.synchronized { super.newTypeName(s) }
18
override protected def newBaseTypeSeq(parents: List[Type], elems: Array[Type]) =
19
new BaseTypeSeq(parents, elems) with SynchronizedBaseTypeSeq
21
trait SynchronizedBaseTypeSeq extends BaseTypeSeq {
22
override def apply(i: Int): Type = synchronized { super.apply(i) }
23
override def rawElem(i: Int) = synchronized { super.rawElem(i) }
24
override def typeSymbol(i: Int): Symbol = synchronized { super.typeSymbol(i) }
25
override def toList: List[Type] = synchronized { super.toList }
26
override def copy(head: Type, offset: Int): BaseTypeSeq = synchronized { super.copy(head, offset) }
27
override def map(f: Type => Type): BaseTypeSeq = synchronized { super.map(f) }
28
override def exists(p: Type => Boolean): Boolean = synchronized { super.exists(p) }
29
override lazy val maxDepth = synchronized { maxDepthOfElems }
30
override def toString = synchronized { super.toString }
32
override def lateMap(f: Type => Type): BaseTypeSeq = new MappedBaseTypeSeq(this, f) with SynchronizedBaseTypeSeq
37
override def newScope = new Scope() with SynchronizedScope
38
override def newNestedScope(outer: Scope): Scope = new Scope(outer) with SynchronizedScope
40
trait SynchronizedScope extends Scope {
41
override def isEmpty: Boolean = synchronized { super.isEmpty }
42
override def size: Int = synchronized { super.size }
43
override def enter[T <: Symbol](sym: T): T = synchronized { super.enter(sym) }
44
override def rehash(sym: Symbol, newname: Name) = synchronized { super.rehash(sym, newname) }
45
override def unlink(e: ScopeEntry) = synchronized { super.unlink(e) }
46
override def unlink(sym: Symbol) = synchronized { super.unlink(sym) }
47
override def lookupAll(name: Name) = synchronized { super.lookupAll(name) }
48
override def lookupEntry(name: Name) = synchronized { super.lookupEntry(name) }
49
override def lookupNextEntry(entry: ScopeEntry) = synchronized { super.lookupNextEntry(entry) }
50
override def toList: List[Symbol] = synchronized { super.toList }