[FIR2IR] Remove unnecessary isBound checks in call generator

This commit is contained in:
Mikhail Glukhikh
2020-03-16 16:56:21 +03:00
parent 1036d8a35a
commit 90f6af24f4
@@ -58,12 +58,12 @@ internal class CallGenerator(
} }
} }
} }
when { when (symbol) {
symbol is IrConstructorSymbol -> IrConstructorCallImpl.fromSymbolOwner(startOffset, endOffset, type, symbol) is IrConstructorSymbol -> IrConstructorCallImpl.fromSymbolOwner(startOffset, endOffset, type, symbol)
symbol is IrSimpleFunctionSymbol -> IrCallImpl( is IrSimpleFunctionSymbol -> IrCallImpl(
startOffset, endOffset, type, symbol, origin = qualifiedAccess.calleeReference.statementOrigin() startOffset, endOffset, type, symbol, origin = qualifiedAccess.calleeReference.statementOrigin()
) )
symbol is IrPropertySymbol && symbol.isBound -> { is IrPropertySymbol -> {
val getter = symbol.owner.getter val getter = symbol.owner.getter
val backingField = symbol.owner.backingField val backingField = symbol.owner.backingField
when { when {
@@ -75,12 +75,12 @@ internal class CallGenerator(
) )
} }
} }
symbol is IrFieldSymbol -> IrGetFieldImpl(startOffset, endOffset, symbol, type, origin = IrStatementOrigin.GET_PROPERTY) is IrFieldSymbol -> IrGetFieldImpl(startOffset, endOffset, symbol, type, origin = IrStatementOrigin.GET_PROPERTY)
symbol is IrValueSymbol -> IrGetValueImpl( is IrValueSymbol -> IrGetValueImpl(
startOffset, endOffset, type, symbol, startOffset, endOffset, type, symbol,
origin = qualifiedAccess.calleeReference.statementOrigin() origin = qualifiedAccess.calleeReference.statementOrigin()
) )
symbol is IrEnumEntrySymbol -> IrGetEnumValueImpl(startOffset, endOffset, type, symbol) is IrEnumEntrySymbol -> IrGetEnumValueImpl(startOffset, endOffset, type, symbol)
else -> generateErrorCallExpression(startOffset, endOffset, qualifiedAccess.calleeReference, type) else -> generateErrorCallExpression(startOffset, endOffset, qualifiedAccess.calleeReference, type)
} }
}.applyCallArguments(qualifiedAccess as? FirCall).applyTypeArguments(qualifiedAccess).applyReceivers(qualifiedAccess) }.applyCallArguments(qualifiedAccess as? FirCall).applyTypeArguments(qualifiedAccess).applyReceivers(qualifiedAccess)
@@ -92,32 +92,28 @@ internal class CallGenerator(
val symbol = calleeReference.toSymbol(session, classifierStorage, declarationStorage) val symbol = calleeReference.toSymbol(session, classifierStorage, declarationStorage)
val origin = IrStatementOrigin.EQ val origin = IrStatementOrigin.EQ
return variableAssignment.convertWithOffsets { startOffset, endOffset -> return variableAssignment.convertWithOffsets { startOffset, endOffset ->
if (symbol != null && symbol.isBound) { val assignedValue = visitor.convertToIrExpression(variableAssignment.rValue)
val assignedValue = visitor.convertToIrExpression(variableAssignment.rValue) when (symbol) {
when (symbol) { is IrFieldSymbol -> IrSetFieldImpl(startOffset, endOffset, symbol, type, origin).apply {
is IrFieldSymbol -> IrSetFieldImpl(startOffset, endOffset, symbol, type, origin).apply { value = assignedValue
value = assignedValue
}
is IrPropertySymbol -> {
val irProperty = symbol.owner
val setter = irProperty.setter
val backingField = irProperty.backingField
when {
setter != null -> IrCallImpl(startOffset, endOffset, type, setter.symbol, origin).apply {
putValueArgument(0, assignedValue)
}
backingField != null -> IrSetFieldImpl(startOffset, endOffset, backingField.symbol, type).apply {
// NB: to be consistent with FIR2IR, origin should be null here
value = assignedValue
}
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
}
}
is IrVariableSymbol -> IrSetVariableImpl(startOffset, endOffset, type, symbol, assignedValue, origin)
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
} }
} else { is IrPropertySymbol -> {
generateErrorCallExpression(startOffset, endOffset, calleeReference) val irProperty = symbol.owner
val setter = irProperty.setter
val backingField = irProperty.backingField
when {
setter != null -> IrCallImpl(startOffset, endOffset, type, setter.symbol, origin).apply {
putValueArgument(0, assignedValue)
}
backingField != null -> IrSetFieldImpl(startOffset, endOffset, backingField.symbol, type).apply {
// NB: to be consistent with FIR2IR, origin should be null here
value = assignedValue
}
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
}
}
is IrVariableSymbol -> IrSetVariableImpl(startOffset, endOffset, type, symbol, assignedValue, origin)
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
} }
}.applyReceivers(variableAssignment) }.applyReceivers(variableAssignment)
} }