summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala3
-rw-r--r--src/library/scala/Iterable.scala10
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