JVM IR: optimize comparison with FQ name of kotlin.Result
This commit is contained in:
committed by
Space Team
parent
70f48db226
commit
f1886f8219
+1
-1
@@ -795,7 +795,7 @@ class ExpressionCodegen(
|
||||
get() = parent.let { parent ->
|
||||
val isBoxedResult = this is IrValueParameter && parent is IrSimpleFunction &&
|
||||
parent.dispatchReceiverParameter != this &&
|
||||
(parent.parent as? IrClass)?.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME &&
|
||||
(parent.parent as? IrClass)?.isClassWithFqName(StandardNames.RESULT_FQ_NAME) != true &&
|
||||
parent.resultIsActuallyAny(index) == true
|
||||
return if (isBoxedResult) context.irBuiltIns.anyNType else type
|
||||
}
|
||||
|
||||
+1
-1
@@ -371,7 +371,7 @@ internal class JvmInlineClassLowering(
|
||||
get() {
|
||||
if (!isSingleFieldValueClass) return false
|
||||
// Before version 1.4, we cannot rely on the Result.equals-impl0 method
|
||||
return fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME ||
|
||||
return !isClassWithFqName(StandardNames.RESULT_FQ_NAME) ||
|
||||
context.state.languageVersionSettings.apiVersion >= ApiVersion.KOTLIN_1_4
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ object InlineClassAbi {
|
||||
|
||||
fun IrType.getRequiresMangling(includeInline: Boolean = true, includeMFVC: Boolean = true): Boolean {
|
||||
val irClass = erasedUpperBound
|
||||
return irClass.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME && when {
|
||||
return !irClass.isClassWithFqName(StandardNames.RESULT_FQ_NAME) && when {
|
||||
irClass.isSingleFieldValueClass -> includeInline
|
||||
irClass.isMultiFieldValueClass -> includeMFVC
|
||||
else -> false
|
||||
|
||||
@@ -80,6 +80,9 @@ private fun IrClass.hasFqNameEqualToSignature(signature: IdSignature.CommonSigna
|
||||
fun IrClassifierSymbol.isClassWithFqName(fqName: FqNameUnsafe): Boolean =
|
||||
this is IrClassSymbol && classFqNameEquals(this, fqName)
|
||||
|
||||
fun IrClass.isClassWithFqName(fqName: FqName): Boolean =
|
||||
classFqNameEquals(this, fqName)
|
||||
|
||||
private fun classFqNameEquals(symbol: IrClassSymbol, fqName: FqNameUnsafe): Boolean {
|
||||
assert(symbol.isBound)
|
||||
return classFqNameEquals(symbol.owner, fqName)
|
||||
@@ -107,7 +110,10 @@ val primitiveArrayTypesSignatures: Map<PrimitiveType, IdSignature.CommonSignatur
|
||||
}
|
||||
|
||||
private fun classFqNameEquals(declaration: IrClass, fqName: FqNameUnsafe): Boolean =
|
||||
declaration.hasEqualFqName(fqName.toSafe())
|
||||
classFqNameEquals(declaration, fqName.toSafe())
|
||||
|
||||
private fun classFqNameEquals(declaration: IrClass, fqName: FqName): Boolean =
|
||||
declaration.hasEqualFqName(fqName)
|
||||
|
||||
fun IrType.isAny(): Boolean = isNotNullClassType(IdSignatureValues.any)
|
||||
fun IrType.isNullableAny(): Boolean = isNullableClassType(IdSignatureValues.any)
|
||||
|
||||
Reference in New Issue
Block a user