Minor: CallGenerator is StatementGeneratorExtension.

This commit is contained in:
Dmitry Petrov
2016-08-29 17:38:12 +03:00
committed by Dmitry Petrov
parent 8d86c0a2dd
commit 415265276a
3 changed files with 7 additions and 15 deletions
@@ -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,
@@ -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)
} }
} }