diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala | 3 | ||||
-rw-r--r-- | src/library/scala/Iterable.scala | 10 |
2 files changed, 3 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala b/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala index b9f31edec7..809ab4a5c2 100644 --- a/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala +++ b/src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala @@ -78,7 +78,8 @@ trait SyntheticMethods requires Analyzer { } def productElementMethod(accs: List[Symbol]): Tree = { - val method = syntheticMethod(nme.element, FINAL, MethodType(List(IntClass.tpe), AnyClass.tpe)) + val retTpe = lub(accs map (.tpe.resultType)) + val method = syntheticMethod(nme.element, FINAL, MethodType(List(IntClass.tpe), retTpe)) typed(DefDef(method, vparamss => Match(Ident(vparamss.head.head), { (for(val Pair(sym,i) <- accs.zipWithIndex) yield { CaseDef(Literal(Constant(i)),EmptyTree, Ident(sym)) diff --git a/src/library/scala/Iterable.scala b/src/library/scala/Iterable.scala index d33cff3765..42a5f2eb82 100644 --- a/src/library/scala/Iterable.scala +++ b/src/library/scala/Iterable.scala @@ -356,18 +356,10 @@ trait Iterable[+A] { */ def mkString(start: String, sep: String, end: String): String = { val buf = new StringBuilder() - buf.append(start) - val elems = elements - if (elems.hasNext) buf.append(elems.next) - while (elems.hasNext) { - buf.append(sep); buf.append(elems.next) - } - buf.append(end) - buf.toString + addString(buf, start, sep, end).toString } /** Write all elements of this string into given string builder */ - // todo: haromize with print? def addString(buf: StringBuilder, start: String, sep: String, end: String): StringBuilder = { buf.append(start) val elems = elements |