From a648b9676c52c055b9109c5e039268731b4fac45 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Mon, 29 Jan 2018 19:02:12 +0300 Subject: [PATCH] Fixes in IR lowerings: DeepCopyIrTree: typo fix. Default arguments: made proper overridden descriptor selection. Local declarations: made proper determination whether a function is locally defined. --- ...escriptoros.kt => DeepCopyIrTreeWithDescriptors.kt} | 0 .../common/lower/DefaultArgumentStubGenerator.kt | 10 +++++----- .../backend/common/lower/LocalDeclarationsLowering.kt | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) rename compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/{DeepCopyIrTreeWithDescriptoros.kt => DeepCopyIrTreeWithDescriptors.kt} (100%) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptors.kt similarity index 100% rename from compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptoros.kt rename to compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/DeepCopyIrTreeWithDescriptors.kt diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt index 0ec55b58ffd..33ed65ee112 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt @@ -108,7 +108,7 @@ open class DefaultArgumentStubGenerator constructor(val context: CommonBackendCo val expressionBody = getDefaultParameterExpressionBody(irFunction, valueParameter) /* Use previously calculated values in next expression. */ - expressionBody.transformChildrenVoid(object:IrElementTransformerVoid() { + expressionBody.transformChildrenVoid(object: IrElementTransformerVoid() { override fun visitGetValue(expression: IrGetValue): IrExpression { log { "GetValue: ${expression.descriptor}" } val valueSymbol = variables[expression.descriptor] ?: return expression @@ -200,7 +200,7 @@ private fun Scope.createTemporaryVariable(symbol: IrVariableSymbol, initializer: this.initializer = initializer } -private fun getDefaultParameterExpressionBody(irFunction: IrFunction, valueParameter: ValueParameterDescriptor):IrExpressionBody { +private fun getDefaultParameterExpressionBody(irFunction: IrFunction, valueParameter: ValueParameterDescriptor): IrExpressionBody { return irFunction.getDefault(valueParameter) ?: TODO("FIXME!!!") } @@ -292,14 +292,14 @@ class DefaultParameterInjector constructor(val context: CommonBackendContext): B private fun parametersForCall(expression: IrMemberAccessExpression): Pair>> { val descriptor = expression.descriptor as FunctionDescriptor val keyDescriptor = if (DescriptorUtils.isOverride(descriptor)) - DescriptorUtils.getAllOverriddenDescriptors(descriptor).first() + DescriptorUtils.getAllOverriddenDescriptors(descriptor).first { it.needsDefaultArgumentsLowering } else descriptor.original val realFunction = keyDescriptor.generateDefaultsFunction(context) val realDescriptor = realFunction.descriptor log { "$descriptor -> $realDescriptor" } - val maskValues = Array((descriptor.valueParameters.size + 31) / 32, {0}) + val maskValues = Array((descriptor.valueParameters.size + 31) / 32, { 0 }) val params = mutableListOf>() params.addAll(descriptor.valueParameters.mapIndexed { i, _ -> val valueArgument = expression.getValueArgument(i) @@ -447,7 +447,7 @@ private fun FunctionDescriptor.generateDefaultsFunction(context: CommonBackendCo object DECLARATION_ORIGIN_FUNCTION_FOR_DEFAULT_PARAMETER : IrDeclarationOriginImpl("DEFAULT_PARAMETER_EXTENT") -private fun valueParameter(descriptor: FunctionDescriptor, index: Int, name: Name, type: KotlinType):ValueParameterDescriptor { +private fun valueParameter(descriptor: FunctionDescriptor, index: Int, name: Name, type: KotlinType): ValueParameterDescriptor { return ValueParameterDescriptorImpl( containingDeclaration = descriptor, original = null, diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index b257971a6a4..930d7951600 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -682,7 +682,7 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid element.acceptChildrenVoid(this) } - private fun DeclarationDescriptor.declaredInFunction() = when (this.containingDeclaration) { + private fun ClassDescriptor.declaredInFunction() = when (this.containingDeclaration) { is CallableDescriptor -> true is ClassDescriptor -> false is PackageFragmentDescriptor -> false @@ -694,7 +694,7 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid val descriptor = declaration.descriptor - if (descriptor.declaredInFunction()) { + if (descriptor.visibility == Visibilities.LOCAL) { val localFunctionContext = LocalFunctionContext(declaration) localFunctions[descriptor] = localFunctionContext @@ -710,7 +710,7 @@ class LocalDeclarationsLowering(val context: BackendContext, val localNameProvid declaration.acceptChildrenVoid(this) val descriptor = declaration.descriptor - assert(!descriptor.declaredInFunction()) + assert(descriptor.visibility != Visibilities.LOCAL) if (descriptor.constructedClass.isInner) return