| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
SI-7969 REPL -C columnar output
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Extend column formatting to make columns only as wide as
their widest element. This is similar to what `ls` does.
Given the longest and shortest string, which bound the
min and max column count, compute the layout for those
possible column counts, and choose the minimal row count
and minimal column count.
The junit test is under pending because it uses expecty.
(Edit: updated without expectytations.)
Example that really benefits, witness the skinny columns:
```
scala> math.
BigDecimal PartiallyOrdered cosh rint
BigInt Pi exp round
E ScalaNumber expm1 signum
Equiv ScalaNumericAnyConversions floor sin
Fractional ScalaNumericConversions hypot sinh
IEEEremainder abs log sqrt
Integral acos log10 tan
LowPriorityEquiv asin log1p tanh
LowPriorityOrderingImplicits atan max toDegrees
Numeric atan2 min toRadians
Ordered cbrt package ulp
Ordering ceil pow
PartialOrdering cos random
```
more
|
| |
| |
| |
| | |
Make REPL classes testable in junit. Test the Tabulator.
|
|\ \
| | |
| | | |
SI-7872 Plug a variance exploit in refinement types
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Refinement types are collapsed to a TypeTree with an original
during type checking; this was enough to evade variance validation
in refchecks.
This commit:
- validates the original of `TypeTree`s in refchecks
- changes VarianceValidator to recurse into:
- the originals of `TypeTree`s
- `TypTree` (to cover, e.g. `CompoundTypeTree` / `SelectFromTypeTree`)
It also finds an unreported variance violation in an existing
test case, variances.scala. This looks to be legitimate.
|
|\ \ \
| | | |
| | | | |
SI-8001 spurious "pure expression does nothing" warning
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
`isPureExprForWarningPurposes` doesn’t warn on `()`, but `(): Unit`
leaves it confused. This patch fixes the problem.
The fix is important in the context of the recent split between blackbox
and whitebox macros. Macro engines wrap expansions of blackbox macros
in type ascriptions, so a macro that expands into `()` would actually
produce `(): Unit`, which would trigger a spurious warning. Thanks
@milessabin for spotting this problem!
|
|\ \ \ \
| | | | |
| | | | | |
SI-7967 Account for type aliases in self-type checks
|
| | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
These eluded the check for "illegal inheritance; self-type does not
conform" as AliasTypeRef doesn't forward `typeOfThis`.
This commit dealiases before calling `typeOfThis`. That seems to be
the most localised change.
Without the dealias, we had:
parent.tpe = TypeRef(pre, sym = AliasTypeSymbol("CC"), Nil)
parent.tpe.typeOfThis = parent.tpe.transform(sym.typeOfThis) = CC
After:
parent.tpe.dealias = TypeRef(pre, sym = ClassSymbol("C"), Nil)
parent.tpe.dealias.typeOfThis = C with B
|
|\ \ \ \
| | | | |
| | | | | |
Unifying -Ydelambdafy:{inline, method}
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Previously, new synthetic parameter symbols were created for the
apply method parameters, but only used in its `MethodType`. The
`ValDef` trees of the function, along with their symbols, were
used directly as the parameter trees of the apply method.
% cat sandbox/test.scala
object Test {
(x: Int) => {
(y: Int) => ???
}
}
% scalac-hash v2.10.3 -Xprint:typer,uncurry -uniqid ../scala2/sandbox/test.scala | egrep 'syntax|\bx'
[info] v2.10.3 => /Users/jason/usr/scala-v2.10.3-0-g88b5d19
[[syntax trees at end of typer]] // test.scala
((x#12152: Int#351) => x#12152)#12151
[[syntax trees at end of uncurry]] // test.scala
final def apply#15952(x#12152: Int#351): Int#351 = x#12152
This approach dates back a long way: c64152bc3. @odersky tells me it
was most likely due to insufficent substitution/cloning machinery
at the time.
% qbin/scalac -Xprint:typer,uncurry -uniqid ../scala2/sandbox/test.scala | egrep 'syntax|\bx'
[[syntax trees at end of typer]] // test.scala
((x#13685: Int#1760) => x#13685)#13671
[[syntax trees at end of uncurry]] // test.scala
final def apply#13959(x#13960: Int#1760): Int#1760 = x#13960
To make this work, I had to fix a problem in symbol substition; this
was commited in the previous commit. In the enclosed test, at Uncurry,
the symbol of the nested class `N` had a `ClassInfoType`, which listed
as a parent `M[a.C]`. When we substituted the new method parameter
symbol `a` for the eponymous function parameter symbol, this was not
touched.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
An upcoming change to uncurry, in which I plan to make substitution of
`lambda params -> apply method params` requires that I first to fix a
problem in symbol substition.
This situation can arise when the body of this definition:
def owner1(a: A) = {
class C extends M[a.B]
}
is transplanted into a new owner that has a different symbol for `a`.
I speculated that value classes might also be prone to the
fact that symbol substitution neglected `ClassInfoType#parents`.
We can test change with Value Classes: Partial Functions that are
dependent on value class param type used to fail with a spurious
overriding error, now they work correctly.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Test in quick mode for ant build
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Add a target `test.suite.quick`.
Let test.quick depend only on init and quick.done,
and load the task using the quick path (with non-core deps).
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
correctly fails implicit search for invalid implicit macros
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
There was a rare corner case when implicit search wouldn’t discard
an invalid implicit macro (e.g. the one with mismatching macro impl or
the one with macro impl defined in the same compilation run) during
typechecking the corresponding candidate in typedImplicit1. This is now fixed.
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
s.u.c.NonFatal: StackOverflowError is fatal
|
| | |/ / / / /
| |/| | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
As demonstrated in
https://groups.google.com/d/topic/scala-language/eC9dqTTBYHg, SOEs
should be considered fatal, because all popular JVM implementations
seem to run into inconsistent state (ignoring finally blocks leading
to not running monitorExit, leading to locks not being unlocked, ...)
if one just pushes them enough.
|
|\ \ \ \ \ \ \
| |/ / / / / /
|/| | | | | | |
Fix implicit divergence regression
|
| | |_|_|_|/
| |/| | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
As seen in Slick. Regressed in 039b1cb1a5b8.
In that commit, a call to `normalize` was replaced with `dealiasWiden`
as part of a broad sweeping change. However, while the latter does
less than the former with regards to eta expansion ofhigher kinded
type refs (the motivation of that commit), it also does more when it
comes to singleton types: they are widened to the underlying type.
This was widening away `SingleType(<<package a.b>>, <<package c>>)`
before the special case assiging that type component a complexity of
zero could kick in.
In the test case, extracted from Slick, this meant that the
divergence check would consider that the second type below to
outrank the first in the complexity measure, and abort the implicit
search.
Shape[?, ? (Coffees, Coffees), ?]
Shape[DivergenceTest.this.Flat, ?, Coffees, ?]
After this change, the number of packages enclosing `DivergenceTest`
no longer has a bearing on the complexity score of the type.
Here's how the race was run before hand:
complexity(<noprefix>): 0
complexity(<root>): 1
complexity(foo.type): 2
complexity(foo.bar.type): 3
complexity(foo.bar.baz.type): 4
complexity(DivergenceTest.this.type): 5
complexity(<noprefix>): 0
complexity(<root>): 1
complexity(foo.type): 2
complexity(foo.bar.type): 3
complexity(foo.bar.baz.type): 4
complexity(DivergenceTest.this.type): 5
complexity(DivergenceTest.this.Flat): 6
complexity(<noprefix>): 0
complexity(<root>): 1
complexity(scala.type): 2
complexity(Int): 3
complexity(?): 1
complexity(DivergenceTest.this.Shape2[DivergenceTest.this.Flat,Int,?]): 16
complexity(<noprefix>): 0
complexity(<root>): 1
complexity(foo.type): 2
complexity(foo.bar.type): 3
complexity(foo.bar.baz.type): 4
complexity(DivergenceTest.this.type): 5
complexity(?): 1
complexity(<noprefix>): 0
complexity(<root>): 1
complexity(scala.type): 2
complexity(<noprefix>): 0
complexity(Coffees): 1
complexity(<noprefix>): 0
complexity(<root>): 1
complexity(scala.type): 2
complexity(Int): 3
complexity((Coffees, Int)): 7
complexity(?): 1
complexity(DivergenceTest.this.Shape2[?,(Coffees, Int),?]): 15
dominates(DivergenceTest.this.Shape2[_ <: DivergenceTest.this.Flat, Int, U2], DivergenceTest.this.Shape2[_ <: Level, (Coffees, Int), U1]): true
And afterwards:
complexity(DivergenceTest.this.type): 1
complexity(DivergenceTest.this.type): 1
complexity(DivergenceTest.this.Flat): 2
complexity(scala.type): 1
complexity(Int): 2
complexity(?): 1
complexity(DivergenceTest.this.Shape2[DivergenceTest.this.Flat,Int,?]): 7
complexity(DivergenceTest.this.type): 1
complexity(?): 1
complexity(scala.type): 1
complexity(<noprefix>): 0
complexity(Coffees): 1
complexity(scala.type): 1
complexity(Int): 2
complexity((Coffees, Int)): 5
complexity(?): 1
complexity(DivergenceTest.this.Shape2[?,(Coffees, Int),?]): 9
dominates(DivergenceTest.this.Shape2[_ <: DivergenceTest.this.Flat, Int, U2], DivergenceTest.this.Shape2[_ <: Level, (Coffees, Int), U1]): false
Notice that even in the after shot, `scala.Int` has a complexity of 2.
It should be 1; this will be fixed in a separate commit.
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
SI-7985 Allow qualified type argument in patterns
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
As per the last commit, tighten up the interpretation of a lower
cased identifier meaning that we're looking at a type variable.
|
| |/ / / / /
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
We were considering the lower case `s` in `case _: Array[scala.Int]`
as a sign that we were dealing with a type variable pattern.
Now, we only do this if a lookahead confirms the absence of a the `.`
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
Refactor out fresh name prefix extraction logic
|
| | |/ / / /
| |/| | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
1. refactor out FreshNameExtractor out of Quasiquotes cake into
SymbolTable (can’t put it outside due to the fact that names are
path-dependent)
2. add optional parameter to the fresh name creator to cover additional
qq$ prefix needed for quasiquotes
3. add unit tests
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
Removing deprecated code.
|
| | |/ / / /
| |/| | | |
| | | | | |
| | | | | |
| | | | | | |
Code which has been deprecated since 2.10.0 and which allowed
for straightforward removal.
|
|\ \ \ \ \ \
| |_|_|_|_|/
|/| | | | | |
Deprecate Pair and Triple
|
| |/ / / / |
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-6329 Graduation day for pending tests for tag materialization
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Two kids in the class or '6329 had to repeat the senior year,
but with a little help from 76b92ef, they've finally graduated.
Here's the class photo:
commit 3e855661136bb6c530ef1d3a24dc83800e7f1134
Author: Eugene Burmako <xeno.by@gmail.com>
Date: Thu Sep 6 22:19:56 2012 +0200
test suite for SI-6329
test/files/run/t6329_repl.check | 13 +++++++++++++
test/files/run/t6329_repl.scala | 8 ++++++++
test/files/run/t6329_repl_bug.check | 13 +++++++++++++
test/files/run/t6329_repl_bug.pending | 10 ++++++++++
test/files/run/t6329_vanilla.check | 2 ++
test/files/run/t6329_vanilla.scala | 4 ++++
test/files/run/t6329_vanilla_bug.check | 2 ++
test/files/run/t6329_vanilla_bug.pending | 7 +++++++
8 files changed, 59 insertions(+)
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-7987 Test case for "macro not expanded" error with implicits
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Fixed, serendipitously, a handful of commits ago in 4a6882e772,
"SI-7944 FOUND: stray undetermined type params in vicinity of
implicits".
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Handle TypeApply(fun, ...) for symbol-less funs
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Such as class literals, as one could conjure in `classOf[Int][Int]`
Before, this would crash with a `NullPointerException`
|
|/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Our scalacheck tests now compile against 1.10.1 and 1.11.0.
They pass on 1.10.1, but fail on 1.11.0.
Once (that)[https://github.com/rickynils/scalacheck/issues/79]'s fixed,
and 1.11.1 released, we should be able to upgrade to it by simply
changing scalacheck.version.number in versions.properties.
The changes are mostly removing dead code (e.g., consolereporter business).
Of interest: the type ascription for `oneOf`. I haven't quite investigated,
but something seems to have changed between 1.10.1 and 1.11.0 that caused
a different overload to be picked without the type ascription.
Probably not a scalac bug, just a scalacheck api change.
|
|\ \ \ \
| | | | |
| | | | | |
SI-7280 Scope completion not returning members provided by imports
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Updates localeContext() to return the best context possible when there are none directly
associated with the given position. It happens when an expression cannot be
successfully typed, as no precise ContextTree covers the expression location, or if the
position is not inside any expression.
Adds corresponding tests
|
| | | | | |
|
| | |/ /
| |/| |
| | | |
| | | |
| | | | |
Adds a new marker /*_*/ to trigger scope completion test.
Original type completion test oracles update for the tweaked output
|
|\ \ \ \
| | | | |
| | | | | |
SI-7915 Corrected range positions created during default args expansion
|
| | |/ /
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The tree created during expansion of default arguments contained trees with the
wrong type of positions. Let's discuss this with an example. Below is the tree
generated for the `foo` method in the test class included in this commit.
Before this commit:
```
[54:94]def foo(): [58]Unit = <70:90>{
[70:79]<artifact> val qual$1: [70]Bar = [70:79][70:79][70:79]new [74:77]Bar();
[80]<artifact> val x$1: [80]Int = [80]qual$1.bar$default$1;
<70:90><70:83>qual$1.bar([80]x$1)
}
```
Now:
```
[54:99]def foo(): [58]Unit = <70:95>{
<70:84><artifact> val qual$1: [70]Bar = [70:84][70:84][70:84]new [74:77]Bar();
[85]<artifact> val x$1: [85]Int = [85]qual$1.bar$default$1;
<70:95>[84:88]qual$1.bar([85]x$1)
}
```
Here are the list of changes:
* The synthetic `qual$1` has a transparent position, instead of a range position.
* The new Select tree (i.e., `qual$1.bar`) should always have a range position,
because `selected` (i.e., the called method) is always visible in the source
(in fact, this is the whole point of the fix, we need a range position or
hyperlinking request from the Scala IDE won't work).
* The Block that contains the expanded default arguments is forced to have a
transparent position, as it never exist in the original source.
The tricky part of the fix is the position assigned to the new Select tree,
which needs to respect the range position's invariants. In the specific case,
we ought to make sure that range positions don't overlap. Therefore, the position
assigned to the new Select tree is computed by intersecting the original Select
position (i.e., `baseFun`'s position) and the original qualifier's position
(i.e., `qual`'s position).
If you take a closer look at the range positions assigned in the tree after this
commit, you'll notice that the range position of the `qual$1`'s rhs (i.e.,
[70:84]), and `qual$1.bar` (i.e., [84:88]) might seem to overlap, because the
former ends where the latter begins. However, this not the case because of the
range position's invariant 2, which states:
> Invariant 2: in a range position, start <= point < end
Hence, the above two positions aren't overlapping as far as the compiler is
concerned.
One additional aspect (that may look like a detail) is that we make sure to
never generate a position such that its start is after its end. This is why we
take the position with the smallest end point.
Furthermore, calling `withStart` would turn any position in a range position,
which isn't desiderable in general (and, even worse, this can lead to
generation of invalid positions - bad offsets - if the computation is performed
on offset positions). Hence, the position's computation is only performed when
both `baseFun` and `qual` positions are range positions. Indeed, I expect this to
be always the case if the compiler is started with -Yrangepos.
|
|\ \ \ \
| | | | |
| | | | | |
New mutable hash map with Long keys: partially solves SI-5263 and is relevant to SI-6825.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
An open addressing hash map based on a similar scheme to mutable.LongMap.
It delivers performance equivalent to Java's HashMap for pretty much all
AnyRefs, plus it works nicely with Scala's collections.
Revisions made sure that all return types in the public API are specified.
Also switched to a leading-zeros method of calculating the initial mask (to
save a few ns). Also edited out java.util comparison numbers and moved
constants to companion.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
to SI-6825.
The hash map is based on an open addressing scheme that provides
dramatically faster (mostly due to specialization) get and contains
operations than either the standard Java HashMap or any of the existing
Scala hash maps. It doesn't work well above 500,000,000 elements as
the arrays cannot scale past 2^30 elements. Maps are not faster in
general due to the lack of specialization of Function1[Long, V].
Revisions made sure that all return types in the public API are specified.
Also switched to a leading-zeros method of calculating the initial mask (to
save a few ns), and used an occasionally-more-efficient version of
seekEntryOrOpen. Also edited out specific performance numbers and moved
constants to companion.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Revived tests that once depended on xml
|
| | |/ / /
| |/| | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
I was a bit overzealous in moving stuff over to scala-xml in 9c50dd5274
These were all compiler tests that accidentally touched on xml.
I've tried to delicately decouple them so they can roam the
scalac pastures as intended.
|
|\ \ \ \ \
| |_|_|/ /
|/| | | | |
SI-7961 Fix false positive procedure warnings
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Two issues are fixed in this commit:
- `def foo: Unit` was detected as missing a return type
- The warning was emitted for constructors, but
`def this(...): Unit = ...` is not valid Scala syntax
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This reverts commit 04e2dbb29830d0e511cdfa8c132a9fad91d657ed,
by avoiding the ill-fated attempt to short-circuit the global
reflection lock.
I think we can do better performance wise, but lets at least
get something correct to start with.
|