summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'szabolcsberecz/SI-64' into SI-64-freshPaul Phillips2012-02-2811-9/+65
|\
| * replace methods containing a synchronized body with synchronized methodsSzabolcs Berecz2012-02-168-6/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The following: def f = synchronized { ... } will be rewritten to: <synchronized> def f = ... which is then emitted to the classfile with the synchronized flag set. Inlining of such transformed methods are disabled for now This transformation is not done on methods defined in a trait.
| * let fjbg know about the synchronized flagSzabolcs Berecz2012-02-153-0/+6
| |
* | Test for SI-5529.Paul Phillips2012-02-282-0/+25
| |
* | Don't print underlying type of modules.Paul Phillips2012-02-284-5/+5
| | | | | | | | Since there is no useful information in such a message.
* | Fix for typing of objects in patterns.Paul Phillips2012-02-284-4/+13
| | | | | | | | | | An object in a pattern should have type "Foo.type" just as objects not in patterns do. Closes SI-5406. Review by @moors.
* | Improving error message.Paul Phillips2012-02-288-14/+49
| | | | | | | | | | Hacked filename into message to alleviate meaningless "_$1 defined twice" error condition. References SI-4893.
* | Specialized NonLocalReturnControl.Paul Phillips2012-02-2713-56/+78
| | | | | | | | From the extempore archive of already implemented things.
* | Fix for "." appearing on classpath.Paul Phillips2012-02-271-1/+3
| | | | | | | | | | | | Have to pass an empty classpath to java if we put the boot libs on the classpath, otherwise it puts the default "." on there. Closes SI-5528.
* | Merge pull request #243 from jsuereth/fix-deployJosh Suereth2012-02-271-1/+1
|\ \ | | | | | | Fixed deploy script for nightly
| * | Fixed deploy script for nightlyJosh Suereth2012-02-271-1/+1
| | |
* | | Merge remote-tracking branch 'hubertp/issue/5527-workaround' into developPaul Phillips2012-02-271-6/+7
|\ \ \
| * | | Workaround for scaladoc bug SI-5527 that crashes the build when mixed with ↵Hubert Plociniczak2012-02-271-6/+7
| | | | | | | | | | | | | | | | range positions
* | | | Added tool for verifying jar cache.Paul Phillips2012-02-271-0/+33
| | | | | | | | | | | | | | | | And for removing corrupt files.
* | | | Merge pull request #241 from VladUreche/patch-1Josh Suereth2012-02-271-0/+12
|\ \ \ \ | | | | | | | | | | Update pull-binary-libs.sh to cope with curl not installed
| * | | | Update pull-binary-libs.sh to cope with curl not installedVlad Ureche2012-02-271-0/+12
|/ / / /
* | | | Some logging cleanup.Paul Phillips2012-02-2613-82/+82
| | | | | | | | | | | | | | | | | | | | Quieting things down. Fixed some things revealed by quieter logs, like forwarders being generated for superaccessors.
* | | | Toward a higher level abstraction than atPhase.Paul Phillips2012-02-2534-209/+217
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I guess these are self-explanatory. @inline final def afterErasure[T](op: => T): T = afterPhase(currentRun.erasurePhase)(op) @inline final def afterExplicitOuter[T](op: => T): T = afterPhase(currentRun.explicitouterPhase)(op) ... @inline final def beforeTyper[T](op: => T): T = beforePhase(currentRun.typerPhase)(op) @inline final def beforeUncurry[T](op: => T): T = beforePhase(currentRun.uncurryPhase)(op) This commit is basically pure substitution. To get anywhere interesting with all the phase-related bugs we have to determine why we use atPhase and capture that reasoning directly. With the exception of erasure, most phases don't have much meaning outside of the compiler. How can anyone know why a block of code which says atPhase(explicitouter.prev) { ... } needs to run there? Too much cargo cult, and it should stop. Every usage of atPhase should be commented as to intention. It's easy to find bugs like atPhase(uncurryPhase.prev) which was probably intended to run before uncurry, but actually runs before whatever happens to be before uncurry - which, luckily enough, is non-deterministic because the continuations plugin inserts phases between refchecks and uncurry. % scalac -Xplugin-disable:continuations -Xshow-phases refchecks 7 reference/override checking, translate nested objects uncurry 8 uncurry, translate function values to anonymous classes % scalac -Xshow-phases selectivecps 9 uncurry 10 uncurry, translate function values to anonymous classes Expressions like atPhase(somePhase.prev) are never right or are at best highly suboptimal, because most of the time you have no guarantees about what phase precedes you. Anyway, I think most or all atPhases expressed that way only wanted to run before somePhase, and because one can never be too sure without searching for documentation whether "atPhase" means before or after, people err on the side of caution and overshoot by a phase. Unfortunately, this usually works. (I prefer bugs which never work.)
* | | | New forkjoin jar as described in 76e9da2ca4 .Paul Phillips2012-02-251-1/+1
| | | |
| | | |
| \ \ \
*-. \ \ \ Merge remote-tracking branches 'heathermiller/issue/5522' and ↵Paul Phillips2012-02-2513-3443/+4821
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | 'heathermiller/issue/5523' into develop
| | * | | | Added updated ForkJoinPool, w/ necessary updates to Scala Actors.Heather Miller2012-02-2511-3442/+4810
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit includes Doug Lea's updates to ForkJoinPool, as of January 25th, 2012. Details of the changes and performance improvements available at: http://markmail.org/message/323vxzn6irkk5yrg. The ForkJoinPool used in this commit comes from the most recent JSR166y. Additionally, also included are minimal changes to parts of the Scala Actors library which interface with the ForkJoinPool, as the ForkJoinPool's interface has changed (prior to the release of Java 7) since we last updated it for the Scala 2.8 release. Of note- this is part of the planned overhaul of scala.concurrent, and corresponds to ticket SI-5523. For testing this was built on JDK 1.6, and passes all tests on both JDK 1.5 and 1.6. A new forkjoin.jar is necessary prior to applying these changes. Using this source, the new jar can be built by running: ant newforkjoin forkjoin.done This creates a new forkjoin.jar in build/libs/. It must replace lib/forkjoin.jar.
| * | | | | Improvement to API docs: GenTraversableLike and List. Fixes SI-5522.Heather Miller2012-02-252-1/+11
| |/ / / /
* / / / / Mainstreaming phase awareness.Paul Phillips2012-02-255-8/+104
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As I peer into various longstanding crashes involving specialization, mixin composition, and super calls, I find a very common reason for logic to go wrong is ignoring or misusing atPhase. This is hardly surprising given how much of a secret black art the whole process of atPhase-ing is. I predict with some confidence that at least half the calls to atPhase in the compiler are at best unnecessary and more likely wrong; similarly, we are missing at least as many calls in other places. Herein we find the following: 1) log messages now include not only the current "at" phase, which in isolation was very confusing because it means what is logged is dependent on the arbitrary jumps performed by atPhase, but the entire "phase stack", anchored by the "global phase". The leftmost phase is the global phase, the one set in Global which proceeds in a predictable fashion from parser to terminal. That's the one we usually mean when we talk about during which phase something happens. The others (prefixed with an arrow) are calls to atPhase which have not yet returned. // example, assuming we've given -Ylog:expl scala> atPhase(currentRun.explicitouterPhase)(log("hi mom")) [log terminal(->typer ->explicitouter)] hi mom 2) A message will be logged if either the globalPhase matches, or the current "at" phase does. So -Ylog:erasure will log all the messages from the phase we think of as erasure, and also all those from any phase run inside of atPhase(erasurePhase) { ... } (except for times when that block uses atPhase to alter the phase yet again - it only looks at the top of the atPhase stack.) // example % scalac -Ydebug -Ylog:refchecks foo.scala [log refchecks] overriding-pairs? method size in trait TraversableOnce ... [log mixin(->refchecks)] rebindsuper trait GenTraversable <none> <notype> false 3) A number of debug/power oriented functions. All of these limit their results to phase transitions during which some change took place, as measured by the result of `op`, compared with ==. def afterEachPhase[T](op: => T): List[(Phase, T)] def changesAfterEachPhase[T](op: => List[T]): List[ChangeAfterPhase[T]] def logAfterEveryPhase[T](msg: String)(op: => T) def describeAfterEachPhase[T](op: => T): List[String] def describeAfterEveryPhase[T](op: => T): String def printAfterEachPhase[T](op: => T): Unit Some examples: scala> printAfterEachPhase(ListClass.info.members.size) [after 1/parser ] 219 [after 11/tailcalls ] 220 [after 12/specialize ] 322 [after 14/erasure ] 361 [after 18/flatten ] 357 scala> printAfterEachPhase(termMember(PredefModule, "implicitly").defString) [after 1/parser ] def implicitly[T](implicit e: T): T [after 10/uncurry ] def implicitly[T](e: T): T [after 14/erasure ] def implicitly(e: Object): Object Try this at home: scala> changesAfterEachPhase(ListClass.info.nonPrivateMembers map (_.defString)) foreach println
* | | | Better fix for memory leaks in the presentation compiler. Switched to ↵Iulian Dragos2012-02-242-1/+2
| | | | | | | | | | | | | | | | perRunCaches and call clearAll from the presentation compiler
* | | | -Xplugin value passed by the Eclipse IDE are incorrectly parsed when itMirco Dotta2012-02-241-1/+1
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | contains whitespaces. Assume -Xplugin is given the value C:\Programs Files\plugins\Aplugin.jar C:\Programs Files\plugins\Bplugin.jar Calling ``tryToSetFromPropertyValue`` with the above value will always result in a total mess, no matter what, because it will split the string at whitespaces. The proposed solution is to change the implementation of ``tryToSetFromPropertyValue`` to use `,` (comma) as the splitting character Further, I'm quite convinced that the current implementation of ``MultiStringSetting.tryToSetFromPropertyValue`` has never worked, that is why I did not create an overload of ``tryToSetFromPropertyValue`` where the splitting character (or string) can be passed as argument. There is also an Eclipse Scala IDE associated to this issue: http://scala-ide-portfolio.assembla.com/spaces/scala-ide/tickets/1000917
* | | Fleshed out the @elidable documentation.Paul Phillips2012-02-231-15/+43
| | |
* | | Merge remote-tracking branch 'szabolcsberecz/SI-5215' into developPaul Phillips2012-02-231-4/+7
|\ \ \
| * | | update api docs for @elidable to match the behaviour more closely.Szabolcs Berecz2012-02-231-4/+7
| | | |
* | | | Followed up on two aged todos.Paul Phillips2012-02-231-65/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | // to avoid infinite expansions. todo: not sure whether this is needed Survey says: if it's needed, more evidence is needed. // TODO: this should be simplified; in the stable case, one can probably // just use an Ident to the tree.symbol. Why an existential in the non-stable case? My answers are in comment form herein. I simplified as much as I was able.
* | | | Merge pull request #234 from jsuereth/fix-annoying-task-dependencyJosh Suereth2012-02-231-1/+1
|\ \ \ \ | |/ / / |/| | | Fix to nightly build.
| * | | Fix to nightly build.Josh Suereth2012-02-231-1/+1
|/ / / | | | | | | | | | | | | | | | | | | You see shelling to other ant builds doesn't let us declare dependencies on the primary build, so to ensure all tasks are run when needed, and that we don't slow everyone down with javadocs, we wind up with a bit of spaghetti.
* | | Moved and edited tests.Paul Phillips2012-02-2311-5/+80
| | | | | | | | | | | | | | | | | | Remove obsolete, move passing pending -> files, update those-kinds-are-high with some new info, added a couple new ones to pending.
* | | Make partest not fail over code.jar's placement.Paul Phillips2012-02-231-3/+5
| | |
* | | Merge remote-tracking branch 'adriaanm/ticket/errortests'Paul Phillips2012-02-236-1/+26
|\ \ \
| * | | test for DependentMethodTpeConversionToFunctionErrorAdriaan Moors2012-02-232-0/+9
| | | |
| * | | test for TooManyArgsPatternErrorAdriaan Moors2012-02-232-0/+9
| | | |
| * | | test for OverloadedUnapplyErrorAdriaan Moors2012-02-232-1/+8
| | | |
* | | | One more to derive trees.Paul Phillips2012-02-2316-66/+99
| | | | | | | | | | | | | | | | | | | | | | | | ClassDefs, CaseDefs, and LabelDefs. Dotting eyes, crossing tees. Point of diminishing returns is reached, declare victory and withdraw.
| | | |
| \ \ \
| \ \ \
| \ \ \
| \ \ \
| \ \ \
| \ \ \
| \ \ \
*-------. \ \ \ Merge remote-tracking branches 'namin/add-test-for-finitary-error', ↵Paul Phillips2012-02-2312-4/+60
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | 'namin/add-test-for-parent-inherited-twice-error', 'namin/add-test-for-constructor-prefix-error', 'namin/add-tests-for-qualifying-class-error', 'namin/add-test-for-abstraction-from-volatile-type-error' and 'axel22/issue/5293' into develop
| | | | | * | | | Change time constants in test to avoid failures.Aleksandar Prokopec2012-02-232-4/+4
| | | | | | |/ / | | | | | |/| |
| | | | * | | | Add test for AbstractionFromVolatileTypeError.Nada Amin2012-02-232-0/+15
| | | | | |/ / | | | | |/| |
| | | * / | | Add tests for QualifyingClassError.Nada Amin2012-02-234-0/+21
| | | |/ / /
| | * / / / Add test for ConstructorPrefixError.Nada Amin2012-02-232-0/+11
| | |/ / /
| * / / / Add test case for ParentInheritedTwiceError.Nada Amin2012-02-232-0/+9
| |/ / /
* / / / Added test case for FinitaryError.Nada Amin2012-02-232-0/+7
|/ / /
* / / Methods to derive ValDefs and Templates.Paul Phillips2012-02-2315-64/+97
|/ / | | | | | | | | | | It's a lot like the last one. I also found trees being duplicated before being sent to the tree copier. Looks like xerox has gotten a mole in here. Trust no one.
* | Methods to derive new DefDefs.Paul Phillips2012-02-2313-109/+116
| | | | | | | | | | | | | | | | | | | | | | I guess I'd seen DefDef(mods, name, tparams, vparamss, tpt, rhs) one too many times and went a little crazy. What do you prefer: - val DefDef(mods, name, tparams, vparamss, tpt, rhs) = tree1 - treeCopy.DefDef(tree1, mods, name, tparams, vparamss, tpt, transform(rhs)) + deriveDefDef(tree1)(transform) Me too.
* | One last nudge for elidable.Paul Phillips2012-02-227-38/+8
| | | | | | | | | | A method with return type Nothing elides into a call to ??? . It's the role ??? was born for.
* | Reworked and restored elidable.Paul Phillips2012-02-2210-118/+323
| | | | | | | | | | | | | | | | | | | | | | | | Found a better elidable implementation which is robust against other parts of the compiler doing their things. Calls to elidable methods are replaced with zero of the same type. Elidable methods themselves remain in place, but with their body replaced with a zero of the method return type. Thus is everything to be found where it is expected to be found, but nothing will be found where nothing ought to be found. Nothing of course will never be found.
* | Revert recent elidable commits.Paul Phillips2012-02-228-152/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On epfl jenkins, elidable.scala fails with: [partest] java.lang.VerifyError: (class: Test$, method: main signature: ([Ljava/lang/String;)V) Unable to pop operand off an empty stack [partest] [partest] at Test.main(elidable.scala) Strangely it is fine for me on OSX with either apple's jvm or openjdk. Since tests were not running for a while I don't know which of the recent elidable commits is responsible, so given present time demands all I can do is revert them all. Revert "Fix for SI-5215: scalac crash when @elidable used in trait" This reverts commit 5e52ce9a13f12ef159e25ac80c6be2803ec48950. Revert "Fix for SI-5215 part 2: generate return value when eliding method calls" This reverts commit 61c9b4f01d99a81e15391b270bd1b5a895f65ffd. Revert "Eliminating duplication in zero creation." This reverts commit fbb7865e137e83660257fdc79d19d29ff39c775b. Revert "Disallow eliding when Nothing is expected" This reverts commit f26a47c4e8bda2f6c689b4e9b0bb5c64ccf4c699.