[IR] Correct work of the new MFVC lowering classes

#KT-1179
This commit is contained in:
Evgeniy.Zhelenskiy
2022-10-01 03:56:29 +02:00
committed by teamcity
parent 8ba20bee5b
commit 6f94af80ab
36 changed files with 4411 additions and 2968 deletions
@@ -41,28 +41,27 @@ fun functionWithoutBoxes(x: D, y: D) {
// 2 public final static constructor-impl\(IILjava/lang/String;\)V
// 2 INVOKESTATIC D.constructor-impl \(IILjava/lang/String;\)V
// 2 INVOKESTATIC C.constructor-impl \(IILjava/lang/String;\)V
// 1 public final getX\(\)LC;
// 1 public final getX\$x\(\)I
// 1 public final getX\$y-\w*\(\)I
// 1 public final getX\$z\(\)Ljava/lang/String;
// 1 public final static getX-impl\(.+\)LC;
// 1 public final synthetic unbox-impl-0-0\(\)I
// 1 public final synthetic unbox-impl-0-1\(\)I
// 1 public final synthetic unbox-impl-0-2\(\)Ljava/lang/String;
// 2 private synthetic <init>\(IILjava/lang/String;\)V
// 1 public final static synthetic box-impl\(IILjava/lang/String;\)LD;
// 1 public final static synthetic box-impl\(IILjava/lang/String;\)LC;
// 2 public final synthetic unbox-impl0\(\)I
// 2 public final synthetic unbox-impl1\(\)I
// 2 public final synthetic unbox-impl2\(\)Ljava/lang/String;
// 1 private I x\$x
// 1 private I x\$y
// 1 private Ljava/lang/String; x\$z
// 0 private LC; x
// 3 private I x
// 1 private I y
// 1 private Ljava/lang/String; z
// 1 public final synthetic unbox-impl-0\(\)I
// 1 public final synthetic unbox-impl-1\(\)I
// 1 public final synthetic unbox-impl-2\(\)Ljava/lang/String;
// 1 private final I field-0-0\n
// 1 private final I field-0-1\n
// 1 private final Ljava/lang/String; field-0-2\n
// 0 private final LC; (field.*)x\n
// 1 private final I x\n
// 1 private final I field-0\n
// 1 private final I field-1\n
// 1 private final Ljava/lang/String; field-2\n
// 1 INVOKESPECIAL C.<init> \(IILjava/lang/String;\)V
// 1 INVOKESPECIAL D.<init> \(IILjava/lang/String;\)V
// 1 INVOKESTATIC D.box-impl \(IILjava/lang/String;\)LD;
// 1 INVOKESTATIC D.box-impl \(IILjava/lang/String;\)LD;\n ARETURN
// 1 INVOKESTATIC C.box-impl \(IILjava/lang/String;\)LC;
// 1 INVOKESTATIC C.box-impl \(IILjava/lang/String;\)LC;\n ARETURN
// 2 INVOKESTATIC C.box-impl \(IILjava/lang/String;\)LC;
// 1 public final static functionWithoutBoxes-GPBa7dw\(IILjava/lang/String;IILjava/lang/String;\)V
// 0 functionWithoutBoxes.*(\n {3}.*)*(\n {4}(NEW [ABCD]|.*(box|[ABCD]\.<init>|LA;|LB;|LC;|LD;)))
@@ -62,12 +62,10 @@ fun reassignField(x: DPoint, box: Box) {
// 1 107(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}108
// 0 107(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}108
// 0 108(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){1}109
// 1 109(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}110
// 0 109(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}110
// 0 109(\D|\d\D|\d\d\D)*([DA]STORE(\D|\d\D|\d\d\D)*){1}110
// 1 110(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}111
// 0 110(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}111
// 0 111(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){1}112
// 1 112(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}113
// 0 112(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}113
// 1 113(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}114
// 0 113(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}114
// 0 112(\D|\d\D|\d\d\D)*([DA]STORE(\D|\d\D|\d\d\D)*){1}113
// 1 113(\D|\d\D|\d\d\D)*(ASTORE(\D|\d\D|\d\d\D)*){1}114
// 0 113(\D|\d\D|\d\d\D)*(ASTORE(\D|\d\D|\d\d\D)*){2}114
@@ -13,18 +13,43 @@ fun DPoint.toObject() = this as Any
fun DPoint.toDPointOrNull() = this as DPoint?
fun Nothing?.toDPointOrNull() = this as DPoint?
fun equalsChecks(left: DPoint, right: DPoint) {
// separate to escape from StackOverflow in regex
fun equalsChecks1(left: DPoint, right: DPoint) {
require(100, left == right)
}
fun equalsChecks2(left: DPoint, right: DPoint) {
require(101, left.toObject() == right)
}
fun equalsChecks3(left: DPoint, right: DPoint) {
require(102, left == right.toObject())
}
fun equalsChecks4(left: DPoint, right: DPoint) {
require(103, left.toObject() == right.toObject())
}
fun equalsChecks5(left: DPoint, right: DPoint) {
require(104, null == right)
}
fun equalsChecks6(left: DPoint, right: DPoint) {
require(105, left == null)
}
fun equalsChecks7(left: DPoint, right: DPoint) {
require(106, null as Any? == right)
}
fun equalsChecks8(left: DPoint, right: DPoint) {
require(107, left == null as Any?)
}
fun equalsChecks9(left: DPoint, right: DPoint) {
require(108, null.toDPointOrNull() == right)
}
fun equalsChecks10(left: DPoint, right: DPoint) {
require(109, left == null.toDPointOrNull())
}
fun equalsChecks11(left: DPoint, right: DPoint) {
require(110, left.toDPointOrNull() == right)
}
fun equalsChecks12(left: DPoint, right: DPoint) {
require(111, left == right.toDPointOrNull())
}
@@ -36,7 +61,7 @@ fun equalsChecks(left: DPoint, right: DPoint) {
// 1 BIPUSH 105\n {4}DLOAD 0\n {4}DLOAD 2\n {4}ACONST_NULL\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 106\n {4}ACONST_NULL\n {4}DLOAD 4\n {4}DLOAD 6\n {4}.*box.*\n {4}INVOKESTATIC .*Intrinsics.areEqual.*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 107\n {4}DLOAD 0\n {4}DLOAD 2\n {4}ACONST_NULL\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 108\n {4}ACONST_NULL\n {4}.*toDPointOrNull.*\n {4}DUP\n {4}IFNONNULL.*(\n {3}([^b\n]|b[^o\n]|bo[^x\n]|box-impl\d)*)*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 108\n {4}ACONST_NULL\n {4}.*toDPointOrNull.*\n {4}ASTORE.*\n {4}ALOAD.*\n {4}DUP\n {4}IFNONNULL.*(\n {3}([^b\n]|b[^o\n]|bo[^x\n]|box-impl-\d)+)*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 109\n {4}DLOAD 0\n {4}DLOAD 2\n {4}ACONST_NULL\n {4}.*toDPointOrNull.*\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 110\n {4}DLOAD 0\n {4}DLOAD 2\n {4}.*toDPointOrNull.*\n {4}DUP\n {4}IFNONNULL.*(\n {3}([^b\n]|b[^o\n]|bo[^x\n]|box-impl\d)*)*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 110\n {4}DLOAD 0\n {4}DLOAD 2\n {4}.*toDPointOrNull.*\n {4}ASTORE.*\n {4}ALOAD.*\n {4}DUP\n {4}IFNONNULL.*(\n {3}([^b\n]|b[^o\n]|bo[^x\n]|box-impl-\d)+)*\n {4}INVOKESTATIC .*require
// 1 BIPUSH 111\n {4}DLOAD 0\n {4}DLOAD 2\n {4}DLOAD 4\n {4}DLOAD 6\n {4}.*toDPointOrNull.*\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
@@ -74,20 +74,20 @@ fun trySetSegment(segment: DSegment) {
// 0 public final getOpposite\(\)LDPoint;
// 1 public final static getOpposite-impl\(DD\)LDPoint;
// 1 private D p1\$x
// 1 private D p1\$y
// 1 private D p1-0
// 1 private D p1-1
// 0 private DPoint; p1
// 1 private D p2\$x
// 1 private D p2\$y
// 1 private D p2-0
// 1 private D p2-1
// 0 private DPoint; p2
// 1 private D point1WithBackingFieldAndDefaultGetter\$x
// 1 private D point1WithBackingFieldAndDefaultGetter\$y
// 1 private D point1WithBackingFieldAndDefaultGetter-0
// 1 private D point1WithBackingFieldAndDefaultGetter-1
// 0 private DPoint; point1WithBackingFieldAndDefaultGetter
// 1 private D point2WithBackingFieldAndDefaultGetter\$x
// 1 private D point2WithBackingFieldAndDefaultGetter\$y
// 1 private D point2WithBackingFieldAndDefaultGetter-0
// 1 private D point2WithBackingFieldAndDefaultGetter-1
// 0 private DPoint; point2WithBackingFieldAndDefaultGetter
// 1 private D pointWithBackingFieldAndCustomGetter\$x
// 1 private D pointWithBackingFieldAndCustomGetter\$y
// 1 private D pointWithBackingFieldAndCustomGetter-0
// 1 private D pointWithBackingFieldAndCustomGetter-1
// 0 private DPoint; pointWithBackingFieldAndCustomGetter
// 0 private DPoint; notImplemented
// 0 private D notImplemented
@@ -108,22 +108,22 @@ fun trySetSegment(segment: DSegment) {
// 1 public final setPoint2WithBackingFieldAndDefaultGetter-sUp7gFk\(DD\)V
// 1 public final getPointWithBackingFieldAndCustomGetter\(\)LDPoint;
// 1 public final setPointWithBackingFieldAndCustomGetter-sUp7gFk\(DD\)V
// 1 public final getP1\$x\(\)D
// 1 public final getP1\$y\(\)D
// 1 public final getP2\$x\(\)D
// 1 public final getP2\$y\(\)D
// 1 public final getPoint1WithBackingFieldAndDefaultGetter\$x\(\)D
// 1 public final getPoint1WithBackingFieldAndDefaultGetter\$y\(\)D
// 1 public final getPoint2WithBackingFieldAndDefaultGetter\$x\(\)D
// 1 public final getPoint2WithBackingFieldAndDefaultGetter\$y\(\)D
// 1 public final synthetic getP1-0\(\)D
// 1 public final synthetic getP1-1\(\)D
// 1 public final synthetic getP2-0\(\)D
// 1 public final synthetic getP2-1\(\)D
// 1 public final synthetic getPoint1WithBackingFieldAndDefaultGetter-0\(\)D
// 1 public final synthetic getPoint1WithBackingFieldAndDefaultGetter-1\(\)D
// 1 public final synthetic getPoint2WithBackingFieldAndDefaultGetter-0\(\)D
// 1 public final synthetic getPoint2WithBackingFieldAndDefaultGetter-1\(\)D
// 0 public final getCenter\$
// 0 public final getNotImplemented\$
// 0 public final getPointWithBackingFieldAndCustomGetter\$
// 0 ^ {2}\b.*get.*\$.*(\n {3}.*)*(\n {4}.*\.box)
// 1 tryGetSegment\(LDSegment;\)V
// 0 try[GS]etSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}.*\.box)
// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}.*LDPoint;)){13}
// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}.*LDPoint;)){14}
// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}.*LDPoint;)){7}
// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}.*LDPoint;)){8}
// 0 trySetSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}.*LDPoint;)
// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setNotImplemented-sUp7gFk \(DD\)V)){1}
// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setNotImplemented-sUp7gFk \(DD\)V)){2}
@@ -137,13 +137,8 @@ fun trySetSegment(segment: DSegment) {
// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setP1-sUp7gFk \(DD\)V)){2}
// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setP2-sUp7gFk \(DD\)V)){1}
// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setP2-sUp7gFk \(DD\)V)){2}
// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.getX \(\)D)){3}
// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.getX \(\)D)){4}
// 0 trySetSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.getX \(\)D)
// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.getY \(\)D)){3}
// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.getY \(\)D)){4}
// 0 trySetSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.getY \(\)D)
// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*\$[xy] \(\)D)){8}
// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*\$[xy] \(\)D)){9}
// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*\$[xy] \(\)D)){12}
// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*\$[xy] \(\)D)){13}
// 0 try[GS]etSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.get[XY] \(\)D)
// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){14}
// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){15}
// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){12}
// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){13}