Replace usages of BasicValue constants in master with StrictBasicValue

This commit is contained in:
Denis Zharkov
2016-10-24 16:47:36 +03:00
parent d279ded714
commit e9efc9e892
3 changed files with 9 additions and 8 deletions
@@ -20,6 +20,7 @@ import com.intellij.util.containers.Stack
import org.jetbrains.kotlin.codegen.*
import org.jetbrains.kotlin.codegen.optimization.DeadCodeEliminationMethodTransformer
import org.jetbrains.kotlin.codegen.optimization.FixStackWithLabelNormalizationMethodTransformer
import org.jetbrains.kotlin.codegen.optimization.common.StrictBasicValue
import org.jetbrains.kotlin.codegen.optimization.common.analyzeLiveness
import org.jetbrains.kotlin.codegen.optimization.common.insnListOf
import org.jetbrains.kotlin.codegen.optimization.common.removeEmptyCatchBlocks
@@ -32,7 +33,6 @@ import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import org.jetbrains.org.objectweb.asm.tree.*
import org.jetbrains.org.objectweb.asm.tree.analysis.BasicValue
class CoroutineTransformationClassBuilder(private val delegate: ClassBuilder) : DelegatingClassBuilder() {
override fun getDelegate() = delegate
@@ -231,7 +231,7 @@ class CoroutineTransformerMethodVisitor(
.map { Pair(it, frame.getLocal(it)) }
.filter {
val (index, value) = it
value != BasicValue.UNINITIALIZED_VALUE && livenessFrame.isAlive(index)
value != StrictBasicValue.UNINITIALIZED_VALUE && livenessFrame.isAlive(index)
}
for ((index, basicValue) in variablesToSpill) {
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.codegen.coroutines
import org.jetbrains.kotlin.codegen.optimization.common.CustomFramesMethodAnalyzer
import org.jetbrains.kotlin.codegen.optimization.common.OptimizationBasicInterpreter
import org.jetbrains.kotlin.codegen.optimization.common.StrictBasicValue
import org.jetbrains.kotlin.codegen.optimization.common.insnListOf
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Type
@@ -114,7 +115,7 @@ internal fun processUninitializedStores(methodNode: MethodNode) {
private class UninitializedNewValue(
val newInsn: TypeInsnNode, val internalName: String
) : BasicValue(Type.getObjectType(internalName)) {
) : StrictBasicValue(Type.getObjectType(internalName)) {
override fun toString() = "UninitializedNewValue(internalName='$internalName')"
}
@@ -129,7 +130,7 @@ private class UninitializedNewValueFrame(nLocals: Int, nStack: Int) : Frame<Basi
val value = pop() as UninitializedNewValue
// uninitialized value become initialized after <init> call
push(BasicValue(value.type))
push(StrictBasicValue(value.type))
}
}
}
@@ -175,14 +176,14 @@ private class UninitializedNewValueMarkerInterpreter : OptimizationBasicInterpre
override fun merge(v: BasicValue, w: BasicValue): BasicValue {
if (v === w) return v
if (v === BasicValue.UNINITIALIZED_VALUE || w === BasicValue.UNINITIALIZED_VALUE) {
return BasicValue.UNINITIALIZED_VALUE
if (v === StrictBasicValue.UNINITIALIZED_VALUE || w === StrictBasicValue.UNINITIALIZED_VALUE) {
return StrictBasicValue.UNINITIALIZED_VALUE
}
if (v is UninitializedNewValue || w is UninitializedNewValue) {
if ((v as? UninitializedNewValue)?.newInsn !== (w as? UninitializedNewValue)?.newInsn) {
// Merge of two different ANEW result is possible, but such values should not be used further
return BasicValue.UNINITIALIZED_VALUE
return StrictBasicValue.UNINITIALIZED_VALUE
}
return v
@@ -153,7 +153,7 @@ internal fun performRefinedTypeAnalysis(methodNode: MethodNode, thisName: String
"int type expected, but ${current.getLocal(it.index)?.type} was found in basic frames"
}
current.setLocal(it.index, BasicValue(it.value))
current.setLocal(it.index, StrictBasicValue(it.value))
}
current