| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
runtime.AbstractPartialFunction provides a default implementation
for the new-style partial function. In principle this class is only
subclassed by compiler-generated partial functions arising from matches.
Either
- the apply method (old-style partialfun) or
- the applyOrElse method (current scheme)
must be overridden, and the isDefinedAt method implemented.
The applyOrElse method implementation is provided to ease the
transition from the old scheme, since starr still generates
old-style PartialFunctions, but locker's library has the
new AbstractPartialFunction.
Thus, this implementation is intended as a drop-in replacement for the
old partial function, and does not require changes to the compiler.
(compiler patches, both for old and new-style pattern matching, follow)
- runtime.AbstractPartialFunction is based on PartialFunction.WithDefault
Original version of FunctionWithDefault by Odersky
(http://article.gmane.org/gmane.comp.lang.scala.internals/4032)
- better performance for OrElse#applyOrElse, OrElse#lift, PF.cond
- new combinator methods: PF#run, PF#runWith, PF.apply
authored by @pavelpavlov, refactored by @adriaanm, review by @paulp
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
lib/scala-compiler.jar.desired.sha1
lib/scala-library-src.jar.desired.sha1
lib/scala-library.jar.desired.sha1
src/compiler/scala/reflect/internal/Definitions.scala
src/compiler/scala/reflect/internal/Importers.scala
src/compiler/scala/reflect/internal/Symbols.scala
src/compiler/scala/reflect/internal/Trees.scala
src/compiler/scala/reflect/internal/Types.scala
src/compiler/scala/tools/nsc/Global.scala
src/compiler/scala/tools/nsc/transform/Erasure.scala
src/compiler/scala/tools/nsc/transform/LiftCode.scala
src/compiler/scala/tools/nsc/transform/UnCurry.scala
src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
src/compiler/scala/tools/nsc/typechecker/Typers.scala
test/files/run/programmatic-main.check
test/files/speclib/instrumented.jar.desired.sha1
|
| | |
|
|/
|
|
|
|
| |
Hacks here and there to allow them to survive at least
to erasure. Since nothing is done with them there yet, they
inevitably crash and burn a little ways beyond that.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Contributed by Todd Vierling with minor mods by extempore. This is an
obvious extension of AbstractFunctionN which I had some issue making
work at the time. Sounds kind of pitiful given that the compiler patch
is about two lines, but let's all agree to believe it was a different
world then.
This example program is impacted as follows:
class A {
def f: PartialFunction[Any, Int] = { case x: String => 1 }
def g: PartialFunction[Any, Int] = f orElse { case x: List[_] => 2 }
def h: PartialFunction[Any, Int] = g orElse { case x: Set[_] => 3 }
}
Before: 34943 bytes of bytecode
After: 4217 bytes of bytecode
A mere 88% reduction in size. "'Tis but a trifle!" Closes SI-5096,
SI-5097.
|
|
|
|
|
|
| |
Small changes to the API documentation of the AnyVal types. Contributed
by Michael Allman during the September doc spree. No review.
|
|
|
|
|
|
| |
Some great AnyVal class hierarchy documentation from Iain McGinniss. No
Review.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A total rewrite of "runtimeClass", discarding the user-space approach in
favor of simply fixing getClass.
def f1 = 5.getClass // Class[Int]
def f2 = (5: AnyVal).getClass // Class[_ <: AnyVal]
def f3 = (5: java.lang.Integer).getClass // Class[_ <: java.lang.Integer]
class A
class B extends A
def f1 = (new B: Any).getClass().newInstance() // Any
def f2 = (new B: AnyRef).getClass().newInstance() // AnyRef
def f3 = (new B: A).getClass().newInstance() // A
def f4 = (new B: B).getClass().newInstance() // B
But that's not all!
def f0[T >: B] = (new B: T).getClass().newInstance()
def f5 = f0[Any] // Any
def f6 = f0[AnyRef] // AnyRef
def f7 = f0[A] // A
def f8 = f0[B] // B
Closes #490, #896, #4696. Review by moors. (Note: I think this is pretty
good, but picky review requested.)
|
|
|
|
|
|
|
|
|
|
| |
Moved scala.reflect.Chars to scala.reflect.internal.Chars, un-splitting
the scala.reflect package. This is necessary for running in an OSGi
container, such as Eclipse. A package may not be contributed by two
different bundles (in this case the library and the compiler). It may
be moved back when 'scala.reflect' exists only in one place. review by
extempore.
|
|
|
|
|
|
| |
And the remainder of the scala.reflect refactoring (think of it like a
"balloon payment") no review.
|
|
|
|
|
|
|
| |
Various addenda to soc's patch: regenerating Product/Tuple/Function
classes and AnyVal sources, making versioning consistent, etc. Closes
#4477, no review.
|
|
|
|
|
|
| |
A less ad hoc infrastructure for generating AnyVal sources. A few more
comments on said sources. No review.
|
|
|
|
|
|
|
|
| |
withdraw some of the goodness I banked a while ago with the AnyVal
types. Started on what will culminate in the total elimination of
SourcelessComments. Cleaned up the docs on ancient classes like Product.
More to come. No review.
|
|
|
|
|
|
|
|
|
|
|
| |
Addresses the issues swirling around Double.Epsilon and friends which
were battled out in more than one venue and then aptly summarized by
retronym in #3791. Thanks to Simon Ochsenreither for submitting a patch;
I wasn't able to use too much of it because the source code for these
types is generated, but effort is always appreciated. Closes #3791, and
I'm tired and I'd hate to blow this one at this late date: review by
rytz.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The AnyVal types become source files instead of polite compiler
fictions.
!! You'll need a serious "ant all.clean" now. !!
As of this commit the system is fully bootstrapped and the
synthetic code eliminated: only the source files remain. The
sort-of-AnyVal-companions in scala.runtime.* have all been eliminated
because the actual companions can do everything; deprecated vals in
the scala.runtime package object point to the companions. This left
AnyValCompanion as the only AnyVal related thing in the runtime package:
that made little sense, so I deprecated and moved it as well.
Starr is based on r24066 plus this commit. Closes #4121. Review by rytz,
odersky.
|
|
|
|
|
|
|
| |
Tackled source generation from a new angle rather than letting genprod
get any more creaky. This code generates the AnyVal source files (but
those are not included here.) No review.
|
|
|
|
|
| |
things which used it to use sys.process. No review.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Imported sbt.Process into trunk, in the guise of package
scala.sys.process. It is largely indistinguishable from the version in
sbt, at least from the outside.
Also, I renamed package system to sys. I wanted to do that from the
beginning and the desire has only grown since then. Sometimes a short
identifier is just critical to usability: with a function like error("")
called from hundreds of places, the difference between system.error and
sys.error is too big. sys.error and sys.exit have good vibes (at least
as good as the vibes can be for functions which error and exit.)
Note: this is just the first cut. I need to check this in to finish
fixing partest. I will be going over it with a comb and writing
documentation which will leave you enchanted, as well as removing other
bits which are now redundant or inferior. No review.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Mopping up after the deprecation of exit and error. It is decidedly
non-trivial (at least for the IDE-impaired) to be completely sure of
which error function was being called when there were about twenty with
the same signature in trunk and they are being variously inherited,
imported, shadowed, etc. So although I was careful, the possibility
exists that something is now calling a different "error" function than
before. Caveat programmer.
(And let's all make it our policy not to name anything "error" or "exit"
from here on out....) No review.
|
|
|
|
|
|
| |
Some hardening of the repl's internals extracted from a more interesting
patch in progress. No review.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A new totally safe signal manager, along with all the support code
needed for that. See the classes in scala.tools.reflect.* for
interesting new weapons. Also includes inaugural handy usage:
scala> val x = 10
x: Int = 10
scala> while (true) ()
[ctrl-C]
Execution interrupted by signal.
scala> x
res1: Int = 10
No review, but feedback welcome.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Added two options to tools/tokens, --sliding and --freq. Using both:
% tools/tokens --sliding 10 --freq
src/compiler/scala/tools/nsc/typechecker | head -5 34 'if' '(' settings
'.' debug '.' value ')' log '(' 17 scala '.' tools '.' nsc ; 'package'
typechecker ;; 'import' 17 'package' scala '.' tools '.' nsc ; 'package'
typechecker ;;
16 '}' 'package' scala '.' tools '.' nsc ; 'package' typechecker
15 ')' '{' 'if' '(' settings '.' debug '.' value ')'
No review.
|
|
|
|
|
|
| |
Fixed a couple bugs in tools/tokens which were mysteriously more visible
once it was checked in. No review.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two new command line programs in ~/tools: scmp and tokens.
1) scmp: will need a bit more fleshing out to be super useful, but here
is what you can do right now:
// This means run the given command line first with the options
// given to p1 and then without, and show the diff in output.
% tools/scmp --p1 '-no-specialization -nowarn' scalac -Ydebug
src/library/scala/Function1.scala
Upcoming features will involve seeing diffs of such things as the
pickled signatures of generated files and the javap disassembly.
2) tokens: tokenizes all the scala files found under any given paths and
prints one token per line.
Example: the five most frequently used tokens under scala/util.
% tools/tokens src/library/scala/util |sort | uniq -c | sort -r | head
-5 598 ')' 598 '(' 347 ; 294 '=' 278 ,
Good to see those parens are balanced.
Example: number of appearances of an identifier called x:
% tools/tokens src/library/scala/util | grep ^x$ | wc 137
Way to go, x. Review by community.
|
|
|
|
|
|
|
|
|
| |
Since pickled data moved into annotations ShowPickled has been
confusedly scratching its head. Made tools/showPickled work again. In
the process created a simple interface for creating command line tools
for the (majority of) commands which would just like to specify a
handful of options. No review.
|
|
|
|
|
|
|
| |
More polishing up features in partest which worked somewhere along the
way but not at the end. This time it is unknown options: now it will
complain. Closes #3289, no review.
|
|
Introduces scala.tools.cmd providing command line tool infrastructure.
For a quick look at what can be done, see
scala.tools.cmd.Demo
For a more involved, potentially eye-straining look, see
scala.tools.partest.PartestSpec
To experience it through the eyes of Joe Partest User, run
test/partest
Review by community.
|