summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Fix erasure of the qualifier of ##Jason Zaugg2017-01-241-6/+7
|
* Merge pull request #5651 from rorygraves/2.12.x_symbol_markingJason Zaugg2017-01-201-3/+9
|\ | | | | Improve performance of Symbol marking
| * Improve performance of Symbol markingRory Graves2017-01-161-3/+9
| |
* | Merge pull request #5637 from ichaki5748/Sl-10113Seth Tisue2017-01-181-0/+3
|\ \ | |/ |/| SI-10113 mutable.TreeMap.range does not work
| * SI-10113 mutable.TreeMap.range does not workEvgeny Slutsky2017-01-091-0/+3
| | | | | | | | added missing overrides for TreeMapView
* | Revert "Repl prints '\n' as newline, not "^J""Adriaan Moors2017-01-091-10/+2
| | | | | | | | | | | | This reverts commit d571fa07 (#5450). Superseded by upgrade to jline2 2.14.3 (jline/jline2@01969b5)
* | Upgrade to jline2 2.14.3Adriaan Moors2017-01-091-5/+5
|/
* SI-9936 LinearSeqOptimized.indexWhereSom Snytt2016-12-303-4/+3
| | | | | | Also suffered from the negative `from` bug. Prefer `math.max` to avoid `RichInt`.
* Merge pull request #5607 from adriaanm/rebase-5551Adriaan Moors2016-12-212-0/+57
|\ | | | | Override equals and hashCode for WrappedArray
| * Override equals and hashCode for WrappedArrayAlexey Romanov2016-12-212-0/+57
| |
* | Merge pull request #5583 from lrytz/t10093Adriaan Moors2016-12-212-6/+8
|\ \ | | | | | | SI-10093 don't move member traits to constructor body in constructors
| * | SI-10093 don't move member traits to constructor body in constructorsLukas Rytz2016-12-062-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes a regression introduced in c8e6050. Member traits with only abstract definitions (`isInterface`) were moved into the primary constructor by mistake. (Flatten moved the classes back.) The member trait was duplicated into the constructor of specialized subclasses, causing it to be generated multiple times. Also removes some unnecessary `isMixinConstructor` checks: the mixin constructor is always the primary constructor. This commit also clarifies (and tests) what `isInterface` means: for scala-defined traits, it means there are only abstract members. For java-defined interfaces, it is always true.
* | | Fix how "sbt" is writtenDale Wijnand2016-12-217-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | "sbt" is not an acronym (it used to be, but it isn't any longer). It's a proper name, like "iPhone" or "eBay". So, just like you wouldn't write "Get Started With EBay" or "How To Reset Your IPhone", we don't write "Using the Sbt Build".
* | | Merge pull request #5608 from retronym/merge/2.11.x-to-2.12.x-20161220Lukas Rytz2016-12-205-21/+113
|\ \ \ | | | | | | | | Merge 2.11.x to 2.12.x [ci: last-only]
| * \ \ Merge remote-tracking branch 'origin/2.11.x' into ↵Jason Zaugg2016-12-205-21/+113
| |\ \ \ | | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | merge/2.11.x-to-2.12.x-20161220 Conflicts: bincompat-backward.whitelist.conf build.xml src/compiler/scala/tools/nsc/typechecker/Typers.scala src/library/scala/collection/immutable/NumericRange.scala
| | * | Merge pull request #5487 from lrytz/java-constantsAdriaan Moors2016-12-153-2/+63
| | |\ \ | | | | | | | | | | SI-3236 constant types for literal final static java fields
| | | * | Support implicit converstions from java literalsLukas Rytz2016-11-021-38/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For example, public static final byte b = 127 is allowed, but 128 is not. Also factor out a method that parses a literal. It could be used to parse annotations (and their literal arguments) in Java sources.
| | | * | SI-3236 constant types for literal final static java fieldsJohannes Rudolph2016-10-283-2/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since we don't parse Java expressions, fields of Java classes coming from source files never have constant types. This prevents using static java fields in annotation arguments in mixed compilation This PR assigns constant types to final static java fields if the initializer is a simple literal.
| | * | | Merge pull request #5454 from som-snytt/issue/9834-2.11Adriaan Moors2016-12-151-16/+44
| | |\ \ \ | | | | | | | | | | | | SI-9834 Improve error on failed op=
| | | * | | SI-9834 Show expansion of update on errorSom Snytt2016-11-251-3/+4
| | | | | |
| | | * | | SI-9834 Improve error on failed op=Som Snytt2016-11-251-16/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If rewriting `x += y` fails to typecheck, emit error messages for both the original tree and the assignment. If rewrite is not attempted because `x` is a val, then say so. The error message at `tree.pos` is updated with the additional advice. SI-8763 Crash in update conversion When there are already errors, don't attempt mechanical rewrites.
| | * | | | SI-10086 NumericRange.min|max with custom Integral (#5575)Tobias Schlatter2016-12-121-2/+7
| | | | | | | | | | | | | | | | | | SI-10086 NumericRange.min|max with custom Integral
* | | | | | Merge pull request #5598 from retronym/topic/jdk9-bootcp-repl-javapLukas Rytz2016-12-202-4/+8
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Support extra module references in the REPL
| * | | | | Support extra module references in the REPLJason Zaugg2016-12-122-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By default, scala-compiler.jar is in the bootclasspath, which gives us a `null` when we call `classOf[IMain].getClassLoader`. That value is used as the parent class loader of the classloader that evals code in the REPL. Under JDK9, this breaks lookup of classes on the module path: ``` scala -J--add-modules=java.compiler -J--add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED Welcome to Scala 2.12.1 (Java HotSpot(TM) 64-Bit Server VM, Java 9-ea). Type in expressions for evaluation. Or try :help. scala> new com.sun.tools.javap.JavapTask(); java.lang.NoClassDefFoundError: com/sun/tools/javap/JavapTask at java.base/java.lang.Class.getDeclaredMethods0(Native Method) at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:2948) ``` A workaround is to use `-nobootcp`. This commit uses the system classloader as the parent in place of the null classloader to make this work in both cases. ``` qscala -J--add-modules=java.compiler -J--add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED Welcome to Scala 2.12.2-20161208-165912-3de1c0c (Java HotSpot(TM) 64-Bit Server VM, Java 9-ea). Type in expressions for evaluation. Or try :help. scala> new com.sun.tools.javap.JavapTask(); res0: com.sun.tools.javap.JavapTask = com.sun.tools.javap.JavapTask@1f1cddf3 scala> ``` Note that the `:javap` command still requires `-nobootcp` because code in the REPL implements an interface in a the `java.compiler` module.
* | | | | | Merge pull request #5539 from som-snytt/issue/10068Adriaan Moors2016-12-193-3/+21
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-10068 Only permit elidable methods
| * | | | | | SI-10068 Only permit elidable methodsSom Snytt2016-12-143-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In refchecks, check that symbol with `@elidable` is a method. When eliding in uncurry, doublecheck. The check is enabled under `-Xsource:2.13`.
* | | | | | | Merge pull request #5541 from retronym/ticket/10067Adriaan Moors2016-12-192-1/+2
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | SI-10067 Avoid linkage errors with type patterns, Java inner classes
| * | | | | | | SI-10067 Don't speculatively emit outer tests for inner Java classesJason Zaugg2016-11-181-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Followup to the previous commit to remove the unchecked warning when the speculative outer test is dropped in explicitouter.
| * | | | | | | SI-10067 Java defined inner classes don't have outer accessorsJason Zaugg2016-11-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we pretend they do, we can walk into NoSuchMethodErrors when translating type patterns path dependent types. This commit avoids this symptom by changing the explicitouter info transformer. A following commit will change the pattern matcher itself to avoid speculatively adding this outer check that will be always dropped in explicitouter.
* | | | | | | | Merge pull request #5588 from retronym/ticket/10098Jason Zaugg2016-12-151-8/+5
|\ \ \ \ \ \ \ \ | |_|/ / / / / / |/| | | | | | | S-10098 Fix regression in Unix runner script with JAVA_HOME unset
| * | | | | | | S-10098 Fix regression in Unix runner script with JAVA_HOME unsetJason Zaugg2016-12-081-8/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rework bfa7ade0 to unconditionally set the system property with the contents of the bootclasspath, rather than trying to do this only for JVM 9+. The attempted JVM version detection code assumed JAVA_HOME was set, which isn't always the case.
* | | | | | | | Modules w. serializable type alias "companions" are not serializableJason Zaugg2016-12-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The behaviour changed in #5550, this commit adapts to the change so that we'll be binary compatible after boostrapping. MiMa alerted us to a change in the parentage of two objects in the forkjoin package object. In Scala 2.12.0/1, they implemented `scala.Serializable`. Recently, this (synthetically added) parent was absent. This appears to be due to a bug fix in `companionSymbolOf`, which no longer treats objects and same-named type aliases to be companions. This commit manually adds the formerly-synthetic parents to these objects, and documents the change in compiler behaviour with a test. Fixes scala/scala-dev#290
* | | | | | | | Merge pull request #5558 from larsrh/topic/deprecated-y-flagsAdriaan Moors2016-12-135-24/+4
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Remove deprecated -Y flags
| * | | | | | | | delete dead codeLars Hupel2016-12-011-2/+0
| | | | | | | | |
| * | | | | | | | remove deprecated compiler flag "-Yinfer-by-name"Lars Hupel2016-12-012-5/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This was slated for removal in 2.12.
| * | | | | | | | remove deprecated compiler flag "-Yeta-expand-keeps-star"Lars Hupel2016-12-014-17/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This was slated for removal in 2.12.
* | | | | | | | | Merge pull request #5531 from tabdulradi/SI-10060Lukas Rytz2016-12-121-2/+2
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | SI-10060 Fixes NumricRange.max bug on empty ranges
| * | | | | | | | | SI-10060 Fixes NumericRange.max bug on empty rangesTamer AbdulRadi2016-11-161-2/+2
| | | | | | | | | |
* | | | | | | | | | Merge pull request #5543 from retronym/ticket/10069Lukas Rytz2016-12-121-2/+2
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | SI-10069 Fix code gen errors with array updates, Nothing
| * | | | | | | | | | SI-10069 Fix code gen errors with array updates, NothingJason Zaugg2016-12-021-2/+2
| | |_|_|/ / / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Crashes in ASM or VerifyErrors used to occur when assigning an expression of type Nothing to an element of a primitive array. This commit adapts the RHS of the assignment to the element type to correct this. `adapt` contains logic to insert an `ATHROW` of the slot of type `Nothing$`, which makes everything line up. The subsequent array stores become dead code and are dropped later on in code gen, so the test case compiles to: public void foo0(double[]); Code: 0: bipush 42 2: istore_2 3: aload_1 4: iconst_0 5: aload_0 6: invokevirtual #30 // Method throwExpected:()Lscala/runtime/Nothing$; 9: athrow I found a similar bug in the emission of primitive unboxing and fixed that too.
* | | | | | | | | | Merge pull request #5527 from som-snytt/fix/use-modern-replaceLukas Rytz2016-12-121-9/+3
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | String.replaceAllLiterally is String.replace
| * | | | | | | | | | String.replaceAllLiterally is String.replaceSom Snytt2016-11-131-9/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The method is not deprecated outright because it avoids the overloaded equivalent.
* | | | | | | | | | | Merge pull request #5550 from retronym/ticket/3772Lukas Rytz2016-12-123-5/+54
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | SI-3772 Fix detection of term-owned companions
| * | | | | | | | | | | Refactor companion lookup methods after code reviewJason Zaugg2016-11-292-7/+6
| | | | | | | | | | | |
| * | | | | | | | | | | SI-3772 Fix detection of term-owned companionsJason Zaugg2016-11-293-5/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Companion detection consults the scopes of enclosing Contexts during typechecking to avoid the cycles that would ensue if we had to look at into the info of enclosing class symbols. For example, this used to typecheck: object CC { val outer = 42 } if ("".isEmpty) { case class CC(c: Int) CC.outer } This logic was not suitably hardened to find companions in exactly the same nesting level. After fixing this problem, a similar problem in `Namer::inCurrentScope` could be solved to be more selective about synthesizing a companion object. In particular, if a manually defined companion trails after the case class, don't create an addiotional synthetic comanpanion object.
* | | | | | | | | | | | Merge pull request #5569 from paplorinc/rotrLukas Rytz2016-12-122-19/+8
|\ \ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | Changed hashing bit rotation to use Integer.rotateRight
| * | | | | | | | | | | | Changed hashing bit rotation to use Integer.rotateRightPap Lőrinc2016-12-072-19/+8
| | | | | | | | | | | | |
* | | | | | | | | | | | | Compiler support for JEP-193 VarHandle polymorphic signaturesJason Zaugg2016-12-123-5/+10
| |_|_|_|_|_|_|/ / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VarHandles bring a host of new "polymorphic signature" methods to the Java 9 standard library. This commit updates the way we detect such methods to look at the absense/presense of the `PolymorphicSignature` annotation, so as to include these (and any future additions.) When we see applications of such methods, we disable adaptation of argument and return types. Tested manually with JDK9-ea: ``` Welcome to Scala 2.12.2-20161208-165912-3de1c0c (Java HotSpot(TM) 64-Bit Server VM, Java 9-ea). Type in expressions for evaluation. Or try :help. scala> import java.lang.invoke._, scala.runtime.IntRef import java.lang.invoke._ import scala.runtime.IntRef scala> val varHandle = MethodHandles.lookup().in(classOf[IntRef]).findVarHandle(classOf[IntRef], "elem", classOf[Int]); varHandle: java.lang.invoke.VarHandle = java.lang.invoke.VarHandleInts$FieldInstanceReadWrite@7112ce6 scala> varHandle.getAndSet(ref, 1): Int res5: Int = 0 scala> varHandle.getAndSet(ref, 1): Int res6: Int = 1 ``` Inspecting bytecode shows the absense of box/unboxing: ``` object Test { import java.lang.invoke._, scala.runtime.IntRef val varHandle = MethodHandles.lookup().in(classOf[IntRef]).findVarHandle(classOf[IntRef], "elem", classOf[Int]); def main(args: Array[String]): Unit = { val i : Int = varHandle.getAndSet(IntRef.zero, 1) } } ``` ``` public void main(java.lang.String[]); Code: 0: aload_0 1: invokevirtual #28 // Method varHandle:()Ljava/lang/invoke/VarHandle; 4: invokestatic #34 // Method scala/runtime/IntRef.zero:()Lscala/runtime/IntRef; 7: iconst_1 8: invokevirtual #40 // Method java/lang/invoke/VarHandle.getAndSet:(Lscala/runtime/IntRef;I)I 11: istore_2 12: return ```
* | | | | | | | | | | | Applied further cleanup to VectorPap Lőrinc2016-12-061-56/+63
| | | | | | | | | | | |
* | | | | | | | | | | | Changed >> to >>> in Vector to unify stylePap Lőrinc2016-12-061-118/+118
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Unified, since indices are always positive and unsigned shift was already used in other places