Skip to content

WIP position synthetic async code at the start of the async block, not last expr pos #122

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

Open
wants to merge 1 commit into
base: 2.13.x
Choose a base branch
from

Conversation

retronym
Copy link
Owner

@retronym retronym commented Jul 21, 2022

Before

sbt:root> partest --srcpath async test/async/run/positions.scala
[info] compiling 148 Scala sources to /Users/jz/code/scala/build/quick/classes/library ...
[info] compiling 36 Scala sources to /Users/jz/code/scala/build/quick/classes/reflect ...
[info] compiling 93 Scala sources to /Users/jz/code/scala/build/quick/classes/compiler ...
[info] compiling 1 Scala source to /Users/jz/code/scala/build/quick/classes/specLib ...
[info] compiling 9 Scala sources to /Users/jz/code/scala/build/quick/classes/scalap ...
[info] compiling 7 Scala sources to /Users/jz/code/scala/build/quick/classes/interactive ...
[info] compiling 6 Scala sources to /Users/jz/code/scala/build/quick/classes/testkit ...
[info] compiling 9 Scala sources to /Users/jz/code/scala/build/quick/classes/scaladoc ...
[info] compiling 6 Scala sources to /Users/jz/code/scala/build/quick/classes/repl ...
[info] compiling 4 Scala sources to /Users/jz/code/scala/build/quick/classes/repl-frontend ...
[info] compiling 6 Scala sources to /Users/jz/code/scala/build/quick/classes/partest ...
Partest version:     2.13.9-20220510-134251-a3e918a
Compiler under test: $baseDir/compiler
Scala version is:    Scala compiler version 2.13.9-20220510-134251-a3e918a -- Copyright 2002-2022, LAMP/EPFL and Lightbend, Inc.
Scalac options are:  -Wconf:cat=unchecked&msg=The outer reference in this type test cannot be checked at run time.:s -Wconf:cat=optimizer:is -Wconf:cat=unused-nowarn:s -deprecation -feature -Yvalidate-pos:parser,typer
Compilation Path:    /Users/jz/code/scala/target/test/it-classes:$baseDir/test:$baseDir/compiler:$baseDir/library:$baseDir/reflect:$baseDir/interactive:$baseDir/repl-frontend:$baseDir/repl:$baseDir/scalap:$baseDir/partest:$baseDir/scaladoc:$baseDir/testkit:/Users/jz/code/scala/build/pack/lib/scala-partest-javaagent.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-asm/9.3.0-scala-1/scala-asm-9.3.0-scala-1.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/jline/jline/3.21.0/jline-3.21.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/net/java/dev/jna/jna/5.9.0/jna-5.9.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/googlecode/java-diff-utils/diffutils/1.3.0/diffutils-1.3.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/webjars/jquery/3.6.0/jquery-3.6.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/jz/.sbt/boot/scala-2.12.15/org.scala-sbt/sbt/1.6.2/test-agent-1.6.2.jar:/Users/jz/.sbt/boot/scala-2.12.15/org.scala-sbt/sbt/1.6.2/test-interface-1.0.jar
Java binaries in:    /Users/jz/.jabba/jdk/[email protected]/Contents/Home/bin
Java runtime is:     OpenJDK 64-Bit Server VM (build 11.0.16-beta+3-202205191811, mixed mode)
Java options are:    -Xmx1024M -Xms64M -XX:+IgnoreUnrecognizedVMOptions --add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
baseDir:             /Users/jz/code/scala/build/quick/classes
sourceDir:           /Users/jz/code/scala/test/async

