summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | | | [backport] Fix bytecode stabilityLukas Rytz2015-07-231-2/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When there are multiple closure allocations and invocations in the same method, ensure that the callsites are re-written to the body methods in a consistent order. Otherwsie the bytecode is not stable (the local variable indices depend on the order in which the calls are re-written)
| * | | | | [backport] Support methodHandle / invokeDynamic constant pool entries in scalapLukas Rytz2015-07-231-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add support in scalap to parse new constant pool entries - MethodHandle - MethodType - InvokeDynamic Spec: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html
| * | | | | [backport] Skip mirror class when invoking deserializeLambdaLukas Rytz2015-07-231-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Generate the invocation to LambdaDeserializer.deserializeLambda by loading the static MODULE$ field instead of calling the static method in the mirror class. This is more scala-y. Also, mirror classes don't have an InlineInfo classfile attribute, so the inliner would yield a warning about the mirror class callsite. Also skip the stack map frame instruction - frames are computed by the ams classfile writer.
| * | | | | [backport] Prevent infinite recursion in ProdConsAnalyzerLukas Rytz2015-07-232-9/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When an instruction is its own producer or consumer, the `initialProducer` / `ultimateConsumer` methods would loop. While loops or @tailrec annotated methods can generate such bytecode.
| * | | | | [backport] SI-9376 don't crash when inlining a closure body that throws.Lukas Rytz2015-07-232-1/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the closure body method has return type Nothing$, add an `ATHROW` instruction after the callsite. This is required for computing stack map frames, as explained in a comment in BCodeBodyBuilder.adapt. Similar for closure bodies with return type Null$.
| * | | | | [backport] Fix superclass for Java interface symbols created in JavaMirrorsLukas Rytz2015-07-232-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to the spec [1] the superclass of an interface is always Object. Restores the tests that were moved to pending in bf951ec1, fixex part of SI-9374. [1] https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.1
| * | | | | [backport] `deserializeLambda` should not use encoded class nameLukas Rytz2015-07-231-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `javaBinaryName` returns the internal name of a class. Also used in BTypesFromsymbols.classBTypeFromSymbol. Weirdly, this was discovered due to a bizarre osgi bnd error: ``` [bnd] # addAll '/Users/luc/scala/scala/build/pack/lib/scala-library.jar' with :, [bnd] # addAll '/Users/luc/scala/scala/build/osgi/scala-library.bnd' with , [bnd] 1 ERRORS [bnd] The default package '.' is not permitted by the Import-Package syntax. [bnd] This can be caused by compile errors in Eclipse because Eclipse creates [bnd] valid class files regardless of compile errors. [bnd] The following package(s) import from the default package [scala.collection.generic, scala.sys.process, scala.collection.parallel.mutable, scala.util, scala.collection.parallel.immutable, scala.reflect, scala.concurrent.impl, scala.util.hashing, scala.collection.parallel, scala.collection.convert, scala.io, scala, scala.collection.concurrent, scala.util.control, scala.beans, scala.concurrent.duration, scala.collection, scala.runtime, scala.math, scala.collection.mutable, scala.concurrent, scala.sys, scala.collection.immutable, scala.ref, scala.util.matching] [bnd] /Users/luc/scala/scala/build/osgi/scala-library.bnd: bnd failed ``` Lukas diagnosed it as a problem of the generated `$deserializeLambda$` function: One example is `scala/App$class`. Its bytecode contains this: ``` private static synthetic $deserializeLambda$(Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object; GETSTATIC scala$divApp$class.$deserializeLambdaCache$ : Ljava/util/Map; [...] ``` so it's a static field read of a top-level class. `$div` should obviously be `/` (which this commit rectifies)
| * | | | | [backport] Java parser: default methods in interfaces are not `DEFERRED`Lukas Rytz2015-07-231-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Java parser should not set the `DEFERRED` flag for default methods or static methods in interfaces. Their bytecode doesn't have it either. Also tightens parsing of Java abstract methods to disallow a method body. Here's the log of how Lukas diagnosed this: ``` quick.bin: ... BUILD FAILED /Users/luc/scala/scala/build.xml:69: The following error occurred while executing this line: ... /Users/luc/scala/scala/build-ant-macros.xml:350: Could not create type mk-bin due to java.lang.BootstrapMethodError: call site initialization exception at java.lang.invoke.CallSite.makeSite(CallSite.java:341) at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:307) at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:297) at scala.sys.BooleanProp$.keyExists(BooleanProp.scala:72) at scala.sys.SystemProperties$.bool(SystemProperties.scala:78) at scala.sys.SystemProperties$.noTraceSupression$lzycompute(SystemProperties.scala:89) at scala.sys.SystemProperties$.noTraceSupression(SystemProperties.scala:89) at scala.util.control.NoStackTrace$.<init>(NoStackTrace.scala:31) at scala.util.control.NoStackTrace$.<clinit>(NoStackTrace.scala) at scala.util.control.NoStackTrace$class.fillInStackTrace(NoStackTrace.scala:22) at scala.util.control.BreakControl.fillInStackTrace(Breaks.scala:94) at java.lang.Throwable.<init>(Throwable.java:250) at scala.util.control.BreakControl.<init>(Breaks.scala:94) at scala.util.control.Breaks.<init>(Breaks.scala:29) at scala.collection.Traversable$.<init>(Traversable.scala:95) at scala.collection.Traversable$.<clinit>(Traversable.scala) at scala.package$.<init>(package.scala:40) at scala.package$.<clinit>(package.scala) at scala.Predef$.<init>(Predef.scala:89) at scala.Predef$.<clinit>(Predef.scala) at scala.tools.ant.ScalaTool.<init>(ScalaTool.scala:58) [...] Caused by: java.lang.invoke.LambdaConversionException: Incorrect number of parameters for static method invokeStatic scala.sys.BooleanProp$.scala$sys$BooleanProp$$$anonfun$2$adapted:(String)Object; 0 captured parameters, 0 functional interface method parameters, 1 implementation parameters at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:193) at java.lang.invoke.LambdaMetafactory.altMetafactory(LambdaMetafactory.java:473) at java.lang.invoke.CallSite.makeSite(CallSite.java:325) ``` [source code](https://github.com/scala/scala/blob/2.11.x/src/library/scala/sys/BooleanProp.scala#L72): ``` s => s == "" || s.equalsIgnoreCase("true") ``` bytecode: ``` INVOKEDYNAMIC $init$()Lscala/compat/java8/JFunction1; [ // handle kind 0x6 : INVOKESTATIC java/lang/invoke/LambdaMetafactory.altMetafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; // arguments: ()V, // handle kind 0x6 : INVOKESTATIC scala/sys/BooleanProp$.scala$sys$BooleanProp$$$anonfun$2$adapted(Ljava/lang/String;)Ljava/lang/Object;, (Ljava/lang/String;)Ljava/lang/Object;, 3, 1, Lscala/Serializable;.class, 0 ] CHECKCAST scala/Function1 ``` The mistake seems to be that the Scala compiler incorrectly selects `$init$` ([which is a default method](https://github.com/scala/scala/blob/640ffe7fceb5d573b2c12a7c7da09bfd751036a0/src/library/scala/compat/java8/JFunction1.java#L10)) as the abstract method of `JFunction1`, whereas it should be `apply` (inherited from `Function1`). Since we're doing mixed compilation, this is almost certainly a problem of the Java parser.
| * | | | | [backport] SI-6613 fixed in GenBCodeLukas Rytz2015-07-231-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | It was fixed in GenASM in 44807a7852.
* | | | | | Merge commit '4c6dcfe934' into 2.12.xAdriaan Moors2015-08-052-2/+2
|\| | | | | | |_|_|_|/ |/| | | |
| * | | | Merge pull request #4644 from SethTisue/copyright-2015Lukas Rytz2015-07-232-2/+2
| |\ \ \ \ | | |/ / / | |/| | | bump copyright year to 2015
| | * | | bump copyright year to 2015Seth Tisue2015-07-172-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | (just hitting the highlights here, not worrying yet about bumping the dates in every modified source file)
* | | | | Merge pull request #4649 from janekdb/2.12.x-noTraceSuppressionJason Zaugg2015-07-272-3/+5
|\ \ \ \ \ | |_|_|/ / |/| | | | Align noTraceSuppression val names to system property name
| * | | | Align noTraceSuppression val names to system property nameJanek Bogucki2015-07-202-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For vals based on the scala.control.noTraceSuppression system property align the val name to the property name. Deprecate the existing val.
* | | | | Merge pull request #4638 from lrytz/t9393Jason Zaugg2015-07-2417-151/+209
|\ \ \ \ \ | | | | | | | | | | | | SI-9393 fix modifiers of ClassBTypes for Java annotations
| * | | | | Query methods in api.Symbols for Java flagsLukas Rytz2015-07-223-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds query methods to the public reflection API for querying the JAVA_ENUM and JAVA_ANNOTATION flags. Didn't include JAVA_DEFAULTMETHOD because it does not correspond to a real java classfile flag (just a non-abstract method in an interface), and we want to clean the usage of this flag before adding it to a public API. The flags themselfs are not added to the reflection API. A comment in api/FlagSets.scala says: Q: I have a pretty flag. Can I put it here? A: Only if there's a tree that cannot be built without it. If you want to put a flag here so that it can be tested against, introduce an `isXXX` method in one of the api.Symbols classes instead.
| * | | | | Rename the ENUM / DEFAULTMETHOD flags to include JAVA_Lukas Rytz2015-07-2212-125/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Similar to the new JAVA_ANNOTATION flag, be more explicit about flags for java entities.
| * | | | | SI-9393 fix modifiers of ClassBTypes for Java annotationsLukas Rytz2015-07-229-29/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Scala classfile and java source parsers make Java annotation classes (which are actually interfaces at the classfile level) look like Scala annotation classes: - the INTERFACE / ABSTRACT flags are not added - scala.annotation.Annotation is added as superclass - scala.annotation.ClassfileAnnotation is added as interface This makes type-checking @Annot uniform, whether it is defined in Java or Scala. This is a hack that leads to various bugs (SI-9393, SI-9400). Instead the type-checking should be special-cased for Java annotations. This commit fixes SI-9393 and a part of SI-9400, but it's still easy to generate invalid classfiles. Restores the assertions that were disabled in #4621. I'd like to leave these assertions in: they are valuable and helped uncovering the issue being fixed here. A new flag JAVA_ANNOTATION is introduced for Java annotation ClassSymbols, similar to the existing ENUM flag. When building ClassBTypes for Java annotations, the flags, superclass and interfaces are recovered to represent the situation in the classfile. Cleans up and documents the flags space in the area of "late" and "anti" flags. The test for SI-9393 is extended to test both the classfile and the java source parser.
* | | | | | Merge pull request #4647 from Ichoran/issue/8911Lukas Rytz2015-07-231-4/+5
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-8911 allow serializing Scala Maps wrapped as Java ones
| * | | | | | SI-8911 scala.collection.convert.Wrappers$MapWrapper not serializableRex Kerr2015-07-191-4/+5
| | |_|_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added `with Serializable` to `MapWrapper` and `SetWrapper`. Test verifies that serialization works in the simplest case. Also updated tests in t8549 to check that serialization works and doesn't change.
* | | | | | Merge pull request #4652 from retronym/ticket/9408Lukas Rytz2015-07-235-9/+21
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-9408 Avoid capturing outer class in local classes.
| * | | | | | SI-9408 Avoid capturing outer class in local classes.Jason Zaugg2015-07-232-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, only local classes declared final would be candidates for outer pointer elision in the constructor phase. This commit infers finality of local classes to expand the scope of this optimization. == Background == This was brought to our attention when shapeless enabled indylambda and found that a hitherto serializable data structure started to capture the enclosing class and hence lost its serializability. class NotSerializable { def test = () => { class C; assertSerializable(new C) } } Under `-Ydelambdafy:inline`, it used to capture the enclosing anon function class as its outer, which, being final, didn't in turn capture the enclosing class. class NotSerializable { def test = new anonFun$1 } class anonFun$1 { def apply = assertSerializable(new C(this)) } class ...$C(outer$: anonFun) indylambda perturbs the enclosing structure of the function body. class NotSerializable { def anonFun$1 = {class C; assertSerializable(new C())) def test = lambdaMetaFactory(<<anonFun$1>>) } Which leads to: class NotSerializable$C(outer$: NotSerializable)
| * | | | | | Refactor to avoid duplicated work in ConstructorsJason Zaugg2015-07-231-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Check if the clazz that owns all the decls we're filtering is effectively final once, rather than for each decl. - Query the full set of decls once.
| * | | | | | SI-9408 Record known subclasses of local classesJason Zaugg2015-07-234-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using the same facility that we use to record subclasses of sealed classes, record the subclasses of term-owned ("local") classes. I have changed existing callers of `children` to use `sealedChildren` so we don't start using this new information in pattern matching and type pattern checkability analysis. The following commit will build on this to infer finality of local classes in the context of outer pointer elision in the constructors phase.
* | | | | | | Merge remote-tracking branch 'origin/2.11.x' into ↵Jason Zaugg2015-07-2329-37/+40
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | / / | | |_|_|/ / | |/| | | | merge/2.11.x-to-2.12.x-20152307
| * | | | | Merge pull request #4650 from lrytz/t8502-packageJason Zaugg2015-07-215-3/+7
| |\ \ \ \ \ | | | | | | | | | | | | | | SI-8502 create PackageClass instead of Class symbol stubs for pkgs
| | * | | | | SI-8502 create PackageClass instead of Class symbol stubs for pkgsLukas Rytz2015-07-205-3/+7
| | | |_|_|/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://github.com/scala/scala/pull/4111 creates a stub type symbol for missing packages, deferring (or avoiding) a crash if a package is missing. The symbol created was a ClassSymbol, which could lead to an assertion failure in flattten: case TypeRef(pre, sym, args) if isFlattenablePrefix(pre) => assert(args.isEmpty && sym.enclosingTopLevelClass != NoSymbol, sym.ownerChain) `pre` is the stub ClassSymbol, so `isFlattenablePrefix` is true (but it should be false). The assertion then fails because the enclosing class of a top-level class defined in a missing package is NoSymbol. This failed only with GenBCode, which traverses more of the symbol graph while building ClassBTypes: it looks collects the nested classes of `Outer` into a `NestedInfo`.
| * | | | | Merge pull request #4631 from janekdb/2.11.x-typos-t-vSeth Tisue2015-07-2014-18/+18
| |\ \ \ \ \ | | | | | | | | | | | | | | Fix 23 typos (t-v)
| | * | | | | Fix 23 typos (t-v)Janek Bogucki2015-07-1514-18/+18
| | | | | | |
| * | | | | | Merge pull request #4642 from janekdb/2.11.x-typos-w-zSeth Tisue2015-07-204-6/+6
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | Fix 6 typos (w-z)
| | * | | | | | Fix 6 typos (w-z)Janek Bogucki2015-07-174-6/+6
| | | |/ / / / | | |/| | | |
| * | | | | | Merge pull request #4643 from janekdb/2.11.x-names-w-zSeth Tisue2015-07-201-2/+2
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | Fix typo in val name
| | * | | | | | Fix typo in val nameJanek Bogucki2015-07-171-2/+2
| | |/ / / / /
| * | | | | | Merge pull request #4632 from janekdb/2.11.x-names-t-vSeth Tisue2015-07-201-2/+2
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | Improve some names (t-v)
| | * | | | | | Improve some names (t-v)Janek Bogucki2015-07-151-2/+2
| | | |/ / / / | | |/| | | |
| * | | | | | Merge pull request #4646 from SethTisue/issue/9409Seth Tisue2015-07-181-1/+0
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | SI-9409 Scaladoc: remove link to nonexistent diagram doc
| | * | | | | | SI-9409 Scaladoc: remove link to nonexistent diagram docSeth Tisue2015-07-181-1/+0
| | | |/ / / / | | |/| | | |
| * / | | | | SI-9406 fix doc for Range.takeRightSeth Tisue2015-07-181-1/+1
| |/ / / / /
| * | | | | Merge pull request #4595 from som-snytt/issue/9370Lukas Rytz2015-07-161-2/+2
| |\ \ \ \ \ | | | | | | | | | | | | | | SI-9370 Xplugin scans plugin path for descriptor
| | * | | | | SI-9370 Xplugin scans plugin path for descriptorSom Snytt2015-06-301-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Keep on scanning if the first entry doesn't yield a plugin.xml descriptor.
| * | | | | | Merge pull request #4615 from parambirs/patch-1Lukas Rytz2015-07-161-1/+1
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | Update scaladoc for Any.scala#equals()
| | * | | | | | Update scaladoc for Any.scala#equals()Parambir Singh2015-07-091-1/+1
| | | |/ / / / | | |/| | | | | | | | | | | The transitive requirement for `Any` shouldn't mention `AnyRef`
| * / | | | | SI-9401 Avoid SOE with array + missing classtagJason Zaugg2015-07-161-1/+1
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The implicit classtags required by the Array constructor are not expressed in the type signature of its constructor, and instead are summoned by a special case in the typechecker. This special case entails replacing the `new Array` tree with `implicitly[T].newArray(size)`, handled in `ArrayInstantiation`. This tree is recursively typechecked. However, if the implicit materialization/search fails, an error is issued to the current reporter and the original tree is marked with an error type. As above, this is recursively typechecked. In the normal course of affairs, the recursive typecheck of the erroneous tree would be a noop (the tree already has a type!). However, if we are both in silent mode (in which errors are buffered) and in retyping mode (in which the typer clears the type and symbols of trees), we were getting into an cycle. In the enclosed test, retyping mode was trying to recover from: Resetting.this.gencastarray_=(new Array[T](0).<ERROR>) By inserting a suitable a view: implicitly[Resetting => { def gencastarray_=(AT)}]( Resetting.this ).gencastarray_=(new Array[T](0)) Where AT is the type found by retypechecking the argument. It is during the argument retypechecking that we fell into cycle. Crazily enough, in 2.11.0, the ensuing `StackOverflowError` was being caught and treated as a failure. We would then back out of the retyping mode, and issue the error from the the very first attempt at the implicit search. This fragile state of affairs was disrupted by a refactoring to the error reporting system in 725c5c9, after which the SOE crashed the compiler. This commit avoids recursively typechecking error typed trees.
* | | | | | Merge pull request #4640 from SethTisue/remove-old-bincompatSeth Tisue2015-07-212-22/+0
|\ \ \ \ \ \ | |_|_|_|/ / |/| | | | | remove legacy bincompat stuff in two places
| * | | | | remove legacy bincompat stuff in Predef.scala, Stream.scalaSeth Tisue2015-07-212-22/+0
| | |_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | it was only there to preserve binary compatibility within the 2.11.x series includes updated partest, since the old partest ran afoul of the Stream change
* | | | | Merge pull request #4616 from som-snytt/issue/9383Seth Tisue2015-07-202-25/+30
|\ \ \ \ \ | |/ / / / |/| | | | SI-9383 Improved unused import warning
| * | | | SI-9383 Name the function for implicit importingSom Snytt2015-07-161-6/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Per review, adds a function that clarifies the purpose of the code path that collects imported implicits, namely, to examine qualifying imported implicits and then collect them. In the context of doing something with the import (besides importing), it's clear why we don't want to record that we used the import, that is, because we might be doing something other than using. That's clear, right?
| * | | | SI-9383 Improved unused import warningSom Snytt2015-07-082-20/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, implicit search would mark every import it touched as a lookup. Instead, let subsequent type check perform the lookup.
* | | | | Merge pull request #4629 from adriaanm/unforkjoinSeth Tisue2015-07-2023-7366/+105
|\ \ \ \ \ | |_|_|_|/ |/| | | | Remove our fork of forkjoin. Java 8 bundles it.
| * | | | Remove further references to forkjoinJason Zaugg2015-07-156-16/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use j.u.c.Forkjoin directly in active and disabled tests Remove bitrotted benchmarks code I was going to update these to use `java.util.concurrent.ForkJoin` directly, instead of our deprecated stubs. But most of them don't compile anymore (e.g. scala.testing.Benchmark has been removed, ClassTag imports missing). While I'm all for benchmarks, we should have large swathes of code checked in that isn't at compiled and run automatically. I'm happy to help someone resurrect these in a suitable form.