summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #4958 from adriaanm/typerefrefactorAdriaan Moors2016-02-245-182/+189
|\ | | | | Simplify TypeRef hierarchy. baseType returns NoType, as needed for isSubtype. Also improves performance.
| * thisInfo.parents also needs separate treatmentAdriaan Moors2016-02-121-1/+5
| |
| * Less distribution of logic across TypeRef subclassesAdriaan Moors2016-02-122-108/+128
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Redeem myself for e1c732db44 -- hopefully. I inlined `thisInfo` (== `sym.info`), and made sure to use `relativeInfo` wherever prefix and args influence the result of the query that we're delegating to the underlying type. For type aliases, use `normalize` for `baseClasses` and `decls`, since `relativeInfo` breaks the gnarly SI-8177. I think normalize is okay for aliases, as the prefix should not matter when computing base classes, and infos for the members in `decls` are given the `asSeenFrom` treatment individually downstream. (It's a tight rope between rewriting too many symbols and maintaining correctness. Documented the trade-off in the code.) Renamed the unimaginative `transform` to `relativize`, which, although everything is relative, hopefully says a bit more about its usage than `transform`. Removed a lot of over-factoring in the TypeRef hierarchy. Ultimately, we need to reduce the number of TypeRef subclasses further, I think. It's really hard to follow what's going on. Removed the `thisInfo` cache, since `sym.info` and `relativeInfo` are both cached. Made the cache invalidation hooks a bit more OO-y. Compare `Symbol`s with `eq` -- they don't define an `equals` method. Also, don't recurse in isSubtype when a `baseType` results in `NoType`. This happens a lot and is cheap to check, so I posit (without proof), that it's better for performance (and clarity) to check before recursing.
| * SI-9540 typedFunction is erasure awareAdriaan Moors2016-02-123-7/+13
| | | | | | | | | | | | | | | | | | | | When typer is running during erasure, must assign erased FunctionType in typedFunction. This removes a bunch of unneeded casts now we no longer assign a half-erased FunctionType. I poked around a bit, and it looks like erasure doesn't want typer to erase built-in types (like Unit/Any/Nothing). They are already treated specially during erasure.
| * Towards understanding `TypeRef`'s `transformInfo`/`baseType`Adriaan Moors2016-02-101-94/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By reducing excessive factoring, we can save an extraneous call to `asSeenFrom`, and hopefully in a following commit figure out a bigger problem with `baseType` that is causing wrong subtyping results. This commit is a pure refactoring, save for the dropped ASF call, which is explained below. To motivate the following change to `relativeInfo`: ``` private[Types] def relativeInfo = /*trace(s"relativeInfo(${safeToString}})")*/{ if (relativeInfoPeriod != currentPeriod) { - val memberInfo = pre.memberInfo(sym) - relativeInfoCache = transformInfo(memberInfo) + relativeInfoCache = memberInfoInstantiated ``` Let's consolidate the two removed line in this new method: ``` def memberInfoInstantiated = transformInfo(pre.memberInfo(sym)) ``` To understand what `transformInfo` does, take these helpers spread over various `*TypeRef` traits, and consolidate them: ``` - def asSeenFromOwner(tp: Type) = tp.asSeenFrom(pre, sym.owner) // regular type refs: - def transformInfo(tp: Type): Type = appliedType(asSeenFromOwner(tp), args) // for no-args type refs: - override def transformInfo(tp: Type): Type = appliedType(asSeenFromOwner(tp), dummyArgs) ``` By removing the dynamic dispatch, we get the following method (given `require(args0 ne Nil, this)` in `ArgsTypeRef`, and `args eq Nil` by construction in `NoArgsTypeRef` ): ``` def transformInfo(tp: Type) = appliedType(tp.asSeenFrom(pre, sym.owner), if (args.isEmpty) dummyArgs else args) ``` Inlining `memberInfo`, which is defined as: ``` def memberInfo(sym: Symbol): Type = { require(sym ne NoSymbol, this) sym.info.asSeenFrom(this, sym.owner) } ``` gives us: ``` def memberInfoInstantiated = transformInfo(sym.info.asSeenFrom(pre, sym.owner)) ``` Inlining `transformInfo` as reworked above: ``` def memberInfoInstantiated = appliedType(sym.info.asSeenFrom(pre, sym.owner).asSeenFrom(pre, sym.owner), if (args.isEmpty) dummyArgs else args) ``` Whoops! One `asSeenFrom` should do... ``` + final protected def memberInfoInstantiated: Type = + appliedType(sym.info.asSeenFrom(pre, sym.owner), if (args.isEmpty) dummyArgs else args) ```
* | Merge pull request #4989 from retronym/ticket/SD-88Seth Tisue2016-02-221-2/+0
|\ \ | | | | | | Fix boostrap script when STARR isn't customized
| * | Fix boostrap script when STARR isn't customizedJason Zaugg2016-02-221-2/+0
| | | | | | | | | | | | Fixes scala/scala-dev#88
* | | Merge pull request #4991 from ↵Vlad Ureche2016-02-225-6/+71
|\ \ \ | |/ / |/| | | | | | | | felixmulder/topic/scaladoc-shortDescription-annotation Add doc annotation `@shortDescription` to enable explicit synopsis
| * | Add doc annotation `@shortDescription` to enable explicit synopsisFelix Mulder2016-02-225-6/+71
|/ / | | | | | | | | | | | | | | Entities with this annotation will be able to control what is shown in the method summary on entity pages as well as the hover text on search results. Review: @VladUreche
* | Merge pull request #4979 from felixmulder/topic/scaladoc-search-progressVlad Ureche2016-02-184-42/+57
|\ \ | | | | | | Scaladoc: Add progress bar for search
| * | Add progress bar for searchFelix Mulder2016-02-184-42/+57
|/ /
* | Merge pull request #4978 from felixmulder/topic/scaladoc-better-hover-textVlad Ureche2016-02-186-27/+24
|\ \ | | | | | | Scaladoc: Add better hover-text in search results
| * | Add better hover-text in search resultsFelix Mulder2016-02-186-27/+24
|/ /
* | Merge pull request #4976 from retronym/topic/bootstrap-custom-starrJason Zaugg2016-02-181-7/+43
|\ \ | | | | | | bootstrap: configurable starr, skip docs on first module build
| * | bootstrap: configurable starr, skip docs on first module buildJason Zaugg2016-02-181-7/+43
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | A few small improvements I accumulated in while using this script to bootstrap the removal of trait implementation classes. - Allow an extra step to build STARR from a prior commit - Skip Scaladoc in the module builds first round - Speed up the step that cleans the remote repo by skipping the numerous "scala-actors-migration" directories. I've been using this successully as follows: (ant all.clean; mkdir ivy2-shadow; export STARR_REF=$(git rev-parse :/"Nuke trait implementation"); export WORKSPACE=$PWD; bash -ex ./scripts/jobs/integrate/bootstrap)
* | Merge pull request #4973 from felixmulder/topic/scaladoc-replace-utf8-glyphsLukas Rytz2016-02-173-43/+75
|\ \ | | | | | | Scaladoc: Replace UTF8 glyphs with the Material Typeface
| * | Replace UTF8 glyphs with the Material TypefaceFelix Mulder2016-02-173-43/+75
| | | | | | | | | | | | | | | | | | | | | | | | This commit removes arrows and other symbols previously provided by UTF8-symbols. Instead it uses the Material Typeface that we've used for the search icon and graph symbols. review: @VladUreche, @lrytz
* | | Merge pull request #4962 from retronym/topic/bump-partestStefan Zeiger2016-02-173-18/+3
|\ \ \ | | | | | | | | Update to partest 1.0.13
| * | | Update to partest 1.0.13Jason Zaugg2016-02-123-18/+3
| | | | | | | | | | | | | | | | | | | | Which lets us remove the dependency on sbt-partest-interface, as this has been incorporated into scala-partest itself.
* | | | Merge pull request #4969 from lrytz/valPatternOptStefan Zeiger2016-02-179-186/+201
|\ \ \ \ | |_|/ / |/| | | Tests for optimizing val patterns
| * | | Clean up some bytecode testsLukas Rytz2016-02-166-168/+111
| | | |
| * | | Tests for optimizing val patternsLukas Rytz2016-02-163-18/+90
| | | | | | | | | | | | | | | | Fixes https://github.com/scala/scala-dev/issues/28
* | | | Merge pull request #4972 from ↵Vlad Ureche2016-02-171-22/+18
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | felixmulder/topic/scaladoc-package-member-filtering Add package member filtering
| * | | | Add package member filteringFelix Mulder2016-02-171-22/+18
|/ / / / | | | | | | | | | | | | | | | | | | | | Previously only entities like classes and traits would allow for filter of members. This commit removes that restriction by always including the `<div id="order">` in the entity template.
* | | | Merge pull request #4912 from felixmulder/topic/scaladoc-new-searchVlad Ureche2016-02-1724-999/+2212
|\ \ \ \ | |/ / / |/| | | add new search - featuring entity and member search
| * | | Scaladoc: Add new search, featuring entity and member searchFelix Mulder2016-02-1724-999/+2212
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a revamped search function for the scaladoc tool. It also contains a number of small fixes for HTML-layout and JavaScript issues. The search is implemented by enhancing the scheduler and using JavaScript promises. List of changes/additions: * Revamped search functionality - Search members as well as entities - Preserve keyboard navigation - Scroll to selected entity if outside of viewport - Non-blocking, cancelable * Display of library name (top left) * Refactored scheduler * Cleanup of HTML layout - Remove left pane - Better mobile layout, no need for dynamic offsets - Remove unused element classes - Remove iframe structure - Better layout for kinds
* | | Merge pull request #4966 from lrytz/inlineProjectLukas Rytz2016-02-155-15/+29
|\ \ \ | | | | | | | | SD-79 don't issue spurious inliner warnings under l:project
| * | | SD-79 don't issue spurious inliner warnings under l:projectLukas Rytz2016-02-155-15/+29
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When enabling `-Yopt:inline-project` (or `-Yopt:l:project`), the inliner would spuriously warn about callsites to methods marked `@inline` that are read from the classpath (not being compiled currently). This patch introduces yet another field to the `Callsite` class, which is growing a bit too large. But the call graph representation will get an overhaul when implementing the new inliner heuristics (2.12.0-M5), so this is just a temporary fix that would be nice to have in M4.
* | | Merge pull request #4963 from lrytz/simplerBranchingLukas Rytz2016-02-156-103/+242
|\ \ \ | | | | | | | | Generate leaner code for branches
| * | | Avoid generating ACONST_NULL; POP; ACONST_NULL when loading nullLukas Rytz2016-02-144-12/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When loading a value of type scala.runtime.Null$ we need to add POP; ACONST_NULL, see comment in BCodeBodyBuilder.adapt. This is however not necessary if the null value is a simple ACONST_NULL. This patch eliminates that redundancy.
| * | | Generate leaner code for branchesLukas Rytz2016-02-133-91/+173
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GenBCode used to generate more bytecode for branching instructions than GenASM. A simple method def f(x: Int, b: Boolean) = if (b) 1 else 2 would generate ILOAD 2 IFNE L1 GOTO L2 L1 ICONST_1 GOTO L3 L2 ICONST_2 L3 IRETURN If the conditional branch is negated (IFEQ) the GOTO is unnecessary. While -Yopt:l:method would clean this up, it's also not too hard to generate the leaner bytecode in the first place.
* | | | Merge pull request #4965 from lrytz/t8790Jason Zaugg2016-02-151-0/+20
|\ \ \ \ | |/ / / |/| | | SI-8790 test case
| * | | SI-8790 test caseLukas Rytz2016-02-131-0/+20
|/ / / | | | | | | | | | | | | Tuples created for pattern matching are eliminated since https://github.com/scala/scala/pull/4858
* | | Merge pull request #4944 from lrytz/stringBuilderNoBoxLukas Rytz2016-02-125-46/+135
|\ \ \ | |/ / |/| | SI-9571 Avoid boxing primitives in string concatenation
| * | SI-9571 Avoid boxing primitives in string concatenationMarko Elezovic2016-02-064-46/+120
| | |
| * | test case for optimizing BooleanOrdering.compareLukas Rytz2016-02-041-0/+15
| | |
* | | Merge pull request #4894 from mmynsted/2.12.xJason Zaugg2016-02-121-1/+11
|\ \ \ | | | | | | | | Provide simpler commented example for Future.map
| * | | Making commented example simpler for mapMark Mynsted2016-01-191-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adding connection between map and for As described by SethTisue. Removing parentheses Fixing scaladoc
* | | | Merge pull request #4896 from retronym/topic/indy-all-the-thingsJason Zaugg2016-02-1220-188/+363
|\ \ \ \ | | | | | | | | | | Use invokedynamic for structural calls, symbol literals, lambda ser.
| * | | | Use invokedynamic for structural calls, symbol literals, lamba ser.Jason Zaugg2016-01-2920-188/+363
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous encodings created static fields in the enclosing class to host caches. However, this isn't an option once emit code in default methods of interfaces, as Java interfaces don't allow private static fields. We could continue to emit fields, and make them public when added to traits. Or, as chosen in this commit, we can emulate a call-site specific static field by using invokedynamic: when the call site is linked, our bootstrap methid can perform one-time computation, and we can capture the result in the CallSite. To implement this, I've allowed encoding of arbitrary invokedynamic calls in ApplyDynamic. The encoding is: ApplyDynamic( NoSymbol.newTermSymbol(TermName("methodName")).setInfo(invokedType) Literal(Constant(bootstrapMethodSymbol)) :: ( Literal(Constant(staticArg0)) :: Literal(Constant(staticArgN)) :: Nil ) ::: (dynArg0 :: dynArgN :: Nil) ) So far, static args may be `MethodType`, numeric or string literals, or method symbols, all of which can be converted to constant pool entries. `MethodTypes` are transformed to the erased JVM type and are converted to descriptors as String constants. I've taken advantage of this for symbol literal caching and for the structural call site cache. I've also included a test case that shows how a macro could target this (albeit using private APIs) to cache compiled regexes. I haven't managed to use this for LambdaMetafactory yet, not sure if the facility is general enough.
* | | | | Merge pull request #4957 from retronym/topic/merge-2.11.x-to-2.12.x-20160210Seth Tisue2016-02-1115-19/+502
|\ \ \ \ \ | | | | | | | | | | | | Merge 2.11.x to 2.12.x [ci:last-only]
| * \ \ \ \ Merge commit '39a858d' into topic/merge-2.11.x-to-2.12.x-20160210Jason Zaugg2016-02-113-18/+17
| |\ \ \ \ \
| | * | | | | Fix SBT tab completion of scala commandJason Zaugg2016-02-113-18/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `scala -deprecation` (without a trailing script argument) wasn't allowed. Now it is. I also supported trailing whitespace on all commands. Also fixed: a bug with completion of `scalac ./san<TAB>`. It was completing as though the `./` had not been typed, which threw the suggestion off by a few characters.
| * | | | | | Merge branch '2.11.x' into topic/merge-2.11.x-to-2.12.x-20160210Jason Zaugg2016-02-1015-19/+503
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/library/scala/collection/Iterator.scala | `-- trivial conflicts only. Parens were added to the next() calls in 2.12.x, while in the meantime `{Concat,Join}Iterator` were optimized in 2.11.x
| | * | | | | Merge pull request #4950 from retronym/topic/sbt-tweaks-3Seth Tisue2016-02-096-4/+421
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | SBT build improvements
| | | * | | | | Add SBT tab completion for scala{,c,doc}Jason Zaugg2016-02-094-18/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also refactor the partest parser to use the improved tab completion for test paths.
| | | * | | | | Enable IntellIJ smarts while editing the buildJason Zaugg2016-02-072-1/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Even though our build can't be imported into IntelliJ automatically, we don't need to live in the dark ages of red squigglies when editing build.sbt. This commit hand-crafts the module defintion for the project, which has SBT and its dependendencies on the classpath. A screenshot of the code assist is worth the thousand expletives I uttered while writing the pictured code without this facility: https://www.dropbox.com/s/6mxv0iwxkhvnor7/Screenshot%202016-02-07%2022.09.12.png?dl=0 To download the sources for the SBT JARs that are referenced herein, run sbt> reload plugins sbt> updateClassifiers
| | | * | | | | Add tab completion to the partest commandJason Zaugg2016-02-062-1/+87
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can complete partest options (I've excluded some that aren't relevant in SBT), as well as test file names. If `--srcpath scaladoc` is included, completion of test paths will be based on `test/scaladoc` rather than the default `test/files`. Note that the `--srcpath` option is currently broken via scala partest interface, this change to scala-partest is needed to make it work: https://github.com/scala/scala-partest/pull/49 I've also hijacked the `--grep` option with logic in the SBT command itself, rather than passing this to `partest`. Just like `./bin/partest-ack`, this looks for either test file names or regex matches within the contents of test, check, or flag files. I tried for some time to make the tab completion of thousands of filenames more user friendly, but wasn't able to get something working. Ideally, it should only suggest to `test/files/{pos, neg, ...}` on the first <TAB>, and then offer files on another TAB. Files should also be offered if a full directory has been entered. Hopefully a SBT parser guru will step in and add some polish here.
| | | * | | | | Convenient aliases for the SBT buildJason Zaugg2016-02-051-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The idea here is to avoid the need for switching between the SBT shell and Bash. - Add aliases for partest, scala{,c,p,doc} - Change working directory for these forked processes to the root project base directory, rather than the subprojects base directory. This lets us use relative paths to files in a more familar way. - Don't log the output of forked processes with the `[info] ` prefix, rather pass it through directly to stdout. Demo: ``` > partest --terse test/files/pos/t6231.scala [info] Packaging /Users/jason/code/scala2/build-sbt/pack/lib/scala-partest-javaagent.jar ... [info] Done packaging. Selected 1 tests drawn from specified tests . [info] Passed: Total 1, Failed 0, Errors 0, Passed 1 [success] Total time: 3 s, completed 05/02/2016 12:44:19 PM > scala sandbox/test.scala [info] Running scala.tools.nsc.MainGenericRunner -usejavacp sandbox/test.scala Hello, World! [success] Total time: 4 s, completed 05/02/2016 12:45:08 PM > scalac sandbox/test.scala [info] Running scala.tools.nsc.Main -usejavacp sandbox/test.scala [success] Total time: 3 s, completed 05/02/2016 12:45:15 PM > scala Test [info] Running scala.tools.nsc.MainGenericRunner -usejavacp Test Hello, World! [success] Total time: 1 s, completed 05/02/2016 12:45:20 PM > scala [info] Running scala.tools.nsc.MainGenericRunner -usejavacp Welcome to Scala 2.11.8-20160204-090931-42525ec (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_71). Type in expressions for evaluation. Or try :help. scala> 1.to to toBinaryString toByte toChar toDegrees toDouble toFloat toHexString toInt toLong toOctalString toRadians toShort toString scala> 1.toString res0: String = 1 scala> :quit [success] Total time: 8 s, completed 05/02/2016 12:45:48 PM > ```
| | * | | | | | Merge pull request #4937 from szeiger/issue/9623-2.11Seth Tisue2016-02-082-6/+73
| | |\ \ \ \ \ \ | | | |/ / / / / | | |/| | | | | SI-9623 Avoid unnecessary hasNext calls in JoinIterator & ConcatIterator