FIR: support suspend functions #KT-24084 Fixed
This commit is contained in:
@@ -548,6 +548,7 @@ class RawFirBuilder(val session: FirSession) {
|
||||
function.hasModifier(KtTokens.INLINE_KEYWORD),
|
||||
function.hasModifier(KtTokens.TAILREC_KEYWORD),
|
||||
function.hasModifier(KtTokens.EXTERNAL_KEYWORD),
|
||||
function.hasModifier(KtTokens.SUSPEND_KEYWORD),
|
||||
function.receiverTypeReference.convertSafe(),
|
||||
if (function.hasBlockBody()) {
|
||||
typeReference.toFirOrUnitType()
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
fun foo() {}
|
||||
fun foo() {}
|
||||
|
||||
suspend fun bar() {}
|
||||
@@ -1,3 +1,5 @@
|
||||
FILE: simpleFun.kt
|
||||
public? final? function foo(): kotlin.Unit {
|
||||
}
|
||||
public? final? suspend function bar(): kotlin.Unit {
|
||||
}
|
||||
|
||||
@@ -170,6 +170,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
if (memberDeclaration.isExternal) {
|
||||
print("external ")
|
||||
}
|
||||
if (memberDeclaration.isSuspend) {
|
||||
print("suspend ")
|
||||
}
|
||||
} else if (memberDeclaration is FirProperty) {
|
||||
if (memberDeclaration.isConst) {
|
||||
print("const ")
|
||||
|
||||
@@ -44,6 +44,8 @@ interface FirDeclarationStatus : FirElement {
|
||||
|
||||
val isData: Boolean
|
||||
|
||||
val isSuspend: Boolean
|
||||
|
||||
override val psi: PsiElement?
|
||||
get() = null
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
|
||||
|
||||
val isExternal: Boolean get() = status.isExternal
|
||||
|
||||
val isSuspend: Boolean get() = status.isSuspend
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitNamedFunction(this, data)
|
||||
|
||||
|
||||
+8
-1
@@ -106,6 +106,12 @@ open class FirDeclarationStatusImpl(
|
||||
this[DATA] = value
|
||||
}
|
||||
|
||||
override var isSuspend: Boolean
|
||||
get() = this[SUSPEND]
|
||||
set(value) {
|
||||
this[SUSPEND] = value
|
||||
}
|
||||
|
||||
private enum class Modifier(val mask: Int) {
|
||||
EXPECT(0x1),
|
||||
ACTUAL(0x2),
|
||||
@@ -119,7 +125,8 @@ open class FirDeclarationStatusImpl(
|
||||
LATEINIT(0x200),
|
||||
INNER(0x400),
|
||||
COMPANION(0x800),
|
||||
DATA(0x1000)
|
||||
DATA(0x1000),
|
||||
SUSPEND(0x2000)
|
||||
}
|
||||
|
||||
fun resolved(visibility: Visibility, modality: Modality): FirDeclarationStatus {
|
||||
|
||||
+2
@@ -32,6 +32,7 @@ class FirMemberFunctionImpl(
|
||||
isInline: Boolean,
|
||||
isTailRec: Boolean,
|
||||
isExternal: Boolean,
|
||||
isSuspend: Boolean,
|
||||
receiverType: FirType?,
|
||||
returnType: FirType,
|
||||
override val body: FirBody?
|
||||
@@ -45,6 +46,7 @@ class FirMemberFunctionImpl(
|
||||
status.isInline = isInline
|
||||
status.isTailRec = isTailRec
|
||||
status.isExternal = isExternal
|
||||
status.isSuspend = isSuspend
|
||||
}
|
||||
|
||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
Reference in New Issue
Block a user