summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-11-17 04:51:43 +0000
committerPaul Phillips <paulp@improving.org>2009-11-17 04:51:43 +0000
commitdb99de350f3e1d2e2465d5bcd386b938fd7b2569 (patch)
tree97a5757229daa78ca9dfbfdecfb7f552ed5197d6 /src/compiler
parent60e6a45de9e713d007cea6af3b71605d5d08e06b (diff)
downloadscala-db99de350f3e1d2e2465d5bcd386b938fd7b2569.tar.gz
scala-db99de350f3e1d2e2465d5bcd386b938fd7b2569.tar.bz2
scala-db99de350f3e1d2e2465d5bcd386b938fd7b2569.zip
Fix and test case for #2636.
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/transform/CleanUp.scala7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/CleanUp.scala b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
index dafec5e1c3..444dc42299 100644
--- a/src/compiler/scala/tools/nsc/transform/CleanUp.scala
+++ b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
@@ -374,8 +374,11 @@ abstract class CleanUp extends Transform with ast.TreeDSL {
((resType :: paramTypes) forall (x => isValueClass(x.typeSymbol))) // issue #1110
}
def useArrayOperator =
- ((qualSym == definitions.ObjectClass) || (qualSym == definitions.ArrayClass)) &&
- ((methSym.name == nme.length) || (methSym.name == nme.update) || (methSym.name == nme.apply))
+ ((qualSym == definitions.ObjectClass) || (qualSym == definitions.ArrayClass)) && (
+ (methSym.name == nme.length && params.isEmpty) ||
+ (methSym.name == nme.update && (structResType.typeSymbol eq UnitClass)) ||
+ (methSym.name == nme.apply && params.size == 1)
+ )
val callCode = if (useValueOperator) {
val (operator, test) = getPrimitiveReplacementForStructuralCall(methSym.name)
def args = qual :: params