summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2016-01-22 22:33:29 +0100
committerLukas Rytz <lukas.rytz@gmail.com>2016-01-23 07:26:13 +0100
commit8d3be4dc79cb4679fc4994c32b21e10847e5518f (patch)
tree526242bc68fd901933a961dc14e55633129fb65d /src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
parent7443037a6d1376709b3d83f10e66c9155f76dbaa (diff)
downloadscala-8d3be4dc79cb4679fc4994c32b21e10847e5518f.tar.gz
scala-8d3be4dc79cb4679fc4994c32b21e10847e5518f.tar.bz2
scala-8d3be4dc79cb4679fc4994c32b21e10847e5518f.zip
Harden methods to recognize method invocations to optimize
The previous methods to identify method invocations that can be optimized, such as `isPredefAutoBox`, were String-based. Now we obtain class and method signatures from symbols through the BTypes infrastructure. We also piggy-back on specialization's type transformer to create all specialized subclasses of Tuple1/Tuple2. We'll do the same in the future for FunctionN, but the current JFunctionN are written in Java and specialized artisanally.
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
index adaf870c46..58c1d0e497 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala
@@ -643,7 +643,7 @@ abstract class BCodeBodyBuilder extends BCodeSkelBuilder {
case Apply(fun @ _, List(expr)) if currentRun.runDefinitions.isBox(fun.symbol) =>
val nativeKind = tpeTK(expr)
genLoad(expr, nativeKind)
- val MethodNameAndType(mname, methodType) = asmBoxTo(nativeKind)
+ val MethodNameAndType(mname, methodType) = srBoxesRuntimeBoxToMethods(nativeKind)
bc.invokestatic(srBoxesRunTimeRef.internalName, mname, methodType.descriptor, app.pos)
generatedType = boxResultType(fun.symbol) // was typeToBType(fun.symbol.tpe.resultType)
@@ -651,7 +651,7 @@ abstract class BCodeBodyBuilder extends BCodeSkelBuilder {
genLoad(expr)
val boxType = unboxResultType(fun.symbol) // was typeToBType(fun.symbol.owner.linkedClassOfClass.tpe)
generatedType = boxType
- val MethodNameAndType(mname, methodType) = asmUnboxTo(boxType)
+ val MethodNameAndType(mname, methodType) = srBoxesRuntimeUnboxToMethods(boxType)
bc.invokestatic(srBoxesRunTimeRef.internalName, mname, methodType.descriptor, app.pos)
case app @ Apply(fun, args) =>