| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
* Hook into java parser to generate doc comments
* Generate empty trees for java implementation bodies
|
|\
| |
| | |
Fix typo in test comment
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Also logged in as SD-162
The optimizer had conservative checks in place to perform closure
elimination only for Scala Function types. We can eliminate IndyLambda
instructions for any functional interface. LambdaMetaFactory only
constructs lambda objects for interface types, which don't have any
side-effects on construction - they don't have a constructor.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This commit switches to using 2.12.0-M3-dc9effe as STARR,
so that we can switch to the new trait encoding where
each concrete trait member gets a a static member,
which has the actual implementation (as well as
serving as a target for for super calls using invokestatic),
and a default member (forwards to the static member).
Also bump partest to 1.0.17 -- the release that goes
with the in-sourcing of scalacheck.
Replace a few more -Yopt with -opt (for our new STARR)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
And use this as the target of the default methods or
statically resolved super or $init calls.
The call-site change is predicated on `-Yuse-trait-statics`
as a stepping stone for experimentation / bootstrapping.
I have performed this transformation in the backend,
rather than trying to reflect this in the view from
Scala symbols + ASTs.
We also need to add an restriction related to invokespecial to Java
parents: to support a super call to one of these to implement a
super accessor, the interface must be listed as a direct parent
of the class.
The static method names has a trailing $ added to avoid duplicate
name and signature errors in classfiles.
|
| | |
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was throwing a UnsupportedOperationError for small operations.
The parallel collections test suite sets `-minSuccessfulTests 5` in
test/files/scalacheck/parallel-collections/pc.scala, which is far
lower thatn the default of 100, and means that we are less likely
to falsify properties.
This parameter seems to have been added in #2476, assuming I'm reading
it correctly. Not sure of the motiviation, perhaps just to make the
slowest part of the scalacheck test suite run faster?
I haven't changed the paramater now, but instead have included a one
element collection in generator.
I also found that when the test failed, Scalacheck would try to minimize
the example, but did so assuming that the elements of the tuple of
test data could be independentally shrunk. This breaks the invariant
that the two collections contain equal elements, and led to spurious
error reports. I have disabled shrinking in all tests tests affected
by this.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Support directories in `-doc-external-doc`: It is documented as
accepting a “classpath_entry_path” for the keys but this only worked
for JARs and not for individual class files. When checking for
external-doc mappings for a Symbol, we now find the root directory
relative to a class file instead of using the full class file path.
The corresponding tests for SI-191 and SI8557 are also fixed to
support individual class files instead of JARs in partest. This is
required for the sbt build which runs partest on “quick” instead of
“pack”.
- Fix version and repository handling for bootstrapping. The bootstrap
`scalaInstance` can now be resolved from any repository added to the
project (not just the bootstrap repositories) by using a different
workaround for https://github.com/sbt/sbt/issues/1872.
- Workaround for https://github.com/sbt/sbt/issues/2640 (putting the
wrong `scalaInstance` on partest’s classpath). The required
`ScalaInstance` constructor is deprecated, so we have to disable
deprecation warnings and fatal warnings until there is a better fix.
- Add MiMa to the sbt build (port of the old `test.bc` ant task). The
sbt-mima plugin doesn’t have all the features we need, so we do it
manually in a similar way to what the plugin does. Checks are done
in both directions for the `library` and `compiler` projects. The
base version has to be set in `build.sbt`. When set to `None`, MiMa
checks are skipped. MiMa checks are run sequentially to avoid spurious
errors (see https://github.com/typesafehub/migration-manager/issues/115).
- Port the OSGi tests to the sbt build. The set of JARs that gets copied
into build/osgi as bundles is a bit different from the ant build. We
omit the source JARs but add additional modules that are part of the
Scala distribution, which seems more correct.
- Get rid up `pull-binary-libs.sh` for the sbt build. Add artifacts are
resolved from the special bootstrap repository through Ivy. The
special `code.jar` and `instrumented.jar` artifacts are copied to the
location where partest expects them (because these paths are hardcoded
in partest). Other extra JARs for partest in `test/files/lib` are
referenced directly from the Ivy cache.
- Move common settings that should be available with unqualified names
in local `.sbt` files and on the command line into an auto-plugin.
- Add an `antStyle` setting to sbt to allow users to easily enable
ant-style incremental compilation instead of sbt’s standard name
hashing with `set antStyle := true`.
- Disable verbose `info`-level logging during sbt startup for both,
`validate/test` and `validate/publish-core` jobs. Update logging is
no longer disabled when running locally (where it is useful and
doesn’t generate excessive output).
- Pass optimization flags for scalac down to partest, using the new
partest version 1.0.15\6.
- Call the new sbt-based PR validation from `scripts/jobs/validate/test`.
- Disable the tests `run/t7843-jsr223-service` and `run/t7933` from
https://github.com/scala/scala/pull/4959 for now. We need to set up
a new test project (either partest or junit) that can run them on a
packaged version of Scala, or possibly move them into a separate
project that would naturally run from a packaged Scala as part of the
community build.
|
|\| |
|
| |\
| | |
| | | |
SI-9245 Fresher name in Try and test
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Fresh name for catcher gets a dollar. "Here, have a dollar."
Test due to retronym demonstrates possible conflict.
Over the lifetime of the universe, surely at least one code
monkey would type in that identifier to catch a banana.
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Cherry-picked c5f3d3f286ee5c26c8ddcf10f6878058e8f7e040
Edited comment: in stringOf, let GenIterable subsume
both Iterable and ParIterable.
This change is required for Scala.js compatibility as it does not
support parallel collections.
Conflicts:
src/library/scala/runtime/ScalaRunTime.scala
|
| |
| |
| |
| |
| |
| |
| |
| | |
So far, line numbers were kept only when inlining from the same class.
We can also keep them when inlining from a different class defined in
the same compilation unit.
Longer-term we should support JSR-45, see SI-7518 and scala-dev#3.
|
| | |
|
| |
| |
| |
| |
| |
| | |
this change is a bit scary because it changes code that's not been
changed in 11 years
https://github.com/scala/scala/commit/7fa7c93#diff-d5789e5ae5061197d782d08324b260dbL214
|
| |
| |
| |
| |
| |
| |
| | |
For classes being compiled (vs. being loaded from classfiles), keep the
source file path in the bytecode repo. This will allow to keep line
numbers when inlining from one class into another in case the two are
defined in the same compilation unit.
|
|\ \
| | |
| | | |
SI-9390 Emit local defs that don't capture this as static
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
An existing optimization in `Constructors` elides the outer
field in member and local classes, if the class doesn't use
the outer reference. (Member classes also need to be final,
which is a secret handshake to say we're also happy to weaken
prefix matching in the pattern matcher.)
That optimization leaves the constructor signature as is: the
constructor still accepts the outer instance, but does not store
it. For member classes, this means that we can separately compile
code that calls the constructor.
Local classes need not be hampered by this constraint, we could
remove the outer instance from the constructor call too.
Why would we want to do this?
Let's look at the case before and after this commit.
Before:
```
class C extends Object {
def foo(): Function1 = $anonfun();
final <static> <artifact> def $anonfun$foo$1($this: C, x: Object): Object = new <$anon: Object>($this);
def <init>(): C = {
C.super.<init>();
()
}
};
final class anon$1 extends Object {
def <init>($outer: C): <$anon: Object> = {
anon$1.super.<init>();
()
}
}
```
After:
```
class C extends Object {
def foo(): Function1 = $anonfun();
final <static> <artifact> def $anonfun$foo$1(x: Object): Object = new <$anon: Object>(null);
def <init>(): C = {
C.super.<init>();
()
}
};
final class anon$1 extends Object {
def <init>($outer: C): <$anon: Object> = {
anon$1.super.<init>();
()
}
}
```
However, the status quo means that a lambda that
This in turn makes lambdas that refer to such classes serializable
even when the outer class is not itself serialiable.
I have not attempted to extend this to calls to secondary constructors.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This avoids unnecessary memory retention, and allows lambdas
that call the local methods to be serializable, regardless of
whether or not the enclosing class is serializable.
The second point is especially pressing, given that the enclosing
class for local methods defined in a used to be the (serializable)
anonymous function class, but as of Scala 2.12 will be the enclosing
class of the lambda.
This change is similar in spirit to SI-9408 / 93bee55e.
|
|\| |
| | |
| | | |
Lambda impl methods static and more stably named
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The body of lambdas is compiled into a synthetic method
in the enclosing class. Previously, this method was a public
virtual method named `fully$qualified$Class$$anonfun$n`.
For lambdas that didn't capture a `this` reference, a static
method was used.
This commit changes two aspects.
Firstly, all lambda impl methods are now emitted static.
An extra parameter is added to those that require a this
reference.
This is an improvement as it:
- allows, shorter, more readable names for the lambda impl method
- avoids pollution of the vtable of the class. Note that javac uses
private instance methods, rather than public static methods. If
we followed its lead, we would be unable to support important use
cases in our inliner
Secondly, the name of the enclosing method has been included in
the name of the lambda impl method to improve debuggability and
to improve serialization compatibility. The serialization improvement
comes from the way that fresh names for the impl methods are
allocated: adding or removing lambdas in methods not named "foo" won't
change the numbering of the `anonfun$foo$n` impl methods from methods
named "foo". This is in line with user expectations about anonymous
class and lambda serialization stability. Brian Goetz has described
this tricky area well in:
http://cr.openjdk.java.net/~briangoetz/eg-attachments/lambda-serialization.html
This commit doesn't go as far a Javac, we don't use the hash of the
lambda type info, param names, etc to map to a lambda impl method name.
As such, we are more prone to the type-1 and -2 failures described there.
However, our Scala 2.11.8 has similar characteristics, so we aren't going
backwards.
Special case in the naming: Use "new" rather than "<init>" for constructor enclosed
lambdas, as javac does.
I have also changed the way that "delambdafy target" methods are identifed.
Rather than relying on the naming convention, I have switched to using a
symbol attachment. The assumption is that we only need to identify them
from within the same compilation unit.
This means we can distinguish impl metbods for expanded functions
(ones called from an `apply` method of an ahead-of-time expanded
anonfun class), from those that truly end up as targets for lambda
metafactory. Only the latter are translated to static methods in
this patch.
|
|\ \ \
| | | |
| | | | |
Prohibit @native method in trait
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
On the JVM, a @native interface method results in a VerifyError.
Other platforms could decide to be more permissive, but it seems
like allowing them in classes is enough.
|
|\ \ \ \
| | | | |
| | | | | |
SI-8667 Improve too-many-args message
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Pick the first excessive positional arg for the caret.
Note that erroring on named args doesn't do the obvious thing
in this regard.
If `k` was removed from the signature, then `f(k=1, i=2, j=3)`
doesn't tell us much about the wrong arg, because naming takes
the `k=1` as an assignment, `i` as duplicate naming. No arg is
deemed extra, though further inspection of the conflicting args
might get there. Since assignment syntax in parens is more|less
deprecated (?), no more effort is done here.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Use removeNames to help diagnose the application.
Supplement the error message with how many extra
args and any other residual assignments that the
user might have thought was a properly named arg.
The error message is gradual: succinct for short
arg lists, more verbose for longer applications.
Very long arg lists are probably generated, so
that message is the least colloquial.
|
| |/ / /
|/| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
If `-raw` is not supplied explicitly to REPL `:paste`,
see if the code text starts with `package` keyword or
else see if it parses to a named package (to cope with
leading commentary). In that case, take it as raw.
But parse only on suspect comment slash.
It's only worth parsing for a package if there's a chance
that package keyword is buried behind comments.
Small refactors to the `paste` object.
|
|\ \ \ \
| | | | |
| | | | | |
Fix comparisons involving NaN
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Floating point comparisons involving NaN should always return false,
except for !=. Fixes a regression introduced by #4963.
|
| | | | | |
|
|\ \ \ \ \
| | |_|_|/
| |/| | | |
|
| |\ \ \ \
| | | | | |
| | | | | | |
SI-7898 Read user input during REPL warmup
|
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Text-based REPL pre-parses, so use the current label for errors.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Use a "label" for errors, so that script names are shown.
Position is still wrong for scripts in REPL.
Initial scripts are run with `ILoop.echo` and results printing
turned off, but reporter still enabled.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
The compiler is created on main thread and user input is read
on an aux thread (opposite to currently).
Fixes completion when `-i` is supplied.
Now `-i` means pasted and new option `-I` means line-by-line.
The temporary reader uses postInit to swap in the underlying
reader.
Completion is disabled for the temporary reader, rather than
blocking while it waits for a compiler. But manically hitting
tab is one way of knowing exactly when completion is live.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
The original probe sequence, taken from Python's hash table code, is
exponential, jumping around in the hash table with poor memory locality.
This replaces the probe algorithm with the more conventional quadratic
probing.
This also adds tests to the benchmarking code using AnyRef keys, which
have pseudorandom hash codes (unlike Ints, whose hash code is simply
the Int itself). The intensity of the benchmarking is reduced to make
the tests complete within 9 hours, by removing unnecessary sampling.
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
Use jarlister in build
|
| | |/ / / /
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
The goal of this change is to exercize the "manifest classpath" mechanism,
meant to bring the compiler its needed classes as resources, listed
in jar manifests, as opposed to files, thus enabling to use the compiler
in sandboxed environments (and also the scripting engine for that matter).
|
|\| | | | | |
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
JMH-based benchmark framework
|
| | | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Besides tweaks to the documentation, this tests smaller (25-element)
maps, and rewrites OpenHashMapRunner in more idiomatic Scala.
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
For the warm-up invocations, suppress setup and teardown that is only
needed for the measurement iterations. Reduce the number of forks.
|
| | | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Also add sbteclipse to the benchmark project.
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
In order to get a better exploration of the variance of tests in a
limited time, I've reduced the number of measurement iterations and
increased the number of forks. By sight, the measurement iterations
seemed pretty consistent within a trial, whereas they would vary
widely on occasional forks.
I extended testing down to 50-entry maps, to explore the rise in
service times that I was seeing at small scale. This is probably a
timing artifact, from too-short invocations, since I'm using
@Level.Invocation in the put() tests. To fix that, I enlarged the
unit of testing, by creating multiple, sometimes thousands, of maps
for the invocation to fill. This has also changed the test from
filling a previously-filled map, to filling a new, but sufficiently
sized map. The put()/remove() test now performs much worse (on a
more realistic scenario).
This also adds a couple tests for calling get() against a map that's
been filled only with put()s, or with a mix of put() and remove().
|
| | | | | | | |
|