| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
By declararing the parameter of `async` as by-name.
Fixes #150 (the bug in the original ticket.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If we blindly splicing `{..$stats, ..$generatedCode}`, and the last
expression in `$stats` is of type `Nothing`, we'll incur a dead
code warning when typechecking the block.
This commit:
- introduces a helper method to augment user-written stats with
synthetic code
- Emit a try/finally in that code (so we advance the state, even if we
are about to exit the state machine in the async-block global
exception handler
- Hide `Nothing` typed expressions from the dead code analysis
by wrapping them in an `expr: Any`
Fixes #150 (the part reported in the comments, not the original ticket.)
|
|
|
|
|
|
|
| |
Don't bother adding `{ ...; () }` if we can use the original tree(s) instead,
e.g. if the last tree in `...` conforms to `Unit`.
This makes the debug output of the macro a little easier to read.
|
|\
| |
| | |
Avoid masking user exception with ??? for Nothing typed expressions
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Code like:
val x = if (cond) throw new A else throw new B
Was being transformed to:
val ifRes = ???
if (cond) ifRes = throw new A else ifRes = throw new B
val x = ifRes
by way of the use of `gen.mkZero` which throws `???` if the requested type is `Nothing`
This commit special cases `Nothing` typed expressions in a similar manner to `Unit` type expressions.
The example above is now translated to:
if (cond) throw new A else throw new B
val x = throw new IllegalStateException()
Fixes #120
|
|\ \
| | |
| | | |
Avoid leaking untyped trees out of macro
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The stack trace and bisection in #119 made me notice that we
are failing to typecheck the cast we generated in the fix for #74.
The ticket doesn't have a reproduction, so I'm submitting this
without a test case.
Fixes #119
|
|\ \ \
| |_|/
|/| | |
Merge 2.10.x to master
|
|/| |
| | |
| | |
| | | |
merge/2.10.x-to-master-20150727
|
| |\ \
| | | |
| | | | |
Opt in to container based TravisCI
|
| |/ / |
|
| |\ \
| | | |
| | | | |
Bump version to v0.9.5-SNAPSHOT
|
| |/ / |
|
|\ \ \
| | |/
| |/| |
Update SBT to support the command, which is assumed by sbt-extras
|
|/ / |
|
|\ \
| | |
| | | |
Bump to 0.9.5-SNAPSHOT
|
|/ / |
|
|\ \
| | |
| | | |
noop merge of 2.10.x to master
|
|/| |
| |/
| |
| | |
merge/2.10.x-to-master-20150707
|
| |\
| | |
| | | |
Avoid compiler warning when awaiting Future[Unit]
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
During the ANF transform, we were generating a tree of the shape:
{
val temp: Unit = await(futureOfUnit)
temp
()
}
I tried to simplifiy this to avoid creating the temporary value,
but this proved difficult as it would have required changes to
the subsequent state machine transformation.
Even replacing `temp` with `()` made the state machine transform
harder.
So for now, I've just inserted `temp.asInstanceOf[Unit]` to hide
from the compiler warning.
Fixes #74
(cherry picked from commit f3f058991b207a07041672a7e119422d9054788d)
|
| |\ \
| | | |
| | | | |
[backport] Avoid masking real errors with NotImplemented awaiting Future[Nothing]
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Future[Nothing]
This commit disabled live variable analysis for intermediate values of type Nothing.
Fixes #104
(cherry picked from commit 6353443a0adec384172c38efac3bc96b9d2cbad2)
|
|\ \ \
| | | |
| | | | |
Avoid compiler warning when awaiting Future[Unit]
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
During the ANF transform, we were generating a tree of the shape:
{
val temp: Unit = await(futureOfUnit)
temp
()
}
I tried to simplifiy this to avoid creating the temporary value,
but this proved difficult as it would have required changes to
the subsequent state machine transformation.
Even replacing `temp` with `()` made the state machine transform
harder.
So for now, I've just inserted `temp.asInstanceOf[Unit]` to hide
from the compiler warning.
Fixes #74
|
|\ \ \
| | | |
| | | | |
Avoid masking real errors with NotImplemented awaiting Future[Nothing]
|
|/ / /
| | |
| | |
| | |
| | |
| | | |
This commit disabled live variable analysis for intermediate values of type Nothing.
Fixes #104
|
|\ \ \
| | | |
| | | | |
(noop) Merge 2.10.x to master
|
|/| | |
| |/ /
| | |
| | | |
merge/2.10.x-to-master-20150706
|
| |\ \
| | | |
| | | | |
Fix compiler crash with value class in result position
|
| | |/
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We were leaking untyped trees out of the macro, which crashed
in refchecks.
This commit proactively typechecks the tree returned by `mkZero`.
(cherry picked from commit f4275e22e000541eb619808723b70bd64b9b4873)
|
| |/ |
|
| |\
| | |
| | | |
Bump to 0.9.4-SNAPSHOT
|
| |/ |
|
|\ \
| | |
| | | |
Bump to Scala 2.11.6
|
|/ / |
|
|\ \
| | |
| | | |
Fix compiler crash with value class in result position
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We were leaking untyped trees out of the macro, which crashed
in refchecks.
This commit proactively typechecks the tree returned by `mkZero`.
|
|/ / |
|
|\ \
| | |
| | | |
Merge 2.10.x to master to bring in tag driven publishing
|
|/| |
| |/
| |
| |
| |
| |
| | |
merge/2.10.x-to-master-tag-driven-release
Conflicts:
.travis.yml
|
| |\
| | |
| | | |
Support tag driven publishing
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
I started with:
https://github.com/scala/scala-swing/commit/a6a8e1d77e#diff-3acefdae08499733e855dd23e1af933dR8
And:
- modified the regex that derives the version from the tag to
handle the fact we have the scala binary version appended to
our tags
- Removed unnessary cross building with Scala 2.11 (as this is
on the 2.10.x branch)
- generated a key pair for the async repository
- added passphrase for that key, and sonatype credentials, to
sensitive.sbt
- encrypted the secrets with the travis key.
|
|\ \
| | |
| | | |
Merge/2.10.x to master 20141219
|
|/| |
| |/
| |
| |
| |
| |
| |
| |
| | |
merge/2.10.x-to-master-20141219
Conflicts:
src/main/scala/scala/async/internal/AsyncTransform.scala
src/main/scala/scala/async/internal/ExprBuilder.scala
src/test/scala/scala/async/TreeInterrogation.scala
|
| |\
| | |
| | | |
Make `f(await(completedFuture))` execute `f` synchronously
|
| | |
| | |
| | |
| | |
| | |
| | | |
A worthy optimization, suggested by @danarmak.
Closes #73
|
| | | |
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Previously, as sequence of state transitions that did not pass through
an asynchrous boundary incurred stack frames. The trivial loop in
the enclosed test case would then overflow the stack.
This commit merges the `resume` and `apply(tr: Try[Any])` methods into
a `apply`. It changes the body of this method to be an infinite loop
with returns at the terminal points in the state machine (or at a
terminal failure.)
To allow merging of these previously separate matches, states that
contain an await are now allocated two state ids: one for the setup
code that calls `onComplete`, and one for the code in the continuation
that records the result and advances the state machine.
Fixes #93
|
| |\
| | |
| | | |
Avoid assigning null to vars of derived value type
|