Selected 1 tests drawn from specified tests
# starting 1 test in run
Note: test execution will be non-parallel under -Dpartest.exec.in.process
[[syntax trees at end of                    parser]] // positions.scala
[70:331]package [70:70]<empty> {
  [70:116]import scala.tools.partest.async.OptionAwait._;
  [117:142]import org.junit.Assert._;
  [144:331]object Test extends [156:331][156]scala.AnyRef {
    [156]def <init>() = [156]{
      [NoPosition][NoPosition][NoPosition]super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188][175:180]Array[[181:187]String]): [191:195]Unit = [204:215][204:213]testBasic();
    [223:329]private def testBasic() = [249:329][249:259]optionally([260:329]{
      [266:288]val x = [274:288][274:279]value([280:287][280:284]Some([285:286]1));
      [293:315]val y = [301:315][301:306]value([307:314][307:311]Some([312:313]2));
      [320:325][320:323]x.$plus([324:325]y)
    })
  }
}
[[syntax trees at end of                     typer]] // positions.scala
[70:331]package [70:70]<empty> {
  [70:116]import scala.tools.partest.async.OptionAwait._;
  [117:142]import org.junit.Assert._;
  [144:331]object Test extends [156:331][156]scala.AnyRef {
    [156]def <init>(): [156]Test.type = [156]{
      [156][156][156]Test.super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188]<type: [175:188][175:180]scala.Array[[181:187]<type: [181:187]scala.Predef.String>]>): [164]Unit = [204:215]{
      [204:215][204:213][204]Test.this.testBasic();
      [213]()
    };
    [223:329]private def testBasic(): [235]Option[Int] = <249:329>([260]{
      [260]final class stateMachine$async extends [260][260]_root_.scala.tools.partest.async.OptionStateMachine {
        [260]def <init>(): [260]stateMachine$async = [260]{
          [260][260][260]stateMachine$async.super.<init>();
          [260]()
        };
        [260]override def apply([260]tr$async: [260]<type: [260][260]scala.Option[[260]<type: [260]scala.AnyRef>]>): [260]Unit = [260]{
          [260][260][260]scala.Predef.locally[[260]Int]([260]{
            [270]val x: [270]Int = [279][274][274]scala.tools.partest.async.OptionAwait.value[[274]Int]([284][280][280]scala.Some.apply[[280]Int]([285]1));
            [297]val y: [297]Int = [306][301][301]scala.tools.partest.async.OptionAwait.value[[301]Int]([311][307][307]scala.Some.apply[[307]Int]([312]2));
            [322][322]x.+([324]y)
          });
          [260]()
        }
      };
      [260][260][260][260][260][260][260]new [260]stateMachine$async().start().asInstanceOf[[260]Option[Int]]
    }: <249:329>Option[Int])
  }
}
[[syntax trees at end of                     async]] // positions.scala
[70:331]package [70:70]<empty> {
  [144:331]object Test extends [156:331][156]Object {
    [156]def <init>(): [156]Test.type = [156]{
      [156][156][156]Test.super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188]<type: [175:188][175:180]scala.Array[[181:187]<type: [181:187]scala.Predef.String>]>): [164]Unit = [204:215]{
      [204:215][204:213][204]Test.this.testBasic();
      [213]()
    };
    [223:329]private def testBasic(): [235]Option = <249:329>([260]{
      [260]final class stateMachine$async extends [260][260]scala.tools.partest.async.OptionStateMachine {
        [270]<stable> private[this] var x: [270]Int = _;
        [260]def <init>(): [260]stateMachine$async = [260]{
          [260][260][260]stateMachine$async.super.<init>();
          [260]()
        };
        [260]override def apply([260]tr$async: [260]<type: [260][260]scala.Option[[260]<type: [260]scala.AnyRef>]>): [260]Unit = [322]while$()[322]{
          [322]try {
            [322][322][322][322]stateMachine$async.this.state() match {
              [322]case [322]0 => [322]{
                [279]val awaitable$async: [NoPosition]Some = [284][280][280]new [280]Some([285][NoPosition]scala.Int.box([285]1));
                [279][279]tr$async = [279][279][279]stateMachine$async.this.getCompleted([279]awaitable$async);
                [279][279][279]stateMachine$async.this.state_=([279]1);
                [279]if ([279][279][279]null.!=([279]tr$async))
                  [279][279]while$()
                else
                  [279]{
                    [279][279][279]stateMachine$async.this.onComplete([279]awaitable$async);
                    [279]return [279]()
                  }
              }
              [322]case [322]1 => [322]{
                [279]<synthetic> val await$1: [279]Object = [279]{
                  [279]val tryGetResult$async: [NoPosition]Object = [279][279][279]stateMachine$async.this.tryGet([279]tr$async);
                  [279]if ([279][279][279]stateMachine$async.this.eq([279]tryGetResult$async))
                    [279]return [279]()
                  else
                    [279][279][279]tryGetResult$async.$asInstanceOf[[279]Object]()
                };
                [279][270][270]stateMachine$async.this.x = [279][279]unbox([279]await$1);
                [306]val awaitable$async: [NoPosition]Some = [311][307][307]new [307]Some([312][NoPosition]scala.Int.box([312]2));
                [306][306]tr$async = [306][306][306]stateMachine$async.this.getCompleted([306]awaitable$async);
                [306][306][306]stateMachine$async.this.state_=([306]2);
                [306]if ([306][306][306]null.!=([306]tr$async))
                  [306][306]while$()
                else
                  [306]{
                    [306][306][306]stateMachine$async.this.onComplete([306]awaitable$async);
                    [306]return [306]()
                  }
              }
              [322]case [322]2 => [322]{
                [306]<synthetic> val await$2: [306]Object = [306]{
                  [306]val tryGetResult$async: [NoPosition]Object = [306][306][306]stateMachine$async.this.tryGet([306]tr$async);
                  [306]if ([306][306][306]stateMachine$async.this.eq([306]tryGetResult$async))
                    [306]return [306]()
                  else
                    [306][306][306]tryGetResult$async.$asInstanceOf[[306]Object]()
                };
                [297]val y: [297]Int = [306][306]unbox([306]await$2);
                [322][322][322]stateMachine$async.this.completeSuccess([322][NoPosition]scala.Int.box([322][322][320]stateMachine$async.this.x.+([324]y)));
                [322]return [322]()
              }
              [322]case [322]_ => [322]throw [322][322][322]new [322]IllegalStateException([322][322]java.lang.String.valueOf([322][322][322]stateMachine$async.this.state()))
            }
          } catch {
            [322]case [322](throwable$async @ [322]([322]_: [322]Throwable)) => [322]{
              [322][322][322]stateMachine$async.this.completeFailure([322]throwable$async);
              [322]return [322]()
            }
          };
          [322][322]while$()
        }
      };
      [260][260][260][260][260]new [260]stateMachine$async().start()
    }: <249:329>Option)
  }
}
ok 1 - run/positions.scala

