Rename LabelOwner into ReturnLabelOwner

This commit is contained in:
Mikhael Bogdanov
2019-04-02 14:35:36 +02:00
parent 20adce165f
commit be954c6e62
7 changed files with 24 additions and 24 deletions
@@ -280,7 +280,7 @@ class AnonymousObjectTransformer(
), null
)
val result = inliner.doInline(deferringVisitor, LocalVarRemapper(parameters, 0), false, LabelOwner.NOT_APPLICABLE)
val result = inliner.doInline(deferringVisitor, LocalVarRemapper(parameters, 0), false, ReturnLabelOwner.NOT_APPLICABLE)
result.reifiedTypeParametersUsages.mergeAll(typeParametersToReify)
deferringVisitor.visitMaxs(-1, -1)
return result
@@ -273,12 +273,12 @@ abstract class InlineCodegen<out T : BaseExpressionCodegen>(
//hack to keep linenumber info, otherwise jdi will skip begin of linenumber chain
adapter.visitInsn(Opcodes.NOP)
val result = inliner.doInline(adapter, remapper, true, LabelOwner.SKIP_ALL)
val result = inliner.doInline(adapter, remapper, true, ReturnLabelOwner.SKIP_ALL)
result.reifiedTypeParametersUsages.mergeAll(reificationResult)
val labels = sourceCompiler.getContextLabels()
val infos = MethodInliner.processReturns(adapter, LabelOwner { labels.contains(it) }, true, null)
val infos = MethodInliner.processReturns(adapter, ReturnLabelOwner { labels.contains(it) }, true, null)
sourceCompiler.generateAndInsertFinallyBlocks(
adapter, infos, (remapper.remap(parameters.argsSizeOnStack + 1).value as StackValue.Local).index
)
@@ -37,7 +37,7 @@ import kotlin.properties.Delegates
interface FunctionalArgument
abstract class LambdaInfo(@JvmField val isCrossInline: Boolean) : FunctionalArgument, LabelOwner {
abstract class LambdaInfo(@JvmField val isCrossInline: Boolean) : FunctionalArgument, ReturnLabelOwner {
abstract val isBoundCallableReference: Boolean
@@ -102,7 +102,7 @@ class DefaultLambda(
override lateinit var capturedVars: List<CapturedParamDesc>
private set
override fun isMyLabel(name: String): Boolean = false
override fun isReturnFromMe(labelName: String): Boolean = false
var originalBoundReceiverType: Type? = null
private set
@@ -300,8 +300,8 @@ class PsiExpressionLambda(
}
}
override fun isMyLabel(name: String): Boolean {
return labels.contains(name)
override fun isReturnFromMe(labelName: String): Boolean {
return labels.contains(labelName)
}
val isPropertyReference: Boolean
@@ -67,9 +67,9 @@ class MethodInliner(
adapter: MethodVisitor,
remapper: LocalVarRemapper,
remapReturn: Boolean,
labelOwner: LabelOwner
returnLabelOwner: ReturnLabelOwner
): InlineResult {
return doInline(adapter, remapper, remapReturn, labelOwner, 0)
return doInline(adapter, remapper, remapReturn, returnLabelOwner, 0)
}
private fun recordTransformation(info: TransformationInfo) {
@@ -83,11 +83,11 @@ class MethodInliner(
adapter: MethodVisitor,
remapper: LocalVarRemapper,
remapReturn: Boolean,
labelOwner: LabelOwner,
returnLabelOwner: ReturnLabelOwner,
finallyDeepShift: Int
): InlineResult {
//analyze body
var transformedNode = markPlacesForInlineAndRemoveInlinable(node, labelOwner, finallyDeepShift)
var transformedNode = markPlacesForInlineAndRemoveInlinable(node, returnLabelOwner, finallyDeepShift)
if (inliningContext.isInliningLambda && isDefaultLambdaWithReification(inliningContext.lambdaInfo!!)) {
//TODO maybe move reification in one place
inliningContext.root.inlineMethodReifier.reifyInstructions(transformedNode)
@@ -130,7 +130,7 @@ class MethodInliner(
)
}
processReturns(resultNode, labelOwner, remapReturn, end)
processReturns(resultNode, returnLabelOwner, remapReturn, end)
//flush transformed node to output
resultNode.accept(SkipMaxAndEndVisitor(adapter))
@@ -485,11 +485,11 @@ class MethodInliner(
}
private fun markPlacesForInlineAndRemoveInlinable(
node: MethodNode, labelOwner: LabelOwner, finallyDeepShift: Int
node: MethodNode, returnLabelOwner: ReturnLabelOwner, finallyDeepShift: Int
): MethodNode {
val processingNode = prepareNode(node, finallyDeepShift)
preprocessNodeBeforeInline(processingNode, labelOwner)
preprocessNodeBeforeInline(processingNode, returnLabelOwner)
replaceContinuationAccessesWithFakeContinuationsIfNeeded(processingNode)
@@ -769,7 +769,7 @@ class MethodInliner(
return Type.getArgumentTypes(invoke.desc).let { it.isNotEmpty() && it.last() == languageVersionSettings.continuationAsmType() }
}
private fun preprocessNodeBeforeInline(node: MethodNode, labelOwner: LabelOwner) {
private fun preprocessNodeBeforeInline(node: MethodNode, returnLabelOwner: ReturnLabelOwner) {
try {
FixStackWithLabelNormalizationMethodTransformer().transform("fake", node)
} catch (e: Throwable) {
@@ -796,7 +796,7 @@ class MethodInliner(
// TODO extract isLocalReturn / isNonLocalReturn, see processReturns
val labelName = getMarkedReturnLabelOrNull(insnNode)
if (labelName != null) {
if (!labelOwner.isMyLabel(labelName)) continue
if (!returnLabelOwner.isReturnFromMe(labelName)) continue
insertBeforeInsn = insnNode.previous
}
@@ -1143,7 +1143,7 @@ class MethodInliner(
//process local and global returns (local substituted with goto end-label global kept unchanged)
@JvmStatic
fun processReturns(
node: MethodNode, labelOwner: LabelOwner, remapReturn: Boolean, endLabel: Label?
node: MethodNode, returnLabelOwner: ReturnLabelOwner, remapReturn: Boolean, endLabel: Label?
): List<PointForExternalFinallyBlocks> {
if (!remapReturn) {
return emptyList()
@@ -1157,7 +1157,7 @@ class MethodInliner(
val labelName = getMarkedReturnLabelOrNull(insnNode)
if (labelName != null) {
isLocalReturn = labelOwner.isMyLabel(labelName)
isLocalReturn = returnLabelOwner.isReturnFromMe(labelName)
//remove global return flag
if (isLocalReturn) {
instructions.remove(insnNode.previous)
@@ -24,7 +24,7 @@ open class ParameterInfo(
val isSkipped: Boolean, //for skipped parameter: e.g. inlined lambda
val index: Int,
var remapValue: StackValue?, //in case when parameter could be extracted from outer context (e.g. from local var)
val declarationIndex: Int = -1
val declarationIndex: Int
) {
var isCaptured: Boolean = false
@@ -18,12 +18,12 @@ package org.jetbrains.kotlin.codegen.inline;
import org.jetbrains.annotations.NotNull;
public interface LabelOwner {
boolean isMyLabel(@NotNull String name);
public interface ReturnLabelOwner {
boolean isReturnFromMe(@NotNull String labelName);
LabelOwner SKIP_ALL = name -> false;
ReturnLabelOwner SKIP_ALL = name -> false;
LabelOwner NOT_APPLICABLE = name -> {
ReturnLabelOwner NOT_APPLICABLE = name -> {
throw new RuntimeException("This operation not applicable for current context");
};
}
@@ -114,7 +114,7 @@ class IrExpressionLambdaImpl(
override val isExtensionLambda: Boolean
) : ExpressionLambda(typeMapper, isCrossInline), IrExpressionLambda {
override fun isMyLabel(name: String): Boolean {
override fun isReturnFromMe(labelName: String): Boolean {
//TODO("not implemented")
return false
}