summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-04-30 14:11:57 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-05-22 17:42:53 +0200
commit57be8a33ebbc8e7a7d64404fe5db74ef895c5891 (patch)
tree6b900fe92ec797e7b17208ee85fb32dfe5c542d6 /src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
parentbb302833c7bad6ff7591cdf6d10ec7ffdf683d6a (diff)
downloadscala-57be8a33ebbc8e7a7d64404fe5db74ef895c5891.tar.gz
scala-57be8a33ebbc8e7a7d64404fe5db74ef895c5891.tar.bz2
scala-57be8a33ebbc8e7a7d64404fe5db74ef895c5891.zip
Nullness Analysis
Tracks nullness of values using an ASM analyzer. Tracking nullness requires alias tracking for local variables and stack values. For example, after an instance call, local variables that point to the same object as the receiver are treated not-null.
Diffstat (limited to 'src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala b/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
index ac5c9ce2e6..3aca15da69 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/opt/Inliner.scala
@@ -189,7 +189,7 @@ class Inliner[BT <: BTypes](val btypes: BT) {
// there's no need to run eliminateUnreachableCode here. building the call graph does that
// already, no code can become unreachable in the meantime.
val analyzer = new AsmAnalyzer(callsite.callsiteMethod, callsite.callsiteClass.internalName, new SourceInterpreter)
- val receiverValue = analyzer.frameAt(callsite.callsiteInstruction).peekDown(traitMethodArgumentTypes.length)
+ val receiverValue = analyzer.frameAt(callsite.callsiteInstruction).peekStack(traitMethodArgumentTypes.length)
for (i <- receiverValue.insns.asScala) {
val cast = new TypeInsnNode(CHECKCAST, selfParamType.internalName)
callsite.callsiteMethod.instructions.insert(i, cast)
@@ -400,7 +400,7 @@ class Inliner[BT <: BTypes](val btypes: BT) {
val inlinedReturn = instructionMap(originalReturn)
val returnReplacement = new InsnList
- def drop(slot: Int) = returnReplacement add getPop(frame.peekDown(slot).getSize)
+ def drop(slot: Int) = returnReplacement add getPop(frame.peekStack(slot).getSize)
// for non-void methods, store the stack top into the return local variable
if (hasReturnValue) {