| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* excluded from merge:
[nomerge] SI-6667 Demote a new ambiguity error to a lint warning.
Revert "SI-6422: add missing Fractional and Integral alias in scala package"
[backport] SI-6482, lost bounds in extension methods.
* commit '81d8f9d3da': (31 commits)
reflecting @throws defined in Scala code
pullrequest feedback
SI-5833 Fixes tail-of-Nil problem in RefinedType#normalizeImpl
SI-6017 Scaladoc: Show all letters without dangling links
SI-6017 Generate Scaladoc's index links in Scala side
SI-5313 Minor code cleanup for store clobbering
SI-5313 Test clobbers on the back edge of a loop
SI-7033 Be symful when creating factory methods.
SI-7022 Additional test case for value class w. bounds
SI-7039 unapplySeq result type independent of subpattern count
evicts javac-artifacts.jar
SI-7008 @throws annotations are now populated in reflect
Fix SI-6578. Deprecated `askType` because of possible race conditions in type checker.
SI-7029 - Make test more robust
SI-7029 - Makes sure that uncaught exceptions are propagated to the UEH for the global ExecutionContext
SI-6941 tests
SI-6686 drop valdef unused in flatMapCond's block
...
Conflicts:
src/compiler/scala/tools/nsc/backend/opt/DeadCodeElimination.scala
src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala
src/reflect/scala/reflect/internal/Definitions.scala
|
| |\
| | |
| | | |
SI-7039 unapplySeq result type independent of subpattern count
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Fixes a bug in the implementation of the `unapplySeq` part of the spec below.
An `unapply` method with result type `R` in an object `x` matches the
pattern `x(p_1, ..., p_n)` if it takes exactly one argument and, either:
- `n = 0` and `R =:= Boolean`, or
- `n = 1` and `R <:< Option[T]`, for some type `T`.
The argument pattern `p1` is typed in turn with expected type `T`.
- Or, `n > 1` and `R <:< Option[Product_n[T_1, ..., T_n]]`, for some
types `T_1, ..., T_n`. The argument patterns `p_1, ..., p_n` are
typed with expected types `T_1, ..., T_n`.
An `unapplySeq` method in an object `x` matches the pattern `x(p_1, ..., p_n)`
if it takes exactly one argument and its result type is of the form `Option[S]`,
where either:
- `S` is a subtype of `Seq[U]` for some element type `U`, (set `m = 0`)
- or `S` is a `ProductX[T_1, ..., T_m]` and `T_m <: Seq[U]` (`m <= n`).
The argument patterns `p_1, ..., p_n` are typed with expected types
`T_1, ..., T_m, U, ..., U`. Here, `U` is repeated `n-m` times.
|
| |\ \
| | | |
| | | | |
[nomerge] SI-6667 Demote a new ambiguity error to a lint warning.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
In the interests of not breaking source compability.
A few projects are relying on this bug.
Should not be merged to master.
|
| |\ \ \
| | | | |
| | | | | |
SI-7008 @throws annotations are now populated in reflect
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
As per Jason's comment: How are Scala classes containing @throws annots
treated? I can't figure out whether we pickle the annotation in addition
to adding the exception to the signature. If we do, might we end up with
duplicate annotations in runtime reflection? This warrants a test.
See the context of the discussion here: https://github.com/scala/scala/pull/2040/files#r2874769.
No, we won't end up with duplicates, because classes defined in Scala
are loaded in a different completer. But I'll add a test - you can never
have too many of those.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Apparently, the usual _1, _2, _3... naming scheme also works for java
files, which need to be compiled together with partests. This allows us
to get rid of javac-artifacts.jar.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Runtime reflection in JavaMirrors previously forgot to fill in
@throws when importing Java reflection artifacts. Now this is fixed.
Note that generic exception types used in `throws` specifications will
be garbled (i.e. erased), because we don't use `getGenericExceptionTypes`
in favor of just `getExceptionTypes` to stay compatible with the behavior
of ClassfileParser. That's a bug, but a separate one and should be fixed
separately.
Also note that this commit updated javac-artifacts.jar, because we need
to test how reflection works with javac-produced classfiles. The sources
that were used to produce those classfiles can be found in the jar next
to the classfiles.
|
| |\ \ \ \
| | | | | |
| | | | | | |
SI-7033 Be symful when creating factory methods.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Implicit class factory methods were synthesizing the
reference to the class as `Ident(classDef.name)`, which
was unhygienic in case of `implicit class X[X]`.
To use symbols without causing a cycle, I switched from
`REF(symbol)` to `Ident(symbol)`. The former calls into:
at scala.reflect.internal.TreeGen.mkAttributedSelect(TreeGen.scala:184)
at scala.reflect.internal.TreeGen.mkAttributedRef(TreeGen.scala:124)
at scala.reflect.internal.TreeGen.mkAttributedRef(TreeGen.scala:130)
at scala.tools.nsc.ast.TreeDSL$CODE$.REF(TreeDSL.scala:307)
which forces the info of enclosing module and forms a cycle.
|
| |\ \ \ \ \
| | |_|_|/ /
| |/| | | | |
SI-5313 Do not eliminate stores that potentially wipe referenes
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
I realized I was missing a test case for a local store early in a loop
that was unused but turned out to be a clobber of a store later in the
loop.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
When an unused store clobbers a previous store, replace it with storing
a null. Don't mark clobbers as "used" so that the original clobber and
all following clobbers can still be eliminated.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Storing to local variables of reference or array type is indirectly
observable because it potentially allows gc to collect an object. So
this commit makes DeadCodeElimination mark a store necessary if it
assigns to a local that potentially stored by a previous necessary store.
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
SI-7046 reflection now auto-initializes knownDirectSubclasses
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
knownDirectSubclasses joins the happy family of flags, annotations and
privateWithin, which automatically trigger initialization, when used
within runtime reflection.
|
| |\ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
Analyzer Plugins
|
| |\ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | | |
[backport] SI-6428 / SI-7022 Value class with bounds
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
As reported against 2.10.0, and as fixed by SI-6482,
which was backported in the previous commit.
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
Squashed commit of the following:
commit 5c156185306ba797c0443d9dccae0ae7ce462a1f
Author: Paul Phillips <paulp@improving.org>
Date: Sat Oct 6 15:42:50 2012 -0700
A little more housecleaning in ExtensionMethods.
The only real contribution is readability.
(cherry picked from commit 61f12faacaaccf366f9211ba6493fb042a91f1d2)
Conflicts:
src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala
commit 79f443edf584745d614e24fb9ca6644c6b18d439
Author: Paul Phillips <paulp@improving.org>
Date: Sat Oct 6 14:22:19 2012 -0700
Incorporated pull request feedback.
(cherry picked from commit 153ccb4757718cceb219988f30381f73362e6075)
commit 707f580b0cdcb01e27ca4c76991dea427945b5bd
Author: Paul Phillips <paulp@improving.org>
Date: Sat Oct 6 10:20:45 2012 -0700
Fix for SI-6482, lost bounds in extension methods.
That was a good one. How to create a new method with type
parameters from multiple sources, herein.
(cherry picked from commit ff9f60f420c090b6716c927ab0359b082f2299de)
commit 8889c7a13f74bc175e48aa2209549089a974c2af
Author: Paul Phillips <paulp@improving.org>
Date: Fri Oct 5 22:19:52 2012 -0700
Responded to comment about how many isCoercibles there are.
I make the case that there is only one.
(cherry picked from commit 883f1ac88dd7cec5882d42d6b48d7f267d1f6e00)
|
| |\ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | | |
pattern matching efficiency: addresses SI-6686 and SI-6941, affects SI-5739
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
tests that the methods' bytecodes are similar
as variable load/stores are reordered, it ignores which variables
are modified when checking for bytecode equality
the assert is: `similarBytecode(methNodeA, methNodeB, equalsModuloVar)`
|
| | | | | | | | | | |
|
| | | | | | | | | | |
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
also, tweak fix in place for SI-5158 to appease SI-6941
don't store mutable fields from scala.* as we can assume
these classes are well-behaved and do not mutate their
case class fields
|
| | | |_|/ / / / /
| | |/| | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
pattern matching on case classes where pattern
is not known to be a subclass of the unapply's argument type
used to result in code like:
```
if (x1.isInstanceOf[Foo]) {
val x2 = x1.asInstanceOf[Foo]
if (x2 != null) { // redundant
...
}
}
```
this wastes byte code on the redundant null check
with this patch, when previous type tests imply
the variable cannot be null, there's no null check
|
| |\ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | | |
SI-7029 - Makes sure that uncaught exceptions are propagated to the UEH ...
|
| | | | | | | | | | |
|
| | |/ / / / / / /
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
the global ExecutionContext
|
| |\ \ \ \ \ \ \ \
| | |_|/ / / / / /
| |/| | | | | | | |
SI-6539 moves @compileTimeOnly away from scala-reflect
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
The move is done to provide forward compatibility with 2.10.0.
The annotation isn't replaced with one of the macro-based solutions
right away (see comments for more information about those), because
we lack necessary tech in 2.10.x.
|
|\ \ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | | |
SI-5151 - Add firstKey and lastKey to LongMap.
|
| | | | | | | | | | |
|
|\ \ \ \ \ \ \ \ \ \
| | |_|_|_|/ / / / /
| |/| | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Conflicts:
src/compiler/scala/tools/nsc/typechecker/Contexts.scala
src/compiler/scala/tools/nsc/typechecker/Namers.scala
src/compiler/scala/tools/nsc/typechecker/Typers.scala
src/continuations/plugin/scala/tools/selectivecps/CPSAnnotationChecker.scala
src/reflect/scala/reflect/internal/AnnotationCheckers.scala
src/reflect/scala/reflect/internal/Symbols.scala
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Before:
scala> class A { class C extends { val x: A = this } with AnyRef }
<console>:7: error: type mismatch;
found : A.this.C
required: A
class A { class C extends { val x: A = this } with AnyRef }
^
Note that the same thing is necessary and already done in Namers (see
def createNamer). The whole logic of when and how to create contexts
should be factored out and reused in Namer and Typer.
(
My Hobby [1]: detecting compiler by just looking at its soruce
[1] http://www.explainxkcd.com/wiki/index.php?title=Category:My_Hobby
)
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
AnnotationCheckers are insufficient because they live outside the
compiler cake and it's not possible to pass a Typer into an annotation
checker.
Analyzer plugins hook into important places of the compiler:
- when the namer assigns a type to a symbol (plus a special hook for
accessors)
- before typing a tree, to modify the expected type
- after typing a tree, to modify the type assigned to the tree
Analyzer plugins and annotation checker can be activated only during
selected phases of the compiler.
Refactored the CPS plugin to use an analyzer plugin (since
adaptToAnnotations is now part of analyzer plugins, no longer
annotation checkers).
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
- when typing (and naming) a ValDef, tpt and rhs are now type checked
in the same context (the inner / ValDef context). this does not change
any behavior, but is more uniform (same as for DefDef). martin told me
(offline) that this change is desirable if it doesn't break anything.
(it doesn't).
- typeSig is now more uniform with a separate method for each case
(methodSig, valDefSig, etc). methodSig was cleaned up (no more variables)
and documented. the type returned by methodSig no longer contains /
refers to type skolems, but to the actual type parameters (so we don't
need to replace the skolems lateron).
- documentation on constructor contexts, type skolems
- more tests for SI-5543
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Integrates annotationsLub into lub.
Also fixes SubstSymMap when mapping over annotaion trees. I don't
understand what the previous code was supposed to achieve, but it
crashed in some of my examples.
|
| | |/ / / / / / /
| |/| | | | | | | |
|
| |\ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | | |
[backport] Fix for SI-6206, inconsistency with apply.
|
| | | |/ / / / / /
| | |/| | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
Squashed commit of the following:
commit f6bbf85150cfd7e461989ec1d6765ff4b4aeba51
Author: Paul Phillips <paulp@improving.org>
Date: Mon Oct 1 09:10:45 2012 -0700
Fix for SI-6206, inconsistency with apply.
The code part of this patch is 100% written by retronym, who
apparently has higher standards than I do because I found it just
lying around in his repository. I think I'll go pick through his
trash and see if he's throwing away any perfectly good muffins.
I made the test case more exciting so as to feel useful.
(cherry picked from commit 267650cf9c3b07e360a59f3c5b70b37fea9de453)
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
That's the best I can do. The tests pass, if someone wants
a cleaner merge it is all theirs.
For reference, the merge leading up to this commit was achieved
as follows. The lines with -s ours are where the merge commit
being merged was completely made up of backports from master.
git merge -s ours eff78b852e c1dd8bbaa4 && \
git merge 7026376dcc ccd7abe897 && \
git merge -s ours 62681e191a && \
git merge 74b3e9aefe 7d80e08469 d24f341f08 c4f49759fe \
27d73a2352 ba72ee7c6f 42c4cc7a1e d672102fd8 644eb7078a && \
git merge -s ours 08596af059 b573c287d2 && \
git merge d1b6d8b20f && \
git merge -s ours 110b54a575 36f78dd606 309ff57ba6 && \
git merge 06295f9682 d3886086c3 adf51eef76 b403234a27 && \
git merge -s ours 09d1433064 && \
git merge 9ddcc1b90e cabf626bbc && \
git merge -s ours 283924bfa5
|
|\| | | | | | | | |
|
| |\ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | | |
Revert "SI-6601 Publicise derived value contstructor after pickler"
|
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
This demonstrates the need for the reversion in the
previous commit.
|
| | |/ / / / / / /
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
This reverts commit b07228aebe7aa620af45a681ef60d945ffc65665.
The remedy was far worse than the disease:
% cat sandbox/test.scala
class V private (val a: Any) extends AnyVal
% RUNNER=scalac scala-hash b07228aebe sandbox/test.scala
[info] b07228aebe => /Users/jason/usr/scala-v2.10.0-256-gb07228a
% scala-hash b07228aebe
[info] b07228aebe => /Users/jason/usr/scala-v2.10.0-256-gb07228a
Welcome to Scala version 2.10.1-20130116-230935-b07228aebe (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_27).
Type in expressions to have them evaluated.
Type :help for more information.
scala> def foo(v: V) = v.a == v.a
exception when typing v.a().==(v.a())/class scala.reflect.internal.Trees$Apply
constructor V in class V cannot be accessed in object $iw in file <console>
scala.reflect.internal.Types$TypeError: constructor V in class V cannot be accessed in object $iw
|
| |\ \ \ \ \ \ \ \
| | |_|_|_|_|_|_|/
| |/| | | | | | | |
SI-2818 Makes List#foldRight work for large lists
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
Benchmarks show that lists smaller than 110 elements or so doing
reverse/foldLeft is faster than recursively walking to the end of
the list and then folding as the stack unwinds.
Above that 110 element threshold the recursive procedure is faster.
Unfortunately, at some magic unknown large size the recursive procedure
blows the stack.
This commit changes List#foldRight to always do reverse/foldLeft.
|
| |\ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | | |
[backport] SI-2968 Fix brace healing for `^case (class|object) {`
|