[IR] Minor. Extract irBuiltins from IrGeneratorContext to separate interface

It's necessary to using some util functions on IrGeneratorContext in IrToFir
This commit is contained in:
Dmitriy Novozhilov
2019-08-14 14:57:01 +03:00
parent b274c7567e
commit 42f171a8d2
3 changed files with 18 additions and 17 deletions
@@ -32,8 +32,7 @@ import org.jetbrains.kotlin.fir.types.render
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.primitiveOp1
import org.jetbrains.kotlin.ir.builders.primitiveOp2
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.*
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
@@ -60,9 +59,9 @@ internal class Fir2IrVisitor(
private val moduleDescriptor: FirModuleDescriptor,
private val symbolTable: SymbolTable,
private val sourceManager: PsiSourceManager,
private val irBuiltIns: IrBuiltIns,
override val irBuiltIns: IrBuiltIns,
private val fakeOverrideMode: FakeOverrideMode
) : FirVisitor<IrElement, Any?>() {
) : FirVisitor<IrElement, Any?>(), IrGeneratorContextInterface {
companion object {
private val NEGATED_OPERATIONS: Set<FirOperation> = EnumSet.of(FirOperation.NOT_EQ, FirOperation.NOT_IDENTITY)
@@ -27,9 +27,11 @@ interface IrGeneratorWithScope : IrGenerator {
val scope: Scope
}
abstract class IrGeneratorContext {
abstract val irBuiltIns: IrBuiltIns
interface IrGeneratorContextInterface {
val irBuiltIns: IrBuiltIns
}
abstract class IrGeneratorContext : IrGeneratorContextInterface {
val builtIns: KotlinBuiltIns get() = irBuiltIns.builtIns
}
@@ -56,32 +56,32 @@ fun primitiveOp2(
putValueArgument(1, argument2)
}
fun IrGeneratorContext.constNull(startOffset: Int, endOffset: Int): IrExpression =
fun IrGeneratorContextInterface.constNull(startOffset: Int, endOffset: Int): IrExpression =
IrConstImpl.constNull(startOffset, endOffset, irBuiltIns.nothingNType)
fun IrGeneratorContext.equalsNull(startOffset: Int, endOffset: Int, argument: IrExpression): IrExpression =
fun IrGeneratorContextInterface.equalsNull(startOffset: Int, endOffset: Int, argument: IrExpression): IrExpression =
primitiveOp2(
startOffset, endOffset, irBuiltIns.eqeqSymbol, irBuiltIns.booleanType, IrStatementOrigin.EQEQ,
argument, constNull(startOffset, endOffset)
)
fun IrGeneratorContext.eqeqeq(startOffset: Int, endOffset: Int, argument1: IrExpression, argument2: IrExpression): IrExpression =
fun IrGeneratorContextInterface.eqeqeq(startOffset: Int, endOffset: Int, argument1: IrExpression, argument2: IrExpression): IrExpression =
primitiveOp2(startOffset, endOffset, irBuiltIns.eqeqeqSymbol, irBuiltIns.booleanType, IrStatementOrigin.EQEQEQ, argument1, argument2)
fun IrGeneratorContext.constTrue(startOffset: Int, endOffset: Int) =
fun IrGeneratorContextInterface.constTrue(startOffset: Int, endOffset: Int) =
IrConstImpl.constTrue(startOffset, endOffset, irBuiltIns.booleanType)
fun IrGeneratorContext.constFalse(startOffset: Int, endOffset: Int) =
fun IrGeneratorContextInterface.constFalse(startOffset: Int, endOffset: Int) =
IrConstImpl.constFalse(startOffset, endOffset, irBuiltIns.booleanType)
fun IrGeneratorContext.elseBranch(elseExpr: IrExpression): IrElseBranch {
fun IrGeneratorContextInterface.elseBranch(elseExpr: IrExpression): IrElseBranch {
val startOffset = elseExpr.startOffset
val endOffset = elseExpr.endOffset
return IrElseBranchImpl(startOffset, endOffset, constTrue(startOffset, endOffset), elseExpr)
}
// a || b == if (a) true else b
fun IrGeneratorContext.oror(
fun IrGeneratorContextInterface.oror(
startOffset: Int,
endOffset: Int,
a: IrExpression,
@@ -93,14 +93,14 @@ fun IrGeneratorContext.oror(
branches.add(elseBranch(b))
}
fun IrGeneratorContext.oror(a: IrExpression, b: IrExpression, origin: IrStatementOrigin = IrStatementOrigin.OROR): IrWhen =
fun IrGeneratorContextInterface.oror(a: IrExpression, b: IrExpression, origin: IrStatementOrigin = IrStatementOrigin.OROR): IrWhen =
oror(b.startOffset, b.endOffset, a, b, origin)
fun IrGeneratorContext.whenComma(a: IrExpression, b: IrExpression): IrWhen =
fun IrGeneratorContextInterface.whenComma(a: IrExpression, b: IrExpression): IrWhen =
oror(a, b, IrStatementOrigin.WHEN_COMMA)
// a && b == if (a) b else false
fun IrGeneratorContext.andand(
fun IrGeneratorContextInterface.andand(
startOffset: Int,
endOffset: Int,
a: IrExpression,
@@ -112,5 +112,5 @@ fun IrGeneratorContext.andand(
branches.add(elseBranch(constFalse(b.startOffset, b.endOffset)))
}
fun IrGeneratorContext.andand(a: IrExpression, b: IrExpression, origin: IrStatementOrigin = IrStatementOrigin.ANDAND): IrWhen =
fun IrGeneratorContextInterface.andand(a: IrExpression, b: IrExpression, origin: IrStatementOrigin = IrStatementOrigin.ANDAND): IrWhen =
andand(b.startOffset, b.endOffset, a, b, origin)