summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/internal/Symbols.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/reflect/internal/Symbols.scala')
-rw-r--r--src/compiler/scala/reflect/internal/Symbols.scala17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/compiler/scala/reflect/internal/Symbols.scala b/src/compiler/scala/reflect/internal/Symbols.scala
index e848f0eeda..fc3fea0fd4 100644
--- a/src/compiler/scala/reflect/internal/Symbols.scala
+++ b/src/compiler/scala/reflect/internal/Symbols.scala
@@ -2426,17 +2426,16 @@ trait Symbols extends api.Symbols { self: SymbolTable =>
override def originalEnclosingMethod = this
}
- def cloneSymbols[T <: Symbol](syms: List[T]): List[T] = {
- val syms1 = syms map (_.cloneSymbol.asInstanceOf[T])
- for (sym1 <- syms1) sym1.setInfo(sym1.info.substSym(syms, syms1))
- syms1
+ private def cloneAndSubstInfos[T <: Symbol](syms: List[T])(f: T => Symbol): List[T] = {
+ val syms1 = syms map (s => f(s).asInstanceOf[T])
+ syms1 map (sym1 => sym1 setInfo sym1.info.substSym(syms, syms1))
}
- def cloneSymbols[T <: Symbol](syms: List[T], owner: Symbol): List[T] = {
- val syms1 = syms map (_.cloneSymbol(owner).asInstanceOf[T])
- for (sym1 <- syms1) sym1.setInfo(sym1.info.substSym(syms, syms1))
- syms1
- }
+ def cloneSymbols[T <: Symbol](syms: List[T]): List[T] =
+ cloneAndSubstInfos(syms)(_.cloneSymbol)
+
+ def cloneSymbols[T <: Symbol](syms: List[T], owner: Symbol): List[T] =
+ cloneAndSubstInfos(syms)(_ cloneSymbol owner)
/** An exception for cyclic references of symbol definitions */
case class CyclicReference(sym: Symbol, info: Type)