| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The motivating use case was an Expecty debug string
getting flagged for `$eq`.
The test case demonstrates a different bug, in which
the position of the literal tree is changed when typer
gets rid of the unused local, so that when the tree is
re-typed in erasure, a second, spurious warning is
emitted at the start of the method. Specifically, the
second warning is not suppressed because of the
different position.
|
|\
| |
| | |
SI-6701, SI-7304, SI-6489, variable arity definitions refactoring
|
| |
| |
| |
| |
| |
| | |
Transform current arrays of symbols into function-like objects
that return NoSymbol at all places where corresponding arity isn't
available.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
1. macro parsing doesn't use toolbox any more but calls parser directly
2. in order for this to work parser has to be refactored to limit
usage of currentUnit and rewire it into parser's local unit
method which might use currentUnit for some parsers but will
user proper unit for UnitParser
3. similar change has to be done to make compilation unit's
reporter overridable
|
| | |
|
| | |
|
|\ \
| | |
| | | |
SI-7845 Disable test for JSR 233
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
For Paul, it steals focus when it runs.
For me, it fails with some platform specific extra output:
-ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider apple.applescript.AppleScriptEngineFactory could not be instantiated: java.lang.UnsatisfiedLinkError: no AppleScriptEngine in java.library.path
n: Object = 10
12345678910
So off to the holding pen for now.
|
|\ \
| | |
| | | |
SI-7844 Intellij setup.sh is not working for Ubuntu 12.04
|
| | |
| | |
| | |
| | | |
Added "-f" option to the command "rm"
|
|\ \ \
| | | |
| | | | |
SI-1909 SI-3832 SI-7007 SI-7223 Improved handling of larval objects
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
It's a clunky flag used to determine very early on whether
we're in the self-call, super-call or early-init section.
In SI-6666 / fd6125428, the check was improved to consider nesting.
But, that caused this regression, as Function's haven't been
translated to classes yet, so our check for enclosing non-term
owners failed wrongly flagged definitins body of a anonymous function
as INCONSTRUCTOR.
With this patch, we correctly flag:
class C extends D {
// INCONSTRUCTOR
() => {
!INCONSTRUCTOR
}
// INCONSTRUCTOR
}
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Rather than the old behaviour, which compiled successfully
but led us into the jaws of a LinkageError.
Related to SI-6666.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
SI-1909 modified LambdaLift to lift in auxiliary constructors methods as STATIC
so they could be called before the self-constructor was called.
That allowed for:
class Foo (x: Int) {
def this() = this( {
def bar() = 5
bar
})
}
However, if the method is in a statement that trails the self constructor call,
this is unnecessary and in fact incorrect as it robs the lifted method of `this`.
This commit uses the machinery established in SI-6666 to limit the STATIC-ness
of lifted methods to those used in arguments for self-constructor calls.
This is used exclusively; the `isAuxillaryConstructor` check wasn't the right
way to solve this, as was seen by the regression it caused in SI-3832.
A new test case shows that we can statically lift methods in super-constructor
calls, rather than just self-constructor calls.
We also have to avoid statically lifting objects in these positions. For now,
I just emit a dev warning that a VerifyError is in your future. With some more
thought we could escalate that to a implementation restriction and emit an error.
|
| | | |
| | | |
| | | |
| | | | |
In order to reduce the noise in OuterPathTransformer.
|
| | |/
| |/|
| | |
| | |
| | |
| | |
| | |
| | | |
When we're in the neighbourhood of VerifyErrors, it's better to run
the code.
This change is leading up to a fix for SI-3832, which regressed
with fix for SI-1909.
|
|\ \ \
| | | |
| | | | |
Reducing variation of tree creation methods.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
TreeDSL has no future - it was always a temporary measure
waiting for something like quasiquotes to come along. In this
commit I cull as much of it as I can, especially the delicate
matter of creating new DefDefs and ValDefs, which I completely
turn over to the old style creators.
I unified all the symbol-based DefDef and ValDef creators under
a single method, since it was yet another place where ctrl-C and
ctrl-V were being punched with glee. Was beaten to the punch on
adding copyTypeDef to fill out the *Def creators.
Eliminated as many redundant positioning calls as I could find.
If you are creating a DefTree tree based on a symbol, it will
always have an atPos(sym.pos) { ... } wrapped around it. You
don't need another one.
All of this is motivated by positions work: positions are
assigned in so many places and in such an ad hoc fashion that
it is impossible to bring consistency to that without first
bringing some consistency to tree creation.
|
| | | |
| | | |
| | | |
| | | |
| | | | |
This is the key ingredient so TypeTree(sym) can resist
widening the type.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The implementation had come to depend on finalResultType
accidentally doing things beyond its charter - in particular,
widening types. After hunting down and fixing the call sites
depending on the bugs, I was able to rewrite the method to do
only what it's supposed to do.
I threw in a different way of writing it entirely to suggest how
some correctness might be obtained in the future. It's a lot
harder for a method written like this to break.
|
|\ \ \ \
| | | | |
| | | | | |
SI-7843 Restore JSR 223 service entry
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The 2.10 fix to remove the ScriptEngine service entry
was inadvertently forwarded to 2.11.
This commit reverts and adds a test.
This situation was entirely foreseen by retronym,
proving beyond doubt that he is in fact a time traveler,
as hinted by his name. He brings bugs forward into the
future and returns into the past with fixes and other
alien technology like scalaz.
|
|\ \ \ \
| |_|_|/
|/| | | |
Consolidate Position classes.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
And changed the implementation internal traits to private[util]
rather than sealed because that's closer to the point. I would
make them "private" except that this incurs "private type escapes
scope" errors where private[util] does not.
Also improved file organization.
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Having now been burned several times thinking I had a chunk
of positions under my belt only to find my pants had vanished
when I forged ahead, I am carving out some intermediate stages
for positions.
This one only reshuffles the internals. It consolidates almost
all the behavior into one class, leaving little stub subclasses
to mimic the classes which came before - since nothing is final
or has access anything less than public, there's no way to touch
any constructor without breakage, so they all have to stay.
I removed redundant/incorrect documentation and rewrote the
rest of it, although I don't expect the lifespan of any of it
to be enormous.
The overall thinking behind the existing design was a bit elusive.
Concrete exception-throwing implementations were provided in the base
class for every method, with less exceptional overrides defined
in selected subclasses. If you're going to define every method
in the base class, concretely no less, then there is little
advantage and lots of disadvantage to spreading out over a bunch
of subclasses.
Note that now Position contains no state and has no constructor,
characteristics which behoove its possibly distant ambition
toward AnyValhood. Though that does ignore the "api" class it
inherits which brims with implementation detail, api.Position.
It is a burden which will likely prove heavy.
|
|\ \ \
| |/ /
|/| | |
SI-7839 Final val breaks checkinit build
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| | |
Scalac does not care to initialize the unused field it emits
for a `final val`. Users of the accessor method, which supplies
the constant definition inline, will find that -Xcheckinit will
throw.
Therefore, we don't use `final` for the `val phaseName`.
|
|\ \
| | |
| | | |
SI-7622 Clean Up Phase Assembly
|
| | | |
|
| | |
| | |
| | |
| | | |
Restores the verbiage "run right after".
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Let optimiser components and continuations plugin opt-out
when required flags are not set.
Wasted time on a whitespace error in check file, so let
--debug dump the processed check file and its diff.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Plugins can interrogate options and declare themselves not
enabled. The plugin itself can return false from its init
if the options do not compute. A plugin phase component
can declare itself not enabled, same as an internal phase.
No one exploits this facility at this commit.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
With -Ydebug, -Xshow-phases will show phases that are skipped
or not enabled.
The code is slightly refactored, so the flags table will also benefit.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Refactor the calculation of the "phase chain" a bit.
In particular, initial and terminal phases are not special
except that they must be head and last.
When done, filter for enabled phases. At this commit,
nobody claims to be disabled.
Additional sanity support of phases settings.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
-Xgenerate-phase-graph is comparable to -Xshow-phases.
The knowledge about what is an info-only option is refactored
to Settings, which also knows which group of options comprise
the optimiser set.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Fixing hash on nodes makes fault detection deterministic,
which aids testing.
Error messages are shortened and .dot files are dumped
automatically on faults to guard against future flakiness.
|
|\ \ \
| | | |
| | | | |
merge 2.10.x to master
|
| |\ \ \
| | | | |
| | | | |
| | | | |
| | | | | |
Conflicts:
src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
... rather than just in `test.suite.init`.
Now:
% ant pack.done | egrep -i 'compiling|jar'
desired.jars.uptodate:
[quick.partest-extras] Compiling 1 file to /Users/jason/code/scala/build/quick/classes/partest-extras
[jar] Building jar: /Users/jason/code/scala/build/pack/lib/scala-partest-extras.jar
Note: Because of the recent changes to the way that the classpath
or partest is build up (it is done via `ant test.suite.init`), partest
no longer works with quick/classes, the classpath is always taken as
`pack`. So `ant quick.bin && ./test/partest` is insufficient; you need
to run `ant pack.done`, or just `ant` if you prefer brevity.
|
| |\ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Conflicts:
src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala
|
| | |\ \ \ \
| | | | | | |
| | | | | | | |
SI-7818 Cast our way out of extended existential angst
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
`substituteSymbols` is not sophisticated enough to
operate on `TypeSkolem`-s which are based on one of the
"from" symbols.
The pertinant usage of `substituteSymbols` for this bug in
in `Extender`. Recapping on that transform:
// orig
class C[T](...) extends AnyVal { def foo[U] = <rhs> }
// transform
class C[T] extends AnyVal { ... }
object C { def foo$extension[T', U'] = <rhs'> }
Where `<rhs'>` has been subtituted with, among other things,
`[T, U] ~> [T', U']`.
In this case our expected type contains a new type parameter
(of the extension method), whereas the type of the RHS contains
an existential skolem still pinned to the corresponding class type
parameter.
tree.tpe = Observable1#7037[_$1#12344]
<_$1#12344>.info = <: T#7040
pt = Observable1#7037[T#15644]
The limitation of substution is lamented in the comments
of `adaptMismatchedSkolems`, which faces the harder version of
the issue where the skolems are in the expected type.
But, we're in the "easy" case with the skolems in the tree's type;
we can cast our way out of the problem.
See also f335e447 / ed915c54.
|
| | |\ \ \ \ \
| | | | | | | |
| | | | | | | | |
SI-7767 avoid rejecting Scaladoc comments in early initializers
|
| | | |\ \ \ \ \
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
Test case for SI-7767
|
| | | |/ / / / / |
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
review by @retronym
|
| | |\ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
SI-7269 Rework MapLike#retains to account for desugaring change
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
`MapLike#retains` contains a for-comprehension that relied on the strict
`filter` by its generator. You can't, in general, iterate a mutable map
and remove items in the same pass.
Here's the history of the desugaring of:
def retain[A, B](thiz: mutable.Map[A, B])(p: (A, B) => Boolean): thiz.type = {
thiz.foreach {
case (k, v) =>
if (p(k, v)) thiz -= k
}
Before regression (c82ecabad6~1):
thiz.filter(((check$ifrefutable$1) => check$ifrefutable$1: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => true
case _ => false
})).withFilter(((x$1) => x$1: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => p(k, v).unary_$bang
})).foreach(((x$2) => x$2: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => thiz.$minus$eq(k)
}));
After regression (c82ecabad6, which incorrectly assumed in the parser that
no filter is required for isInstanceOf[Tuple2])
thiz.withFilter(((x$1) => x$1: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => p(k, v).unary_$bang
})).foreach(((x$2) => x$2: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => thiz.$minus$eq(k)
}));
After the reversion of c82ecabad6, v2.10.2
This is also after 365bb2b4e, which uses `withFilter` rather than `filter`.
thiz.withFilter(((check$q$1) => check$ifrefutable$1: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => true
case _ => false
})).withFilter(((x$1) => x$1: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => p(k, v).unary_$bang
})).foreach(((x$2) => x$2: @scala.unchecked match {
case scala.Tuple2((k @ _), (v @ _)) => thiz.$minus$eq(k)
}));
This commit does the same as `SetLike#retains`, and converts the map to
an immutable list before the rest of the operation.
|
| | |\ \ \ \ \ \ \
| | | |_|/ / / / /
| | |/| | | | | | |
SI-7814 Avoid init cycle between Predef, `package`, ScalaRuntime
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
Some tests for specialization use a modified version of
the standard library that count boxing, array lookups etc.
These sources are updated manually with the script:
% test/instrumented/mkinstrumented.sh build
Looks that that wasn't done for a while, though.
This commit brings it up to date, and adjusts a few braces in
ScalaRuntime.scala so the patch srt.scala (used by that script)
is shorter.
We should really avoid checking in the products of that script and
run it as part of the build, or, better, use the bytecode
instrumentation framework instead of a modified standard library.
But I have to leave that for another day.
|