diff options
author | Paul Phillips <paulp@improving.org> | 2009-11-17 04:51:43 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-11-17 04:51:43 +0000 |
commit | db99de350f3e1d2e2465d5bcd386b938fd7b2569 (patch) | |
tree | 97a5757229daa78ca9dfbfdecfb7f552ed5197d6 /src/compiler | |
parent | 60e6a45de9e713d007cea6af3b71605d5d08e06b (diff) | |
download | scala-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.scala | 7 |
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 |