summaryrefslogtreecommitdiff
path: root/test/junit
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #3931 from lrytz/opt/tracked-finalLukas Rytz2014-09-011-34/+21
|\ | | | | GenBCode refactoring (remove Tracked) and fix InnerClass / EnclosingMethod attributes
| * Remove Tracked, add type information to ClassBTypeLukas Rytz2014-08-191-34/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this change, a ClassBType was just a name. The `exemplars` map stored a Tracked instance for every ClassBType. Tracked stored type information that is required later in the backend when things may run concurrently. In particular: superclass, interfaces, flags and information for emitting the InnerClass attribute. Now we put all the information stored in Tracked directly in the ClassBType. There is still one hash map: `classBTypeFromInternalNameMap` maps a JVM internal class name (e.g. "scala/Predef$") to the corresponding ClassBType. This map is used during bytecode generation, when the ASM framework computes stack map frames. In order to compute stack map frames, the ASM framework needs to be able to get the LUB of two types. The default implementation uses reflection to get type information, however that doesn't work in our case: the classes we compile are not on the classpath. So instead, the backend overwrites the method `getCommonSuperClass` of the ClassWriter. This method receives two class internal names and computes their LUB. This is done by looking up the ClassBTypes in the `classBTypeFromInternalNameMap` and invoking `jvmWiseLUB`. This commit was reviwed in https://github.com/scala/scala/pull/3855. It consists of all commits labelled [squash-after-review], squashed into one.
* | Merge pull request #3949 from lrytz/t8627Grzegorz Kossakowski2014-08-271-0/+18
|\ \ | | | | | | SI-8627 make Stream.filterNot non-eager
| * | SI-8627 make Stream.filterNot non-eagerLukas Rytz2014-08-271-0/+18
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The obvious fix, overriding `filterNot` in Stream, is not binary compatible, see https://github.com/scala/scala/pull/3925 Instead, this makes `filterImpl` in TaversableLike private[scala], which allows overriding it in Stream. The corresponding mima-failures can be whitelisted, as the changes are only to private[scala]. In 2.12.x we can remove the override of `filter` in Stream, but in 2.11.x this is not binary compatible. Eventually we'd also like to make filter / filterNot in TraversableLike final, but that's not source compatible, so it cannot be done in 2.12.x.
* | Merge pull request #3923 from som-snytt/issue/8787Grzegorz Kossakowski2014-08-191-0/+17
|\ \ | |/ |/| SI-8787 Regextraction is null-proof
| * SI-8787 If you love nulls, so does RegexSom Snytt2014-08-081-0/+17
| | | | | | | | Regex is robust when unapplying null. A null never matches.
* | SI-8512 Infer Any for the qSom Snytt2014-08-121-0/+23
| | | | | | | | | | | | | | | | | | Avoid the widening bug for q. This resolution also suffers from the inference of Any, which can trigger a warning and an anxiety attack. But that's still better than doing the wrong thing. Right?
* | SI-8512 Infer a type for f"$args"Som Snytt2014-08-121-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | The f-interpolator gets a type param that better be Any to avoid unfortunate widenings. Hey, it worked! Unfortunately, when `Any` is inferred, `-Xlint:infer-any` takes notice. This is probably a greater problem for the f-interpolator than for quasiquotes, which are a more specialized tool.
* | SI-6476 DocumentationSom Snytt2014-07-181-0/+14
|/ | | | And adjust the test.
* SI-8525 Clarify usage of -Xlint:_,flagSom Snytt2014-07-161-15/+9
| | | | | | | | | | | | | | | | | | | | | Also clarify usage of -Xlint flag. Align more with javac -Xlint:all,-flag,flag where once a flag is explicitly enabled it cannot be disabled, but where the wildcard is a backstop only. (There is no all option yet here.) -Xlint and -Xlint:_ just set a flag which is consulted by any unset lint warning. Xlint warnings consult the state of Xlint when they are unset. Individual -Ywarn-ings do not. Other warnings are explicitly set to false. They can only be enabled programmatically. Some tests are corrected. Also, option order is no longer significant, see the unit test.
* SI-8525 No anonymous lintSom Snytt2014-07-101-3/+3
| | | | | | | | | Turn anonymous references to `settings.lint` into named settings. After that, trust to Adriaan to make them filterable. There are a few remaining top-level -Y lint warnings that are deprecated.
* SI-8525 Add -Xlint:-warn-missing-interpolatorSom Snytt2014-07-081-2/+16
| | | | | | | | | | Turn off lint warnings with negating prefix, and add a lint-only warning for the infamously nagging "Did you forget the interpolator?" That message is made more dignified. Without `-Xlint:false`, there is no mechanism to turn off anonymous linters once `-Xlint` is selected.
* Remove deprecationWarning, currentReporting from ReportingAdriaan Moors2014-07-041-0/+7
| | | | | | | | This moves us a bit closer to the goal of having a single entry point to reporting. Must modularize Reporting a bit so it can be used in Variances (need a reference to `currentRun` in `reflect.internal.Reporting`).
* Uniformly route reporting through reporter.Adriaan Moors2014-07-041-0/+5
| | | | | | | | | | | | Sharpen interfaces, reduce footprint of Reporting trait. Ideally, all reporting should indirect through reporter, and the `Reporting` trait itself should be restricted to a single method that retrieves the current `reporter`. Pull up some more reporting to reflect.internal. Would like to do more, but need to move partest to the reflect.internal interface first. (Its `errorCount` relies on `ERROR.count` in `tools.nsc.Reporter`.)
* Merge pull request #3736 from VladimirNik/print-types-issue-2.11.xAdriaan Moors2014-07-031-26/+51
|\ | | | | SI-8447 fix TypeTree printing (2.11.x)
| * TypeTree printing modified (SI-8447)VladimirNik2014-05-091-26/+51
| |
* | SI-8611 Avoid accidental patmat unification with refinement typesJason Zaugg2014-06-101-0/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the enclosed test, t8611a.scala, the patterns `O.{A, B}` were incorrect treated as equivelent by the combination of `uniqueTpForTree` and `Const.uniqueTpForTree`. `uniqueTpForTree` used `Type#narrow` to try to create a distinct type for each new pattern tree it encountered. However, narrowing a `RefinedType` does not create a distinct type as we are used to when narrowing, e.g. a class type. // Type def narrow: Type = if (phase.erasedTypes) this else { val cowner = commonOwner(this) refinedType(this :: Nil, cowner, EmptyScope, cowner.pos).narrow } // CompoundType override def narrow: Type = typeSymbol.thisType This commit creates a fresh existential type symbol rather than trying to use `narrow`. I've included a unit test to show the sublteties of narrowing refinment types.
* | Merge pull request #3743 from ruippeixotog/issue/8553Ichoran2014-06-041-0/+16
|\ \ | | | | | | SI-8553 WrappedArray throws exception on lastIndexWhere when index out of range
| * | SI-8553 WrappedArray throws exception on lastIndexWhere when index out of rangeRui Gonçalves2014-05-121-0/+16
| |/ | | | | | | | | | | | | | | | | Adds a check in `IndexedSeqOptimized#lastIndexWhere(A => Boolean, Int)` to begin searching in the end of the collection if `end` is greater than the collection's length. Discussed in https://groups.google.com/d/topic/scala-internals/-MacXivbY0Q/discussion.
* | Merge pull request #3796 from som-snytt/issue/8630Adriaan Moors2014-06-031-0/+5
|\ \ | | | | | | SI-8630 lineToString no longer long by one at eof
| * | SI-8630 lineToString no longer long by one at eofSom Snytt2014-05-271-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One more EOL crasher, or lack-of-EOL crasher, when the text is at EOF. It was not caught by the last round of excellent and thorough tests because ``` // If non-whitespace tokens run all the way up to EOF, // positions go wrong because the correct end of the last // token cannot be used as an index into the char array. // The least painful way to address this was to add a // newline to the array. ```
* | | Merge pull request #3795 from som-snytt/issue/8475Adriaan Moors2014-06-031-0/+8
|\ \ \ | | | | | | | | SI-8475 GroupedIterator is also lazy when padded
| * | | SI-8475 GroupedIterator is also lazy when paddedSom Snytt2014-05-271-0/+8
| |/ / | | | | | | | | | | | | | | | | | | | | | This is the related case which dnlgtm in the previous fix. The old code seems to be tilting for laziness, but we have to fill the buffer with the current group anyway, so there is no reason to be coy about calling ArrayBuffer.length.
* | | Merge pull request #3774 from lrytz/opt/backendWipLukas Rytz2014-06-013-6/+210
|\ \ \ | |/ / |/| | More type safe implementation of BType, cleanups in GenBCode
| * | Unit tests for reflect/internal/NamesLukas Rytz2014-06-011-0/+95
| | |
| * | Unit tests for new BType classesLukas Rytz2014-06-012-6/+115
| | |
* | | Merge pull request #3733 from retronym/topic/pr-3712-resubmitJason Zaugg2014-05-271-0/+20
|\ \ \ | | | | | | | | SI-8475 Fix off by one in GroupedIterator when Streaming
| * | | SI-8475 Fix off by one in GroupedIterator when StreamingJean-Remi Desjardins2014-05-091-0/+20
| | | | | | | | | | | | | | | | This also affected sliding and grouped since they defer to GroupedIterator
* | | | Optimize nested scope creationJason Zaugg2014-05-261-0/+54
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can copy the hash table from the parent scope, rather than constructing it from scratch. This takes us to: % rm -rf /tmp/pkg; (for i in {1..50}; do for j in {1..100}; do echo "package pkg { class A_${i}_${j}___(val a: Int, val b: Int) }"; done; done) > sandbox/A1.scala && time qbin/scalac -Ybackend:GenASM -J-Xmx1G -J-XX:MaxPermSize=400M -d /tmp sandbox/A1.scala; real 0m19.639s // head~1 was 0m35.662s user 0m41.683s // head~1 was 0m58.275s sys 0m1.886s In more detail, this commit: - Removes the unused `fingerprint` constructor parameter from scopes. This is a remnant from a previous optimization attempt - Leave only one constructor on Scope which creates an empty scope - Update the factory method, `newNestedScope`, to copy the hash table from the parent if it exists. We can rely on the invariant that `outer.hashTable != null || outer.size < MIN_HASH)`, so we don't need `if (size >= MIN_HASH) createHash()` anymore. This used to be needed in `Scope#<init>`, which accepted an aribitrary `initElems: ScopeEntry`. - Update subclasses and factories of `Scope` in runtime reflection to accomodate the change. Pleasingly, we could actually remove the override for `newNestedScope`. - Unit tests the functionality I'm touching
* | | SI-8507 Avoid lazy val in StringContextSom Snytt2014-05-131-0/+51
| |/ |/| | | | | | | | | | | | | | | This mild refactor eliminates the lazy val StringBuilder and arguably makes the code easier to read. There is a small unit test but no benchmark to prove anything useful about performance. The ticket notes contention due to lazy implementation.
* | SI-8504 fix NPE in the Java wrapper for a Scala Map.Antoine Gourlay2014-04-291-0/+10
|/ | | | MapWrapper blindly calls .hashCode on keys that can very well be null.
* Printers tests uncommentedVladimirNik2014-03-132-1171/+1163
|
* SI-8386 fixedVladimirNik2014-03-111-268/+612
|
* Merge pull request #3566 from adriaanm/t6455Grzegorz Kossakowski2014-02-251-0/+35
|\ | | | | SI-6455 no longer rewrite .withFilter to .filter
| * SI-6455 util.Try supports withFilterAdriaan Moors2014-02-241-0/+35
| |
* | PrintersTest commentedVladimirNik2014-02-201-1151/+809
| |
* | printOwners support added to Printers; whitespaces removedVladimirNik2014-02-201-155/+155
| |
* | lazy vals printing fixed for typechecked treesVladimirNik2014-02-201-1/+24
| |
* | printers flag processing improvements: printRootPkg flag fixed, comments to ↵VladimirNik2014-02-201-2/+7
| | | | | | | | flags metadata printing added
* | Attributed val/var processing for syntactics (SI-8180)VladimirNik2014-02-201-820/+1134
|/ | | | | | TypedTreesPrinter added changes based on pull request comments: print root packages flag; tests for syntactics; SyntacticEmptyTypeTree added to Printers
* Merge pull request #3452 from xeno-by/topic/palladium0Jason Zaugg2014-02-193-836/+850
|\ | | | | SI-8063 and its seventy friends
| * Merge remote-tracking branch 'origin/master' into topic/palladium0Eugene Burmako2014-02-161-0/+7
| |\ | | | | | | | | | | | | | | | | | | | | | Conflicts: src/compiler/scala/reflect/macros/compiler/Resolvers.scala src/compiler/scala/reflect/macros/contexts/Typers.scala src/compiler/scala/tools/reflect/ToolBoxFactory.scala src/reflect/scala/reflect/api/BuildUtils.scala
| * | establishes scala.reflect.api#internalEugene Burmako2014-02-142-836/+844
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reflection API exhibits a tension inherent to experimental things: on the one hand we want it to grow into a beautiful and robust API, but on the other hand we have to deal with immaturity of underlying mechanisms by providing not very pretty solutions to enable important use cases. In Scala 2.10, which was our first stab at reflection API, we didn't have a systematic approach to dealing with this tension, sometimes exposing too much of internals (e.g. Symbol.deSkolemize) and sometimes exposing too little (e.g. there's still no facility to change owners, to do typing transformations, etc). This resulted in certain confusion with some internal APIs living among public ones, scaring the newcomers, and some internal APIs only available via casting, which requires intimate knowledge of the compiler and breaks compatibility guarantees. This led to creation of the `internal` API module for the reflection API, which provides advanced APIs necessary for macros that push boundaries of the state of the art, clearly demarcating them from the more or less straightforward rest and providing compatibility guarantees on par with the rest of the reflection API. This commit does break source compatibility with reflection API in 2.10, but the next commit is going to introduce a strategy of dealing with that.
| * | Merge remote-tracking branch 'origin/master' into topic/palladium0Eugene Burmako2014-02-141-1/+18
| |\ \
| * | | additional class tags for reflection APIEugene Burmako2014-02-141-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduces a test that iterates all abstract types in reflection API and makes sure that every one of them has an associated class tag. After being introduced, the test has immediately failed exposing the lack of tags for TreeCopier, Mirror and RuntimeClass, which has been subsequently fixed in this commit.
* | | | Group settings should honor user-set individual optionsJason Zaugg2014-02-171-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the last commit, we added the ability to explicitly disable boolean settings form the command line. This commit changes group settings (like -optimize), to leave them alone if set explicitly. Examples: `scalac -Xlint -Ywarn-unused:false -optimize -Yinline:false` The mechanism for such settings has also been refactored to `MutableSettings`, to let use reuse this for `-Xlint`.
* | | | Expose a means to disable boolean settingsJason Zaugg2014-02-171-0/+28
| |_|/ |/| | | | | | | | | | | | | | Enables `-Yboolean-setting:{true,false}`. This will be exploited in the next commit to enable one to turn off a single component of a group setting, such as `-Xlint` or `-optimize`.
* | | SI-8264 scala.collection.immutable.HashSet#- returns broken SetRex Kerr2014-02-141-0/+7
| |/ |/| | | | | | | | | Was an error in HashSet's handling of removal of an element when a HashTrieSet should turn into a HashSet1. Also slightly modified HashMap's filter0 to more closely match HashSet (by adding the same comment).
* | Merge pull request #3437 from Ichoran/issue/6736Adriaan Moors2014-02-121-1/+18
|\ \ | |/ |/| SI-6736 Range.contains is wrong
| * Reasonable Range operations consistently work when overfull.Rex Kerr2014-02-091-3/+15
| | | | | | | | | | | | Operations are reasonable when they don't require indexing or conversion into a collection. These include head, tail, init, last, drop, take, dropWhile, takeWhile, dropRight, takeRight, span. Tests added also to verify the new behavior.