[FIR] Save inline status of lambda after resolution
This commit is contained in:
committed by
TeamCityServer
parent
a4b9e2502c
commit
5ebd24eac5
@@ -38,6 +38,7 @@ abstract class FirAnonymousFunction : FirFunction<FirAnonymousFunction>, FirExpr
|
||||
abstract override val symbol: FirAnonymousFunctionSymbol
|
||||
abstract val label: FirLabel?
|
||||
abstract val invocationKind: EventOccurrencesRange?
|
||||
abstract val inlineStatus: InlineStatus
|
||||
abstract val isLambda: Boolean
|
||||
abstract override val typeParameters: List<FirTypeParameter>
|
||||
|
||||
@@ -59,6 +60,8 @@ abstract class FirAnonymousFunction : FirFunction<FirAnonymousFunction>, FirExpr
|
||||
|
||||
abstract fun replaceInvocationKind(newInvocationKind: EventOccurrencesRange?)
|
||||
|
||||
abstract fun replaceInlineStatus(newInlineStatus: InlineStatus)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnonymousFunction
|
||||
|
||||
abstract override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirAnonymousFunction
|
||||
|
||||
+3
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.InlineStatus
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirFunctionBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousFunctionImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
@@ -50,6 +51,7 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu
|
||||
lateinit var symbol: FirAnonymousFunctionSymbol
|
||||
var label: FirLabel? = null
|
||||
var invocationKind: EventOccurrencesRange? = null
|
||||
var inlineStatus: InlineStatus = InlineStatus.Unknown
|
||||
var isLambda: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||
|
||||
@@ -69,6 +71,7 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu
|
||||
symbol,
|
||||
label,
|
||||
invocationKind,
|
||||
inlineStatus,
|
||||
isLambda,
|
||||
typeParameters,
|
||||
)
|
||||
|
||||
+6
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.InlineStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
@@ -42,6 +43,7 @@ internal class FirAnonymousFunctionImpl(
|
||||
override val symbol: FirAnonymousFunctionSymbol,
|
||||
override var label: FirLabel?,
|
||||
override var invocationKind: EventOccurrencesRange?,
|
||||
override var inlineStatus: InlineStatus,
|
||||
override val isLambda: Boolean,
|
||||
override val typeParameters: MutableList<FirTypeParameter>,
|
||||
) : FirAnonymousFunction() {
|
||||
@@ -138,4 +140,8 @@ internal class FirAnonymousFunctionImpl(
|
||||
override fun replaceInvocationKind(newInvocationKind: EventOccurrencesRange?) {
|
||||
invocationKind = newInvocationKind
|
||||
}
|
||||
|
||||
override fun replaceInlineStatus(newInlineStatus: InlineStatus) {
|
||||
inlineStatus = newInlineStatus
|
||||
}
|
||||
}
|
||||
|
||||
@@ -577,9 +577,11 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
|
||||
anonymousFunction.valueParameters.renderParameters()
|
||||
print(": ")
|
||||
anonymousFunction.returnTypeRef.accept(this)
|
||||
print(" <inline=${anonymousFunction.inlineStatus}")
|
||||
if (anonymousFunction.invocationKind != null) {
|
||||
print(" <kind=${anonymousFunction.invocationKind}> ")
|
||||
print(", kind=${anonymousFunction.invocationKind}")
|
||||
}
|
||||
print("> ")
|
||||
if (mode.renderLambdaBodies) {
|
||||
anonymousFunction.body?.renderBody()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
enum class InlineStatus(val returnAllowed: Boolean) {
|
||||
Inline(returnAllowed = true), // lambda will be inlined
|
||||
NoInline(returnAllowed = false), // lambda won't be inlined (is part of not inline function call or marked with `noinline` modifier)
|
||||
CrossInline(returnAllowed = false), // lambda will be inlined but marked with `crossinline` modifier
|
||||
Unknown(returnAllowed = false), // inlinability of lambda is unknown
|
||||
}
|
||||
@@ -24,7 +24,7 @@ fun buildBinaryArgumentList(left: FirExpression, right: FirExpression): FirArgum
|
||||
fun buildArraySetArgumentList(rValue: FirExpression, indexes: List<FirExpression>): FirArgumentList =
|
||||
FirArraySetArgumentList(rValue, indexes)
|
||||
|
||||
fun buildResolvedArgumentList(mapping: LinkedHashMap<FirExpression, FirValueParameter>): FirArgumentList =
|
||||
fun buildResolvedArgumentList(mapping: LinkedHashMap<FirExpression, FirValueParameter>): FirResolvedArgumentList =
|
||||
FirResolvedArgumentList(mapping)
|
||||
|
||||
fun buildPartiallyResolvedArgumentList(
|
||||
|
||||
+1
@@ -208,6 +208,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
builder(anonymousFunction) {
|
||||
parents += functionBuilder
|
||||
defaultNull("invocationKind", "label", "body", "controlFlowGraphReference")
|
||||
default("inlineStatus", "InlineStatus.Unknown")
|
||||
}
|
||||
|
||||
builder(propertyAccessor) {
|
||||
|
||||
+3
@@ -282,6 +282,9 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+field("invocationKind", eventOccurrencesRangeType, nullable = true, withReplace = true).apply {
|
||||
isMutable = true
|
||||
}
|
||||
+field("inlineStatus", inlineStatusType, withReplace = true).apply {
|
||||
isMutable = true
|
||||
}
|
||||
+booleanField("isLambda")
|
||||
+typeParameters
|
||||
}
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ val constKindType = type("types", "ConstantValueKind")
|
||||
val operationType = type("fir.expressions", "FirOperation")
|
||||
val classKindType = type(ClassKind::class)
|
||||
val eventOccurrencesRangeType = type(EventOccurrencesRange::class)
|
||||
val inlineStatusType = type("fir.declarations", "InlineStatus")
|
||||
val varianceType = type(Variance::class)
|
||||
val nameType = type(Name::class)
|
||||
val visibilityType = type(Visibility::class)
|
||||
@@ -87,4 +88,4 @@ val annotationResolveStatusType = generatedType("expressions", "FirAnnotationRes
|
||||
|
||||
val exhaustivenessStatusType = generatedType("expressions", "ExhaustivenessStatus")
|
||||
|
||||
val callableReferenceMappedArgumentsType = type("fir.resolve.calls", "CallableReferenceMappedArguments")
|
||||
val callableReferenceMappedArgumentsType = type("fir.resolve.calls", "CallableReferenceMappedArguments")
|
||||
|
||||
Reference in New Issue
Block a user