summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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