Control flow graph for safe calls corrected #KT-10913 Fixed

Also #KT-10186 Fixed
Also #KT-5198 Fixed
This commit is contained in:
Mikhail Glukhikh
2016-02-02 16:17:02 +03:00
committed by Mikhail Glukhikh
parent 5ae394fec0
commit a08b8f43b2
15 changed files with 660 additions and 2 deletions
@@ -947,10 +947,19 @@ class ControlFlowProcessor(private val trace: BindingTrace) {
mark(expression)
val selectorExpression = expression.selectorExpression
val receiverExpression = expression.receiverExpression
val safe = expression is KtSafeQualifiedExpression
// todo: replace with selectorExpresion != null after parser is fixed
if (selectorExpression is KtCallExpression || selectorExpression is KtSimpleNameExpression) {
generateInstructions(selectorExpression)
if (!safe) {
generateInstructions(selectorExpression)
}
else {
val resultLabel = builder.createUnboundLabel("result of call")
builder.jumpOnFalse(resultLabel, expression, null)
generateInstructions(selectorExpression)
builder.bindLabel(resultLabel)
}
copyValue(selectorExpression, expression)
}
else {