[kotlin compiler][update] 1.3.30-dev-2076

Move to the new IrReturnableBlock in the upstream.
Eliminate KonanIrReturnableBlock.
(cherry picked from commit 08405fc9fcd7d2a844a221524bfa7018ee80be18)
This commit is contained in:
Vasily Levchenko
2019-02-26 18:33:05 +03:00
parent 3a70c3b41b
commit a20250c2aa
7 changed files with 20 additions and 68 deletions
@@ -218,49 +218,4 @@ internal class IrPrivateClassReferenceImpl(startOffset: Int,
{ {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitClassReference(this, data) visitor.visitClassReference(this, data)
}
class KonanIrReturnableBlockImpl(
startOffset: Int,
endOffset: Int,
type: IrType,
override val symbol: IrReturnableBlockSymbol,
origin: IrStatementOrigin? = null,
val sourceFile: IrFile? = null
) :
IrContainerExpressionBase(startOffset, endOffset, type, origin),
IrReturnableBlock {
override val descriptor = symbol.descriptor
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrReturnableBlockSymbol,
origin: IrStatementOrigin?,
statements: List<IrStatement>,
sourceFile: IrFile? = null
) : this(startOffset, endOffset, type, symbol, origin, sourceFile) {
this.statements.addAll(statements)
}
override val sourceFileName: String = sourceFile?.fileEntry?.name ?: "no source file"
init {
symbol.bind(this)
}
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitBlock(this, data)
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
statements.forEach { it.accept(visitor, data) }
}
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
statements.forEachIndexed { i, irStatement ->
statements[i] = irStatement.transform(transformer, data)
}
}
} }
@@ -1575,7 +1575,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
val dummyFile = IrFileImpl(NaiveSourceBasedFileEntryImpl("no source file")) val dummyFile = IrFileImpl(NaiveSourceBasedFileEntryImpl("no source file"))
private inner class ReturnableBlockScope(val returnableBlock: IrReturnableBlock) : private inner class ReturnableBlockScope(val returnableBlock: IrReturnableBlock) :
FileScope((returnableBlock as? KonanIrReturnableBlockImpl)?.sourceFile ?: dummyFile) { FileScope(returnableBlock.sourceFileSymbol?.owner ?: dummyFile) {
var bbExit : LLVMBasicBlockRef? = null var bbExit : LLVMBasicBlockRef? = null
var resultPhi : LLVMValueRef? = null var resultPhi : LLVMValueRef? = null
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.common.*
import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor
import org.jetbrains.kotlin.backend.common.descriptors.WrappedVariableDescriptor import org.jetbrains.kotlin.backend.common.descriptors.WrappedVariableDescriptor
import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.ir.KonanIrReturnableBlockImpl
import org.jetbrains.kotlin.backend.konan.irasdescriptors.file import org.jetbrains.kotlin.backend.konan.irasdescriptors.file
import org.jetbrains.kotlin.backend.konan.SYNTHETIC_OFFSET import org.jetbrains.kotlin.backend.konan.SYNTHETIC_OFFSET
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
@@ -318,7 +317,7 @@ internal class FinallyBlocksLowering(val context: Context): FileLoweringPass, Ir
private inline fun IrBuilderWithScope.irReturnableBlock(symbol: IrReturnableBlockSymbol, private inline fun IrBuilderWithScope.irReturnableBlock(symbol: IrReturnableBlockSymbol,
type: IrType, body: IrBlockBuilder.() -> Unit) = type: IrType, body: IrBlockBuilder.() -> Unit) =
KonanIrReturnableBlockImpl(startOffset, endOffset, type, symbol, null, IrReturnableBlockImpl(startOffset, endOffset, type, symbol, null,
IrBlockBuilder(context, scope, startOffset, endOffset, null, type) IrBlockBuilder(context, scope, startOffset, endOffset, null, type)
.block(body).statements) .block(body).statements)
} }
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke
import org.jetbrains.kotlin.backend.konan.descriptors.needsInlining import org.jetbrains.kotlin.backend.konan.descriptors.needsInlining
import org.jetbrains.kotlin.backend.konan.descriptors.resolveFakeOverride import org.jetbrains.kotlin.backend.konan.descriptors.resolveFakeOverride
import org.jetbrains.kotlin.backend.konan.ir.KonanIrReturnableBlockImpl
import org.jetbrains.kotlin.backend.konan.irasdescriptors.constructedClass import org.jetbrains.kotlin.backend.konan.irasdescriptors.constructedClass
import org.jetbrains.kotlin.backend.konan.irasdescriptors.file import org.jetbrains.kotlin.backend.konan.irasdescriptors.file
import org.jetbrains.kotlin.backend.konan.irasdescriptors.isInlineParameter import org.jetbrains.kotlin.backend.konan.irasdescriptors.isInlineParameter
@@ -34,6 +33,7 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnableBlockImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl
@@ -118,7 +118,7 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
} }
} }
private fun inlineFunction(callSite: IrCall, callee: IrFunction): KonanIrReturnableBlockImpl { private fun inlineFunction(callSite: IrCall, callee: IrFunction): IrReturnableBlock {
val copiedCallee = copyIrElement.copy(callee) as IrFunction val copiedCallee = copyIrElement.copy(callee) as IrFunction
val evaluationStatements = evaluateArguments(callSite, copiedCallee) val evaluationStatements = evaluateArguments(callSite, copiedCallee)
@@ -161,14 +161,14 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
val isCoroutineIntrinsicCall = callSite.descriptor.isBuiltInSuspendCoroutineUninterceptedOrReturn( val isCoroutineIntrinsicCall = callSite.descriptor.isBuiltInSuspendCoroutineUninterceptedOrReturn(
context.config.configuration.languageVersionSettings) context.config.configuration.languageVersionSettings)
return KonanIrReturnableBlockImpl( return IrReturnableBlockImpl(
startOffset = startOffset, startOffset = startOffset,
endOffset = endOffset, endOffset = endOffset,
type = callSite.type, type = callSite.type,
symbol = irReturnableBlockSymbol, symbol = irReturnableBlockSymbol,
origin = if (isCoroutineIntrinsicCall) CoroutineIntrinsicLambdaOrigin else null, origin = if (isCoroutineIntrinsicCall) CoroutineIntrinsicLambdaOrigin else null,
statements = statements, statements = statements,
sourceFile = sourceFile sourceFileSymbol = sourceFile.symbol
).apply { ).apply {
transformChildrenVoid(object : IrElementTransformerVoid() { transformChildrenVoid(object : IrElementTransformerVoid() {
override fun visitReturn(expression: IrReturn): IrExpression { override fun visitReturn(expression: IrReturn): IrExpression {
@@ -402,4 +402,4 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
return evaluationStatements return evaluationStatements
} }
} }
} }
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.backend.konan.descriptors.isInterface
import org.jetbrains.kotlin.backend.konan.ir.IrPrivateClassReferenceImpl import org.jetbrains.kotlin.backend.konan.ir.IrPrivateClassReferenceImpl
import org.jetbrains.kotlin.backend.konan.ir.IrPrivateFunctionCall import org.jetbrains.kotlin.backend.konan.ir.IrPrivateFunctionCall
import org.jetbrains.kotlin.backend.konan.ir.IrPrivateFunctionCallImpl import org.jetbrains.kotlin.backend.konan.ir.IrPrivateFunctionCallImpl
import org.jetbrains.kotlin.backend.konan.ir.KonanIrReturnableBlockImpl
import org.jetbrains.kotlin.backend.konan.irasdescriptors.getErasedTypeClass import org.jetbrains.kotlin.backend.konan.irasdescriptors.getErasedTypeClass
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
@@ -1375,7 +1374,6 @@ internal object Devirtualization {
} }
return when (expression) { return when (expression) {
is IrReturnableBlock -> { is IrReturnableBlock -> {
check(expression is KonanIrReturnableBlockImpl) // TODO: need to obtain IrFile rather than just sourceFileName
val foldedReturnableBlockValues = returnableBlockValues[expression]!!.associate { val foldedReturnableBlockValues = returnableBlockValues[expression]!!.associate {
it to fold(it, coercion, cast, false) it to fold(it, coercion, cast, false)
} }
@@ -1387,14 +1385,14 @@ internal object Devirtualization {
val oldSymbol = expression.symbol val oldSymbol = expression.symbol
val newSymbol = IrReturnableBlockSymbolImpl(expression.descriptor) val newSymbol = IrReturnableBlockSymbolImpl(expression.descriptor)
val transformedReturnableBlock = with(expression) { val transformedReturnableBlock = with(expression) {
KonanIrReturnableBlockImpl( IrReturnableBlockImpl(
startOffset = startOffset, startOffset = startOffset,
endOffset = endOffset, endOffset = endOffset,
type = coercion.type, type = coercion.type,
symbol = newSymbol, symbol = newSymbol,
origin = origin, origin = origin,
statements = statements, statements = statements,
sourceFile = sourceFile) sourceFileSymbol = sourceFileSymbol)
} }
transformedReturnableBlock.transformChildrenVoid(object: IrElementTransformerVoid() { transformedReturnableBlock.transformChildrenVoid(object: IrElementTransformerVoid() {
override fun visitExpression(expression: IrExpression): IrExpression { override fun visitExpression(expression: IrExpression): IrExpression {
+1 -1
View File
@@ -48,7 +48,7 @@ repositories {
dependencies { dependencies {
cli_bc project(path: ':backend.native', configuration: 'cli_bc') cli_bc project(path: ':backend.native', configuration: 'cli_bc')
update_tests (group: 'org', name: 'Kotlin_1330_CompilerAllPlugins', version: testKotlinVersion) { update_tests (group: 'org', name: 'Kotlin_dev_CompilerAllPlugins', version: testKotlinVersion) {
artifact { artifact {
name = 'internal/kotlin-test-data' name = 'internal/kotlin-test-data'
type = 'zip' type = 'zip'
+3 -3
View File
@@ -18,9 +18,9 @@
buildKotlinVersion=1.3.30-dev-1945 buildKotlinVersion=1.3.30-dev-1945
buildKotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.30-dev-1945,pinned:true/artifacts/content/maven buildKotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.30-dev-1945,pinned:true/artifacts/content/maven
remoteRoot=konan_tests remoteRoot=konan_tests
kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_1330_CompilerAllPlugins),number:1.3.30-eap-8,branch:default:true,pinned:true/artifacts/content/maven kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.30-dev-2076,branch:default:true,pinned:true/artifacts/content/maven
kotlinVersion=1.3.30-eap-8 kotlinVersion=1.3.30-dev-2076
testKotlinVersion=1.3.30-eap-8 testKotlinVersion=1.3.30-dev-2076
konanVersion=1.2.0 konanVersion=1.2.0
org.gradle.jvmargs='-Dfile.encoding=UTF-8' org.gradle.jvmargs='-Dfile.encoding=UTF-8'
org.gradle.workers.max=4 org.gradle.workers.max=4