| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|\
| |
| | |
Another take at the 2.10/2.11 spanning suppressMacroAttachment
|
| |
| |
| |
| | |
It was only working on the former.
|
|\ \
| | |
| | | |
Fix crashers in do/while and while(await(..))
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The new tree shapes handled for do/while look like:
// type checked
async({
val b = false;
doWhile$1(){
await(());
if (b)
doWhile$1()
else
()
};
()
})
We had to change ExprBuilder to create states for the if/else
that concludes the doWhile body, and also loosen the assertion
that the label jump must be the last thing we see.
We also have to look for more than just `containsAwait` when
deciding whether an `If` needs to be transformed into states;
it might also contain a jump to the enclosing label that is on
the other side of an `await`, and hence needs to be a state
transition instead.
|
|\ \
| |/
|/| |
Remove unsupported Oracle JDK6 from Travis CI config
|
|/ |
|
| |
|
| |
|
|\
| |
| | |
Hooks for custom async implementations
|
| |
| |
| |
| |
| | |
Custom implementation of the async macro may choose to use
a different data type to represent `Throwable | A`.
|
| |
| |
| |
| | |
For use by custom implementations of the async macro.
|
|\ \
| | |
| | | |
Presentation compiler friendliness
|
| | |
| | |
| | |
| | | |
"There's a method for that!"
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Right now, the body of an async block suffers from diminished
IDE support: most notably hyperlinking doesn't work [1].
During the course of the blackbox/whitebox macro discussion,
we've often talked about how the former give us the latitude
to simply disable macro expansion in the IDE so we could get
these features working again, at the cost of losing domain
specific errors, such as "await must not be used under a
nested function".
But why not have our cake and eat too?
This commit detects if we are running the presentation compiler
and, after running our regular macro, returns the original macro
application. We need to annotate that tree to prevent the typechecker
from stubbornly calling our macro again.
EXPERIMENTAL NOTE: This logic shouldn't live in macros: this is
just a short term measure. If these experiments in async prove
successful, we'll roll something similar into the macro expansion
engine itself.
TODO: as a performance optimization, we could just run the
"unsupported await" checks, and avoid doing the more expensive
state machine transformation.
[1] https://www.assembla.com/spaces/scala-ide/tickets/1001449-code-navigation-fails-when-macros-are-used#/activity/ticket:
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We were using a TypingTransformer and we called
`atOwner` before we had called `transform`. This
meant that `currTree` was null, which was observed
when that was passed to `Context#make`.
IDE ticket:
https://scala-ide-portfolio.assembla.com/spaces/scala-ide/tickets/1001971#/activity/ticket:
Stack trace:
exception during macro expansion: java.lang.NullPointerException
at scala.tools.nsc.interactive.ContextTrees$class.addContext(ContextTrees.scala:78)
at scala.tools.nsc.interactive.Global.addContext(Global.scala:28)
at scala.tools.nsc.interactive.Global.registerContext(Global.scala:268)
at scala.tools.nsc.typechecker.Contexts$Context.make(Contexts.scala:295)
at scala.tools.nsc.typechecker.Contexts$Context.make0(Contexts.scala:320)
at scala.tools.nsc.typechecker.Contexts$Context.make(Contexts.scala:327)
at scala.tools.nsc.typechecker.Typers$Typer.atOwner(Typers.scala:5662)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:28)
at scala.async.internal.AsyncTransform$class.fixup$1(AsyncTransform.scala:191)
|
|/ /
| |
| | |
Fixes #45
|
|\ \
| | |
| | | |
Clean-ups found during review of PR #43
|
|/ / |
|
|\ \
| | |
| | | |
Fix crasher in icode due to symbol mismatches in lifted methods
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| | |
These stem from the handling of the internal/external view
or method type parameters by `thisMethodType` in `Namers`.
I've now preseversed the orginal ValDefs favoured the latter
when constructing the new DefDef, and made construction of
all liftables consistent in this regard.
|
|/
|
| |
Link to CI status
|
|\
| |
| | |
Enable Travis CI
|
| | |
|
|\ \
| |/
|/| |
Don't aggressively null out captured vars
|
|/
|
|
|
| |
Once they escape, we leave the references in the state
machines fields untouched.
|
| |
|
|\
| |
| | |
Remove left-overs of CPS fallback logic
|
| |
| |
| |
| | |
Completes removal performed in #37.
|
| | |
|
|/ |
|
| |
|
| |
|
|\
| |
| | |
Minimize the public API
|
| |
| |
| |
| |
| |
| | |
The generated code can simply extends Function1 and Function0.
This class was a hacky means to get the macro working a long
time ago.
|
|/
|
|
|
|
|
|
|
|
| |
- Remove the CPS fallback version of async. That was not intended
to be part of 1.0.
- Lookup the await method beside the macro, rather than requiring
all calls to go to AsyncBase.await.
- Create a minimal version of Async that just contains await/async
and delegates to the macro implementation in internal._
- Add scaladoc.
|
| |
|
|\
| |
| | |
Release/0.9.0 m1
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| | |
We were relying on an internal API that no longer exists.
We also need to tweak the way our tests infer scalaBinaryVersion.
|
|/
|
|
| |
We were relying on an internal API that no longer exists.
|
| |
|
| |
|
|\
| |
| | |
Liveness analysis to avoid memory retention issues
|
| | |
|
| |
| |
| |
| |
| | |
- Zero out fields of type Any
- Zero out fields of value class type
|
| |
| |
| |
| |
| |
| |
| | |
- Adds a hook that lets a derived macro insert additional code
when zero-ing out a lifted field.
- Adds a variant of the `AsyncId` macro that logs zeroed-out fields.
- Adds a test using this mechanism
|