summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2009-11-09 12:03:48 +0000
committerIulian Dragos <jaguarul@gmail.com>2009-11-09 12:03:48 +0000
commite7749823a7a69f4f37af9b91e0fed50f143576a0 (patch)
tree28871b2fa6d0029216fdafe5afc4ff8f758e283e /src
parent1754e3f49082e76fec87a87ea6b63299e37a2eb9 (diff)
downloadscala-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.scala16
-rw-r--r--src/compiler/scala/tools/nsc/symtab/StdNames.scala1
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")