Add more complex cases to STM tests
diff --git a/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.ir.txt b/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.ir.txt
index b03c34d..1f19c61 100644
--- a/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.ir.txt
+++ b/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.ir.txt
@@ -19,57 +19,57 @@
LDC (<this>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L1)
- LINENUMBER (37)
+ LINENUMBER (43)
ALOAD (0)
GETFIELD ($u, Lkoko/User;)
LABEL (L2)
- LINENUMBER (36)
+ LINENUMBER (42)
ALOAD (1)
LABEL (L3)
- LINENUMBER (37)
+ LINENUMBER (43)
INVOKEVIRTUAL (koko/User, _____get_firstName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
ASTORE (2)
LABEL (L4)
- LINENUMBER (38)
+ LINENUMBER (44)
ALOAD (0)
GETFIELD ($u, Lkoko/User;)
LABEL (L5)
- LINENUMBER (36)
+ LINENUMBER (42)
ALOAD (1)
LABEL (L6)
- LINENUMBER (38)
+ LINENUMBER (44)
ALOAD (0)
GETFIELD ($u, Lkoko/User;)
LABEL (L7)
- LINENUMBER (36)
+ LINENUMBER (42)
ALOAD (1)
LABEL (L8)
- LINENUMBER (38)
+ LINENUMBER (44)
INVOKEVIRTUAL (koko/User, _____get_lastName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
INVOKEVIRTUAL (koko/User, _set_____firstName$_______Sharable____, (Lkotlinx/stm/STMContext;Ljava/lang/String;)V)
LABEL (L9)
- LINENUMBER (39)
+ LINENUMBER (45)
ALOAD (0)
GETFIELD ($u, Lkoko/User;)
LABEL (L10)
- LINENUMBER (36)
+ LINENUMBER (42)
ALOAD (1)
LABEL (L11)
- LINENUMBER (39)
+ LINENUMBER (45)
ALOAD (2)
INVOKEVIRTUAL (koko/User, _set_____lastName$_______Sharable____, (Lkotlinx/stm/STMContext;Ljava/lang/String;)V)
LABEL (L12)
- LINENUMBER (41)
+ LINENUMBER (47)
ALOAD (0)
GETFIELD ($u, Lkoko/User;)
LABEL (L13)
- LINENUMBER (36)
+ LINENUMBER (42)
ALOAD (1)
LABEL (L14)
- LINENUMBER (41)
+ LINENUMBER (47)
INVOKESTATIC (koko/BasicKt, a, (Lkoko/User;Lkotlinx/stm/STMContext;)V)
LABEL (L15)
- LINENUMBER (42)
+ LINENUMBER (48)
RETURN
LABEL (L16)
}
@@ -98,7 +98,7 @@
NEW
DUP
LABEL (L1)
- LINENUMBER (30)
+ LINENUMBER (36)
INVOKESPECIAL (java/lang/StringBuilder, <init>, ()V)
LDC (atomic user is: )
INVOKEVIRTUAL (java/lang/StringBuilder, append, (Ljava/lang/String;)Ljava/lang/StringBuilder;)
@@ -107,17 +107,17 @@
LINENUMBER (1)
ALOAD (1)
LABEL (L3)
- LINENUMBER (30)
+ LINENUMBER (36)
INVOKEVIRTUAL (koko/User, _____get_firstName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
INVOKEVIRTUAL (java/lang/StringBuilder, append, (Ljava/lang/String;)Ljava/lang/StringBuilder;)
- LDC ( )
- INVOKEVIRTUAL (java/lang/StringBuilder, append, (Ljava/lang/String;)Ljava/lang/StringBuilder;)
+ BIPUSH (32)
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (C)Ljava/lang/StringBuilder;)
ALOAD (0)
LABEL (L4)
LINENUMBER (1)
ALOAD (1)
LABEL (L5)
- LINENUMBER (30)
+ LINENUMBER (36)
INVOKEVIRTUAL (koko/User, _____get_lastName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
INVOKEVIRTUAL (java/lang/StringBuilder, append, (Ljava/lang/String;)Ljava/lang/StringBuilder;)
INVOKEVIRTUAL (java/lang/StringBuilder, toString, ()Ljava/lang/String;)
@@ -128,14 +128,14 @@
ALOAD (2)
INVOKEVIRTUAL (java/io/PrintStream, println, (Ljava/lang/Object;)V)
LABEL (L6)
- LINENUMBER (49)
+ LINENUMBER (55)
RETURN
LABEL (L7)
}
public final static void g() {
LABEL (L0)
- LINENUMBER (34)
+ LINENUMBER (40)
NEW
DUP
LDC (Vadim)
@@ -143,7 +143,7 @@
INVOKESPECIAL (koko/User, <init>, (Ljava/lang/String;Ljava/lang/String;)V)
ASTORE (0)
LABEL (L1)
- LINENUMBER (36)
+ LINENUMBER (42)
ACONST_NULL
NEW
DUP
@@ -155,7 +155,7 @@
INVOKESTATIC (kotlinx/stm/STMKt, runAtomically$default, (Lkotlinx/stm/STM;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;)
POP
LABEL (L2)
- LINENUMBER (44)
+ LINENUMBER (50)
ALOAD (0)
ACONST_NULL
INVOKEVIRTUAL (koko/User, _____get_firstName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
@@ -166,27 +166,61 @@
ALOAD (1)
INVOKEVIRTUAL (java/io/PrintStream, println, (Ljava/lang/Object;)V)
LABEL (L3)
- LINENUMBER (45)
+ LINENUMBER (51)
RETURN
LABEL (L4)
}
}
final class koko/User$f$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions/Function1 {
- void <init>() {
+ private final koko.User $this
+
+ void <init>(koko.User $receiver) {
LABEL (L0)
ALOAD (0)
+ ALOAD (1)
+ PUTFIELD ($this, Lkoko/User;)
+ ALOAD (0)
ICONST_1
INVOKESPECIAL (kotlin/jvm/internal/Lambda, <init>, (I)V)
RETURN
LABEL (L1)
}
- public final void invoke(kotlinx.stm.STMContext ctx) {
+ public final java.lang.String invoke(kotlinx.stm.STMContext ctx) {
LABEL (L0)
- LINENUMBER (25)
- RETURN
+ LINENUMBER (23)
+ ALOAD (0)
+ GETFIELD ($this, Lkoko/User;)
+ ALOAD (1)
+ INVOKEVIRTUAL (koko/User, _____get_firstName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
+ INVOKEVIRTUAL (java/lang/String, hashCode, ()I)
+ ISTORE (2)
LABEL (L1)
+ LINENUMBER (24)
+ ALOAD (0)
+ GETFIELD ($this, Lkoko/User;)
+ ALOAD (1)
+ INVOKEVIRTUAL (koko/User, _____get_firstName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
+ INVOKEVIRTUAL (java/lang/String, hashCode, ()I)
+ ISTORE (3)
+ LABEL (L2)
+ NEW
+ DUP
+ LABEL (L3)
+ LINENUMBER (25)
+ INVOKESPECIAL (java/lang/StringBuilder, <init>, ()V)
+ ILOAD (2)
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (I)Ljava/lang/StringBuilder;)
+ BIPUSH (58)
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (C)Ljava/lang/StringBuilder;)
+ ILOAD (3)
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (I)Ljava/lang/StringBuilder;)
+ INVOKEVIRTUAL (java/lang/StringBuilder, toString, ()Ljava/lang/String;)
+ LABEL (L4)
+ LINENUMBER (8)
+ ARETURN
+ LABEL (L5)
}
public java.lang.Object invoke(java.lang.Object p1) {
@@ -194,8 +228,61 @@
ALOAD (0)
ALOAD (1)
CHECKCAST
- INVOKEVIRTUAL (koko/User$f$1, invoke, (Lkotlinx/stm/STMContext;)V)
- GETSTATIC (INSTANCE, Lkotlin/Unit;)
+ INVOKEVIRTUAL (koko/User$f$1, invoke, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
+ ARETURN
+ LABEL (L1)
+ }
+}
+
+final class koko/User$toString$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions/Function1 {
+ private final koko.User $this
+
+ void <init>(koko.User $receiver) {
+ LABEL (L0)
+ ALOAD (0)
+ ALOAD (1)
+ PUTFIELD ($this, Lkoko/User;)
+ ALOAD (0)
+ ICONST_1
+ INVOKESPECIAL (kotlin/jvm/internal/Lambda, <init>, (I)V)
+ RETURN
+ LABEL (L1)
+ }
+
+ public final java.lang.String invoke(kotlinx.stm.STMContext ctx) {
+ LABEL (L0)
+ NEW
+ DUP
+ LABEL (L1)
+ LINENUMBER (29)
+ INVOKESPECIAL (java/lang/StringBuilder, <init>, ()V)
+ LDC (atomic(2) user is: )
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (Ljava/lang/String;)Ljava/lang/StringBuilder;)
+ ALOAD (0)
+ GETFIELD ($this, Lkoko/User;)
+ ALOAD (1)
+ INVOKEVIRTUAL (koko/User, _____get_firstName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (Ljava/lang/String;)Ljava/lang/StringBuilder;)
+ BIPUSH (32)
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (C)Ljava/lang/StringBuilder;)
+ ALOAD (0)
+ GETFIELD ($this, Lkoko/User;)
+ ALOAD (1)
+ INVOKEVIRTUAL (koko/User, _____get_lastName$_______Sharable____, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
+ INVOKEVIRTUAL (java/lang/StringBuilder, append, (Ljava/lang/String;)Ljava/lang/StringBuilder;)
+ INVOKEVIRTUAL (java/lang/StringBuilder, toString, ()Ljava/lang/String;)
+ LABEL (L2)
+ LINENUMBER (8)
+ ARETURN
+ LABEL (L3)
+ }
+
+ public java.lang.Object invoke(java.lang.Object p1) {
+ LABEL (L0)
+ ALOAD (0)
+ ALOAD (1)
+ CHECKCAST
+ INVOKEVIRTUAL (koko/User$toString$1, invoke, (Lkotlinx/stm/STMContext;)Ljava/lang/String;)
ARETURN
LABEL (L1)
}
@@ -293,7 +380,7 @@
ALOAD (2)
INVOKEVIRTUAL (kotlinx/stm/STM, setVar, (Lkotlinx/stm/STMContext;Lkotlinx/stm/UniversalDelegate;Ljava/lang/Object;)V)
LABEL (L2)
- LINENUMBER (25)
+ LINENUMBER (31)
RETURN
LABEL (L3)
}
@@ -313,25 +400,42 @@
ALOAD (2)
INVOKEVIRTUAL (kotlinx/stm/STM, setVar, (Lkotlinx/stm/STMContext;Lkotlinx/stm/UniversalDelegate;Ljava/lang/Object;)V)
LABEL (L2)
- LINENUMBER (25)
+ LINENUMBER (31)
RETURN
LABEL (L3)
}
- public final void f() {
+ public final java.lang.String f() {
LABEL (L0)
LINENUMBER (8)
ALOAD (0)
GETFIELD (_______stm_____, Lkotlinx/stm/STM;)
ACONST_NULL
- CHECKCAST
NEW
DUP
- INVOKESPECIAL (koko/User$f$1, <init>, ()V)
+ ALOAD (0)
+ INVOKESPECIAL (koko/User$f$1, <init>, (Lkoko/User;)V)
CHECKCAST
INVOKEVIRTUAL (kotlinx/stm/STM, runAtomically, (Lkotlinx/stm/STMContext;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;)
- POP
- RETURN
+ CHECKCAST
+ ARETURN
LABEL (L1)
}
-}
\ No newline at end of file
+
+ public java.lang.String toString() {
+ LABEL (L0)
+ LINENUMBER (8)
+ ALOAD (0)
+ GETFIELD (_______stm_____, Lkotlinx/stm/STM;)
+ ACONST_NULL
+ NEW
+ DUP
+ ALOAD (0)
+ INVOKESPECIAL (koko/User$toString$1, <init>, (Lkoko/User;)V)
+ CHECKCAST
+ INVOKEVIRTUAL (kotlinx/stm/STM, runAtomically, (Lkotlinx/stm/STMContext;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;)
+ CHECKCAST
+ ARETURN
+ LABEL (L1)
+ }
+}
diff --git a/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.kt b/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.kt
index f49d6a0..70827aa 100644
--- a/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.kt
+++ b/plugins/kotlin-stm/kotlin-stm-compiler/testData/codegen/Basic.kt
@@ -1,4 +1,4 @@
-// CURIOUS_ABOUT <init>, invoke, g, f, a, _____get_firstName$_______Sharable____, _____get_lastName$_______Sharable____, _set_____firstName$_______Sharable____, _set_____lastName$_______Sharable____
+// CURIOUS_ABOUT <init>, invoke, g, f, a, _____get_firstName$_______Sharable____, _____get_lastName$_______Sharable____, _set_____firstName$_______Sharable____, _set_____lastName$_______Sharable____, toString, hashCode
// WITH_RUNTIME
package koko
@@ -19,8 +19,14 @@
// fun _set_lastName$SHARABLE(ctx: STMContext, newValue: String) { stm.setVar(ctx, lastName$SHARABLE, newValue) }
// fun _get_lastName$SHARABLE(ctx: STMContext): String = stm.getVar(ctx, lastName$SHARABLE)
- fun f() {
- // return this.stm.runAtomically(null) { }
+ fun f(): String /* = runAtomically*/ {
+ val x = firstName.hashCode()
+ val y = firstName.hashCode()
+ return "$x:$y"
+ }
+
+ override fun toString(): String /* = runAtomically*/ {
+ return "atomic(2) user is: $firstName $lastName"
}
}