| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This performs method specialization inside a scope other than a {class,
trait, object}: could be another method or a value. This specialization
is much simpler, since there is no need to record the new members in
the class signature, their signatures are only visible locally.
It works according to the usual logic:
- we use normalizeMember to create the specialized symbols
- we leave DefDef stubs in the tree that are later filled in by tree
duplication and adaptation
The solution is limited by SI-7579: since the duplicator loses the sym
annotations when duplicating, this expansion and rewiring can only take
place in code that has not been subject to duplication. You can see the
test case for an example.
Review by @dragos, @paulp or @axel22.
|
|\
| |
| | |
Get rid of raw types which cause unnecessary warnings
|
| | |
|
|\ \
| | |
| | | |
SI-7600 [Avian] Skip tests r/stream_length and r/t4294
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The issue is that Avian's GC is currently not precise enough to
determine the exact lifetime of each local/stack reference, and
therefore considers the this reference to be reachable in situations
where it could have been collected.
This can cause issues (as seen in run/stream_length and run/t4294:
`java.lang.OutOfMemoryError`) if code relies on the garbage collection
of these values to keep memory consumption constant.
This commit simply skips these two tests on Avian until the GC
implementation is fixed.
|
|\ \
| | |
| | | |
SI-3936 - add test case to show that SI-3936 is already fixed
|
| |/
| |
| |
| |
| | |
These are exactly the examples given by Lukas Rytz in SI-3936.
They fail with 2.10.1 and compile with 2.10.2 as well as current master.
|
|\ \
| | |
| | | |
Modularize parsing
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
tools.cmd.CommandLineParser uses a small hand-rolled parser
TODO: replace partest's usage of scala.tools.nsc.util.CommandLine
by scala.tools.cmd.CommandLine
|
|\ \ \
| | | |
| | | | |
SI-7599 Modify methods to be non-tail-callable ...
|
| | |/
| |/|
| | |
| | |
| | | |
This commit modifies methods in the test to be non-tail-callable to
prevent Avian from eliding the stack frames we want to inspect.
|
|\ \ \
| | | |
| | | | |
SI-6855: REPL emits error on partial pastie
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
If pasted code is interpreted with an incomplete result,
attempt to compile it to display an error.
Unfancily, the code is wrapped in an object for compilation.
|
|\ \ \ \
| |_|_|/
|/| | | |
SI-7584 Fix typer regression with by-name parameter types
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The enclosed test case exercises by-name closures, which were
the subject of the previous commit. In the process, a spurious
warning was eliminated.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
It regressed in fada1ef6b#L4L614. Partially reverting just
this change restores the correct behaviour:
```
- if (sym.isStable && pre.isStable && !isByNameParamType(tree.tpe) &&
+ if (treeInfo.admitsTypeSelection(tree) &&
```
This patch embeds the check for by-name parameter types into
`TreeInfo.isStableIdentifier`. That code already checks for
`Symbol#isStable`, which exludes direct references to by-name
parameters. But the additional check is required to deal with
by-name parameters in function types, e.g `(=> Int) => Any`.
Open question: should we go further and embed this check in `isStable`?
Currently:
final def isStable = isTerm && !isMutable && !(hasFlag(BYNAMEPARAM)) && (!isMethod || hasStableFlag)
Such function types are an underspecified corner of the language,
albeit one that is pretty useful writing, for example, in the
signature of a lazy foldRight that can operate over infinite
structures:
def foldRight[A, B](fa: F[A], z: => B)(f: (A, => B) => B): B
The next commit subjects them to a little testing.
|
|\ \ \ \
| | | | |
| | | | | |
Spin off xml library as scala-library-xml.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
When there's no Predef.$scope but xml is being used,
the compiler aliases scala.xml.TopScope to $scope.
There must be a scala.xml package when xml literals were parsed.
For compatibility with the old library, which relied on $scope being in scope,
synthesize a `import scala.xml.{TopScope => $scope}` when xml is needed,
but there's no Predef.$scope and the old library is detected (scala.xml.TopScope exists).
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Copied the following files from scala.xml to ast.parser.xml:
- MarkupParsers differs from scala.xml.MarkupParsers only in the first 17 lines
- Utility.scala was refactored and reduced (also includes TokenTests)
|
| | | | |
| | | | |
| | | | |
| | | | | |
Inlined TextBuffer.
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
runtime.ScalaRunTime.stringOf's behavior has changed slightly:
Call the object's `toString` for all classes in `scala.xml._`,
instead of only for `Node` and `MetaData` (old behavior).
|
| | | | |
| | | | |
| | | | |
| | | | | |
Added deprecated conversions in xml.Elem to preserve source compatibility.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-7569 Fix end position in PostfixSelect tree
|
|/ / / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
introduced in 5b54681: the end position of Postfix operators should
take the operator length into account.
review by @som-snytt
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-7433 Fix spurious warning about catching control throwable
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
In the same vein as SI-6994, we have to be careful not to warn
about synthetic code. In that case, the spurious warnings came
because we warned in the typechecker, which was also called in
erasure. In this case, we are issuing the warning in Uncurry,
so we must be mindful of the pattern matchers translations of
non-trivial catch patterns, which look like:
case (ex8 @ _) => {
<synthetic> val x5: Throwable = ex8;
case11(){
if ({
case14(){
if (x5.$isInstanceOf[NullPointerException]())
matchEnd13(true)
else
case15()
};
case15(){
if (x5.$isInstanceOf[RuntimeException]())
matchEnd13(true)
else
case16()
};
case16(){
matchEnd13(false)
};
matchEnd13(x: Boolean){
x
}
})
This commit detects that `ex8` is synthetic and disables the warning.
|
|\ \ \ \ \ \
| |_|_|_|_|/
|/| | | | | |
SI-7439 Avoid NPE in `isMonomorphicType` with stub symbols. …
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
`originalInfo` can return null for stub symbols; deal with that
as we used to before a regression in 016bc3db.
After this change, we can once again delete A_1.class and still compile
code instantiating B_1. (A_1 is only referred to in a method signature
of B_1 which is not called from our code.)
scala> new B_1
warning: Class A_1 not found - continuing with a stub.
res0: B_1 = B_1@5284b8f9
In practice, this situation arises when someone uses a third
party class that was compiled against other libraries not avaialable
on the current compilation classpath.
|
|\ \ \ \ \ \
| |_|_|_|_|/
|/| | | | | |
SI-7292 Fixes test failures by updating *.check files
|
|/ / / / /
| | | | |
| | | | |
| | | | |
| | | | | |
Looks like partest's confusion about / vs. \ was fixed between
the original Jenkins run of the fix for SI-7292 and its merge.
|
|\ \ \ \ \
| |_|_|/ /
|/| | | | |
SI-7292 Deprecate octal escape literals
|
| | | | | |
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-6899, prohibit dangerous, useless implicit conversions.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Increase eligibility requirements for implicit conversions,
such that T => U is ineligible if
T <: Null <or> AnyRef <: U
This has the salutary effect of allowing us to ditch 16
ridiculous implicits from Predef, since they existed solely
to work around the absence of this restriction.
There was one tiny impact on actual source code (one line
in one file) shown here, necessitated because the literal null
is not eligible to be implicitly converted to A via <:<.
def f[A](implicit ev: Null <:< A): A = null // before
def f[A](implicit ev: Null <:< A): A = ev(null) // after
As impositions go it's on the tame side.
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
SI-7364 Allow raw types in parent position in Java sources
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
To make this work, this commit simply restricts parent
type argument inference to Scala source files.
The surrounding code has also been refactored to avoid a var.
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
SI-7151 Emit final in bytecode for final inner classes.
|
| | |_|_|/ / /
| |/| | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
As we did before a regression in 18efdedfb / SI-5676.
This commit tightens up the condition in which the FINAL
modifier is omitted; it now *only* does this for the module
classes of nested objects.
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
SI-5022 Retain precise existentials through pattern matching
|
| | |/ / / / /
| |/| | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
From the dawn of scalac's existentials, the typer widens
existentials pt-s by substituting wildcard types in places
of existential quantifiers.
In this example:
class ForSomeVsUnapply {
def test {
def makeWrap: Wrap = ???
def useRep[e](rep: (e, X[e])) = ()
val rep = makeWrap match {
case Wrap(r) => r
};
useRep(rep) // error
}
}
the type of `r` is the result of typechecking:
Apply(
fun = TypeTree(
tpe = (rep#12037: (e#12038, X#7041[e#12038]) forSome { type e#12038 })
args = Bind(r @ _) :: Nil
}
This descends to type the `Bind` with:
pt = (e#12038, X#7041[e#12038]) forSome { type e#12038 }
`dropExistential` clobbers that type to `Tuple2#1540[?, X#7041[?]]`,
which doesn't express any relationship between the two instances
of the wildcard type. `typedIdent` sort of reverses this with a call
to `makeFullyDefined`, but only ends up with:
pt = (Any#3330, X#7041[_1#12227]) forSome { type _1#12227; type e#12038 }
I suspect that this existential dropping only makes sense outside of
typechecking patterns. In pattern mode, type information flows from the
expected type onwards to the body of the case; we must not lose precision
in the types.
For SIP-18 friendly existentials, one `dropExistential` is invertable with
`makeFullyDefined`, so this hasn't been such a big problem.
The error message improvement conferred by SI-4515 took a hit.
That might be a good example to consider when reviewing this change:
Does it tell us anything interesting about this `dropExistential`
business?
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
Merge JUnit support into master
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
The WeakHashSetTest was written as unit test but put into partest's
`run` category as we were missing direct unit testing support.
That got fixed so moving the test now.
|
| |\ \ \ \ \ \ \
| | |_|_|_|_|_|/
| |/| | | | | | |
|
| | | | | | | | |
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Add `test.junit` ant target that compiles and runs JUnit tests
found in `test/junit` directory.
Add `scala.tools.nsc.SampleTest` that demonstrates working
testing infrastructure.
|
| | |\ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
[backport] SI-7498 ParTrieMap.foreach no longer crashes
|
| | |/ / / / / /
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Previously, the `split` method of the `ParTrieMap` iterator threw
an exception when splitting a splitter that iterated over nodes
whose hash codes collide.
This was due to reusing the iterator of the list of colliding keys
rather than creating a new splitter.
This commit changes the `subdivide` method to create a new
iterator using the factory method of the current trie map
iterator rather than returning a `LinearSeqLike` iterator.
|
|\ \ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
Add Duration.toCoarsest method
|
| | | | | | | | | |
|