| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
A message is emitted when a reflective call is generated. We
can now be eager consumers of this since we purged all the reflective
calls at some point -- but without a backstop, they have been
slipping back in.
|
|
|
|
|
|
| |
takes place.
A major redesign that unifies the various different approaches to boxing of free variables. Free variables are marked with CAPTURED and eliminated by LambdaLift. I also added some hooks in MacroContext that a reifier needs to use.
|
|
|
|
|
|
|
| |
Custom versions of collections which methods which operate on 2 or 3
collections. Eliminated most users of zip/zipped. Cleaned up the kinds
checking code somewhat. Reduced the number of silent typechecks
being performed at named argument sites.
|
|
|
|
| |
Eliminated a bunch of unnecessary array expense.
|
|
|
|
|
| |
Attempting to make the repl find it based on fewer clues so
all can enjoy the javap goodness.
|
|\ \ \
| | | |
| | | |
| | | | |
'kepler/topic/reifyclosuretests', 'kepler/topic/antscalacheck', 'szabolcsberecz/SI-5104', 'kepler/ticket/5334' and 'kepler/topic/miscfixes' into develop
|
| | |/ |
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The bug was caused by the inconsistency between j.l.Math.min() and
j.l.Double.compareTo() wrt NaN (j.l.Math.min() considers NaN to be
less than any other value while j.l.Double.compareTo() says it's
greater...)
The fix changes Ordering.{FloatOrdering,DoubleOrdering) to base
it's results on primitive comparisons and math.{min,max} instead
of j.l.{Float,Double}.compareTo()
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
factored out some of the optimizing codegen that had snuck into treemakers (guardtreemaker)
removed `caseResult`, back to just `one`
no longer emitting intermediate `one`s (using guard instead -- when not optimizing)
so uncurry can't accidentally blow them away (it removes the `one` that represents the case's result,
but should leave intermediate computation alone)
still TODO: reusing-treemakers
sharing prefixes of length 1 helps
inlining suffix of alternatives if small enough
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
introducing two mutable variables per pattern match: matchRes and keepGoing
keepGoing denotes whether the result was Some or None,
and matchRes holds the Some's contents or the right zero for the match's type
Race(() => fastMatch(list), () => virtMatch_no_option(list))(100000).converge() is a virtual tie on my machine after this
see https://gist.github.com/1400910
conveniently also works around SI-5245
don't assign to Unit-typed var's, in fact, make matchRes a val when its only prospect in life is to be unit-valued
propagate eventual type for matchRes thru codegen
so that we can have more robust checks for unit¬hing, when assignment makes no sense
also, added a hack to caseResult to avoid boxed units in
if(keepGoing) { matchRes = ... } else zero
after erasure, we get
if(keepGoing) { matchRes = ...; BoxedUNIT } else zero
genicode broke because i was sharing trees:
[scalacfork] error: java.lang.AssertionError: assertion failed: type error: can't convert from UNIT to REF(class Object) in unit ScalaSig.scala at source-/Users/adriaan/git/scala-dev/src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSig.scala,line-26,offset=868
fixed by duplicating -- so be it (for now -- make this more fine-grained, more efficient)
dodging inliner issues with one/zero (it won't inline, so also directly inline those methods)
|
|\
| |
| |
| | |
'jsuereth/fix-5053-view-unzip' into develop
|
| |
| |
| |
| |
| |
| |
| |
| | |
* Added unzip and unzip3 to TraversableViewLike
* Added partest tests for unzip on views returning specific collection types.
Closes SI-5053
Review by @paulp
|
| |
| |
| |
| |
| | |
Deprecated since 2.8.0 but causing far too much inconvenience
by not being present.
|
| |
| |
| |
| |
| |
| |
| | |
This is not a long-term implementation - I haven't even benchmarked
it -- don't worry. I did find a fairly gross bug in the version I
checked in a few days ago so I wanted to erase that from the repository
memory for the weekend.
|
| |\ |
|
| | |
| | |
| | |
| | |
| | | |
Copy the documentation from Map#withDefault() that get(), contains(),
iterator(), and keys() keys are not affected by withDefaultValue().
|
| | |
| | |
| | |
| | | |
To get the same benefit as in Range. Review by @prokpec.
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This makes code like
0 to 100 foreach (x += _)
as fast as (often faster than, in fact) a while loop. See the
comment in Range for the gory details. More investigation should
be done regarding total impact on inlining behavior.
Review by @odersky.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The hash code is further improved by using a special value in the hash sets
called a `seed`. For sequential hash tables, this value depends on the size
of the hash table. It determines the number of bits the hashcode should be
rotated. This ensures that hash tables with different sizes use different
bits to compute the position of the element. This way traversing the elements
of the source hash table will yield them in the order where they had similar
hashcodes (and hence, positions) in the source table, but different ones in
the destination table.
Ideally, in the future we want to be able to have a family of hash functions
and assign a different hash function from that family to each hash table
instance. That would statistically almost completely eliminate the possibility
that the hash table element traversal causes excessive collisions.
I should probably @mention extempore here.
|
|\ \ \
| | | |
| | | |
| | | | |
'fedgehog/docs_fix_for_scala.Either.cond___SI-5113' and 'kepler/ticket/5266' into develop
|
| | |/ |
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The @migration annotation can now be used like @deprecation.
Old syntax is still supported, but deprecated.
Improve wording and consistency of migration messages, migration
warnings also print the version in which the change occurred now.
Partially fixes SI-4990.
|
|/
|
|
|
|
| |
Nobody should be deprecating methods without ensuring that the
implementation doesn't rely on their existence (and the documentation
doesn't still suggest using them.) Made it more internally consistent.
|
|\ |
|
| |
| |
| |
| |
| | |
A bit further down Option's slippery slope of collections methods, but
those sudden implicit conversions to Iterable are legitimately annoying.
|
|/ |
|
|
|
|
|
|
| |
Change scaladoc links in collection classes to point at re-formatted
Collections Overview on docs.scala-lang.org. Fix minor typo:
s/Ummutable/Immutable
|
|
|
|
| |
"The Scala 2.8 Collections API" overview.
|
|\ \
| | |
| | |
| | | |
'ijuma/feature/signum' into develop
|
| |/
| |
| |
| |
| |
| |
| |
| | |
The Java implementation is faster as it doesn't have branches.
java.lang.Math includes implementations of signum for Double and Float,
but I didn't change the ones in scala.math because there is a difference
on how negative zero is handled.
|
|/
|
|
| |
and :+, plus one for ++:.
|
|\ \ \ \
| | | | |
| | | | |
| | | | | |
'dcsobral/parserFilter', 'soc/library-range-sum', 'szeiger/feature/enumeration-valueset', 'szeiger/issue/5117' and 'jsuereth/pull-binary-error-message' into develop
|
| | | | |
| | | | |
| | | | |
| | | | | |
Closes SI-5117.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
- Make Enumeration.ValueSet a SortedSet and back it by a BitSet
- Add toBitMask and fromBitMask methods for value sets
- Add an Ordering for the values
- Deprecate names seq in the Enumeration constructor
- Add + method to Value for easy ValueSet creation
|
| | |/ /
| | | |
| | | |
| | | | |
Partially fixes SI-4658. NumericRange stays slow, thanks to the brilliant idea that Numeric doesn't need a division operation.
|
| | |/
| |/|
| | |
| | |
| | |
| | |
| | | |
Complement map and flatMap when used in for comprehensions. This is
required when pattern matching is used on the result of the generators.
It is implemented through a new filterWithError method on ParseResult.
|
|/ /
| |
| |
| | |
Can be used to reliably override the default no success messages.
|
|/
|
|
|
| |
Using java.lang.Long.bitCount for the size computation is a lot faster
than the previous Scala implementation. Closes SI-2196.
|
|\ \
| | |
| | |
| | | |
into develop
|
| |/ |
|
|/ |
|
|\ \
| | |
| | |
| | | |
'remotes/odersky/topic/reify', 'remotes/robinst/master' and 'remotes/szeiger/bitset' into pending
|
| |/
|/|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Mutable and immutable BitSets now extend SortedSet, using a fixed
Ordering.Int and an efficient bit mask based rangeImpl()
- fromArray methods in both implementations are deprecated in favor of
new fromBitMask and fromBitMaskNoCopy methods
- New toBitMask method for converting bit sets back to Array[Long] bit
masks
- immutable.BitSet uses a more efficient Builder, based on
mutable.BitSet (closes SI-4647)
- Delete scala.tools.nsc.util.BitSet (not used anywhere)
Review by @odersky
|
|/
|
|
| |
emptyValDef has special meaning in the compiler, so reify needs to preserve it by identity and not just by structure.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
-Yreify-copypaste: the copy/pasteable mode for reification
When experimenting with macros, I've found out that it's helpful to
use the reifier to find out what Scala idioms map to what Tree shapes.
However, stuff emitted by -Yreify-debug is too verbose, that's why I
decided to put up a human-readable dumper.
To use the dumps, you need to first import the following things:
import scala.reflect.api._ import scala.reflect.mirror._ import
scala.reflect.api.Modifier._ import scala.reflect.internal.Flags._
The stuff is really experimental, e.g. the tension between flags and
modifiers needs to be thought out and addressed. Review by odersky.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A remedy for an IllegalAccessError where generated bytecode referred to
an inaccessible type. Closes SI-1430.
Bonus materials:
- tore out all the invokedynamic support. The shipped jdk7
implementation shows limited resemblance to the one this was written
against; the code mostly serves to distract. (I think I could get
invokedynamic working pretty quickly, except that it would
mean having a codebase for java7 and one for 5-6, which is not a yak
I wish to shave today.)
- gave NullClass and NothingClass objects of their own, which
allowed a nice polymorphic simplification of isSubClass, plus a
couple other streamlinings.
|
|
|
|
|
|
|
| |
Had AnnotationInfo extend Product3 since it's no longer a case class.
Tried to make reflection a little more robust. Closes SI-5223, review by
vogt.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Trying to make hashcodes faster. Didn't achieve much on that front, so
redirected into structural/consistency issues. The latter was lacking
in terms of how/where "def seq" was defined. The documentation I can
find doesn't give me much hint that the sequential form of my sequential
collection might be a single-use iterator! (As in StringOps, ArrayOps.)
If that's intentional it should be in huge letters. I'm assuming for now
that it wasn't.
Also, there was this:
GenMapLike: def seq: Map[A, B]
GenSetLike: def seq: Set[A]
GenSeqLike: // nothing, returns Traversable
So I added some def seqs where I needed the more specific types for
my hashcode work. Hashcodewise, I broke the MurmurHash3 object into
a reusable class and a collections-specific object, and I deprecated
the methods which took GenTraversableOnce in favor of ones taking
TraversableOnce, because there's no reason the hashcode library should
have to know about things like "make sure to call seq before you
traverse or you'll be sorry." Exclude things by their type and you can
never make a mistake. End transmission.
|