[info] Passed: Total 1, Failed 0, Errors 0, Passed 1
[success] Total time: 38 s, completed 21 Jul. 2022, 11:10:33 am
sbt:root> partest --srcpath async test/async/run/positions.scala
[info] compiling 1 Scala source to /Users/jz/code/scala/build/quick/classes/compiler ...
Partest version:     2.13.9-20220510-134251-a3e918a
Compiler under test: $baseDir/compiler
Scala version is:    Scala compiler version 2.13.9-20220510-134251-a3e918a -- Copyright 2002-2022, LAMP/EPFL and Lightbend, Inc.
Scalac options are:  -Wconf:cat=unchecked&msg=The outer reference in this type test cannot be checked at run time.:s -Wconf:cat=optimizer:is -Wconf:cat=unused-nowarn:s -deprecation -feature -Yvalidate-pos:parser,typer
Compilation Path:    /Users/jz/code/scala/target/test/it-classes:$baseDir/test:$baseDir/compiler:$baseDir/library:$baseDir/reflect:$baseDir/interactive:$baseDir/repl-frontend:$baseDir/repl:$baseDir/scalap:$baseDir/partest:$baseDir/scaladoc:$baseDir/testkit:/Users/jz/code/scala/build/pack/lib/scala-partest-javaagent.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-asm/9.3.0-scala-1/scala-asm-9.3.0-scala-1.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/jline/jline/3.21.0/jline-3.21.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/net/java/dev/jna/jna/5.9.0/jna-5.9.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/googlecode/java-diff-utils/diffutils/1.3.0/diffutils-1.3.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/webjars/jquery/3.6.0/jquery-3.6.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/jz/.sbt/boot/scala-2.12.15/org.scala-sbt/sbt/1.6.2/test-agent-1.6.2.jar:/Users/jz/.sbt/boot/scala-2.12.15/org.scala-sbt/sbt/1.6.2/test-interface-1.0.jar
Java binaries in:    /Users/jz/.jabba/jdk/[email protected]/Contents/Home/bin
Java runtime is:     OpenJDK 64-Bit Server VM (build 11.0.16-beta+3-202205191811, mixed mode)
Java options are:    -Xmx1024M -Xms64M -XX:+IgnoreUnrecognizedVMOptions --add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
baseDir:             /Users/jz/code/scala/build/quick/classes
sourceDir:           /Users/jz/code/scala/test/async

