summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Refactor typedFunction, rework synthesizeSAMFunction for sammyAdriaan Moors2016-03-2612-195/+251
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `typedFunction` uniformly recognizes Single Abstract Method types and built-in `FunctionN` types, type checking literals regardless of expected type. `adapt` synthesizes an anonymous subclass of the SAM type, if needed to meet the expected (non-`FunctionN`) type. (Later, we may want to carry `Function` AST nodes with SAM types through the whole pipeline until the back-end, and treat them uniformly with built-in function types there too, emitting the corresponding `invokedynamic` & `LambdaMetaFactory` bytecode. Would be faster to avoid synthesizing all this code during type checking...) Refactor `typedFunction` for performance and clarity to avoid non-local returns. A nice perk is that the error message for missing argument types now indicates with `<error>` where they are missing (see updated check file). Allow pattern matching function literals when SAM type is expected (SI-8429). Support `return` in function body of SAM target type, by making the synthetic `sam$body` method transparent to the `enclMethod` chain, so that the `return` is interpreted in its original context. A cleaner approach to inferring unknown type params of the SAM method. Now that `synthesizeSAMFunction` operates on typed `Function` nodes, we can take the types of the parameters and the body and compare them against the function type that corresponds to the SAM method's signature. Since we are reusing the typed body, we do need to change owners for the symbols, and substitute the new method argument symbols for the function's vparam syms. Impl Notes: - The shift from typing as a regular Function for SAM types was triggered by limitation of the old approach, which deferred type checking the body until it was in the synthetic SAM type subclass, which would break if the expression was subsequently retypechecked for implicit search. Other problems related to SAM expansion in ctor args also are dodged now. - Using `<:<`, not `=:=`, in comparing `pt`, as `=:=` causes `NoInstance` exceptions when `WildcardType`s are encountered. - Can't use method type subtyping: method arguments are in invariant pos. - Can't use STATIC yet, results in illegal bytecode. It would be a better encoding, since the function body should not see members of SAM class. - This is all battle tested by running `synthesizeSAMFunction` on all `Function` nodes while bootstrapping, including those where a regular function type is expected. The only thing that didn't work was regarding Function0 and the CBN transform, which breaks outer path creation in lambdalift.
* SI-9415 Turn on SAM by defaultJason Zaugg2016-03-2616-18/+3
| | | | | | | | | | Initial work to change settings and test by Svyatoslav Ilinskiy Thanks! To avoid cycles during overload resolution (which showed up during bootstrapping), and to improve performance, I've guarded the detection of SAM types in `isCompatible` to cases when the LHS is potentially compatible.
* Spec updates for Sammy.Adriaan Moors2016-03-264-169/+157
| | | | | | | | | - Upgrade MathJax to 2.6. This fixes the vertical bar problem on Chrome (https://github.com/mathjax/MathJax/issues/1300); - Disambiguate link to Dynamic Selection; - Consolidate type relations; - Formatting, whitespace and linebreaks; - SAM conversion.
* Refactor. Extract mkLiteralUnit and mkUnitBlockAdriaan Moors2016-03-262-5/+8
|
* Remove dead code now that `genBCodeActive` is always true.Adriaan Moors2016-03-266-347/+57
|
* TypeHistory's toString time travels consistentlyAdriaan Moors2016-03-261-1/+4
| | | | | | | For each history entry, run the `Type`'s `toString` at the corresponding phase, so that e.g., a method type's parameter symbols' `info`'s `toString` runs at the phase corresponding to the type history we're turning into a string.
* sbt build targets build/Adriaan Moors2016-03-261-5/+5
| | | | | It avoids confusion with existing test/partest scripts that test the compiler in build/, while sbt it targeting build-sbt/.
* Merge pull request #5050 from code-star/topic/2.12.x-scaladoc-Auto-expandVlad Ureche2016-03-252-26/+31
|\ | | | | Fix scaladoc scroll and auto-expand on permalinks
| * scaladoc fix permalinksDavid Hoepelman2016-03-251-25/+30
| | | | | | | | | | | | | | * Member description auto-expands * If member comes from implicits is now becomes visible * Member is no longer hidden by search bar after scrolling * Permalink button now works when member is in a group (scrolling is still broken)
| * Fixed Typo in scaladoc scheduler.jsPim Verkerk2016-03-251-1/+1
|/
* Merge pull request #5055 from lrytz/merge-2.11-to-2.12-mar-21Adriaan Moors2016-03-2327-230/+533
|\ | | | | Merge 2.11 to 2.12
| * Merge commit '1fcfdd8' into merge-2.11-to-2.12-mar-21Lukas Rytz2016-03-231-29/+33
| |\
| | * Merge pull request #5054 from lrytz/intellij-2.112.11.xLukas Rytz2016-03-2327-236/+507
| | |\ | | | | | | | | Update IntelliJ build for use with sbt
| | | * Cleanup IntelliJ integration based on review feedbackLukas Rytz2016-03-221-31/+35
| | | |
| * | | Merge commit '4ef1429' into merge-2.11-to-2.12-mar-21Lukas Rytz2016-03-230-0/+0
| |\| |
| | * | Merge pull request #5056 from viktorklang/wip-SI9488-Future.toString-√Lukas Rytz2016-03-234-2/+34
| | |\ \ | | | | | | | | | | SI-9488 - adds the same default toString format to Scala Futures as 2…
| | | * | SI-9488 - adds the same default toString format to Scala Futures as 2.12.xViktor Klang2016-03-224-2/+34
| | | | | | | | | | | | | | | | | | | | Includes tests to verify the toString representations.
| | * | | Merge pull request #5026 from SethTisue/scala-xml-version-bumpLukas Rytz2016-03-221-1/+1
| | |\ \ \ | | | |/ / | | |/| | upgrade to latest scala-xml (namely 1.0.5)
| | | * | Merge branch '2.11.x' into scala-xml-version-bumpSeth Tisue2016-03-094-5/+5
| | | |\ \
| | | * | | upgrade to latest scala-xml (namely 1.0.5)Seth Tisue2016-03-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | there shouldn't be user-visible changes since 1.0.4, but regardless, it's good to depend on the latest
| * | | | | Updates to IntelliJ files for 2.12.xLukas Rytz2016-03-213-34/+41
| | | | | |
| * | | | | Merge commit '5f5cc18' into merge-2.11-to-2.12-mar-21Lukas Rytz2016-03-2127-230/+522
| |\ \ \ \ \ | | | |_|_|/ | | |/| | |
| | * | | | Update IntelliJ build for use with sbtLukas Rytz2016-03-2127-236/+503
| | |/ / /
| * | | | Merge commit 'afb1458' into merge-2.11-to-2.12-mar-21Lukas Rytz2016-03-210-0/+0
| |\| | |
| | * | | Merge pull request #5030 from SethTisue/newer-akkaAdriaan Moors2016-03-151-1/+1
| | |\ \ \ | | | |_|/ | | |/| | bundle a newer Akka actors jar
| | | * | Merge branch '2.11.x' into newer-akkaSeth Tisue2016-03-094-5/+5
| | | |\ \ | | | |/ / | | |/| |
| | | * | bundle a newer Akka actors jarSeth Tisue2016-03-091-1/+1
| | | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | might as well let people have the current stuff. I asked the Akka folks and nobody saw a reason not to upgrade. this version of Akka is the latest in the 2.3.x series, but is also some months old, so no stability worries. (this would have been included in 2.11.8 if I had thought of it in time)
* | | | Merge pull request #5051 from kmizu/improve-api-docsAdriaan Moors2016-03-231-0/+1
|\ \ \ \ | | | | | | | | | | Improve documentation of `GenSeqLike#length`
| * | | | Add scaladoc comment about the case when Exception will be thrown by ↵Kota Mizushima2016-03-241-0/+1
| | | | | | | | | | | | | | | | | | | | invocation of length method
* | | | | Merge pull request #5053 from som-snytt/issue/9314Lukas Rytz2016-03-233-20/+57
|\ \ \ \ \ | | | | | | | | | | | | SI-9314 Marginal edge case to warn-missing-interp
| * | | | | SI-9314 No warn on ${nonid}Som Snytt2016-03-233-13/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use the sym test on an expr that happens to be a subset of idents and is not in scope. Other `${ operator_* }` warn.
| * | | | | SI-9314 Ignore "${}"Som Snytt2016-03-202-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As an Easter egg, let "${} $x" forego the check on `x`. In other words, empty expression interpolation looks too degenerate to check.
| * | | | | SI-9314 Don't warn on "$pkg"Som Snytt2016-03-203-9/+19
| |/ / / / | | | | | | | | | | | | | | | | | | | | Edge cases of things not to warn about include package names.
* | | | | Merge pull request #5057 from lrytz/flatClasspathLukas Rytz2016-03-2318-230/+384
|\ \ \ \ \ | | | | | | | | | | | | Enable -YclasspathImpl:flat by default
| * | | | | Support :require when using the flat classpath representation.Lukas Rytz2016-03-229-110/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | :require was re-incarnated in https://github.com/scala/scala/pull/4051, it seems to be used by the spark repl. This commit makes it work when using the flat classpath representation.
| * | | | | Enable flat classpath by defaultLukas Rytz2016-03-2210-120/+163
| | |/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | Implements VirtualDirectoryFlatClassPath, which is required for the presentation compiler created for the repl's tab-completion. Various minor cleanups in the flat classpath implementation.
* | | | | Merge pull request #5047 from kmizu/resolve-several-warningsAdriaan Moors2016-03-226-12/+12
|\ \ \ \ \ | | | | | | | | | | | | Resolve several deprecation warnings
| * | | | | Resolve warnings related to SyncVar#setKota Mizushima2016-03-183-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | Replace it with SyncVar#put
| * | | | | * Replace isPackage with hasPackageFlagKota Mizushima2016-03-172-2/+2
| | | | | |
| * | | | | Fix one warning in Util.scalaKota Mizushima2016-03-171-1/+1
| | |/ / / | |/| | | | | | | | | | | | | Explicitly annotate return type of trace macro to avoid type inference
* | | | | Merge pull request #5034 from janekdb/topic/2.12.x-scaladoc-Predef-method-groupsSeth Tisue2016-03-211-0/+106
|\ \ \ \ \ | |_|/ / / |/| | | | Organise Predef methods into Scaladoc groups
| * | | | Organise Predef members into Scaladoc groupsJanek Bogucki2016-03-161-0/+106
| |/ / / | | | | | | | | | | | | | | | | By grouping members and providing descriptions the signal to noise ratio in Predef is usefully enhanced.
* | | | Merge pull request #5043 from dongjoon-hyun/fix_typos_in_spec_and_commentsJason Zaugg2016-03-2128-34/+34
|\ \ \ \ | | | | | | | | | | Fix some typos in `spec` documents and comments.
| * | | | Fix some typos in `spec` documents and comments.Dongjoon Hyun2016-03-1528-34/+34
| |/ / /
* | | | Merge pull request #5049 from ↵Jason Zaugg2016-03-211-2/+2
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | janekdb/topic/2.12.x-bump-sbt-compiler-interface-0.13.11 Update sbt version to most recent release
| * | | | Update sbt version to most recent releaseJanek Bogucki2016-03-171-2/+2
| |/ / / | | | | | | | | | | | | In preparation for removing Predef#error which was deprecated in 2.9.0.
* | | | Merge pull request #5003 from retronym/topic/nuke-impl-classes-sans-fieldsAdriaan Moors2016-03-2088-1428/+513
|\ \ \ \ | |/ / / |/| | | New trait encoding using default methods
| * | | Update STARR after bootstrapping the new trait encodingJason Zaugg2016-03-181-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous commit was used to build a interim release, 2.12.0-M3-dc9effe. That release process used dc9effe~1 as STARR. (by passing the parameter STARR_REF to the bootstrap job.) This commit switches to using 2.12.0-M3-dc9effe as STARR. It will not build until we have a public release of scalacheck against 2.12.0-M3-dc9effe, as requested in https://github.com/rickynils/scalacheck/issues/225
| * | | Remove manual mixins in JFunctionN.v2.12.0-M3-dc9effeJason Zaugg2016-03-1848-528/+197
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These manual mixins were forwarding to the impl classes have just been removed. We can now rely on default methods instead. Update Tests: - Fix test/files/pos/t1237.scala, we can't have an outer field in an interface, always use the outer method. - Don't crash on meaningless trait early init fields test/files/neg/t2796.scala - Remove impl class relate parts of inner class test - Remove impl class relate parts of elidable test - Remove impl class related reflection test. - Remove test solely about trait impl classes renaming - Update check file with additional stub symbol error - Disable unstable parts of serialization test. - TODO explain, and reset the expectation
| * | | New trait encoding: use default methods, jettison impl classesJason Zaugg2016-03-1841-893/+294
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until now, concrete methods in traits were encoded with "trait implementation classes". - Such a trait would compile to two class files - the trait interface, a Java interface, and - the implementation class, containing "trait implementation methods" - trait implementation methods are static methods has an explicit self parameter. - some methods don't require addition of an interface method, such as private methods. Calls to these directly call the implementation method - classes that mixin a trait install "trait forwarders", which implement the abstract method in the interface by forwarding to the trait implementation method. The new encoding: - no longer emits trait implementation classes or trait implementation methods. - instead, concrete methods are simply retained in the interface, as JVM 8 default interface methods (the JVM spec changes in [JSR-335](http://download.oracle.com/otndocs/jcp/lambda-0_9_3-fr-eval-spec/index.html) pave the way) - use `invokespecial` to call private or particular super implementations of a method (rather `invokestatic`) - in cases when we `invokespecial` to a method in an indirect ancestor, we add that ancestor redundantly as a direct parent. We are investigating alternatives approaches here. - we still emit trait fowrarders, although we are [investigating](https://github.com/scala/scala-dev/issues/98) ways to only do this when the JVM would be unable to resolve the correct method using its rules for default method resolution. Here's an example: ``` trait T { println("T") def m1 = m2 private def m2 = "m2" } trait U extends T { println("T") override def m1 = super[T].m1 } class C extends U { println("C") def test = m1 } ``` The old and new encodings are displayed and diffed here: https://gist.github.com/retronym/f174d23f859f0e053580 Some notes in the implementation: - No need to filter members from class decls at all in AddInterfaces (although we do have to trigger side effecting info transformers) - We can now emit an EnclosingMethod attribute for classes nested in private trait methods - Created a factory method for an AST shape that is used in a number of places to symbolically bind to a particular super method without needed to specify the qualifier of the `Super` tree (which is too limiting, as it only allows you to refer to direct parents.) - I also found a similar tree shape created in Delambdafy, that is better expressed with an existing tree creation factory method, mkSuperInit.