| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The transformer in the superaccessors phase uses the var
`validCurrentOwner` to track whether we're in a part of the
code that won't end up in the host method, and as such, will
need to access super-method via a super-accessor.
But, this bit of bookkeeping was not correctly reset after traversing
out of a local class. A `VerifyError` ensued.
This commit changes `atOwner` to save and restore that flag, rather
than leaving it set to `true`.
I've also added a test variation using a by-name argument.
|
|\
| |
| | |
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
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
Previously due to greediness of SyntacticApplied there was a chance that
quasiquote tuple placeholder got reified as its representation rather
than its meaning.
|
|\ \ \
| | | |
| | | | |
SI-8370 fixes an infinite loop in repl init
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Under a weird coincidence of circumstances provided by `sbt console-quick`,
new XML parsing logic in compiler plugin initialization could lead to stack
overflow errors.
Here's the abridged sequence events that led to this unfortunate problem
(full description can be found on the JIRA issue page):
1) Initialization of the compiler underlying the REPL would kick off
plugin initialization.
2) PluginDescription.fromXML would call into DocumentBuilderFactory, i.e.
DocumentBuilderFactory.newInstance.newDocumentBuilder.parse(xml).
3) That thing would call into javax.xml.parsers.SecuritySupport.getResourceAsStream,
requesting META-INF/services/javax.xml.parsers.DocumentBuilderFactory.
4) That request would get serviced by TranslatingClassLoader provided
by the REPL to expose dynamically compiled code.
5) TranslatingClassLoader would call translatePath that would call into
IMain.symbolOfIdent trying to map the requested resource onto one of the
classes defined by the REPL (which don't exist yet, because REPL hasn't
yet finished initializing).
6) IMain.symbolOfIdent would request IMain.global, which is exactly the
instance of the compiler that underlies the REPL, and that's currently
being initialized.
7..inf) Repeat until a StackOverflowError.
|
|\ \ \ \
| | | | |
| | | | | |
SI-8331 make sure type select & applied type doesn't match terms
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
1. Tighten up the if else to avoid duplication
2. Add doc comments
|
| | |/ /
| |/| |
| | | |
| | | |
| | | |
| | | | |
Due to tree re-use it used to be the fact that type quasiquotes could
match term trees. This commit makes sure selections and applied type and
type applied are all non-overlapping between q and tq.
|
|\ \ \ \
| | | | |
| | | | | |
SI-8367 revert SI-8192's change to primaryConstructor when isJavaDefined
|
| | |/ /
| |/| |
| | | |
| | | | |
this is some weird stuff
|
|\ \ \ \
| | | | |
| | | | | |
SI-8368 respect user-supplied -Dscala.usejavacp in unix runner
|
| |/ / / |
|
|\ \ \ \
| |_|_|/
|/| | | |
SI-8377 - Clarify the asynchronous requirement of ExecutionContext
|
|/ / / |
|
|\ \ \
| | | |
| | | | |
SI-8375 saner binary incompat errors for macros
|
| | | | |
|
| |/ /
| | |
| | |
| | |
| | |
| | | |
Inspired by Brian McKenna's RC1 migration experience, this commit improves
macro impl binding validation in order to provide more helpful diagnostic
for this quite frequent class of errors.
|
|\ \ \
| | | |
| | | | |
SI-8364 fixes cxTree lookup for imports
|
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This is reminiscent of the bug that I recently fixed in paradise:
https://github.com/scalamacros/paradise/commit/0dc4e35883d357b7cbcdfd83b5b4821c1dcc0bb1.
When doing something non-standard with contexts, we usually have to keep
in mind that new contexts are created not only for trees that demarcate
blocks of code, but also for imports.
|
|\ \ \
| |_|/
|/| | |
minor typos in the doc of applyOrElse
|
| | | |
|
|\ \ \
| | | |
| | | | |
SI-8369 resetAttrs now correctly accounts for skolems
|
| | |/
| |/|
| | |
| | |
| | | |
resetAttrs (née resetLocalAttrs) has been oblivious to existence of skolems.
Not anymore, which prevents us from reverting to the untyper nightmare.
|
|\ \ \
| |/ /
|/| | |
SI-8372: unspliceable type printed in error message
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The b8a76f688c6ce2a4c305da064303bb46b53be875 introduced ArrayOps.{unzip,
unzip3} methods. Both of those methods have ClassTags as context bounds on
their type parameters so they can create (and return) instances of Arrays.
The type inference for those methods is supposed to be guided by
implicit evidence that T <: (T1, T2) (or T <: (T1, T2, T3) in unzip3 case).
However, context bounds are desugared into implicit parameters that
prepended in front of implicit parameters declared in source code. That
means the implicit evidence won't have a chance to guide type inference
because it comes as last implicit parameter.
This commit desugars context bounds and puts them at the end of implicit
parameter list. This way type inference is guided properly and we get
expected compiler errors for missing class tags.
The change to parameters order breaks binary compatibility with respect
to 2.11.0-RC1. I added filters to our binary compatibility configuration
files. We can get rid of them as soon as 2.11.0 is out.
|
|/ /
| |
| |
| |
| | |
This commit merely documents current (suboptimal) error message printed
for the code reported in SI-8372. The next commit will fix the problem.
|
|\ \
| | |
| | | |
Enable binary comp testing. Final build cleanup.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The only result of all this duplication was bitrot.
The main build is responsible for building, testing, documenting and publishing.
(It publishes everything needed to build a distribution to maven in
`pack-maven.dist`.)
The sbt build over at scala/scala-dist handles distribution building for the
various platforms.
Note: after `ant build`, `build/pack` will have a pretty complete distribution.
(The only thing missing are the docs: see targets `pack.doc` and `docs.done`.)
To build your own distribution, do, e.g.:
```
ant publish-local-opt -Dmaven.version.suffix="-foo"
cd ~/git
hub clone scala/scala-dist
cd scala-dist
sbt 'set version := "2.11.0-foo"' 'set resolvers += Resolver.mavenLocal' universal:package-bin
```
|
| | |
| | |
| | |
| | |
| | | |
The distpack-maven-* targets no longer create said dir/build.
Use the publish tasks directly instead.
|
|/ /
| |
| |
| | |
Changes in the package scala.reflect.internals are ignored.
|
|\ \
| | |
| | | |
Bump versions for 2.11.0-RC1
|
| | | |
|