KT-36963 Deparenthesize !! argument when generating expression

This commit is contained in:
Dmitry Petrov
2020-03-06 12:01:00 +03:00
parent 71e4b0c9ad
commit eba45d4f89
6 changed files with 44 additions and 11 deletions
@@ -62,9 +62,8 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
fun generatePrefixExpression(expression: KtPrefixExpression): IrExpression {
val ktOperator = expression.operationReference.getReferencedNameElementType()
val irOperator = getPrefixOperator(ktOperator)
return when (irOperator) {
return when (val irOperator = getPrefixOperator(ktOperator)) {
null -> throw AssertionError("Unexpected prefix operator: $ktOperator")
in INCREMENT_DECREMENT_OPERATORS ->
@@ -78,9 +77,8 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
fun generatePostfixExpression(expression: KtPostfixExpression): IrExpression {
val ktOperator = expression.operationReference.getReferencedNameElementType()
val irOperator = getPostfixOperator(ktOperator)
return when (irOperator) {
return when (val irOperator = getPostfixOperator(ktOperator)) {
null -> throw AssertionError("Unexpected postfix operator: $ktOperator")
in INCREMENT_DECREMENT_OPERATORS ->
@@ -130,9 +128,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
return generateBinaryOperatorAsCall(expression, null)
}
val irOperator = getInfixOperator(ktOperator)
return when (irOperator) {
return when (val irOperator = getInfixOperator(ktOperator)) {
null -> throw AssertionError("Unexpected infix operator: $ktOperator")
IrStatementOrigin.EQ -> AssignmentGenerator(statementGenerator).generateAssignment(expression)
in AUGMENTED_ASSIGNMENTS -> AssignmentGenerator(statementGenerator).generateAugmentedAssignment(expression, irOperator)
@@ -319,7 +315,9 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
val comparisonInfo = getPrimitiveNumericComparisonInfo(expression)
val comparisonType = comparisonInfo?.comparisonType
val eqeqSymbol = context.irBuiltIns.ieee754equalsFunByOperandType[kotlinTypeToIrType(comparisonType)?.classifierOrNull] ?: context.irBuiltIns.eqeqSymbol
val eqeqSymbol =
context.irBuiltIns.ieee754equalsFunByOperandType[kotlinTypeToIrType(comparisonType)?.classifierOrNull]
?: context.irBuiltIns.eqeqSymbol
val irEquals = primitiveOp2(
expression.startOffsetSkippingComments, expression.endOffset,
@@ -357,7 +355,8 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
if (comparisonInfo != null) {
val comparisonType = comparisonInfo.comparisonType
val eqeqSymbol =
context.irBuiltIns.ieee754equalsFunByOperandType[kotlinTypeToIrType(comparisonType)?.classifierOrNull] ?: context.irBuiltIns.eqeqSymbol
context.irBuiltIns.ieee754equalsFunByOperandType[kotlinTypeToIrType(comparisonType)?.classifierOrNull] ?: context.irBuiltIns
.eqeqSymbol
primitiveOp2(
startOffset, endOffset,
eqeqSymbol,
@@ -453,7 +452,10 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
val comparisonType = comparisonInfo.comparisonType
primitiveOp2(
startOffset, endOffset,
getComparisonOperatorSymbol(origin, kotlinTypeToIrType(comparisonType) ?: error("$comparisonType expected to be primitive")),
getComparisonOperatorSymbol(
origin,
kotlinTypeToIrType(comparisonType) ?: error("$comparisonType expected to be primitive")
),
context.irBuiltIns.booleanType,
origin,
ktLeft.generateAsPrimitiveNumericComparisonOperand(comparisonInfo.leftPrimitiveType, comparisonInfo.comparisonType),
@@ -491,7 +493,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
}[primitiveNumericType.classifierOrFail]!!
private fun generateExclExclOperator(expression: KtPostfixExpression, origin: IrStatementOrigin): IrExpression {
val ktArgument = expression.baseExpression!!
val ktArgument = KtPsiUtil.deparenthesize(expression.baseExpression!!)!!
val irArgument = ktArgument.genExpr()
val ktOperator = expression.operationReference