diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/DefaultArgumentStubGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/DefaultArgumentStubGenerator.kt index 9bf1ad1a211..7a33c680808 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/DefaultArgumentStubGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/DefaultArgumentStubGenerator.kt @@ -58,7 +58,7 @@ class DefaultArgumentStubGenerator internal constructor(val context: Context): D private fun lower(irFunction: IrFunction): List { val functionDescriptor = irFunction.descriptor - if (hasNotDefaultParameters(functionDescriptor)) + if (!functionDescriptor.needsDefaultArgumentsLowering) return irFunction.singletonList() val bodies = functionDescriptor.valueParameters @@ -222,7 +222,7 @@ class DefaultParameterInjector internal constructor(val context: Context): BodyL override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall): IrExpression { super.visitDelegatingConstructorCall(expression) val descriptor = expression.descriptor - if (hasNotDefaultParameters(descriptor)) + if (!descriptor.needsDefaultArgumentsLowering) return expression val argumentsCount = argumentCount(expression) if (argumentsCount == descriptor.valueParameters.size) @@ -246,7 +246,7 @@ class DefaultParameterInjector internal constructor(val context: Context): BodyL super.visitCall(expression) val functionDescriptor = expression.descriptor as FunctionDescriptor - if (hasNotDefaultParameters(functionDescriptor)) + if (!functionDescriptor.needsDefaultArgumentsLowering) return expression val argumentsCount = argumentCount(expression) @@ -326,8 +326,8 @@ class DefaultParameterInjector internal constructor(val context: Context): BodyL private fun log(msg: String) = context.log("DEFAULT-INJECTOR: $msg") } -private fun hasNotDefaultParameters(descriptor: CallableDescriptor) = descriptor.valueParameters.none { it.hasDefaultValue() } - +private val CallableMemberDescriptor.needsDefaultArgumentsLowering + get() = valueParameters.any { it.hasDefaultValue() } && !(this is FunctionDescriptor && isInline) private fun FunctionDescriptor.generateDefaultsDescription(context: Context): FunctionDescriptor { return context.ir.defaultParameterDescriptorsCache.getOrPut(this) { diff --git a/runtime/src/main/kotlin/kotlin/text/Strings.kt b/runtime/src/main/kotlin/kotlin/text/Strings.kt index b913143f903..ee4742a36e7 100644 --- a/runtime/src/main/kotlin/kotlin/text/Strings.kt +++ b/runtime/src/main/kotlin/kotlin/text/Strings.kt @@ -312,8 +312,10 @@ public inline fun String.subSequence(start: Int, end: Int): CharSequence = subSe * @param startIndex the start index (inclusive). * @param endIndex the end index (exclusive). If not specified, the length of the char sequence is used. */ +// TODO: uncomment as soon as inlining works for stdlib. +@Fixme @kotlin.internal.InlineOnly -public inline fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String = subSequence(startIndex, endIndex).toString() +public /*inline*/ fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String = subSequence(startIndex, endIndex).toString() /** * Returns a substring of chars at indices from the specified [range] of this char sequence.