| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
"Fiddle with lubs and glbs by never considering getClass as a member in
a refinement generated from them. In a sense we have justification for
this by saying we already treated getClass in an ad-hoc way, so we might
as well go all the way." -- m. odersky
Closes SI-4846.
|
|
|
|
|
|
| |
Enabled Presentation Compiler test for IDE ticket #1000609, which has
been fixed by odersky. no review.
|
|
|
|
|
|
| |
Enabled Presentation Compiler test for IDE ticket #1000349, which has
been fixed by odersky in r25625. no review.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1.+(2) - what is it? Is it 3 or 3.0? Come scala 2.11 you won't
have to not know (or even not know there's something you don't know.)
1.+(2) will then be safely considered equivalent to 1 + 2, because
any dot not followed by a digit is not part of a number.
Primarily, that's these forms: 3.f 3.d 3.
If you prefer an error to a warning, use -Xfuture.
Let's deprecate 012 == 10 too! (See comment.) References SI-5089, no
review.
|
|
|
|
|
|
| |
A comment answering one of adriaan's philosophical musings on why
programs fail, and a test case informed by the comment. Review by moors.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Allow to load $class classes using Scala reflection.
Tweaked implementation of invalidClassName method
to exclude *$class clasess from the set of invalid
names. It's not exactly clear what was the intent
of this method in first place so I'm not sure if
it's the best way to fix SI-5176. Added test-case
that covers this issue.
Fixes SI-5176. Review by odersky.
|
| |
|
|
|
|
|
|
|
| |
I should know better than to behave as if usable inferences can be drawn
from a comment like "SYNTHETIC because of DEVIRTUALIZE". Maybe it was
even true when it was written, but no more. Closes SI-5178, no review.
|
|
|
|
|
| |
Wow, ten tests, that's unexpected. No review.
|
|
|
|
|
|
|
|
|
|
|
| |
wraps the call to a bridged synthetic unapply(Seq) in a defensive
if-test:
if (x.isInstanceOf[expectedType])
real.unapply(x.asInstanceOf[expectedType]) else None
NOTE: the test is WRONG, but it has to be due to #1697/#2337 -- once those are fixed, this one should generate the expected output
|
|
|
|
|
|
|
| |
Check number of arguments before jumping to conclusion that a primitive
seeming structural call might really be primitive. Closes SI-4766, no
review.
|
|
|
|
|
|
|
| |
Misc cleanups associated with the previous commits: limiting overly
expanded types, fixing externally visible types for scaladoc, utilizing
abstract collection classes where possible, etc.
|
| |
|
|
|
|
|
| |
No review.
|
|
|
|
|
|
|
| |
Moved all the eagerly evaluated bits to the top of the file so I can see
them all at once. Let a dozen vals unroll up front so initialization is
more predictable. No review.
|
|
|
|
|
|
|
| |
Another page in the storied history of "call .tpe when one should have
called .tpeHK", in this case leading to a crash of stacktraciness.
Closes SI-5152, review by moors.
|
|
|
|
|
|
|
| |
Another page in the storied history of "check the normalized type, then
act on the unnormalized type", in this case leading to a tight loop of
foreverness. Closes SI-5156, review by moors.
|
|
|
|
|
|
| |
Changed presentation tests to use .flags instead of .opts for passing
options to the presentation compiler.
|
|
|
|
|
|
| |
Fixed askLinkPos problem in reported by failing test in
presentation/akka.
|
|
|
|
|
|
|
| |
Added akka.opts file (for presentation compiler test) which allows to
set settings on the compiler's instance. Lines that begin with a sharp
are skipped. review by odersky.
|
|
|
|
|
| |
Oops, didn't mean to commit that one. Opens SI-5147. No review.
|
|
|
|
|
| |
No review.
|
|
|
|
|
| |
Closes SI-5147.
|
|
|
|
|
|
|
|
|
| |
Hardened the repl against a bunch of erroneous conditions. Added a
:reset command which causes the repl to forget everything you have told
it. Added classloader tracing when repl tracing is enabled. :reset is
not that useful in its current form but it's the precursor to something
more interesting. No review.
|
|
|
|
|
|
|
|
| |
Exception handling beset by entropy. Restored some order. The output of
the test may not be stable across platforms, in which case I'll take the
usual step of reverting it, thereby achieving victory over failure by
testing nothing instead of testing something. No review.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Added *.log and build/ to gitignore so partest/ant artifacts don't show
up in our commit messages. Also fixed whitespace issues arising from the
filter-branch history rewrite for git move.
|
|
|
|
|
|
|
| |
Fixed type unsoundness problem in t5120 and also discovered by
roman.kalukiewicz@gmail.com. Fix should be refined further, as I am not
convinced we are quite done yet. Review by moors.
|
| |
|
| |
|
|
|
|
|
| |
Contributed by Thomas Switzer. Closes SI-4985, no review.
|
|
|
|
|
|
|
|
|
| |
Fixes NPE using iterator with an XML attribute being null or None )
(SI-5052 Also fixes incorrect size method (SI-5115 )
Contributed by Jordi Salvat i Alabart. Closes SI-5052, SI-5115, no
review.
|
|
|
|
|
| |
NullaryMethodType was escaping. Closes SI-5099, review by moors.
|
| |
|
|
|
|
|
| |
Closes SI-4970, review by moors.
|
|
|
|
|
| |
No review.
|
|
|
|
|
| |
No review.
|
|
|
|
|
| |
No review.
|
|
|
|
|
| |
Guess that was a bad choice of class. No review.
|
|
|
|
|
|
| |
Discovered an overloaded method with multiple unimplemented variants
only had one listed. Fixed, no review.
|
|
|
|
|
|
| |
First end-to-end implementation of a runtime reflexive compiler that
generates and loads bytecodes. Review by szeiger.
|
| |
|
|
|
|
|
| |
Suppresses ProductN parent for case classes. No review.
|
| |
|
|
|
|
|
|
| |
It's hidden behind -Xlint and pretty specific, but makes me feel better
anyway. References SI-4762, no review.
|
| |
|
|
|
|
|
|
|
| |
This has been failing the Xcheckinit build for weeks and is now failing
the regular build too. I'm checking in some hairy stuff and I'd like to
make a good impression on it. Review by odersky.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A digression into motivations:
It's not there yet but the future looks bright. I have winnowed the
number of mutation points down and I will take it down much further.
There are only a few fundamental state changes which take place and
these can be made to happen in a systematic fashion at well-known
junctions.
1) Fresh symbols are allocated and (usually) assigned to a tree. 2)
Symbol flags and access are manipulated. 3) A (possibly lazy) info is
assigned to a symbol. 4) Synthetics are created or lazily positioned
for creation
Among the complications is that the symbol's info often cannot be
determined in a straightforward fashion lest cycles develop. Type
inference is obviously dependent on having some type information, so the
black art is to pursue a) only the right information and b) only as far
as necessary to avoid cycles.
Compounding the difficulty is that synthetic methods must be introduced
before the typer phase. Over time a variety of ad-hoc mechanisms have
evolved to deal with these difficulties, and they have gotten us a good
distance (we have bean setter/getters, case classes, copy methods,
default getters, and more) but there are big disadvantages:
- they are heavily custom fitted to the specific uses
- because of the intertwingling of namer and typer, it is all
only possible from the inside. Compiler plugins are shut out.
A particularly difficult scenario has recently arisen with case classes.
They now receive a ProductN parent, but because a class's parents must
be completed before it can be completed, we encounter this:
object Foo { type T = String }
case class Foo(x: Foo.T, y: Foo.T) { }
Now one of class Foo's parents is Product2[T, T]. So class Foo cannot be
completed without information from object Foo. But object Foo needs to
be given these synthetic methods:
def apply(x: T, y: T): Foo
def unapply(x: Foo): Option[(T, T)]
You can see these two have their hands all over one another.
The good news is that I have established in principle that the problem
can be overcome, for that use and I think in a sufficiently general way
that plugins will be able to perform this kind of method synthesis,
with the following approach. For synthetic methods which require type
information before they can be created (this is the catch-22: once type
information is available, it's too late to add new synthetic methods) we
create a "stub symbol" like so:
val sym = owner.newMethod("nameOfMethod")
sym setInfo stubMethodInfo
stubMethodInfo will be some very general method type like Any* => Any
(or Nothing => Any, it really depends on how or whether it is used),
whatever it takes to pass type checking. At the same time, we enter the
stub symbol into a map along with a thunk which creates the symbol and
tree the way we would if we had full type information.
Then, immediately after a class is typed, the template is examined for
stub method symbols and when found, they are updated with the symbol
info found in the map, assigned to the associated tree, and added to the
class template. This approach will probably break down under some uses,
but I think it can take us a long way.
So all these changes in Namers are about evolving it to a point where I
can roll out a principled division of responsibility for those entities
which cannot be naively typed, and to unify the several different
approaches to lazy typing under a consistent and predictable mechanism.
If anyone would like to review this, please be my guest, but you might
want to wait one more commit.
|