diff options
author | Paul Phillips <paulp@improving.org> | 2012-01-03 14:16:24 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-01-05 14:06:11 -0800 |
commit | c40be502a2ed4ef34eff726836b76ed13b03da78 (patch) | |
tree | 7fa10b0706f051da319ae1db7c8a61afcfedb41c /src/compiler/scala/tools/nsc/typechecker | |
parent | 64107de6cba37f796bd7c6b86509cefba312f91d (diff) | |
download | scala-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')
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))) )) } } |