Selected 1 tests drawn from specified tests

# starting 1 test in run
Note: test execution will be non-parallel under -Dpartest.exec.in.process
[[syntax trees at end of                    parser]] // positions.scala
[70:331]package [70:70]<empty> {
  [70:116]import scala.tools.partest.async.OptionAwait._;
  [117:142]import org.junit.Assert._;
  [144:331]object Test extends [156:331][156]scala.AnyRef {
    [156]def <init>() = [156]{
      [NoPosition][NoPosition][NoPosition]super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188][175:180]Array[[181:187]String]): [191:195]Unit = [204:215][204:213]testBasic();
    [223:329]private def testBasic() = [249:329][249:259]optionally([260:329]{
      [266:288]val x = [274:288][274:279]value([280:287][280:284]Some([285:286]1));
      [293:315]val y = [301:315][301:306]value([307:314][307:311]Some([312:313]2));
      [320:325][320:323]x.$plus([324:325]y)
    })
  }
}
[[syntax trees at end of                     typer]] // positions.scala
[70:331]package [70:70]<empty> {
  [70:116]import scala.tools.partest.async.OptionAwait._;
  [117:142]import org.junit.Assert._;
  [144:331]object Test extends [156:331][156]scala.AnyRef {
    [156]def <init>(): [156]Test.type = [156]{
      [156][156][156]Test.super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188]<type: [175:188][175:180]scala.Array[[181:187]<type: [181:187]scala.Predef.String>]>): [164]Unit = [204:215]{
      [204:215][204:213][204]Test.this.testBasic();
      [213]()
    };
    [223:329]private def testBasic(): [235]Option[Int] = <249:329>([260]{
      [260]final class stateMachine$async extends [260][260]_root_.scala.tools.partest.async.OptionStateMachine {
        [260]def <init>(): [260]stateMachine$async = [260]{
          [260][260][260]stateMachine$async.super.<init>();
          [260]()
        };
        [260]override def apply([260]tr$async: [260]<type: [260][260]scala.Option[[260]<type: [260]scala.AnyRef>]>): [260]Unit = [260]{
          [260][260][260]scala.Predef.locally[[260]Int]([260]{
            [270]val x: [270]Int = [279][274][274]scala.tools.partest.async.OptionAwait.value[[274]Int]([284][280][280]scala.Some.apply[[280]Int]([285]1));
            [297]val y: [297]Int = [306][301][301]scala.tools.partest.async.OptionAwait.value[[301]Int]([311][307][307]scala.Some.apply[[307]Int]([312]2));
            [322][322]x.+([324]y)
          });
          [260]()
        }
      };
      [260][260][260][260][260][260][260]new [260]stateMachine$async().start().asInstanceOf[[260]Option[Int]]
    }: <249:329>Option[Int])
  }
}
asyncPos = source-/Users/jz/code/scala/test/async/run/positions.scala,line-11,offset=260
[[syntax trees at end of                     async]] // positions.scala
[70:331]package [70:70]<empty> {
  [144:331]object Test extends [156:331][156]Object {
    [156]def <init>(): [156]Test.type = [156]{
      [156][156][156]Test.super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188]<type: [175:188][175:180]scala.Array[[181:187]<type: [181:187]scala.Predef.String>]>): [164]Unit = [204:215]{
      [204:215][204:213][204]Test.this.testBasic();
      [213]()
    };
    [223:329]private def testBasic(): [235]Option = <249:329>([260]{
      [260]final class stateMachine$async extends [260][260]scala.tools.partest.async.OptionStateMachine {
        [270]<stable> private[this] var x: [270]Int = _;
        [260]def <init>(): [260]stateMachine$async = [260]{
          [260][260][260]stateMachine$async.super.<init>();
          [260]()
        };
        [260]override def apply([260]tr$async: [260]<type: [260][260]scala.Option[[260]<type: [260]scala.AnyRef>]>): [260]Unit = [322]while$()[322]{
          [322]try {
            [322][322][322][322]stateMachine$async.this.state() match {
              [322]case [322]0 => [322]{
                [279]val awaitable$async: [NoPosition]Some = [284][280][280]new [280]Some([285][NoPosition]scala.Int.box([285]1));
                [279][279]tr$async = [279][279][279]stateMachine$async.this.getCompleted([279]awaitable$async);
                [279][279][279]stateMachine$async.this.state_=([279]1);
                [279]if ([279][279][279]null.!=([279]tr$async))
                  [279][279]while$()
                else
                  [279]{
                    [279][279][279]stateMachine$async.this.onComplete([279]awaitable$async);
                    [279]return [279]()
                  }
              }
              [322]case [322]1 => [322]{
                [279]<synthetic> val await$1: [279]Object = [279]{
                  [279]val tryGetResult$async: [NoPosition]Object = [279][279][279]stateMachine$async.this.tryGet([279]tr$async);
                  [279]if ([279][279][279]stateMachine$async.this.eq([279]tryGetResult$async))
                    [279]return [279]()
                  else
                    [279][279][279]tryGetResult$async.$asInstanceOf[[279]Object]()
                };
                [279][270][270]stateMachine$async.this.x = [279][279]unbox([279]await$1);
                [306]val awaitable$async: [NoPosition]Some = [311][307][307]new [307]Some([312][NoPosition]scala.Int.box([312]2));
                [306][306]tr$async = [306][306][306]stateMachine$async.this.getCompleted([306]awaitable$async);
                [306][306][306]stateMachine$async.this.state_=([306]2);
                [306]if ([306][306][306]null.!=([306]tr$async))
                  [306][306]while$()
                else
                  [306]{
                    [306][306][306]stateMachine$async.this.onComplete([306]awaitable$async);
                    [306]return [306]()
                  }
              }
              [322]case [322]2 => [322]{
                [306]<synthetic> val await$2: [306]Object = [306]{
                  [306]val tryGetResult$async: [NoPosition]Object = [306][306][306]stateMachine$async.this.tryGet([306]tr$async);
                  [306]if ([306][306][306]stateMachine$async.this.eq([306]tryGetResult$async))
                    [306]return [306]()
                  else
                    [306][306][306]tryGetResult$async.$asInstanceOf[[306]Object]()
                };
                [297]val y: [297]Int = [306][306]unbox([306]await$2);
                [322][322][322]stateMachine$async.this.completeSuccess([322][NoPosition]scala.Int.box([322][322][320]stateMachine$async.this.x.+([324]y)));
                [322]return [322]()
              }
              [322]case [322]_ => [322]throw [322][322][322]new [322]IllegalStateException([322][322]java.lang.String.valueOf([322][322][322]stateMachine$async.this.state()))
            }
          } catch {
            [322]case [322](throwable$async @ [322]([322]_: [322]Throwable)) => [322]{
              [322][322][322]stateMachine$async.this.completeFailure([322]throwable$async);
              [322]return [322]()
            }
          };
          [322][322]while$()
        }
      };
      [260][260][260][260][260]new [260]stateMachine$async().start()
    }: <249:329>Option)
  }
}
ok 1 - run/positions.scala

