[FIR] Handle lateinit local variable properly

This commit is contained in:
Jinseong Jeon
2020-04-07 09:17:22 +03:00
committed by Mikhail Glukhikh
parent 33d4655053
commit fa9d79392f
8 changed files with 8 additions and 8 deletions
@@ -787,10 +787,11 @@ class Fir2IrDeclarationStorage(
variable.name.isSpecial -> IrDeclarationOrigin.IR_TEMPORARY_VARIABLE variable.name.isSpecial -> IrDeclarationOrigin.IR_TEMPORARY_VARIABLE
else -> IrDeclarationOrigin.DEFINED else -> IrDeclarationOrigin.DEFINED
} }
val isLateInit = if (variable is FirProperty) variable.isLateInit else false
val irVariable = variable.convertWithOffsets { startOffset, endOffset -> val irVariable = variable.convertWithOffsets { startOffset, endOffset ->
declareIrVariable( declareIrVariable(
startOffset, endOffset, origin, startOffset, endOffset, origin,
variable.name, type, variable.isVar, isConst = false, isLateinit = false variable.name, type, variable.isVar, isConst = false, isLateinit = isLateInit
) )
} }
irVariable.parent = irParent irVariable.parent = irParent
@@ -880,7 +880,9 @@ class DeclarationsConverter(
expression = expressionConverter.getAsFirExpression(it, "Incorrect delegate expression") expression = expressionConverter.getAsFirExpression(it, "Incorrect delegate expression")
} }
} }
status = FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) status = FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL).apply {
isLateInit = modifiers.hasLateinit()
}
val receiver = delegateExpression?.let { val receiver = delegateExpression?.let {
expressionConverter.getAsFirExpression<FirExpression>(it, "Incorrect delegate expression") expressionConverter.getAsFirExpression<FirExpression>(it, "Incorrect delegate expression")
@@ -958,7 +958,9 @@ class RawFirBuilder(
} }
} }
status = FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) status = FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL).apply {
isLateInit = hasModifier(LATEINIT_KEYWORD)
}
val receiver = delegateExpression?.toFirExpression("Incorrect delegate expression") val receiver = delegateExpression?.toFirExpression("Incorrect delegate expression")
generateAccessorsByDelegate(delegateBuilder, null, baseSession, isExtension = false, stubMode, receiver) generateAccessorsByDelegate(delegateBuilder, null, baseSession, isExtension = false, stubMode, receiver)
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME
// WITH_RUNTIME // WITH_RUNTIME
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.UninitializedPropertyAccessException import kotlin.UninitializedPropertyAccessException
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.UninitializedPropertyAccessException import kotlin.UninitializedPropertyAccessException
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.UninitializedPropertyAccessException import kotlin.UninitializedPropertyAccessException
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.UninitializedPropertyAccessException import kotlin.UninitializedPropertyAccessException