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