After

sbt:root> partest --srcpath async test/async/run/positions.scala
[info] compiling 2 Scala sources to /Users/jz/code/scala/build/quick/classes/compiler ...
[info] compiling 10 Scala sources to /Users/jz/code/scala/build/quick/classes/compiler ...
Partest version:     2.13.9-20220510-134251-a3e918a
Compiler under test: $baseDir/compiler
Scala version is:    Scala compiler version 2.13.9-20220510-134251-a3e918a -- Copyright 2002-2022, LAMP/EPFL and Lightbend, Inc.
Scalac options are:  -Wconf:cat=unchecked&msg=The outer reference in this type test cannot be checked at run time.:s -Wconf:cat=optimizer:is -Wconf:cat=unused-nowarn:s -deprecation -feature -Yvalidate-pos:parser,typer
Compilation Path:    /Users/jz/code/scala/target/test/it-classes:$baseDir/test:$baseDir/compiler:$baseDir/library:$baseDir/reflect:$baseDir/interactive:$baseDir/repl-frontend:$baseDir/repl:$baseDir/scalap:$baseDir/partest:$baseDir/scaladoc:$baseDir/testkit:/Users/jz/code/scala/build/pack/lib/scala-partest-javaagent.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-asm/9.3.0-scala-1/scala-asm-9.3.0-scala-1.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/jline/jline/3.21.0/jline-3.21.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/net/java/dev/jna/jna/5.9.0/jna-5.9.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/googlecode/java-diff-utils/diffutils/1.3.0/diffutils-1.3.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/webjars/jquery/3.6.0/jquery-3.6.0.jar:/Users/jz/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/jz/.sbt/boot/scala-2.12.15/org.scala-sbt/sbt/1.6.2/test-agent-1.6.2.jar:/Users/jz/.sbt/boot/scala-2.12.15/org.scala-sbt/sbt/1.6.2/test-interface-1.0.jar
Java binaries in:    /Users/jz/.jabba/jdk/[email protected]/Contents/Home/bin
Java runtime is:     OpenJDK 64-Bit Server VM (build 11.0.16-beta+3-202205191811, mixed mode)
Java options are:    -Xmx1024M -Xms64M -XX:+IgnoreUnrecognizedVMOptions --add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED
baseDir:             /Users/jz/code/scala/build/quick/classes
sourceDir:           /Users/jz/code/scala/test/async

