From e6cd07b46e9475ad7467ae8b8860b65ad58f037c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 20 Mar 2018 12:03:52 +0300 Subject: [PATCH] FIR: support tailrec & external modifiers --- .../src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt | 2 ++ .../fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt | 6 ++++++ .../jetbrains/kotlin/fir/declarations/FirNamedFunction.kt | 4 ++++ .../kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt | 2 ++ 4 files changed, 14 insertions(+) diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 176d33f94c3..e3001c1ec0e 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -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() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index 2061df2874f..18abb861364 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -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 ") diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt index 3be3528ab14..eaab5cf22a8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt @@ -17,6 +17,10 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember { val isInline: Boolean + val isTailRec: Boolean + + val isExternal: Boolean + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitNamedFunction(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt index 300782b64aa..301da3cba95 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt @@ -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?