| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
SI-8428 Fix regression in iterator concatenation
|
| |
| |
| |
| |
| | |
Make the head iterator a constructor parameter, for easier
construction and implementation of ++.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Regressed in e3ddb2d7, which introduced `ConcatIterator` to
avoid super-linear runtime on chains of concatenated iterators.
`ConcatIterator` maintains a queue of thunks for the remaining
iterators. Both `next` and `hasNext` delegate to `advance`, which
evaluates the thunks and discards any empty iterators from the
start of the queue. The first non-empty iterator is stored in
the var `current`.
It also overrides `++`, and creates a new `ConcatIterator` with
the given `that` as an extra element in the queue. However, it
failed to copy `current` across, which led to data loss.
|
|\ \
| |/
|/| |
Bump versions for 2.11.0-RC3
|
|/ |
|
| |
|
|\
| |
| | |
SI-8341 minor fixup for comments in test
|
|/ |
|
|\
| |
| | |
SI-8341 Refine handoff of undet. params from implicit search
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In SI-7944 / 251c2b93, we discovered that typechecking of an implicit
candidate could leave orphaned undetermined type parameters in the
implicit search context. This resulted in naked type parameters
leaking into implicit expansions. The fix seemed easy: just copy
any symbols from `implicitSearchContext.undetparams` to the enclosing
context (other than ones in `SearchResult#subst`).
However, the test case in this ticket reveals a subtle flaw in that
fix: `implicitSerachContext.undetparams` only contains the type params
from the most recently typechecked candidate!
Why? Implicit search uses the same context to typecheck all plausibly
compatible candidates. The typechecking itself is driven by
`typedImplicit1`.
Side note, that explains the heisenbug behaviour noted in the ticket:
Not *all* plausibly implicit candidates are typechecked. If
the current 'best' eligible candidate is more specific than the next
candidate, we can skip that altogether.Implicit search actually
exploits this for performance by ordering the candidates according to
usage statistics. This reordering, means that commenting out lines
elsewhere in the file changed the behaviour!
This commit simply stores the undet. tparams in the `SearchResult`,
where it is safe from the vaguries of typechecking other candidates.
That makes `Test1` and `Test2` with in the enclosed test case fail
uniformly, both with each other, and with an explicit call to
the view.
This is ostensibly a regression from 2.10.3. To get there,
we need an implicit search that has to infer `Nothing` in a covariant
position. In 2.10.3, we would just let the `G` out into the wild,
which did the right thing for the wrong reasons.
|
|\
| |
| | |
SI-8425 don't create double-dollar names in c.freshName
|
| |
| |
| |
| |
| |
| | |
If we append a dollar to a user-provided prefix that ends in a dollar,
we create a potential for confusion for backend phases. That's why
this commit prevents such situations from happening.
|
|\ \
| |/
|/| |
SI-4492 More informative error when class not found on classpath
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Position the error based on Select tree that failed to type check,
presumably due to an underlying MissingRequirementError, which has no position.
There are lots of other ways we could rewrap a MRE and supplement position info,
but that remains TODO. Jason's review comment is recorded in the code.
Also try to detect the case of a missing module and provide some advice,
as well as linking to the forthcoming 2.11 guide at
http://docs.scala-lang.org/overviews/core/scala-2.11.html.
|
|\ \
| | |
| | | |
SI-8368 respect user-supplied scala.usejavacp
|
| |/
| |
| |
| | |
Now also works when the option is -Dscala.usejavacp=false...
|
|\ \
| | |
| | | |
SI-8386 showCode fails to pretty print application to assign
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
SI-8266 Amend advice for deprecated octal 042
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Improve the advice for `f"\042"` to read:
```
use ${'"'} or a triple-quoted literal """with embedded " or \u0022""" instead.
```
as per the discussion on SI-6476.
Knuth says that Charles XII came close to introducing octal arithmetic to Sweden,
and Wikipedia doesn't deny it.
I imagine an alternative history in which octal literals are deprecated in Scala
but required by legislation in Akka. #octal-fan-fiction
|
|\ \ \ \
| | | | |
| | | | | |
Remove "will not terminate" from toStream doc
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
It's at least not always true:
scala> val example = Iterator.continually(1).toStream
example: scala.collection.immutable.Stream[Int] = Stream(1, ?)
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-8086 follow-up that fixes the problem with `setter`
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | | |
This is a super-low risk follow-up for 47dba05 that fixes the same
problem with a neighboring method.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Minor fixes in test. The equals method always returned true.
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This commit ensures that the classes we use to test HashMaps and
HashSets in t6196 and t6200 have proper equals and hashCode
methods. (The old equals method returned always true and therefore
hashCode violated its contract).
|
|\ \ \ \ \
| |_|_|_|/
|/| | | | |
SI-8402 Restore 2.10 variance behavior under -Xsource:2.10
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Issue deprecation warning under -Xsource:2.10 so time
travelers can have an authentic deprecation experience before
finding that their unsound code no longer compiles in 2.11.
The relevant ticket to the soundness issue is SI-6566.
|
|\ \ \ \
| | | | |
| | | | | |
SI-8403 Fix regression in name binding with imports in templates
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Regressed in dbd8457 which changed `Context#make` to automatically
include the imports from the given `Tree` if it was an `Import`
tree, rather than requiring callers to call `makeNewImport`.
However, this turns out to double up the imports for the "inner" namer
of a template that starts with imports. The inner namer has a new
scope, but the same owner and tree as its parent.
This commit detects this case by seeing if the `Import` tree used
to consruct the child context is the same as the parent context.
If that is the case, we don't augment `Context#imports`.
|
|\ \ \ \
| |/ / /
|/| | | |
SI-8407 "symbol not found" in Scaladoc use cases: warning only
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The refactoring in aedec1980 mistakenly used the non-silent
typer to typecheck the use cases. It temptingly had the desired
type (`ScalaDocAnalyzer`), but sadly the wrong properties (it will
report errors, rather than buffer.)
This meant that "symbol not found" errors in use cases would prevent
Scaladoc generation.
This commit introduces a little downcast on the silent typer.
A more principled approach would be to go through the rigmarole
of the virtual class pattern for `Analzyer.Typer`, but that will
have to remain work for another day.
|
|\ \ \
| | | |
| | | | |
SI-8395 Regression in pattern matching with nested binds
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Regressed in https://github.com/scala/scala/pull/2848. In particular,
see 0cf47bdb5b and 017460e63c.
Because of the regression, this pattern:
(s @ (_s @ (_: String)))
was translated into `typeTestStep`, rather than a `bindingStep`. This
came down the the use of `unbind` in the `TypeBound` extractor.
My first step was to remove the `unbind`. That led to another
problem: the tree now matches `SymbolAndTypeBound`, which extracted
`symbol = s, tpe = String`, ignoring the `_s`. I changed that
extractor to no longer recursively apply to the sub-pattern tree,
which is what `MaybeTypedBound` used to do.
I also checked for other uses of `unbind` in the match translation.
The only place I found it is in `BoundTree#pt`. I believe that this
usage is correct, or at least, not obviously incorrect.
|
|\ \ \ \
| |/ / /
|/| | | |
SI-8376 Fix overload resolution with Java varargs
|
| | | |
| | | |
| | | |
| | | |
| | | | |
`T*` rather than `<repeated>[T]`, as we alreday do for Scala repeated
parameters.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When comparing specificity of two vararg `MethodTypes`, `isAsSpecific`
gets to:
```
case mt @ MethodType(_, _) if bothAreVarargs =>
checkIsApplicable(mt.paramTypes mapConserve repeatedToSingle)
```
The formal parameter type of a Java varargs parameter is represented
as `tq"${defintions.JavaRepeatedParamClass}[$elemTp]"`. For a Scala
repeated parameter, we instead use `defintions.RepeatedParamClass`.
`bothAreVarargs` detects `JavaRepeatedParamClass`, by virtue of:
```
def isRepeatedParamType(tp: Type) = isScalaRepeatedParamType(tp) || isJavaRepeatedParamType(tp)
```
But, `repeatedToSingle` only considers `RepeatedParamClass`.
This bug was ostensibly masked in 2.10.3, but became apparent after
a not-quite-refactoring in 0fe56b9770. It would be good to pin that
change down to a particular line, but I haven't managed that yet.
|
|\ \ \ \
| | | | |
| | | | | |
SI-8392 Guards QuasiquoteClass against non-availability in scala-reflect
|
| | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This assimilates behavior on Quasiquotes to the one on Reflection : if
we don't have the right resource on classpath, we do without rather
than throwing.
See the bug report for more on rationale (-Xsource flag, early
quasiquote loading in Analyzer through FastTrack, etc).
Review by @gkossakowski or @xeno-by
|
|\ \ \ \
| | | | |
| | | | | |
SI-8363 Disable -Ydelambdafy:method in constructor position
|
| | |/ /
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
As @magarciaEPFL has done in his experimental optimizer [1], we can
avoid running into limitations of lambdalift (either `VerifyError`s,
ala SI-6666, or compiler crashes, such as this bug), by using the
old style of "inline" lambda translation when in a super- or self-
construtor call.
We might be able to get these working later on, but for now we
shouldn't block adoption of `-Ydelamndafy:method` for this corner
case.
[1] https://github.com/magarciaEPFL/scala/blob/GenRefactored99sZ/src/compiler/scala/tools/nsc/transform/UnCurry.scala#L227
|
|\ \ \ \
| | | | |
| | | | | |
SI-8366 make partial function and match trees disjoint
|
| | | | | |
|
| | |/ /
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Previously one could match a partial function with match quasiquote:
scala> val q"$scrutinee match { case ..$cases }" = q"{ case Foo => Bar
}"
scrutinee: universe.Tree = <empty>
cases: List[universe.CaseDef] = List(case Foo => Bar)
This was quite annoying as it leaked encoding of partial functions as
Match trees with empty tree in place of scrutinee.
This commit make sure that matches and partial functions are disjoint
and don't match one another (while preserving original encoding under
the hood out of sight of the end user.)
|
|\ \ \ \
| | | | |
| | | | | |
SI-8368 respect user-supplied -Dscala.usejavacp in Windows runner
|
| |/ / / |
|
|\ \ \ \
| |/ / /
|/| | | |
Fixes syntax error in unix runner.
|
|/ / / |
|
|\ \ \
| | | |
| | | | |
SI-8385 make sure $quasiquote$tuple gets reified properly
|