Selected 1 tests drawn from specified tests
# starting 1 test in run
Note: test execution will be non-parallel under -Dpartest.exec.in.process
[[syntax trees at end of                    parser]] // positions.scala
[70:331]package [70:70]<empty> {
  [70:116]import scala.tools.partest.async.OptionAwait._;
  [117:142]import org.junit.Assert._;
  [144:331]object Test extends [156:331][156]scala.AnyRef {
    [156]def <init>() = [156]{
      [NoPosition][NoPosition][NoPosition]super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188][175:180]Array[[181:187]String]): [191:195]Unit = [204:215][204:213]testBasic();
    [223:329]private def testBasic() = [249:329][249:259]optionally([260:329]{
      [266:288]val x = [274:288][274:279]value([280:287][280:284]Some([285:286]1));
      [293:315]val y = [301:315][301:306]value([307:314][307:311]Some([312:313]2));
      [320:325][320:323]x.$plus([324:325]y)
    })
  }
}
[[syntax trees at end of                     typer]] // positions.scala
[70:331]package [70:70]<empty> {
  [70:116]import scala.tools.partest.async.OptionAwait._;
  [117:142]import org.junit.Assert._;
  [144:331]object Test extends [156:331][156]scala.AnyRef {
    [156]def <init>(): [156]Test.type = [156]{
      [156][156][156]Test.super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188]<type: [175:188][175:180]scala.Array[[181:187]<type: [181:187]scala.Predef.String>]>): [164]Unit = [204:215]{
      [204:215][204:213][204]Test.this.testBasic();
      [213]()
    };
    [223:329]private def testBasic(): [235]Option[Int] = <249:329>([260]{
      [260]final class stateMachine$async extends [260][260]_root_.scala.tools.partest.async.OptionStateMachine {
        [260]def <init>(): [260]stateMachine$async = [260]{
          [260][260][260]stateMachine$async.super.<init>();
          [260]()
        };
        [260]override def apply([260]tr$async: [260]<type: [260][260]scala.Option[[260]<type: [260]scala.AnyRef>]>): [260]Unit = [260]{
          [260][260][260]scala.Predef.locally[[260]Int]([260]{
            [270]val x: [270]Int = [279][274][274]scala.tools.partest.async.OptionAwait.value[[274]Int]([284][280][280]scala.Some.apply[[280]Int]([285]1));
            [297]val y: [297]Int = [306][301][301]scala.tools.partest.async.OptionAwait.value[[301]Int]([311][307][307]scala.Some.apply[[307]Int]([312]2));
            [322][322]x.+([324]y)
          });
          [260]()
        }
      };
      [260][260][260][260][260][260][260]new [260]stateMachine$async().start().asInstanceOf[[260]Option[Int]]
    }: <249:329>Option[Int])
  }
}
asyncPos = source-/Users/jz/code/scala/test/async/run/positions.scala,line-11,offset=260
[[syntax trees at end of                     async]] // positions.scala
[70:331]package [70:70]<empty> {
  [144:331]object Test extends [156:331][156]Object {
    [156]def <init>(): [156]Test.type = [156]{
      [156][156][156]Test.super.<init>();
      [156]()
    };
    [160:219]def main([169:188]args: [175:188]<type: [175:188][175:180]scala.Array[[181:187]<type: [181:187]scala.Predef.String>]>): [164]Unit = [204:215]{
      [204:215][204:213][204]Test.this.testBasic();
      [213]()
    };
    [223:329]private def testBasic(): [235]Option = <249:329>([260]{
      [260]final class stateMachine$async extends [260][260]scala.tools.partest.async.OptionStateMachine {
        [270]<stable> private[this] var x: [270]Int = _;
        [260]def <init>(): [260]stateMachine$async = [260]{
          [260][260][260]stateMachine$async.super.<init>();
          [260]()
        };
        [260]override def apply([260]tr$async: [260]<type: [260][260]scala.Option[[260]<type: [260]scala.AnyRef>]>): [260]Unit = [260]while$()[260]{
          [260]try {
            [260][260][260][260]stateMachine$async.this.state() match {
              [260]case [260]0 => [260]{
                [279]val awaitable$async: [NoPosition]Some = [284][280][280]new [280]Some([285][NoPosition]scala.Int.box([285]1));
                [279][279]tr$async = [279][279][279]stateMachine$async.this.getCompleted([279]awaitable$async);
                [279][279][279]stateMachine$async.this.state_=([279]1);
                [279]if ([279][279][279]null.!=([279]tr$async))
                  [279][279]while$()
                else
                  [279]{
                    [279][279][279]stateMachine$async.this.onComplete([279]awaitable$async);
                    [279]return [279]()
                  }
              }
              [260]case [260]1 => [260]{
                [279]<synthetic> val await$1: [279]Object = [279]{
                  [279]val tryGetResult$async: [NoPosition]Object = [279][279][279]stateMachine$async.this.tryGet([279]tr$async);
                  [279]if ([279][279][279]stateMachine$async.this.eq([279]tryGetResult$async))
                    [279]return [279]()
                  else
                    [279][279][279]tryGetResult$async.$asInstanceOf[[279]Object]()
                };
                [279][270][270]stateMachine$async.this.x = [279][279]unbox([279]await$1);
                [306]val awaitable$async: [NoPosition]Some = [311][307][307]new [307]Some([312][NoPosition]scala.Int.box([312]2));
                [306][306]tr$async = [306][306][306]stateMachine$async.this.getCompleted([306]awaitable$async);
                [306][306][306]stateMachine$async.this.state_=([306]2);
                [306]if ([306][306][306]null.!=([306]tr$async))
                  [306][306]while$()
                else
                  [306]{
                    [306][306][306]stateMachine$async.this.onComplete([306]awaitable$async);
                    [306]return [306]()
                  }
              }
              [260]case [260]2 => [260]{
                [306]<synthetic> val await$2: [306]Object = [306]{
                  [306]val tryGetResult$async: [NoPosition]Object = [306][306][306]stateMachine$async.this.tryGet([306]tr$async);
                  [306]if ([306][306][306]stateMachine$async.this.eq([306]tryGetResult$async))
                    [306]return [306]()
                  else
                    [306][306][306]tryGetResult$async.$asInstanceOf[[306]Object]()
                };
                [297]val y: [297]Int = [306][306]unbox([306]await$2);
                [322][322][322]stateMachine$async.this.completeSuccess([322][NoPosition]scala.Int.box([322][322][320]stateMachine$async.this.x.+([324]y)));
                [322]return [322]()
              }
              [260]case [260]_ => [260]throw [260][260][260]new [260]IllegalStateException([260][260]java.lang.String.valueOf([260][260][260]stateMachine$async.this.state()))
            }
          } catch {
            [260]case [260](throwable$async @ [260]([260]_: [260]Throwable)) => [260]{
              [260][260][260]stateMachine$async.this.completeFailure([260]throwable$async);
              [260]return [260]()
            }
          };
          [260][260]while$()
        }
      };
      [260][260][260][260][260]new [260]stateMachine$async().start()
    }: <249:329>Option)
  }
}
ok 1 - run/positions.scala

[info] Passed: Total 1, Failed 0, Errors 0, Passed 1
[success] Total time: 15 s, completed 21 Jul. 2022, 11:22:07 am

@retronym retronym force-pushed the topic/async-positions branch from 0e6925c to e1c04a3 Compare July 25, 2022 23:25
Don't position the wrapping try / while trees at the
position of the result expression anymore.
@retronym retronym force-pushed the topic/async-positions branch from e1c04a3 to 04563be Compare July 26, 2022 02:59
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.

1 participant