Skip to content

Determistic output from the async macro #203

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 15, 2018
Merged

Conversation

retronym
Copy link
Member

@retronym retronym commented Nov 15, 2018

Eliminates the failures reported by the new testDeterminism task:

Before:

% sbt testDeterminism

[error] java.lang.AssertionError: /Users/jz/code/scala-async/target/scala-2.12/test-classes-baseline/scala/async/neg/LocalClasses0Spec$stateMachine$async$2.class is not equal to /Users/jz/code/scala-async/target/scala-2.12/test-classes/scala/async/neg/LocalClasses0Spec$stateMachine$async$2.class
[error] Use 'last' for the full log.

$ jardiff /Users/jz/code/scala-async/target/scala-2.12/test-classes-baseline /Users/jz/code/scala-async/target/scala-2.12/test-classes
diff --git a/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm b/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm
index f6f7d26..585e1b5 100644
--- a/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm
+++ b/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm
@@ -256,10 +256,10 @@
     PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.state$async : I
     ALOAD 0
     ACONST_NULL
-    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$0 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
+    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$1 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
     ALOAD 0
     ACONST_NULL
-    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$1 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
+    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$0 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
     ALOAD 0
     GETSTATIC scala/runtime/BoxedUnit.UNIT : Lscala/runtime/BoxedUnit;
     PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.match$async$1 : Ljava/lang/Object;
diff --git a/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm b/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm
index caa05ea..fac9cd9 100644
--- a/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm
+++ b/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm
@@ -88,7 +88,7 @@
    L3
     ALOAD 0
     ICONST_0
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
     LDC ""
     INVOKEVIRTUAL java/lang/String.isEmpty ()Z
     IFEQ L17
@@ -123,7 +123,7 @@
     ALOAD 0
     ALOAD 0
     GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.await$async$0 : I
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
     GOTO L1
    L7
     ALOAD 0
@@ -135,7 +135,7 @@
     ATHROW
    L8
     ALOAD 0
-    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
+    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
     ISTORE 5
     ALOAD 0
     BIPUSH 6
@@ -151,7 +151,7 @@
    L10
     ALOAD 0
     ICONST_0
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
     ALOAD 0
     GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.await$async$1 : I
     ISTORE 6
@@ -216,7 +216,7 @@
     GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.y$async$1 : I
     ILOAD 10
     IMUL
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
     GOTO L1
    L15
     ALOAD 0
@@ -224,7 +224,7 @@
     NEW scala/util/Success
     DUP
     ALOAD 0
-    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
+    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
     INVOKESTATIC scala/runtime/BoxesRunTime.boxToInteger (I)Ljava/lang/Integer;
     INVOKESPECIAL scala/util/Success.<init> (Ljava/lang/Object;)V
     INVOKEVIRTUAL scala/util/Success.get ()Ljava/lang/Object;
diff --git a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm
index 642ac1b..d637739 100644
--- a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm
+++ b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm
@@ -219,6 +219,9 @@
     ICONST_5
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.state$async : I
     ALOAD 0
+    ACONST_NULL
+    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.await$async$0 : Lscala/None$;
+    ALOAD 0
     NEW scala/async/run/toughtype/ParamWrapper
     DUP
     ACONST_NULL
@@ -234,9 +237,6 @@
     CHECKCAST java/lang/String
    L23
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.valueHolder$async$1 : Ljava/lang/String;
-    ALOAD 0
-    ACONST_NULL
-    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.await$async$0 : Lscala/None$;
     ALOAD 0
     GETSTATIC scala/None$.MODULE$ : Lscala/None$;
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.match$async$0 : Lscala/None$;
diff --git a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm
index 5c15112..0b81dba 100644
--- a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm
+++ b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm
@@ -216,9 +216,6 @@
     ICONST_5
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.state$async : I
     ALOAD 0
-    ACONST_NULL
-    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.await$async$0 : Lscala/None$;
-    ALOAD 0
     NEW scala/async/run/toughtype/PrivateWrapper
     DUP
     ACONST_NULL
@@ -234,6 +231,9 @@
    L23
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.valueHolder$async$1 : Ljava/lang/String;
     ALOAD 0
+    ACONST_NULL
+    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.await$async$0 : Lscala/None$;
+    ALOAD 0
     GETSTATIC scala/None$.MODULE$ : Lscala/None$;
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.match$async$0 : Lscala/None$;
     GOTO L1

After:

$ for i in {1..10}; do sbt testDeterminism || break; done
...
<NO ERRORS>

@retronym retronym force-pushed the topic/rt branch 2 times, most recently from 861f11c to d84ab50 Compare November 15, 2018 04:18
Eliminates the failures reported by the new `testDeterminism` task:

