diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2009-11-09 12:03:48 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2009-11-09 12:03:48 +0000 |
commit | e7749823a7a69f4f37af9b91e0fed50f143576a0 (patch) | |
tree | 28871b2fa6d0029216fdafe5afc4ff8f758e283e /src | |
parent | 1754e3f49082e76fec87a87ea6b63299e37a2eb9 (diff) | |
download | scala-e7749823a7a69f4f37af9b91e0fed50f143576a0.tar.gz scala-e7749823a7a69f4f37af9b91e0fed50f143576a0.tar.bz2 scala-e7749823a7a69f4f37af9b91e0fed50f143576a0.zip |
Equality checks go to ScalaRunTime.inlinedEqual...
Equality checks go to ScalaRunTime.inlinedEquals when -optimise is on
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/icode/GenICode.scala | 16 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/StdNames.scala | 1 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala b/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala index 99f0d4cf3c..f781daaa5e 100644 --- a/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala +++ b/src/compiler/scala/tools/nsc/backend/icode/GenICode.scala @@ -60,6 +60,7 @@ abstract class GenICode extends SubComponent { else definitions.getMember(definitions.getClass("scala.runtime.Comparator").linkedModuleOfClass, nme.equals_) + override def run { scalaPrimitives.init classes.clear @@ -1431,10 +1432,17 @@ abstract class GenICode extends SubComponent { if (mustUseAnyComparator && (!settings.YfutureEqEq.value || cannotAvoidBoxesRuntime)) { val ctx1 = genLoad(l, ctx, ANY_REF_CLASS) val ctx2 = genLoad(r, ctx1, ANY_REF_CLASS) - ctx2.bb.emitOnly( - CALL_METHOD(BoxesRunTime_equals, Static(false)), - CZJUMP(thenCtx.bb, elseCtx.bb, NE, BOOL) - ) + // when -optimise is on we call the @inline-version of equals + if (settings.XO.value) { + val inlinedEquals = definitions.getMember(definitions.ScalaRunTimeModule, nme.inlinedEquals) + ctx2.bb.emit(LOAD_MODULE(definitions.ScalaRunTimeModule)) + ctx2.bb.emit(CALL_METHOD(inlinedEquals, Dynamic)) + } else { + ctx2.bb.emit( + CALL_METHOD(BoxesRunTime_equals, Static(false))) + } + ctx2.bb.emit(CZJUMP(thenCtx.bb, elseCtx.bb, NE, BOOL)) + ctx2.bb.close } else { if (isNull(l)) diff --git a/src/compiler/scala/tools/nsc/symtab/StdNames.scala b/src/compiler/scala/tools/nsc/symtab/StdNames.scala index f356279e25..3c5b866ba8 100644 --- a/src/compiler/scala/tools/nsc/symtab/StdNames.scala +++ b/src/compiler/scala/tools/nsc/symtab/StdNames.scala @@ -283,6 +283,7 @@ trait StdNames { val equals_ = newTermName("equals") val _equals = newTermName("_equals") val _equalsWithVarArgs = newTermName("_equalsWithVarArgs") + val inlinedEquals = newTermName("inlinedEquals") val error = newTermName("error") val ex = newTermName("ex") val add_ = newTermName("add") |