Write throw expression parsing (light tree to FIR)

This commit is contained in:
Ivan Cilcic
2019-07-18 16:47:44 +03:00
committed by Mikhail Glukhikh
parent a714515527
commit a0e79449fd
2 changed files with 31 additions and 0 deletions
@@ -83,6 +83,7 @@ class ExpressionsConverter(
FOR -> convertFor(expression)
BREAK, CONTINUE -> convertLoopJump(expression)
RETURN -> convertReturn(expression)
THROW -> convertThrow(expression)
PARENTHESIZED, PROPERTY_DELEGATE, INDICES -> convertExpression(expression.getExpressionInParentheses())
THIS_EXPRESSION -> convertThisExpression(expression)
SUPER_EXPRESSION -> convertSuperExpression(expression)
@@ -804,6 +805,19 @@ class ExpressionsConverter(
return result.toReturn(labelName)
}
/**
* @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseThrow
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitThrowExpression
*/
private fun convertThrow(throwExpression: LighterASTNode): FirExpression {
var firExpression: FirExpression? = null
throwExpression.forEachChildren {
if (it.isExpression()) firExpression = getAsFirExpression(it)
}
return FirThrowExpressionImpl(session, null, firExpression ?: FirErrorExpressionImpl(session, null, "Nothing to throw"))
}
/**
* @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.parseThisExpression
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitThisExpression
@@ -304,4 +304,21 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
visitQualifiedAccessExpression = true
)
}
fun testThrowExpression() {
compare(
stubMode = false,
visitAnonymousFunction = true,
visitLambdaExpression = true,
visitLocalMembers = true,
visitVariable = true,
visitAnnotation = true,
visitFunctionCall = true,
visitThrowExpression = true,
visitLoops = true,
visitConstExpression = true,
visitQualifiedAccessExpression = true,
visitAnonymousObject = true
)
}
}