aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* 0.9.2 for Scala 2.10v0.9.2_2.10Jason Zaugg2014-07-212-2/+2
|
* Merge pull request #80 from retronym/ticket/79Jason Zaugg2014-07-213-4/+70
|\ | | | | Fix regression around type skolems and if exprs.
| * Fix regression around type skolems and if exprs.Jason Zaugg2014-07-183-4/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we start with: async({ val res = await[S[_$1 with String]](s); if (true) await[Int](0) res }) Typechecking the application (before macro expansion) yields (where the trees are printed in the form `expr{tpe}`): async[S[_$1#5738 with String#137]]({ val res: S[_$1#5490 with String] forSome { type _$1#5490 } = await[S[_$1#5487 with String]]( s{S[_$1#5487 with String]} ){S[_$1#5487 with String]}; if (true) await(0) else () res{S[_$1#5738 with String]} }{S[_$1#5738 with String]}){S[_$1#5738 with String]} Note that the type of the second last line contains a skolemized symbol `_$1#5738` of the existential `_$1#5490`. This is created by this case in `Typer#adapt`: case et @ ExistentialType(_, _) if ((mode & (EXPRmode | LHSmode)) == EXPRmode) => adapt(tree setType et.skolemizeExistential(context.owner, tree), mode, pt, original) Our ANF rewrites part of this code to: <synthetic> val await$1: S[_$1#5487 with String] = await[S[_$1#5487 with String]](awaitable$1); val res: S[_$1#5490 with String] forSome { type _$1 } = await$1; And later, the state machine transformation splits the last line into a blank field and an assignment. Typechecking the `Assign` node led to the an type error. This commit manually attributes the types to the `Assign` node so as to avoid these problem. It also reigns in an overeager rewriting of `If` nodes in the ANF transform, which was due to a bug in the label detection logic introduced in 4fc5463538. Thanks to @gnovark for yet another devilish test case and analysis of the problem with label detection. I worked on a more principled fix on: https://github.com/retronym/async/compare/ticket/79-2?expand=1 in which I try to use `repackExistential` to convert skolemized types to existentials for use as the types of synthetic vals introduced by the ANF transform. This ran into a deeper problem with existential subtyping in the compiler itself though.
* | Merge pull request #82 from retronym/topic/live-variable-speedupPhilipp Haller2014-07-182-28/+120
|\ \ | | | | | | Fix asymptotic performance issues in live variables analysis.
| * | Fix asymptotic performance issues in live variables analysis.Gene Novark2014-07-152-28/+120
| |/ | | | | | | | | | | | | | | | | Fix possibly-exponential runtime for DFS graph searches. Improve DFA fixpoint algorithm to correctly compute worklist of only changed nodes for each iteration. Added test that takes > 2 minutes to compile without these improvements.
* | Merge pull request #75 from retronym/ticket/66Jason Zaugg2014-07-152-2/+17
|\ \ | |/ |/| Avoid NotImplementedError awaiting a Future[Nothing]
| * Avoid NotImplementedError awaiting a Future[Nothing]Jason Zaugg2014-06-142-2/+17
|/ | | | | | | `gen.mkZero(NothingTpe)` gives the tree `Predef.???`. Instead, we should leave the `await` field uninitialized with `ValDef(..., rhs = EmptyTree)`. Fixes #66
* 0.9.2-SNAPSHOTJason Zaugg2014-04-061-1/+1
|
* 0.9.1v0.9.1_2.10Jason Zaugg2014-04-062-2/+2
|
* Merge pull request #69 from retronym/backport/ticket/52-lazy-valPhilipp Haller2014-03-274-7/+39
|\ | | | | [backport] Allow lazy vals without await in the initializer
| * Incorporate pull request feedbackJason Zaugg2014-03-274-8/+3
| | | | | | | | | | | | | | | | | | - remove unneeded `setType(NoType)`, which was leftover from my first attempts to find this bug. - fix typo in error message - optimize imports (cherry picked from commit 5c6ea29966fa80faae13892da50fc68ed1bf9ae7)
| * [backport] Allow lazy vals without await in the initializerJason Zaugg2014-03-274-8/+45
|/ | | | | | | | | | | | | | | | | | | | | | | | We were incorrectly typechecking the `ClassDef` of the state machine in the macro in a way that discarded the resulting trees, and only kept around the symbol. The led to the the macro engine retypechecking that node, which somehow led to duplicated lazy val initiaializer `DefDef`-s in the template, which manifest as a `VerifyError`. This commit: - rescues the typechecked `ClassDef` node from the eager typechecking by the macro - loosens the restriction on lazy vals in async blocks. They are still prohibited if they contain an await on the RHS - Adds a test that shows evalution is indeed lazy. (cherry picked from commit cc4587b1985519f7049d0feb0783d8e22c10f792) Conflicts: src/main/scala/scala/async/internal/AsyncAnalysis.scala src/main/scala/scala/async/internal/AsyncTransform.scala
* 0.9.1-SNAPSHOTJason Zaugg2014-03-212-2/+2
|
* 0.9.0v0.9.0_2.10Jason Zaugg2014-03-211-1/+1
|
* Update to Scala 2.10.4Jason Zaugg2014-03-211-1/+1
|
* 0.9.0-SNAPSHOTJason Zaugg2014-03-122-2/+2
|
* 0.9.0-M6v0.9.0-M6_2.10Jason Zaugg2014-03-121-1/+1
|
* [backport] Test case for "not a class" crasher in live variableJason Zaugg2014-03-121-0/+28
| | | | | | Works on the 2.10.x branch, so just backprting the test. Cherry picked from 6f6546ebfc26564843621e79d840209a5103d3c8.
* Fix substitution in release script messageJason Zaugg2014-03-101-2/+2
|
* Update release script for _2.10 tagging conventionJason Zaugg2014-03-101-2/+2
|
* Update version in READMEJason Zaugg2014-03-101-1/+1
|
* 0.9.0-SNAPSHOTJason Zaugg2014-03-101-1/+1
|
* 0.9.0-M5v0.9.0-M5_2.10Jason Zaugg2014-03-101-1/+1
|
* only build 2.10.x on this branchJason Zaugg2014-03-101-6/+0
|
* Merge pull request #58 from retronym/topic/unhardcode-tryJason Zaugg2014-01-272-5/+2
|\ | | | | Unhardcode use of scala.util.Try
| * Unhardcode use of scala.util.TryJason Zaugg2014-01-282-5/+2
|/ | | | In favour of the type defined by the active FutureSystem.
* Merge pull request #56 from retronym/topic/still-todoJason Zaugg2014-01-141-1/+1
|\ | | | | Update TODO comment about pres. compiler friendliness.
| * Update TODO comment about pres. compiler friendliness.Jason Zaugg2014-01-141-1/+1
| |
* | Merge pull request #55 from retronym/ticket/copyrightPhilipp Haller2014-01-1433-35/+35
|\ \ | |/ |/| Update copyright years.
| * Update copyright years.Jason Zaugg2014-01-1433-35/+35
|/ | | | 2013 must have been unlucky.
* Merge pull request #54 from akkomar/masterJason Zaugg2014-01-141-2/+2
|\ | | | | Minor fixes in Async`s scaladoc.
| * Minor fixes in Async`s scaladoc.akomar2014-01-121-2/+2
|/
* Merge pull request #20 from theon/patch-1Jason Zaugg2014-01-081-2/+2
|\ | | | | Fix line numbers for example in README
| * Fix line numbers for example in READMEIan Forsey2013-06-051-2/+2
| |
* | Update version in READMEJason Zaugg2013-11-241-1/+1
| |
* | 0.9.0-SNAPSHOTJason Zaugg2013-11-241-1/+1
| |
* | 0.9.0-M4v0.9.0-M4Jason Zaugg2013-11-241-1/+1
| |
* | Merge pull request #47 from retronym/topic/pres2Jason Zaugg2013-11-221-6/+5
|\ \ | | | | | | Another take at the 2.10/2.11 spanning suppressMacroAttachment
| * | Another take at the 2.10/2.11 spanning suppressMacroAttachmentJason Zaugg2013-11-201-6/+5
| | | | | | | | | | | | It was only working on the former.
* | | Merge pull request #50 from retronym/ticket/48Philipp Haller2013-11-225-34/+73
|\ \ \ | | | | | | | | Fix crashers in do/while and while(await(..))
| * | | Fix crashers in do/while and while(await(..))Jason Zaugg2013-11-225-34/+73
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | Merge pull request #51 from phaller/topic/travis-jdk-configPhilipp Haller2013-11-221-1/+1
|\ \ \ | |/ / |/| | Remove unsupported Oracle JDK6 from Travis CI config
| * | Remove unsupported Oracle JDK6 from Travis CI configPhilipp Haller2013-11-221-1/+1
|/ /
* | 0.9.0-SNAPSHOTJason Zaugg2013-11-202-2/+2
| |
* | 0.9.0-M3v0.9.0-M3Jason Zaugg2013-11-201-1/+1
| |
* | Merge pull request #42 from retronym/topic/hooksJason Zaugg2013-11-204-12/+58
|\ \ | | | | | | Hooks for custom async implementations
| * | Abstract over use of scala.util.TryJason Zaugg2013-11-134-11/+52
| | | | | | | | | | | | | | | Custom implementation of the async macro may choose to use a different data type to represent `Throwable | A`.
| * | Add a hook for post-ANF transformationJason Zaugg2013-11-132-1/+6
| | | | | | | | | | | | For use by custom implementations of the async macro.
* | | Merge pull request #46 from retronym/topic/pres-compiler-npeJason Zaugg2013-11-203-7/+31
|\ \ \ | | | | | | | | Presentation compiler friendliness
| * | | Less hacky check for presentation compiler.Jason Zaugg2013-11-201-1/+1
| | | | | | | | | | | | | | | | "There's a method for that!"