Before:
```
% sbt testDeterminism

[error] java.lang.AssertionError: /Users/jz/code/scala-async/target/scala-2.12/test-classes-baseline/scala/async/neg/LocalClasses0Spec$stateMachine$async$2.class is not equal to /Users/jz/code/scala-async/target/scala-2.12/test-classes/scala/async/neg/LocalClasses0Spec$stateMachine$async$2.class
[error] Use 'last' for the full log.

$ jardiff /Users/jz/code/scala-async/target/scala-2.12/test-classes-baseline /Users/jz/code/scala-async/target/scala-2.12/test-classes
diff --git a/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm b/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm
index f6f7d26..585e1b5 100644
--- a/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm
+++ b/scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.class.asm
@@ -256,10 +256,10 @@
     PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.state$async : I
     ALOAD 0
     ACONST_NULL
-    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$0 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
+    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$1 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
     ALOAD 0
     ACONST_NULL
-    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$1 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
+    PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.await$async$0 : Lscala/async/run/ifelse4/TestIfElse4Class$S;
     ALOAD 0
     GETSTATIC scala/runtime/BoxedUnit.UNIT : Lscala/runtime/BoxedUnit;
     PUTFIELD scala/async/run/ifelse4/TestIfElse4Class$stateMachine$async$1.match$async$1 : Ljava/lang/Object;
diff --git a/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm b/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm
index caa05ea..fac9cd9 100644
--- a/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm
+++ b/scala/async/run/match0/MatchSpec$stateMachine$async$5.class.asm
@@ -88,7 +88,7 @@
    L3
     ALOAD 0
     ICONST_0
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
     LDC ""
     INVOKEVIRTUAL java/lang/String.isEmpty ()Z
     IFEQ L17
@@ -123,7 +123,7 @@
     ALOAD 0
     ALOAD 0
     GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.await$async$0 : I
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
     GOTO L1
    L7
     ALOAD 0
@@ -135,7 +135,7 @@
     ATHROW
    L8
     ALOAD 0
-    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
+    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
     ISTORE 5
     ALOAD 0
     BIPUSH 6
@@ -151,7 +151,7 @@
    L10
     ALOAD 0
     ICONST_0
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
     ALOAD 0
     GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.await$async$1 : I
     ISTORE 6
@@ -216,7 +216,7 @@
     GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.y$async$1 : I
     ILOAD 10
     IMUL
-    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
+    PUTFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
     GOTO L1
    L15
     ALOAD 0
@@ -224,7 +224,7 @@
     NEW scala/util/Success
     DUP
     ALOAD 0
-    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0 : I
+    GETFIELD scala/async/run/match0/MatchSpec$stateMachine$async$5.match$async$0$async$1 : I
     INVOKESTATIC scala/runtime/BoxesRunTime.boxToInteger (I)Ljava/lang/Integer;
     INVOKESPECIAL scala/util/Success.<init> (Ljava/lang/Object;)V
     INVOKEVIRTUAL scala/util/Success.get ()Ljava/lang/Object;
diff --git a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm
index 642ac1b..d637739 100644
--- a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm
+++ b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.class.asm
@@ -219,6 +219,9 @@
     ICONST_5
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.state$async : I
     ALOAD 0
+    ACONST_NULL
+    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.await$async$0 : Lscala/None$;
+    ALOAD 0
     NEW scala/async/run/toughtype/ParamWrapper
     DUP
     ACONST_NULL
@@ -234,9 +237,6 @@
     CHECKCAST java/lang/String
    L23
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.valueHolder$async$1 : Ljava/lang/String;
-    ALOAD 0
-    ACONST_NULL
-    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.await$async$0 : Lscala/None$;
     ALOAD 0
     GETSTATIC scala/None$.MODULE$ : Lscala/None$;
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$17.match$async$0 : Lscala/None$;
diff --git a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm
index 5c15112..0b81dba 100644
--- a/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm
+++ b/scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.class.asm
@@ -216,9 +216,6 @@
     ICONST_5
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.state$async : I
     ALOAD 0
-    ACONST_NULL
-    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.await$async$0 : Lscala/None$;
-    ALOAD 0
     NEW scala/async/run/toughtype/PrivateWrapper
     DUP
     ACONST_NULL
@@ -234,6 +231,9 @@
    L23
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.valueHolder$async$1 : Ljava/lang/String;
     ALOAD 0
+    ACONST_NULL
+    PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.await$async$0 : Lscala/None$;
+    ALOAD 0
     GETSTATIC scala/None$.MODULE$ : Lscala/None$;
     PUTFIELD scala/async/run/toughtype/ToughTypeSpec$stateMachine$async$18.match$async$0 : Lscala/None$;
     GOTO L1
```

After:

```
$ for i in {1..10}; do sbt testDeterminism || break; done
...
<NO ERRORS>
```
@retronym
Copy link
Member Author

/cc @rorygraves @mkeskells

@adriaanm adriaanm self-assigned this Nov 15, 2018
@adriaanm adriaanm self-requested a review November 15, 2018 09:57
@adriaanm adriaanm merged commit 7857e41 into scala:master Nov 15, 2018
@retronym retronym added this to the 0.10 milestone Apr 8, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants