aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
| * | Update README.mdJason Zaugg2015-07-061-12/+2
| |/
| * Merge pull request #103 from retronym/topic/0.9.4-SNAPSHOTJason Zaugg2015-01-083-37/+3
| |\ | | | | | | Bump to 0.9.4-SNAPSHOT
| | * Bump to 0.9.4-SNAPSHOTJason Zaugg2015-01-083-37/+3
| |/
* | Merge pull request #109 from retronym/topic/bumpJason Zaugg2015-07-061-1/+1
|\ \ | | | | | | Bump to Scala 2.11.6
| * | Bump to Scala 2.11.6Jason Zaugg2015-07-061-1/+1
|/ /
* | Merge pull request #107 from retronym/ticket/106Jason Zaugg2015-07-062-2/+14
|\ \ | | | | | | Fix compiler crash with value class in result position
| * | Fix compiler crash with value class in result positionJason Zaugg2015-07-062-2/+14
| | | | | | | | | | | | | | | | | | | | | We were leaking untyped trees out of the macro, which crashed in refchecks. This commit proactively typechecks the tree returned by `mkZero`.
* | | Update README.mdJason Zaugg2015-07-061-12/+3
|/ /
* | Merge pull request #101 from retronym/merge/2.10.x-to-master-tag-driven-releasev0.9.3_2.11v0.9.3-RC1_2.11Jason Zaugg2014-12-1910-6/+143
|\ \ | | | | | | Merge 2.10.x to master to bring in tag driven publishing
| * | Merge remote-tracking branch 'origin/2.10.x' into ↵Jason Zaugg2014-12-1810-6/+143
|/| | | |/ | | | | | | | | | | merge/2.10.x-to-master-tag-driven-release Conflicts: .travis.yml
| * Merge pull request #100 from retronym/topic/tag-driven-releasev0.9.3_2.10v0.9.3-RC1_2.10Jason Zaugg2014-12-1810-7/+143
| |\ | | | | | | Support tag driven publishing
| | * Support tag driven publishingJason Zaugg2014-12-1810-7/+143
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 pull request #99 from retronym/merge/2.10.x-to-master-20141219Jason Zaugg2014-12-189-88/+166
|\ \ | | | | | | Merge/2.10.x to master 20141219
| * | Merge remote-tracking branch 'origin/2.10.x' into ↵Jason Zaugg2014-12-189-88/+166
|/| | | |/ | | | | | | | | | | | | | | 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
| * Merge pull request #98 from retronym/ticket/73Jason Zaugg2014-12-189-88/+166
| |\ | | | | | | Make `f(await(completedFuture))` execute `f` synchronously
| | * Make `f(await(completedFuture))` execute `f` synchronouslyJason Zaugg2014-12-164-35/+85
| | | | | | | | | | | | | | | | | | A worthy optimization, suggested by @danarmak. Closes #73
| | * Remove extraneous method in generated code.Jason Zaugg2014-12-151-7/+2
| | |
| | * Avoid unbounded stack consumption for synchronous control flowJason Zaugg2014-12-157-54/+87
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
| * Merge pull request #91 from retronym/ticket/86-mkZeroJason Zaugg2014-09-304-7/+83
| |\ | | | | | | Avoid assigning null to vars of derived value type
* | \ Merge pull request #95 from gnovark/topic/absType-crashJason Zaugg2014-12-102-4/+20
|\ \ \ | | | | | | | | Fix regression around await of non-class type
| * | | Fix regression around await of non-class typeGene Novark2014-12-092-4/+20
|/ / / | | | | | | | | | E.g. type param, abstrat type.
* | | Merge pull request #92 from retronym/merge/2.10.x-to-master-20140930Jason Zaugg2014-10-024-8/+106
|\ \ \ | | | | | | | | Merge 2.10.x to master (plus a test)
| * | | Additional tests and comments around mkZero for value classesJason Zaugg2014-10-012-1/+35
| | | |
| * | | Merge branch 'ticket/86-mkZero' into merge/2.10.x-to-master-20140930Jason Zaugg2014-10-014-9/+73
|/| | | | | |/ | |/| | | | | | | | | | | | | Conflicts: src/main/scala/scala/async/internal/AnfTransform.scala src/main/scala/scala/async/internal/AsyncTransform.scala src/test/scala/scala/async/run/toughtype/ToughType.scala
| * | Avoid assigning null to vars of derived value typeJason Zaugg2014-09-294-7/+83
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `TreeGen#mkZero` returns `q"null"` for derived value classes. ``` scala> class V(val a: String) extends AnyVal defined class V scala> showRaw(gen.mkZero(typeOf[V])) res0: String = Literal(Constant(null)) ``` We use this API in async to generate the initial value for ANF-lifted temporary variables. However, this leads to NPEs, as after posterasure, we call the unbox method on a null reference: ``` % cat sandbox/Macro.scala; scalac-hash v2.10.4 sandbox/Macro.scala; scala-hash v2.10.4 -e 'val x = Macros.myMacro' import scala.reflect.macros.Context import scala.language.experimental.macros object Macros { def macroImpl(c: Context): c.Expr[C] = { import c.universe._ val e1 = c.Expr[C](Literal(Constant(null)).setType(typeOf[C])) reify(e1.splice.asInstanceOf[C @annotation.unchecked.uncheckedVariance]) } def myMacro: C = macro macroImpl } class C(val a: String) extends AnyVal java.lang.NullPointerException at Main$$anon$1.<init>(scalacmd4059893593754060829.scala:1) at Main$.main(scalacmd4059893593754060829.scala:1) at Main.main(scalacmd4059893593754060829.scala) ``` This commit installs a custom version of `mkZero` that instead returns `q"new C[$..targs](${mkZero(wrappedType)})`. Thanks to @ewiner for pinpointing the problem.
* | 0.9.3-SNAPSHOTJason Zaugg2014-07-211-1/+1
| |
* | 0.9.2 for Scala 2.11.xv0.9.2_2.11Jason Zaugg2014-07-212-2/+2
| |
* | Merge branch '2.10.x'Jason Zaugg2014-07-210-0/+0
|\|
| * 0.9.3-SNAPSHOTJason Zaugg2014-07-211-1/+1
| |
| * 0.9.2 for Scala 2.10v0.9.2_2.10Jason Zaugg2014-07-212-2/+2
| |
* | Merge pull request #85 from retronym/ticket/83Jason Zaugg2014-07-211-0/+14
|\ \ | | | | | | Test case for already-fixed NPE with value classes
| * | Test case for already-fixed NPE with value classesJason Zaugg2014-07-211-0/+14
|/ / | | | | | | | | | | | | | | | | | | This progressed along with the fix for #66. `TreeGen.mkZero` is a bit of a minefield: first with `Nothing` and now with Value Classes. I wonder if we can provoke the same sort of bug in the compiler in places where this is used. Closes #83
* | Merge pull request #84 from retronym/merge/2.10.x-to-master-20140721Jason Zaugg2014-07-217-34/+211
|\ \ | | | | | | Merge 2.10.x to master
| * | Merge remote-tracking branch 'origin/2.10.x' into ↵Jason Zaugg2014-07-217-34/+211
|/| | | |/ | | | | | | | | | | | | merge/2.10.x-to-master-20140721 Conflicts: src/main/scala/scala/async/internal/AsyncTransform.scala src/main/scala/scala/async/internal/Lifter.scala
| * 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 #72 from qifun/patch-1Philipp Haller2014-07-181-1/+1
|\ \ | | | | | | Added the missed s
| * | Update TreeInterrogation.scala杨博 (Yang Bo)2014-04-161-1/+1
| | |
* | | Merge pull request #81 from retronym/topic/bump-scala-versionPhilipp Haller2014-07-152-2/+2
|\ \ \ | |/ / |/| | Bump to a non-RC Scala version
| * | Bump to a non-RC Scala versionJason Zaugg2014-07-152-2/+2
|/ /
* | 0.9.2-SNAPSHOTJason Zaugg2014-04-061-1/+1
| |
* | 0.9.1v0.9.1_2.11Jason Zaugg2014-04-062-2/+2
| |
* | Merge pull request #71 from retronym/topic/quasiquote-appliedJason Zaugg2014-04-063-17/+71
|\ \ | | | | | | Update to Scala 2.11.0-RC4, adapting to change in quasiquotes
| * | Refactoring in ANFTransformJason Zaugg2014-04-051-15/+2
| | | | | | | | | | | | | | | - simpler means to calculate `applyDepth` - remove unused binder