summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-01-03 14:16:24 -0800
committerPaul Phillips <paulp@improving.org>2012-01-05 14:06:11 -0800
commitc40be502a2ed4ef34eff726836b76ed13b03da78 (patch)
tree7fa10b0706f051da319ae1db7c8a61afcfedb41c /src/compiler/scala/tools/nsc/typechecker
parent64107de6cba37f796bd7c6b86509cefba312f91d (diff)
downloadscala-c40be502a2ed4ef34eff726836b76ed13b03da78.tar.gz
scala-c40be502a2ed4ef34eff726836b76ed13b03da78.tar.bz2
scala-c40be502a2ed4ef34eff726836b76ed13b03da78.zip
Consolidated misc collections helper methods.
Streamlining some of our more common operations.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala16
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala20
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala9
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Unapplies.scala8
5 files changed, 18 insertions, 37 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala b/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala
index 7915a64e21..7c605fa0a1 100644
--- a/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala
@@ -9,22 +9,6 @@ import symtab.Flags._
import scala.collection.{ mutable, immutable }
import scala.tools.util.StringOps.{ ojoin }
-object listutil {
- def mexists[T](xss: List[List[T]])(p: T => Boolean) =
- xss exists (_ exists p)
- def mmap[T, U](xss: List[List[T]])(f: T => U) =
- xss map (_ map f)
- def mforeach[T](xss: List[List[T]])(f: T => Unit) =
- xss foreach (_ foreach f)
- def mfind[T](xss: List[List[T]])(p: T => Boolean): Option[T] = {
- for (xs <- xss; x <- xs)
- if (p(x)) return Some(x)
- None
- }
- def mfilter[T](xss: List[List[T]])(p: T => Boolean) =
- for (xs <- xss; x <- xs; if p(x)) yield x
-}
-
/** Logic related to method synthesis which involves cooperation between
* Namer and Typer.
*/
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 364e887939..a20461949d 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -99,7 +99,7 @@ trait Namers extends MethodSynthesis {
}
def enterValueParams(vparamss: List[List[ValDef]]): List[List[Symbol]] = {
- listutil.mmap(vparamss) { param =>
+ mmap(vparamss) { param =>
val sym = assignSymbol(param, param.name, mask = ValueParameterFlags)
setPrivateWithin(param, sym)
enterInScope(sym)
@@ -522,13 +522,13 @@ trait Namers extends MethodSynthesis {
val vparamss = tree match { case x: DefDef => x.vparamss ; case _ => Nil }
val cparamss = constructorType.paramss
- for ((vparams, cparams) <- vparamss zip cparamss) {
- for ((param, cparam) <- vparams zip cparams) {
+ map2(vparamss, cparamss)((vparams, cparams) =>
+ map2(vparams, cparams)((param, cparam) =>
// need to clone the type cparam.tpe???
// problem is: we don't have the new owner yet (the new param symbol)
param.tpt setType subst(cparam.tpe)
- }
- }
+ )
+ )
}
sym setInfo {
mkTypeCompleter(tree) { copySym =>
@@ -627,7 +627,7 @@ trait Namers extends MethodSynthesis {
classOfModuleClass(m.moduleClass) = new WeakReference(tree)
}
val hasDefault = impl.body exists {
- case DefDef(_, nme.CONSTRUCTOR, _, vparamss, _, _) => listutil.mexists(vparamss)(_.mods.hasDefault)
+ case DefDef(_, nme.CONSTRUCTOR, _, vparamss, _, _) => mexists(vparamss)(_.mods.hasDefault)
case _ => false
}
if (hasDefault) {
@@ -953,9 +953,9 @@ trait Namers extends MethodSynthesis {
// def overriddenSymbol = meth.nextOverriddenSymbol
// fill in result type and parameter types from overridden symbol if there is a unique one.
- if (clazz.isClass && (tpt.isEmpty || listutil.mexists(vparamss)(_.tpt.isEmpty))) {
+ if (clazz.isClass && (tpt.isEmpty || mexists(vparamss)(_.tpt.isEmpty))) {
// try to complete from matching definition in base type
- listutil.mforeach(vparamss)(v => if (v.tpt.isEmpty) v.symbol setInfo WildcardType)
+ mforeach(vparamss)(v => if (v.tpt.isEmpty) v.symbol setInfo WildcardType)
val overridden = overriddenSymbol
if (overridden != NoSymbol && !overridden.isOverloaded) {
overridden.cookJavaRawInfo() // #3404 xform java rawtypes into existentials
@@ -993,7 +993,7 @@ trait Namers extends MethodSynthesis {
_.info.isInstanceOf[MethodType])) {
vparamSymss = List(List())
}
- listutil.mforeach(vparamss) { vparam =>
+ mforeach(vparamss) { vparam =>
if (vparam.tpt.isEmpty) {
context.error(vparam.pos, "missing parameter type")
vparam.tpt defineType ErrorType
@@ -1073,7 +1073,7 @@ trait Namers extends MethodSynthesis {
// Create trees for the defaultGetter. Uses tools from Unapplies.scala
var deftParams = tparams map copyUntyped[TypeDef]
- val defvParamss = listutil.mmap(previous) { p =>
+ val defvParamss = mmap(previous) { p =>
// in the default getter, remove the default parameter
val p1 = atPos(p.pos.focus) { ValDef(p.mods &~ DEFAULTPARAM, p.name, p.tpt.duplicate, EmptyTree) }
UnTyper.traverse(p1)
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index ace38bb4cb..78222e203b 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -1347,7 +1347,7 @@ abstract class RefChecks extends InfoTransform with reflect.internal.transform.R
}
// types of the value parameters
- member.paramss.flatten foreach (p => checkAccessibilityOfType(p.tpe))
+ mapParamss(member)(p => checkAccessibilityOfType(p.tpe))
// upper bounds of type parameters
member.typeParams.map(_.info.bounds.hi.widen) foreach checkAccessibilityOfType
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
index a0ef2f5e2e..cde531adc1 100644
--- a/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/SuperAccessors.scala
@@ -321,12 +321,9 @@ abstract class SuperAccessors extends transform.Transform with transform.TypingT
val code = DefDef(protAcc, {
val (receiver :: _) :: tail = protAcc.paramss
val base: Tree = Select(Ident(receiver), sym)
- val allParamTypes = sym.tpe.paramss map (xs => xs map (_.tpe))
-
- (tail zip allParamTypes).foldLeft(base) {
- case (fn, (params, tpes)) =>
- Apply(fn, params zip tpes map { case (p, tp) => makeArg(p, receiver, tp) })
- }
+ val allParamTypes = mapParamss(sym)(_.tpe)
+ val args = map2(tail, allParamTypes)((params, tpes) => map2(params, tpes)(makeArg(_, receiver, _)))
+ args.foldLeft(base)(Apply(_, _))
})
debuglog("" + code)
diff --git a/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala b/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala
index 4f7e6225e1..9b69c847f6 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Unapplies.scala
@@ -112,7 +112,7 @@ trait Unapplies extends ast.TreeDSL
private def constrParamss(cdef: ClassDef): List[List[ValDef]] = {
val DefDef(_, _, _, vparamss, _, _) = treeInfo firstConstructor cdef.impl.body
- vparamss map (_ map copyUntyped[ValDef])
+ mmap(vparamss)(copyUntyped[ValDef])
}
/** The return value of an unapply method of a case class C[Ts]
@@ -165,7 +165,7 @@ trait Unapplies extends ast.TreeDSL
val cparamss = constrParamss(cdef)
atPos(cdef.pos.focus)(
DefDef(caseMods, nme.apply, tparams, cparamss, classType(cdef, tparams),
- New(classType(cdef, tparams), cparamss map (_ map gen.paramToArg)))
+ New(classType(cdef, tparams), mmap(cparamss)(gen.paramToArg)))
)
}
@@ -201,12 +201,12 @@ trait Unapplies extends ast.TreeDSL
def paramWithDefault(vd: ValDef) =
treeCopy.ValDef(vd, vd.mods | DEFAULTPARAM, vd.name, atPos(vd.pos.focus)(TypeTree() setOriginal vd.tpt), toIdent(vd))
- val paramss = cparamss map (_ map paramWithDefault)
+ val paramss = mmap(cparamss)(paramWithDefault)
val classTpe = classType(cdef, tparams)
Some(atPos(cdef.pos.focus)(
DefDef(Modifiers(SYNTHETIC), nme.copy, tparams, paramss, classTpe,
- New(classTpe, paramss map (_ map toIdent)))
+ New(classTpe, mmap(paramss)(toIdent)))
))
}
}