summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Tests for optimizing val patternsLukas Rytz2016-02-163-18/+90
| | | | Fixes https://github.com/scala/scala-dev/issues/28
* Merge pull request #4966 from lrytz/inlineProjectLukas Rytz2016-02-155-15/+29
|\ | | | | SD-79 don't issue spurious inliner warnings under l:project
| * SD-79 don't issue spurious inliner warnings under l:projectLukas Rytz2016-02-155-15/+29
|/ | | | | | | | | | | When enabling `-Yopt:inline-project` (or `-Yopt:l:project`), the inliner would spuriously warn about callsites to methods marked `@inline` that are read from the classpath (not being compiled currently). This patch introduces yet another field to the `Callsite` class, which is growing a bit too large. But the call graph representation will get an overhaul when implementing the new inliner heuristics (2.12.0-M5), so this is just a temporary fix that would be nice to have in M4.
* Merge pull request #4963 from lrytz/simplerBranchingLukas Rytz2016-02-156-103/+242
|\ | | | | Generate leaner code for branches
| * Avoid generating ACONST_NULL; POP; ACONST_NULL when loading nullLukas Rytz2016-02-144-12/+69
| | | | | | | | | | | | | | When loading a value of type scala.runtime.Null$ we need to add POP; ACONST_NULL, see comment in BCodeBodyBuilder.adapt. This is however not necessary if the null value is a simple ACONST_NULL. This patch eliminates that redundancy.
| * Generate leaner code for branchesLukas Rytz2016-02-133-91/+173
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GenBCode used to generate more bytecode for branching instructions than GenASM. A simple method def f(x: Int, b: Boolean) = if (b) 1 else 2 would generate ILOAD 2 IFNE L1 GOTO L2 L1 ICONST_1 GOTO L3 L2 ICONST_2 L3 IRETURN If the conditional branch is negated (IFEQ) the GOTO is unnecessary. While -Yopt:l:method would clean this up, it's also not too hard to generate the leaner bytecode in the first place.
* | Merge pull request #4965 from lrytz/t8790Jason Zaugg2016-02-151-0/+20
|\ \ | |/ |/| SI-8790 test case
| * SI-8790 test caseLukas Rytz2016-02-131-0/+20
|/ | | | | Tuples created for pattern matching are eliminated since https://github.com/scala/scala/pull/4858
* Merge pull request #4944 from lrytz/stringBuilderNoBoxLukas Rytz2016-02-125-46/+135
|\ | | | | SI-9571 Avoid boxing primitives in string concatenation
| * SI-9571 Avoid boxing primitives in string concatenationMarko Elezovic2016-02-064-46/+120
| |
| * test case for optimizing BooleanOrdering.compareLukas Rytz2016-02-041-0/+15
| |
* | Merge pull request #4894 from mmynsted/2.12.xJason Zaugg2016-02-121-1/+11
|\ \ | | | | | | Provide simpler commented example for Future.map
| * | Making commented example simpler for mapMark Mynsted2016-01-191-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | Adding connection between map and for As described by SethTisue. Removing parentheses Fixing scaladoc
* | | Merge pull request #4896 from retronym/topic/indy-all-the-thingsJason Zaugg2016-02-1220-188/+363
|\ \ \ | | | | | | | | Use invokedynamic for structural calls, symbol literals, lambda ser.
| * | | Use invokedynamic for structural calls, symbol literals, lamba ser.Jason Zaugg2016-01-2920-188/+363
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous encodings created static fields in the enclosing class to host caches. However, this isn't an option once emit code in default methods of interfaces, as Java interfaces don't allow private static fields. We could continue to emit fields, and make them public when added to traits. Or, as chosen in this commit, we can emulate a call-site specific static field by using invokedynamic: when the call site is linked, our bootstrap methid can perform one-time computation, and we can capture the result in the CallSite. To implement this, I've allowed encoding of arbitrary invokedynamic calls in ApplyDynamic. The encoding is: ApplyDynamic( NoSymbol.newTermSymbol(TermName("methodName")).setInfo(invokedType) Literal(Constant(bootstrapMethodSymbol)) :: ( Literal(Constant(staticArg0)) :: Literal(Constant(staticArgN)) :: Nil ) ::: (dynArg0 :: dynArgN :: Nil) ) So far, static args may be `MethodType`, numeric or string literals, or method symbols, all of which can be converted to constant pool entries. `MethodTypes` are transformed to the erased JVM type and are converted to descriptors as String constants. I've taken advantage of this for symbol literal caching and for the structural call site cache. I've also included a test case that shows how a macro could target this (albeit using private APIs) to cache compiled regexes. I haven't managed to use this for LambdaMetafactory yet, not sure if the facility is general enough.
* | | | Merge pull request #4957 from retronym/topic/merge-2.11.x-to-2.12.x-20160210Seth Tisue2016-02-1115-19/+502
|\ \ \ \ | | | | | | | | | | Merge 2.11.x to 2.12.x [ci:last-only]
| * \ \ \ Merge commit '39a858d' into topic/merge-2.11.x-to-2.12.x-20160210Jason Zaugg2016-02-113-18/+17
| |\ \ \ \
| | * | | | Fix SBT tab completion of scala commandJason Zaugg2016-02-113-18/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `scala -deprecation` (without a trailing script argument) wasn't allowed. Now it is. I also supported trailing whitespace on all commands. Also fixed: a bug with completion of `scalac ./san<TAB>`. It was completing as though the `./` had not been typed, which threw the suggestion off by a few characters.
| * | | | | Merge branch '2.11.x' into topic/merge-2.11.x-to-2.12.x-20160210Jason Zaugg2016-02-1015-19/+503
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/library/scala/collection/Iterator.scala | `-- trivial conflicts only. Parens were added to the next() calls in 2.12.x, while in the meantime `{Concat,Join}Iterator` were optimized in 2.11.x
| | * | | | Merge pull request #4950 from retronym/topic/sbt-tweaks-3Seth Tisue2016-02-096-4/+421
| | |\ \ \ \ | | | | | | | | | | | | | | SBT build improvements
| | | * | | | Add SBT tab completion for scala{,c,doc}Jason Zaugg2016-02-094-18/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also refactor the partest parser to use the improved tab completion for test paths.
| | | * | | | Enable IntellIJ smarts while editing the buildJason Zaugg2016-02-072-1/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Even though our build can't be imported into IntelliJ automatically, we don't need to live in the dark ages of red squigglies when editing build.sbt. This commit hand-crafts the module defintion for the project, which has SBT and its dependendencies on the classpath. A screenshot of the code assist is worth the thousand expletives I uttered while writing the pictured code without this facility: https://www.dropbox.com/s/6mxv0iwxkhvnor7/Screenshot%202016-02-07%2022.09.12.png?dl=0 To download the sources for the SBT JARs that are referenced herein, run sbt> reload plugins sbt> updateClassifiers
| | | * | | | Add tab completion to the partest commandJason Zaugg2016-02-062-1/+87
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can complete partest options (I've excluded some that aren't relevant in SBT), as well as test file names. If `--srcpath scaladoc` is included, completion of test paths will be based on `test/scaladoc` rather than the default `test/files`. Note that the `--srcpath` option is currently broken via scala partest interface, this change to scala-partest is needed to make it work: https://github.com/scala/scala-partest/pull/49 I've also hijacked the `--grep` option with logic in the SBT command itself, rather than passing this to `partest`. Just like `./bin/partest-ack`, this looks for either test file names or regex matches within the contents of test, check, or flag files. I tried for some time to make the tab completion of thousands of filenames more user friendly, but wasn't able to get something working. Ideally, it should only suggest to `test/files/{pos, neg, ...}` on the first <TAB>, and then offer files on another TAB. Files should also be offered if a full directory has been entered. Hopefully a SBT parser guru will step in and add some polish here.
| | | * | | | Convenient aliases for the SBT buildJason Zaugg2016-02-051-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The idea here is to avoid the need for switching between the SBT shell and Bash. - Add aliases for partest, scala{,c,p,doc} - Change working directory for these forked processes to the root project base directory, rather than the subprojects base directory. This lets us use relative paths to files in a more familar way. - Don't log the output of forked processes with the `[info] ` prefix, rather pass it through directly to stdout. Demo: ``` > partest --terse test/files/pos/t6231.scala [info] Packaging /Users/jason/code/scala2/build-sbt/pack/lib/scala-partest-javaagent.jar ... [info] Done packaging. Selected 1 tests drawn from specified tests . [info] Passed: Total 1, Failed 0, Errors 0, Passed 1 [success] Total time: 3 s, completed 05/02/2016 12:44:19 PM > scala sandbox/test.scala [info] Running scala.tools.nsc.MainGenericRunner -usejavacp sandbox/test.scala Hello, World! [success] Total time: 4 s, completed 05/02/2016 12:45:08 PM > scalac sandbox/test.scala [info] Running scala.tools.nsc.Main -usejavacp sandbox/test.scala [success] Total time: 3 s, completed 05/02/2016 12:45:15 PM > scala Test [info] Running scala.tools.nsc.MainGenericRunner -usejavacp Test Hello, World! [success] Total time: 1 s, completed 05/02/2016 12:45:20 PM > scala [info] Running scala.tools.nsc.MainGenericRunner -usejavacp Welcome to Scala 2.11.8-20160204-090931-42525ec (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_71). Type in expressions for evaluation. Or try :help. scala> 1.to to toBinaryString toByte toChar toDegrees toDouble toFloat toHexString toInt toLong toOctalString toRadians toShort toString scala> 1.toString res0: String = 1 scala> :quit [success] Total time: 8 s, completed 05/02/2016 12:45:48 PM > ```
| | * | | | | Merge pull request #4937 from szeiger/issue/9623-2.11Seth Tisue2016-02-082-6/+73
| | |\ \ \ \ \ | | | |/ / / / | | |/| | | | SI-9623 Avoid unnecessary hasNext calls in JoinIterator & ConcatIterator
| | | * | | | SI-9623 Avoid unnecessary hasNext calls in JoinIterator & ConcatIteratorStefan Zeiger2016-02-012-6/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These iterator implementations are used to concatenate two (JoinIterator) or more (ConcatIterator) other iterators with `++`. They used to perform many unnecessary calls to the child iterators’ `hasNext` methods. This improved state machine-based implementation reduces that number to the bare minimum, i.e. iterating over concatenated iterators with `foreach` calls the children's `hasNext` methods a total of (number of children) + (number of elements) times, the same as when iterating over all children separately.
| | * | | | | Merge pull request #4942 from SethTisue/copyright-2016Seth Tisue2016-02-047-9/+9
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | bump copyright year to 2016
| | | * | | | | bump copyright year to 2016Seth Tisue2016-02-037-9/+9
| | |/ / / / /
* | | | | | | Merge pull request #4955 from som-snytt/issue/8685-depr-caseLukas Rytz2016-02-105-2/+119
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | SI-9650 Refchecks on case apply transform
| * | | | | | | SI-9650 Refchecks on case apply transformSom Snytt2016-02-105-2/+119
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apply checks for unsavoriness when transforming a case apply.
* | | | | | | | Merge pull request #4924 from ShaneDelmore/SI-9452Lukas Rytz2016-02-105-35/+30
|\ \ \ \ \ \ \ \ | |/ / / / / / / |/| | | | | | | SI-9452: Extend BigDecimal with Ordered for java interop
| * | | | | | | Merge branch '2.12.x' into SI-9452Shane Delmore2016-02-0478-525/+935
| |\ \ \ \ \ \ \ | | | |_|_|_|_|/ | | |/| | | | |
| * | | | | | | Extend BigInt with Ordered for java interopShane Delmore2016-02-013-18/+24
| | | | | | | |
| * | | | | | | Extend BigDecimal with Ordered for java interopShane Delmore2016-02-012-17/+6
| | | | | | | |
* | | | | | | | Merge pull request #4938 from retronym/ticket/9349Jason Zaugg2016-02-103-3/+25
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | SI-9349 Fix use of patmat binder as prefix for new x.Inner
| * | | | | | | | SI-9349 Fix use of patmat binder as prefix for new x.InnerJason Zaugg2016-02-023-3/+25
| | |_|_|_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When substituting in references to the synthetic values representing pattern binders, we were replacing: Select(Ident(o).setType(o.type), TypeName("Inner")) with: Select(Ident(x2).setType(typeOf[Outer]), TypeName("Inner")) The post transform in uncurry would then run: else if (tree.isType) TypeTree(tree.tpe) setPos tree.pos Which would loses track of the outer term `o` and crashes the compiler in ExplicitOuter. This commit generates stable references to the binders. I made this change in the substitutions for all `TreeMakers`, however only one of seems like it triggers a crash in the test variations I tried. Here's how the trees for the first pattern in the test case change after this patch: ``` @@ -1,30 +1,30 @@ [[syntax trees at end of patmat]] // test.scala package <empty>{<empty>.type} { object Test extends scala.AnyRef { def <init>(): Test.type = { Test.super{Test.type}.<init>{()Object}(){Object}; (){Unit} }{Unit}; def main(args: Array[String]): Unit = { val o1: Outer = Outer.apply{(i: Int)Outer}(5{Int(5)}){Outer}; { case <synthetic> val x1: Outer = o1{Outer}; case5(){ if (x1.ne{(x$1: AnyRef)Boolean}(null{Null(null)}){Boolean}) matchEnd4{(x: Unit)Unit}({ - val i: Outer#Inner = new x1.Inner{Outer#Inner}{()Outer#Inner}(){Outer#Inner}; + val i: x1.Inner = new x1.Inner{x1.Inner}{()x1.Inner}(){x1.Inner}; (){Unit} }{Unit}){Unit} else case6{()Unit}(){Unit}{Unit} }{Unit}; case6(){ matchEnd4{(x: Unit)Unit}(throw new MatchError{MatchError}{(obj: Any)MatchError}(x1{Outer}){MatchError}{Nothing}){Unit} }{Unit}; matchEnd4(x: Unit){ x{Unit} }{Unit} }{Unit} }{Unit} } ```
* | | | | | | | Merge pull request #4868 from retronym/ticket/9542-comboJason Zaugg2016-02-105-24/+56
|\ \ \ \ \ \ \ \ | |_|_|_|/ / / / |/| | | | | | | SI-9542 Fix regression in value classes (served two ways)
| * | | | | | | SI-9542 Unify different reprs. of module type refsJason Zaugg2016-02-014-23/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new unit test shows failures in transitivity of subtyping and type equivalence, which boil down the the inconsistent handling of the semantically equivalent: ThisType(pre, ModuleClass) ModuleTypeRef(pre, ModuleClass) SingleType(pre, Module) This commit: - adds a case to `normalizePlus` to unwrap a `ThisType` to a `ModuleTypeRef` - Use `normalizePlus` more widely during subtype comparison - refactor `fourthTry` (part of `isSubType`) to remove code that becomes obviated by the use of `normalizePlus`. This fixes the regression in the extension methods phase which was triggered by https://github.com/scala/scala/pull/4749. We can also fix that regression by tweaking the extension methods phase itself to emit the `ThisType` representation of the owner of the value class, as before. I plan to demonstrate the two approaches to fixing the regression on separate branches, and the propose that the merged result of these two is useds.
| * | | | | | | SI-9542 Fix regression in value classes with enclosing refsJason Zaugg2016-02-011-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In SI-9473 / e2653736, I changed `mkAttributedRef` to avoid prefixing references to statically owned symbols with a `ThisType`. Turns out there was one place that depended on the old behaviour. ``` object Outer { trait T class C(val value: Any) extends AnyVal { def foo(t: T) = expr } } ``` Is translated to: ``` object Outer { trait T class C(val value: Any) extends AnyVal { def foo(t: T) = Outer.this.C.foo$extension(C.this, t) } object C { def foo$extension($this: C, t: T) = expr } } ``` After the change, the forwarder was instead: ``` def foo(t: T) = Outer.C.foo$extension(C.this, t) ``` Note: this change is not actually necessary after the following commit that makes subtyping unify the different module class reference, that alone is enough to make the enclosed test pass.
* | | | | | | | Merge pull request #4952 from ↵Vlad Ureche2016-02-097-70/+132
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | felixmulder/topic/scaladoc-hideImplicitConversions-tag SI-9620: add doc annotation to hide specific conversions
| * | | | | | | | SI-9620: add doc annotation to hide specific conversionsFelix Mulder2016-02-097-70/+132
|/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit will introduce the doc annotation `@hideImplicitConversion`. By specifying which conversions to hide, the user can "toggle" which conversions are kept in the parsed entity. This implementation is a better workaround than hardcoding which ones to ignore when running scaladoc. Review: @VladUreche
* | | | | | | | Merge pull request #4948 from szeiger/issue/9574Stefan Zeiger2016-02-093-6/+27
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | SI-9574 Prevent illegal overrides of members with module types
| * | | | | | | | SI-9574 Prevent illegal overrides of members with module typesStefan Zeiger2016-02-083-6/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit f32a32b1b33c9d7ccd62467e3e10cb69930023c8 introduced the ability to override objects with other objects. The exception that allows these overrides (where the usual subtyping check fails) was applied to all members whose type is a module class. This is too broad, however, because it not only applies to members of the form `object foo` but also `def foo: bar.type` (where `bar` is an `object`). The fix is to restrict the exception to those cases where both definitions actually are objects.
* | | | | | | | | Merge pull request #4949 from felixmulder/topic/scaladoc-fix-implicits-arrayVlad Ureche2016-02-061-0/+11
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Scaladoc: fix duplicate implicits in Array
| * | | | | | | | | Scaladoc: fix duplicate implicits in ArrayFelix Mulder2016-02-061-0/+11
|/ / / / / / / / /
* | | | | | | | | Merge pull request #4946 from felixmulder/topic/scaladoc-panzoom-graphsVlad Ureche2016-02-0610-155/+193
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Scaladoc: add pan & zoom feature to Type Inheritance graphs
| * | | | | | | | | Add panzoom feature to Type Inheritance graphsFelix Mulder2016-02-0610-155/+193
|/ / / / / / / / /
* | | | | | | | | Merge pull request #4947 from felixmulder/topic/scaladoc-fix-stray-numberVlad Ureche2016-02-061-0/+4
|\ \ \ \ \ \ \ \ \ | |/ / / / / / / / |/| | | | | | | | Scaladoc: fix stray number in codeblocks for firefox
| * | | | | | | | Scaladoc: fix stray number in codeblocks for firefoxFelix Mulder2016-02-051-0/+4
|/ / / / / / / /
* | | | | | | | Merge pull request #4941 from retronym/merge/2.11.x-to-2.12.x-20160203Jason Zaugg2016-02-0552-195/+679
|\ \ \ \ \ \ \ \ | |_|_|_|/ / / / |/| | | | | | | Merge/2.11.x to 2.12.x 20160203 [ci: last-only]