master
commit
bc3e79bc94
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,40 @@ |
||||
package pkg; |
||||
|
||||
public final class TestFieldSingleAccess { |
||||
public Integer field; |
||||
|
||||
public final void test() { |
||||
Integer var10000 = this.field; |
||||
if (var10000 != null) { |
||||
System.out.println(var10000); |
||||
} |
||||
|
||||
} |
||||
|
||||
public final void test1() { |
||||
synchronized(this.field) { |
||||
System.out.println('1'); |
||||
} |
||||
} |
||||
} |
||||
|
||||
class 'pkg/TestFieldSingleAccess' { |
||||
method 'test ()V' { |
||||
1 6 |
||||
5 7 |
||||
8 8 |
||||
c 8 |
||||
f 11 |
||||
} |
||||
|
||||
method 'test1 ()V' { |
||||
1 14 |
||||
6 14 |
||||
7 15 |
||||
a 15 |
||||
c 15 |
||||
19 17 |
||||
} |
||||
} |
||||
|
||||
Lines mapping: |
@ -0,0 +1,301 @@ |
||||
import kotlin.Metadata; |
||||
import kotlin.SuccessOrFailure.Failure; |
||||
import kotlin.coroutines.Continuation; |
||||
import kotlin.coroutines.intrinsics.IntrinsicsKt; |
||||
import kotlin.coroutines.jvm.internal.ContinuationImpl; |
||||
import org.jetbrains.annotations.NotNull; |
||||
import org.jetbrains.annotations.Nullable; |
||||
|
||||
@Metadata( |
||||
mv = {1, 1, 11}, |
||||
bv = {1, 0, 2}, |
||||
k = 2, |
||||
xi = 2, |
||||
d1 = {"\u0000\n\n\u0000\n\u0002\u0010\b\n\u0002\b\u0002\u001a\u0011\u0010\u0000\u001a\u00020\u0001H\u0086@ø\u0001\u0000¢\u0006\u0002\u0010\u0002\u001a\u0011\u0010\u0003\u001a\u00020\u0001H\u0086@ø\u0001\u0000¢\u0006\u0002\u0010\u0002\u0082\u0002\u0004\n\u0002\b\u0019"}, |
||||
d2 = {"bar", "", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "foo2"} |
||||
) |
||||
public final class TestNamedSuspendFun2Kt { |
||||
@Nullable |
||||
public static final Object foo2(@NotNull Continuation<? super Integer> var0) { |
||||
@Metadata( |
||||
mv = {1, 1, 11}, |
||||
bv = {1, 0, 2}, |
||||
k = 3, |
||||
xi = 2, |
||||
d1 = {"\u0000\u0010\n\u0000\n\u0002\u0010\u0000\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\b\u0010\u0000\u001a\u0004\u0018\u00010\u00012\f\u0010\u0002\u001a\b\u0012\u0004\u0012\u00020\u00040\u0003H\u0086@ø\u0001\u0000"}, |
||||
d2 = {"foo2", "", "continuation", "Lkotlin/coroutines/Continuation;", ""} |
||||
) |
||||
final class NamelessClass_1 extends ContinuationImpl { |
||||
int label; |
||||
int I$0; |
||||
Object L$0; |
||||
|
||||
@Nullable |
||||
public final Object invokeSuspend(@NotNull Object result) { |
||||
this.data = result; |
||||
this.label |= -2147483648; |
||||
return TestNamedSuspendFun2Kt.foo2(this); |
||||
} |
||||
|
||||
NamelessClass_1(Continuation var1) { |
||||
super(var1); |
||||
} |
||||
} |
||||
|
||||
NamelessClass_1 var3; |
||||
label463: { |
||||
if (var0 instanceof NamelessClass_1) { |
||||
var3 = (NamelessClass_1)var0; |
||||
if ((var3.getLabel() & -2147483648) != 0) { |
||||
var3.setLabel(var3.getLabel() - -2147483648); |
||||
break label463; |
||||
} |
||||
} |
||||
|
||||
var3 = new NamelessClass_1(var0); |
||||
} |
||||
|
||||
Object var4; |
||||
int x; |
||||
label491: { |
||||
Throwable var1; |
||||
Throwable var10000; |
||||
label472: { |
||||
Object var2 = var3.data; |
||||
var4 = IntrinsicsKt.getCOROUTINE_SUSPENDED();// 2 |
||||
boolean var10001; |
||||
Object var22; |
||||
switch(var3.label) { |
||||
case 0: |
||||
if (var2 instanceof Failure) { |
||||
throw ((Failure)var2).exception; |
||||
} |
||||
break; |
||||
case 1: |
||||
try { |
||||
if (var2 instanceof Failure) { |
||||
throw ((Failure)var2).exception; |
||||
} |
||||
|
||||
var22 = var2; |
||||
} catch (Throwable var19) { |
||||
var10000 = var19; |
||||
var10001 = false; |
||||
break label472; |
||||
} |
||||
|
||||
try { |
||||
x = ((Number)var22).intValue();// 6 |
||||
if (x == 0) { |
||||
break label491; |
||||
} |
||||
} catch (Throwable var17) { |
||||
var10000 = var17; |
||||
var10001 = false; |
||||
break label472; |
||||
} |
||||
|
||||
var3.label = 3; |
||||
if (bar(var3) == var4) { |
||||
return var4; |
||||
} |
||||
break; |
||||
case 2: |
||||
x = var3.I$0; |
||||
if (var2 instanceof Failure) { |
||||
throw ((Failure)var2).exception; |
||||
} |
||||
|
||||
return 1;// 11 |
||||
case 3: |
||||
if (var2 instanceof Failure) { |
||||
throw ((Failure)var2).exception; |
||||
} |
||||
break; |
||||
case 4: |
||||
var1 = (Throwable)var3.L$0; |
||||
if (var2 instanceof Failure) { |
||||
throw ((Failure)var2).exception; |
||||
} |
||||
|
||||
throw var1;// 9 |
||||
default: |
||||
throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine"); |
||||
} |
||||
|
||||
do { |
||||
try { |
||||
var3.label = 1;// 5 |
||||
var22 = bar(var3); |
||||
} catch (Throwable var18) { |
||||
var10000 = var18; |
||||
var10001 = false; |
||||
break label472; |
||||
} |
||||
|
||||
if (var22 == var4) { |
||||
return var4; |
||||
} |
||||
|
||||
try { |
||||
x = ((Number)var22).intValue(); |
||||
if (x == 0) { |
||||
break label491; |
||||
} |
||||
} catch (Throwable var20) { |
||||
var10000 = var20; |
||||
var10001 = false; |
||||
break label472; |
||||
} |
||||
|
||||
var3.label = 3; |
||||
} while(bar(var3) != var4); |
||||
|
||||
return var4; |
||||
} |
||||
|
||||
var1 = var10000; |
||||
var3.L$0 = var1; |
||||
var3.label = 4; |
||||
if (bar(var3) == var4) {// 8 |
||||
return var4; |
||||
} |
||||
|
||||
throw var1; |
||||
} |
||||
|
||||
var3.I$0 = x; |
||||
var3.label = 2; |
||||
if (bar(var3) == var4) { |
||||
return var4; |
||||
} else { |
||||
return 1; |
||||
} |
||||
} |
||||
|
||||
@Nullable |
||||
public static final Object bar(@NotNull Continuation<? super Integer> var0) { |
||||
return 0;// 14 |
||||
} |
||||
} |
||||
|
||||
class 'TestNamedSuspendFun2Kt$foo2$1' { |
||||
method 'invokeSuspend (Ljava/lang/Object;)Ljava/lang/Object;' { |
||||
2 34 |
||||
a 35 |
||||
d 35 |
||||
11 36 |
||||
14 36 |
||||
} |
||||
|
||||
method '<init> (Lkotlin/coroutines/Continuation;)V' { |
||||
2 40 |
||||
5 41 |
||||
} |
||||
} |
||||
|
||||
class 'TestNamedSuspendFun2Kt' { |
||||
method 'foo2 (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;' { |
||||
1 46 |
||||
4 46 |
||||
8 47 |
||||
b 47 |
||||
d 48 |
||||
10 48 |
||||
12 48 |
||||
13 48 |
||||
18 49 |
||||
1b 49 |
||||
1d 49 |
||||
1e 49 |
||||
21 50 |
||||
2c 54 |
||||
2e 63 |
||||
31 63 |
||||
32 64 |
||||
35 64 |
||||
38 67 |
||||
3b 67 |
||||
5e 69 |
||||
61 69 |
||||
64 70 |
||||
67 70 |
||||
6a 70 |
||||
6f 127 |
||||
70 127 |
||||
73 128 |
||||
79 135 |
||||
7e 136 |
||||
81 75 |
||||
84 75 |
||||
87 76 |
||||
8a 76 |
||||
8d 76 |
||||
90 87 |
||||
93 87 |
||||
96 87 |
||||
98 88 |
||||
9e 166 |
||||
a2 167 |
||||
a3 167 |
||||
a6 168 |
||||
ac 168 |
||||
b1 169 |
||||
b3 103 |
||||
b6 103 |
||||
b9 104 |
||||
bc 104 |
||||
bf 105 |
||||
c2 105 |
||||
c5 105 |
||||
c9 108 |
||||
ce 97 |
||||
cf 97 |
||||
d2 98 |
||||
d8 98 |
||||
dd 99 |
||||
e0 110 |
||||
e3 110 |
||||
e6 111 |
||||
e9 111 |
||||
ec 111 |
||||
f3 156 |
||||
f7 157 |
||||
fb 158 |
||||
fc 158 |
||||
ff 159 |
||||
105 159 |
||||
10a 160 |
||||
10c 115 |
||||
10f 115 |
||||
112 115 |
||||
115 116 |
||||
118 116 |
||||
11b 117 |
||||
11e 117 |
||||
121 117 |
||||
126 120 |
||||
12a 108 |
||||
12b 108 |
||||
133 122 |
||||
138 122 |
||||
} |
||||
|
||||
method 'bar (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;' { |
||||
0 177 |
||||
1 177 |
||||
4 177 |
||||
} |
||||
} |
||||
|
||||
Lines mapping: |
||||
2 <-> 65 |
||||
5 <-> 128 |
||||
6 <-> 88 |
||||
8 <-> 160 |
||||
9 <-> 121 |
||||
11 <-> 109 |
||||
14 <-> 178 |
||||
Not mapped: |
||||
3 |
||||
4 |
@ -0,0 +1,67 @@ |
||||
/** |
||||
* This code can be assembled with <a href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a> |
||||
* using <code>asmtools jasm -g *.jasm</code> command line. |
||||
*/ |
||||
package pkg; |
||||
|
||||
super public final class TestFieldSingleAccess |
||||
version 52:0 |
||||
{ |
||||
|
||||
public Field field:"Ljava/lang/Integer;"; |
||||
|
||||
public Method "<init>":"()V" |
||||
stack 1 locals 1 |
||||
{ |
||||
aload_0; |
||||
invokespecial Method java/lang/Object."<init>":"()V"; |
||||
return; |
||||
} |
||||
|
||||
public final Method test:"()V" |
||||
stack 2 locals 1 |
||||
{ |
||||
aload_0; |
||||
getfield Field field:"Ljava/lang/Integer;"; |
||||
dup; |
||||
ifnull L17; |
||||
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;"; |
||||
swap; |
||||
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/Object;)V"; |
||||
L17: stack_frame_type same; |
||||
return; |
||||
} |
||||
|
||||
public final Method test1:"()V" |
||||
stack 2 locals 3 |
||||
{ |
||||
aload_0; |
||||
getfield Field field:"Ljava/lang/Integer;"; |
||||
dup; |
||||
astore_1; |
||||
monitorenter; |
||||
try t0; |
||||
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;"; |
||||
bipush 49; |
||||
invokevirtual Method java/io/PrintStream.println:"(C)V"; |
||||
aload_1; |
||||
monitorexit; |
||||
endtry t0; |
||||
goto L25; |
||||
catch t0 #0; |
||||
catch t1 #0; |
||||
try t1; |
||||
stack_frame_type full; |
||||
locals_map class TestFieldSingleAccess, class java/lang/Object; |
||||
stack_map class java/lang/Throwable; |
||||
astore_2; |
||||
aload_1; |
||||
monitorexit; |
||||
endtry t1; |
||||
aload_2; |
||||
athrow; |
||||
L25: stack_frame_type chop1; |
||||
return; |
||||
} |
||||
|
||||
} // end Class TestFieldSingleAccess |
@ -0,0 +1,14 @@ |
||||
|
||||
suspend fun foo2(): Int { |
||||
while (true) { |
||||
try { |
||||
val x = bar() |
||||
if (x == 0) break |
||||
} finally { |
||||
bar() |
||||
} |
||||
} |
||||
return 1 |
||||
} |
||||
|
||||
suspend fun bar(): Int = 0 |
Loading…
Reference in new issue