| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
Simplify TypeRef hierarchy. baseType returns NoType, as needed for isSubtype. Also improves performance.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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)
```
|
|\ \
| | |
| | | |
Fix boostrap script when STARR isn't customized
|
| | |
| | |
| | |
| | | |
Fixes scala/scala-dev#88
|
|\ \ \
| |/ /
|/| |
| | |
| | | |
felixmulder/topic/scaladoc-shortDescription-annotation
Add doc annotation `@shortDescription` to enable explicit synopsis
|
|/ /
| |
| |
| |
| |
| |
| |
| | |
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
|
|\ \
| | |
| | | |
Scaladoc: Add progress bar for search
|
|/ / |
|
|\ \
| | |
| | | |
Scaladoc: Add better hover-text in search results
|
|/ / |
|
|\ \
| | |
| | | |
bootstrap: configurable starr, skip docs on first module build
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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)
|
|\ \
| | |
| | | |
Scaladoc: Replace UTF8 glyphs with the Material Typeface
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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
|
|\ \ \
| | | |
| | | | |
Update to partest 1.0.13
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Which lets us remove the dependency on sbt-partest-interface,
as this has been incorporated into scala-partest itself.
|
|\ \ \ \
| |_|/ /
|/| | | |
Tests for optimizing val patterns
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
Fixes https://github.com/scala/scala-dev/issues/28
|
|\ \ \ \
| | | | |
| | | | |
| | | | |
| | | | | |
felixmulder/topic/scaladoc-package-member-filtering
Add package member filtering
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|
|\ \ \ \
| |/ / /
|/| | | |
add new search - featuring entity and member search
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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
|
|\ \ \
| | | |
| | | | |
SD-79 don't issue spurious inliner warnings under l:project
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
|\ \ \
| | | |
| | | | |
Generate leaner code for branches
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|
|\ \ \ \
| |/ / /
|/| | | |
SI-8790 test case
|
|/ / /
| | |
| | |
| | |
| | | |
Tuples created for pattern matching are eliminated since
https://github.com/scala/scala/pull/4858
|
|\ \ \
| |/ /
|/| | |
SI-9571 Avoid boxing primitives in string concatenation
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
Provide simpler commented example for Future.map
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Adding connection between map and for
As described by SethTisue.
Removing parentheses
Fixing scaladoc
|
|\ \ \ \
| | | | |
| | | | | |
Use invokedynamic for structural calls, symbol literals, lambda ser.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
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 2.11.x to 2.12.x [ci:last-only]
|
| |\ \ \ \ \ |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
`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.
|
| |\| | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
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
|
| | |\ \ \ \ \
| | | | | | | |
| | | | | | | | |
SBT build improvements
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Also refactor the partest parser to use the improved tab
completion for test paths.
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
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
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
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.
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
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
>
```
|
| | |\ \ \ \ \ \
| | | |/ / / / /
| | |/| | | | | |
SI-9623 Avoid unnecessary hasNext calls in JoinIterator & ConcatIterator
|