FIR: support tailrec & external modifiers

This commit is contained in:
Mikhail Glukhikh
2018-03-20 12:03:52 +03:00
parent fa80f40e74
commit e6cd07b46e
4 changed files with 14 additions and 0 deletions
@@ -288,6 +288,8 @@ class RawFirBuilder(val session: FirSession) {
function.hasModifier(KtTokens.OPERATOR_KEYWORD),
function.hasModifier(KtTokens.INFIX_KEYWORD),
function.hasModifier(KtTokens.INLINE_KEYWORD),
function.hasModifier(KtTokens.TAILREC_KEYWORD),
function.hasModifier(KtTokens.EXTERNAL_KEYWORD),
function.receiverTypeReference.convertSafe(),
function.typeReference.toFirOrImplicitType(),
function.bodyExpression.toFirBody()
@@ -119,6 +119,12 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
if (memberDeclaration.isInline) {
print("inline ")
}
if (memberDeclaration.isTailRec) {
print("tailrec ")
}
if (memberDeclaration.isExternal) {
print("external ")
}
} else if (memberDeclaration is FirProperty) {
if (memberDeclaration.isConst) {
print("const ")
@@ -17,6 +17,10 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
val isInline: Boolean
val isTailRec: Boolean
val isExternal: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitNamedFunction(this, data)
@@ -25,6 +25,8 @@ class FirMemberFunctionImpl(
override val isOperator: Boolean,
override val isInfix: Boolean,
override val isInline: Boolean,
override val isTailRec: Boolean,
override val isExternal: Boolean,
receiverType: FirType?,
returnType: FirType,
override val body: FirBody?