| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
'may be not be' -> 'may not be'
|
|\
| |
| | |
grammar it's -> its
|
|/ |
|
|\
| |
| | |
Performance improvement: collectFirst in TraversableOnce
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
collectFirst was implemented in TraversableOnce by calling toIterator and then using a non-local return to pull out a Some when the partial function succeeded. This had two problems:
1. If the TraversableOnce was Iterator or Iterable, stepping through until pf is happy is much (15x!) faster.
2. If the TraversableOnce was not, creating an Iterator is a waste of time and memory
This fixes both of these issues by inspecting the self-type and choosing the appropriate implementation.
Further (modest) improvements likely possible in 2.12 by moving specialized implementations to child classes and using `applyOrElse` on the partial function with a package-private object instead of a locally created one.
|
|\ \
| | |
| | | |
Fixes and Improvements for the new inliner
|
| | |
| | |
| | |
| | | |
Cannot inline if one of the methods is @strictfp, but not the other.
|
| | |
| | |
| | |
| | |
| | | |
Invocations of private methods cannot be inlined into a different
class, this would cause an IllegalAccessError.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This threshold is really the last resort and should never be reached.
An inlining heuristic that blows up methods to the maximum size
allowed by the JVM is broken.
In the future we need to include some heuristic about code size when
making an inlining decision, see github.com/scala-opt/scala/issues/2
|
| | |
| | |
| | |
| | |
| | |
| | | |
This behavior is confusing and also problematic for writing partest
tests: CI passes -optimize, which negates the -Ybackend:GenBCode entry
in a flags file.
|
| | |
| | |
| | |
| | |
| | | |
That was an oversight. Scalac never emits iinc, but it can appear when
inlining from the classpath.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Many backend components don't have access to the compiler instance
holding the settings.
Before this change, individual settings required in these parts of the
backend were made available as members of trait BTypes, implemented
in the subclass BTypesFromSymbols (which has access to global).
This change exposes a single value of type ScalaSettings in the super
trait BTypes, which gives access to all compiler settings.
|
| | |
| | |
| | |
| | | |
Because you can't, really.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Running an ASM analyzer returns null frames for unreachable
instructions in the analyzed method. The inliner (and other components
of the optimizer) require unreachable code to be eliminated to avoid
null frames.
Before this change, unreachable code was eliminated before building
the call graph, but not again before inlining: the inliner assumed
that methods in the call graph have no unreachable code.
This invariant can break when inlining a method. Example:
def f = throw e
def g = f; println()
When building the call graph, both f and g contain no unreachable
code. After inlining f, the println() call becomes unreachable. This
breaks the inliner's assumption if it tries to inline a call to g.
This change intruduces a cache to remember methods that have no
unreachable code. This allows invoking DCE every time no dead code is
required, and bail out fast. This also simplifies following the
control flow in the optimizer (call DCE whenever no dead code is
required).
|
| | |
| | |
| | |
| | |
| | | |
Introduces a stress-test mode "everything" in which the inliner tries
to inline every calliste that can be statically resolved.
|
| | |
| | |
| | |
| | | |
Invalid is used for control flow in RightBiasedEither.orThrow.
|
|\ \ \
| | | |
| | | | |
SI-9264 An even-better diagnostic for an unexplained crash
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We have seen an intermittent crasher in the backend for the last
month or so.
In https://github.com/scala/scala/pull/4397, I added a diagnostic
to show the actual locals in scope in the method.
This commit further expands the diagnistic to show the method's tree.
|
|\ \ \
| | | |
| | | | |
SI-9181 Exhaustivity checking does not scale (regression)
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Tseitin's transformation, e.g., use
`CNF(P1 /\ ... /\ PN) == CNF(P1) ++ CNF(...) ++ CNF(PN)`
in order to simplify the resultung formula.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
reachability analysis are too big to be solved in reasonable time, then we skip
the analysis. I also cleaned up warnings.
Why did `t9181.scala` work fine with 2.11.4, but is now running out of memory?
In order to ensure that the scrutinee is associated only with one of the 400
derived classes we add 400*400 / 2 ~ 80k clauses to ensure mutual exclusivity.
In 2.11.4 the translation into CNF used to fail, since it would blow up already
at this point in memory. This has been fixed in 2.11.5, but now the DPLL solver
is the bottleneck.
There's a check in the search for all models (exhaustivity) that it would avoid
a blow up, but in the search for a model (reachability), such a check is
missing.
|
|\ \ \ \
| | | | |
| | | | | |
Enable #4285: switch to partest 1.0.6
|
| | |/ /
| |/| |
| | | |
| | | | |
To enable #4285
|
|\ \ \ \
| | | | |
| | | | | |
Merge/2.10 to 2.11 apr 1
|
|/| | | | |
|
| |\ \ \ \
| | | | | |
| | | | | | |
[backport] SI-8689 Make a Future test case determistic
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
As discussed:
https://groups.google.com/forum/#!topic/scala-internals/m8I_3GQR4vQ
We need to ensure a happens-before relationship between the callback
that prints "success" and the end of the main method.
|
| | | | | |
|
| | | | | |
|
| |\ \ \ \
| | | | | |
| | | | | | |
Publish to sonatype staging (the default).
|
| |/ / / /
| | | | |
| | | | |
| | | | | |
Simplified while I was at it.
|
| |\ \ \ \
| | | | | |
| | | | | | |
Port old 2.10 release script to new CI.
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | | |
To fit in with the new flow, we upload to S3 instead of
using the copy artifact plugin.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
[nomerge] SI-8940 Scaladoc: Fix "Order by Alphabetical" button
|
|/ / / / /
| | | | |
| | | | |
| | | | | |
The selector has been wrong since 0c2614e.
|
|\ \ \ \ \
| | | | | |
| | | | | | |
SI-8731 don't issue a @switch warning for two-case matches
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This allows annotating small pattern matches with `@switch` without
getting any warnings. There's no reason to warn, the performance of
the generated bytecode is good.
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
ScalaDoc typo
|
| | | | | | | |
|
|\ \ \ \ \ \ \
| |_|_|_|/ / /
|/| | | | | | |
SI-8861 Handle alias when probing for Any
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
If args to a method are alias types, dealias to see if they
contain Any before warning about inferring it. Similarly for
return and expected types.
|
|\ \ \ \ \ \ \
| |_|_|_|_|_|/
|/| | | | | | |
SI-8689 Make a Future test case determistic
|
|/ / / / / /
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
As discussed:
https://groups.google.com/forum/#!topic/scala-internals/m8I_3GQR4vQ
We need to ensure a happens-before relationship between the callback
that prints "success" and the end of the main method.
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
Remove deprecation warnings
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
- Added `since` to deprecation statement
- Added unit to parameter list
- Removed usage of deprecated method polyType
- Replaced deprecated `debugwarn` with `devWarning`
- Changed switch statement to if else in order to remove a warning
- Switched implementation of `init` and `processOptions` to prevent
warning
- Replaced deprecated `Console.readLine` with `scala.io.StdIn.readLine`
- Replaced deprecated `startOrPoint` with `start`
- Replaced deprecated `tpe_=` with `setType`
- Replaced deprecated `typeCheck` with `typecheck`
- Replaced deprecated `CompilationUnit.warning` with `typer.context.warning`
- Replaced deprecated `scala.tools.nsc.util.ScalaClassLoader` with `scala.reflect.internal.util.ScalaClassLoader`
- Replaced deprecated `scala.tools.ListOfNil` with `scala.reflect.internal.util.ListOfNil`
- Replaced deprecated `scala.tools.utils.ScalaClassLoader` with `scala.reflect.internal.util.ScalaClassLoader`
- Replaced deprecated `emptyValDef` with `noSelfType`
- In `BoxesRunTime` removed unused method and commented out unused values. Did not delete to keep a reference to the values. If they are deleted people might wonder why `1` and `2` are not used.
- Replaced deprecated `scala.tools.nsc.util.AbstractFileClassLoader` with `scala.reflect.internal.util.AbstractFileClassLoader`
|
| | | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
... replaced by hasPackageFlag, hasSymbolIn, getterIn, setterIn.
|
|\ \ \ \ \ \ \
| |_|_|_|/ / /
|/| | | | | | |
SI-9038 fix scaladoc syntax highlightning to leave unicode alone
|
| | |_|/ / /
| |/| | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Syntax highlightning in code blocks used to manipulate the raw bytes of
a String, converting them to chars when needed, which breaks Unicode
surrogate pairs.
Using a char array instead of a byte array will leave them alone.
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
SI-9182 Fix runtime reflection with package object, overloads
|