Minor: CallGenerator is StatementGeneratorExtension.
This commit is contained in:
committed by
Dmitry Petrov
parent
8d86c0a2dd
commit
415265276a
+3
-3
@@ -52,7 +52,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
|||||||
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
||||||
opCall.setExplicitReceiverValue(irLValue)
|
opCall.setExplicitReceiverValue(irLValue)
|
||||||
opCall.irValueArgumentsByIndex[0] = statementGenerator.generateExpression(ktRight)
|
opCall.irValueArgumentsByIndex[0] = statementGenerator.generateExpression(ktRight)
|
||||||
val irOpCall = CallGenerator(this).generateCall(expression, opCall, irOperator)
|
val irOpCall = CallGenerator(statementGenerator).generateCall(expression, opCall, irOperator)
|
||||||
|
|
||||||
if (isSimpleAssignment) {
|
if (isSimpleAssignment) {
|
||||||
// Set( Op( Get(), RHS ) )
|
// Set( Op( Get(), RHS ) )
|
||||||
@@ -76,7 +76,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
|||||||
// VAR tmp = [lhs].inc()
|
// VAR tmp = [lhs].inc()
|
||||||
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
||||||
opCall.setExplicitReceiverValue(irLValue)
|
opCall.setExplicitReceiverValue(irLValue)
|
||||||
val irOpCall = CallGenerator(this).generateCall(expression, opCall, irOperator)
|
val irOpCall = CallGenerator(statementGenerator).generateCall(expression, opCall, irOperator)
|
||||||
val irTmp = statementGenerator.scope.createTemporaryVariable(irOpCall)
|
val irTmp = statementGenerator.scope.createTemporaryVariable(irOpCall)
|
||||||
irBlock.addStatement(irTmp)
|
irBlock.addStatement(irTmp)
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
|||||||
// [lhs] = tmp.inc()
|
// [lhs] = tmp.inc()
|
||||||
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
||||||
opCall.setExplicitReceiverValue(VariableLValue(irTmp))
|
opCall.setExplicitReceiverValue(VariableLValue(irTmp))
|
||||||
val irOpCall = CallGenerator(this).generateCall(expression, opCall, irOperator)
|
val irOpCall = CallGenerator(statementGenerator).generateCall(expression, opCall, irOperator)
|
||||||
irBlock.addStatement(irLValue.store(irOpCall))
|
irBlock.addStatement(irLValue.store(irOpCall))
|
||||||
|
|
||||||
// ^ tmp
|
// ^ tmp
|
||||||
|
|||||||
@@ -33,13 +33,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument
|
|||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class CallGenerator(
|
class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorExtension(statementGenerator) {
|
||||||
override val context: GeneratorContext,
|
|
||||||
override val scope: Scope
|
|
||||||
) : GeneratorWithScope {
|
|
||||||
|
|
||||||
constructor(parent: GeneratorWithScope) : this(parent.context, parent.scope)
|
|
||||||
|
|
||||||
fun generateCall(
|
fun generateCall(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
|
|||||||
+3
-5
@@ -138,7 +138,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
|||||||
private fun generateInOperator(expression: KtBinaryExpression, irOperator: IrOperator): IrExpression {
|
private fun generateInOperator(expression: KtBinaryExpression, irOperator: IrOperator): IrExpression {
|
||||||
val containsCall = getResolvedCall(expression)!!
|
val containsCall = getResolvedCall(expression)!!
|
||||||
|
|
||||||
val irContainsCall = CallGenerator(this).generateCall(expression, statementGenerator.pregenerateCall(containsCall), irOperator)
|
val irContainsCall = CallGenerator(statementGenerator).generateCall(expression, statementGenerator.pregenerateCall(containsCall), irOperator)
|
||||||
|
|
||||||
return when (irOperator) {
|
return when (irOperator) {
|
||||||
IrOperator.IN ->
|
IrOperator.IN ->
|
||||||
@@ -194,7 +194,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
|||||||
private fun generateComparisonOperator(expression: KtBinaryExpression, irOperator: IrOperator): IrExpression {
|
private fun generateComparisonOperator(expression: KtBinaryExpression, irOperator: IrOperator): IrExpression {
|
||||||
val compareToCall = getResolvedCall(expression)!!
|
val compareToCall = getResolvedCall(expression)!!
|
||||||
|
|
||||||
val irCompareToCall = CallGenerator(this).generateCall(expression, statementGenerator.pregenerateCall(compareToCall), irOperator)
|
val irCompareToCall = CallGenerator(statementGenerator).generateCall(expression, statementGenerator.pregenerateCall(compareToCall), irOperator)
|
||||||
|
|
||||||
val compareToZeroDescriptor = when (irOperator) {
|
val compareToZeroDescriptor = when (irOperator) {
|
||||||
IrOperator.LT -> context.irBuiltIns.lt0
|
IrOperator.LT -> context.irBuiltIns.lt0
|
||||||
@@ -210,7 +210,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
|||||||
|
|
||||||
private fun generateBinaryOperatorAsCall(expression: KtBinaryExpression, irOperator: IrOperator?): IrExpression {
|
private fun generateBinaryOperatorAsCall(expression: KtBinaryExpression, irOperator: IrOperator?): IrExpression {
|
||||||
val operatorCall = getResolvedCall(expression)!!
|
val operatorCall = getResolvedCall(expression)!!
|
||||||
return CallGenerator(this).generateCall(expression, statementGenerator.pregenerateCall(operatorCall), irOperator)
|
return CallGenerator(statementGenerator).generateCall(expression, statementGenerator.pregenerateCall(operatorCall), irOperator)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -241,6 +241,4 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
|||||||
val resolvedCall = getResolvedCall(expression)!!
|
val resolvedCall = getResolvedCall(expression)!!
|
||||||
return CallGenerator(statementGenerator).generateCall(expression, statementGenerator.pregenerateCall(resolvedCall), irOperator)
|
return CallGenerator(statementGenerator).generateCall(expression, statementGenerator.pregenerateCall(resolvedCall), irOperator)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user