summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Bring Statics.doubleHash in sync with BoxesRunTime.hashFromDouble.Sébastien Doeraene2016-04-211-13/+13
| | | | | | | | | | The two algorithms were different, and could result in different hash codes for some values, namely, valid long values that were not also valid int values. The other two functions `longHash` and `floatHash` are rewritten to keep a common style with `doubleHash`, but their algorithm does not change.
* Merge pull request #5098 from sjrd/simplify-scala-runtimeLukas Rytz2016-04-2011-167/+46
|\ | | | | Simplify scala.runtime
| * Remove the unused scala.runtime.Boxed trait.Sébastien Doeraene2016-04-131-12/+0
| |
| * Remove plain old dead code in ScalaRunTime.Sébastien Doeraene2016-04-131-26/+0
| |
| * Do not rely on ScalaRunTime.{inlineEquals,hash} in JavaMirrors.Sébastien Doeraene2016-04-131-3/+3
| | | | | | | | We can use the normal Scala language constructs instead.
| * Move ScalaRunTime.box to typechecker.Macros.Sébastien Doeraene2016-04-132-15/+14
| | | | | | | | Because it was its only call site.
| * Inline ScalaRunTime.arrayElementClass at call sites.Sébastien Doeraene2016-04-136-24/+11
| | | | | | | | | | | | | | | | | | | | This method was awful. Not only it was using run-time type tests to essentially encode compile-time overloading. But it also did 2 slightly different things for the Class case and ClassTag case. All in all, it is much more readable to inline the appropriate implementation at every call site.
| * Move ScalaRunTime.isAnyVal to reify.phases.Reify.Sébastien Doeraene2016-04-132-6/+5
| | | | | | | | Because that is the only call site of that method.
| * Hide ScalaRunTime.isTuple inside stringOf.Sébastien Doeraene2016-04-131-2/+3
| | | | | | | | Because it is otherwise unused.
| * Remove dead-code runtime hash() methods.Sébastien Doeraene2016-04-132-44/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | ScalaRunTime had a bunch of overloads of the `hash()` method, but only the `Any` version is ever used by the codegen. Worse, their implementation was not in sync with the actual implementations in BoxesRunTime, called by the `Any` version. For example, hash(0x80000000L) != hash(0x80000000L: Any) This commit simply removes all of this dead code. Similarly, we remove BoxesRunTime.hashFromObject(), which was never called either.
| * Inline ArrayRuntime methods in ScalaRunTime.array_clone().Sébastien Doeraene2016-04-132-35/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Support for Array[T].clone() was introduced in 36ef60e68c03bc1c7fd2e910ae7d70d4ec32d3bf. At the time, all calls to array.clone() were redirected to ScalaRunTime.array_clone(), which meant that array_clone() itself could not be implemented in terms of `x.clone()`. A Java binding was necessary. Now, the rewriting to `array_clone()` is only done for unbounded generic arrays. Since all the calls within `array_clone()` are monomorphic arrays, the rewriting is not applied, and the Java binding is unnecessary.
* | SI-9749 REPL strip lead ws on dot continuation (#5097)som-snytt2016-04-151-7/+7
|/ | | | | | Permit leading whitespace before `.` for continued selection. This is just to handle pastes, which will typically include indented text, and not to make dot-continuation especially robust.
* Merge pull request #5082 from lrytz/inlineImplClassCleanupLukas Rytz2016-04-0715-283/+73
|\ | | | | Cleanups related to the removal of trait impl classes
| * Fix InlineInfo attribute for nested module accessorsLukas Rytz2016-04-071-5/+7
| |
| * Remove references to trait impl classes, mostly in doc commentsLukas Rytz2016-04-079-84/+25
| |
| * Remove unused optimizer warnings related to trait impl classesLukas Rytz2016-04-041-6/+0
| |
| * Remove dead code in the optimizer related to trait impl classesLukas Rytz2016-04-047-188/+41
| |
* | Delete unnecessary blank linesh0hei2016-04-071-2/+0
| |
* | Generate AnyVal source stubs from sbtStefan Zeiger2016-04-0612-565/+18
| | | | | | | | | | | | | | | | | | | | | | | | The sbt command `generateSources` now generates both the AnyVal sources and the tuple/function sources (previously done by `genprod`). Source generation is part of the sbt build, the `scala.tools.cmd.gen` package is removed from `scala-compiler`. This simplifies bootstrapping. Generated sources are still in the same location and checked into git. The shell scripts `tools/codegen` and `tools/codegen-anyvals` are also removed. The ant build and the build scripts do not call these. Regenerating sources is a manual step at the moment.
* | General cleanups and less warnings during a Scala buildsoc2016-04-0448-128/+80
| |
* | SI-6710 Clarify stub methods in primitive value classesLukas Rytz2016-04-0410-39/+47
|\ \ | | | | | | SI-6710 Clarify stub methods in primitive value classes
| * | SI-6710 Clarify stub methods in primitive value classesLukas Rytz2016-04-0110-39/+47
| |/ | | | | | | | | | | | | | | | | - Replaces the implementations of box/unbox in AnyVal companions by `???`, the methods are only stubs, and the impls did not correspond to the actual behavior. The doc comment already points to the actual implementation in BoxesRunTime. - Replaces the body of `getClass` from `null` to `???` and clarifies in a comment why the overrides exist.
* | Fix incorrect svg on objects with companion traitsFelix Mulder2016-04-035-35/+71
| |
* | Fix expansion on click for "Full Signature" elementFelix Mulder2016-04-031-1/+6
| |
* | Fix sidebar not displaying objects with no companionFelix Mulder2016-04-032-15/+23
| |
* | Fix inconsistent icon elem insertionFelix Mulder2016-04-031-1/+1
|/
* Merge pull request #5068 from retronym/topic/jdk8ism2v2.12.0-M4Lukas Rytz2016-04-0112-62/+60
|\ | | | | Accomodate and exploit new library, lang features JDK 8
| * At the end of a run, close macro runtime's classloaderJason Zaugg2016-03-303-10/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can only do this on 2.12.x, because URLClassLoader#close is new in JDK 7. Tested manually with the REPL and resident compilers. ``` % qscalac sandbox/macro.scala && (for i in 1 2; do echo sandbox/client.scala; done; printf '\n') | qscalac -Xresident -Ylog:all -Ydebug 2>&1 | grep "Closing macro runtime classloader" [log terminal] Closing macro runtime classloader [log terminal] Closing macro runtime classloader % qscalac sandbox/macro.scala && (for i in 1 2; do echo Macro.m; done; printf '\n') | qscala -Ylog:all -Ydebug 2>&1 | grep "Closing macro runtime classloader"; stty echo [log terminal] Closing macro runtime classloader [log terminal] Closing macro runtime classloader ``` Note: this doesn't close handles to JAR files held by the compiler classpath implementation, that will require changes elsewhere.
| * Java types and type parameters can be annotated since JSR 308Jason Zaugg2016-03-291-1/+4
| |
| * Use System.lineSeparator, rather than sys.propsJason Zaugg2016-03-293-4/+3
| |
| * Use Java's highestOneBit, rather than our own versions.Jason Zaugg2016-03-291-21/+2
| | | | | | | | | | | | | | | | | | | | | | The original code came from 2008, (a4ace382), at which point we probably couldn't use JDK 1.5+ methods. I haven't changed `unsignedCompare` yet to use the standard library version, as it our version might have different performance characteristics. Background: http://www.drmaciver.com/2008/08/unsigned-comparison-in-javascala/
| * Note the availability of writableStackTrace in JDK 1.7+Jason Zaugg2016-03-291-0/+2
| |
| * SI-7474 Record extra errors in Throwable#suppressedExceptionsJason Zaugg2016-03-291-7/+4
| | | | | | | | | | | | | | ... in parallel collection operations. Followup to bcbe38d18, which did away with the the approach to use a composite exception when more than one error happened.
| * Delegate more primitive comparison to the Java stdlibJason Zaugg2016-03-291-16/+6
| | | | | | | | The API for doing so efficiently was made regular in Java 1.8.
| * Avoid intermediate boxing in BoxesRuntime.hashCodeFromJason Zaugg2016-03-291-3/+3
| | | | | | | | | | By using newly introduced static methods in the Java standard library.
* | Merge pull request #5070 from markus1189/stream-docsLukas Rytz2016-04-011-1/+1
|\ \ | | | | | | Fix typo in the docs for the ++ method of Stream
| * | Fix typo in the docs for the ++ method of StreamMarkus Hauck2016-03-311-1/+1
| | |
* | | Merge pull request #5071 from janekdb/topic/2.12.x-scaladoc-ExceptionsLukas Rytz2016-04-011-7/+13
|\ \ \ | | | | | | | | Add initial unit test for Catch and augment documentation
| * | | Add initial unit test for Catch and augment documentationJanek Bogucki2016-03-311-7/+13
| |/ / | | | | | | | | | | | | | | | - Add unit test for andFinally - Reduce code duplication in andFinally - Extend documentation
* | | Merge pull request #5059 from lrytz/t9702Adriaan Moors2016-03-316-55/+57
|\ \ \ | | | | | | | | SI-9702 Fix backend crash with classOf[T] annotation argument
| * | | SI-9702 Fix backend crash with classOf[T] annotation argumentLukas Rytz2016-03-306-55/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit fixes various issues with classOf literals and Java annotations. - Ensure that a Type within a ConstantType (i.e., a classOf literal) is erased, so `classOf[List[Int]]` becomes `classOf[List]`. - Ensure that no non-erased types are passed to `typeToBType` in the backend. This happens for Java annotations: the annotation type and `classOf` annotation arguments are not erased, the annotationInfos of a symbol are not touched in the compiler pipeline. - If T is an alias to a value class, ensure that `classOf[T]` erases to the value class by calling `dealiasWiden` in erasure.
* | | | Merge pull request #4971 from adriaanm/genbcode-delambdafyAdriaan Moors2016-03-3134-1204/+1025
|\ \ \ \ | |_|/ / |/| | | Unify treatment of built-in functions and SAMs
| * | | Clarify how/when typedFunction unrolls eta-expansionAdriaan Moors2016-03-312-21/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Jason points out the recursion will be okay if type checking the function inside the eta-expansion provides fully determined argument types, as the result type is not relevant for this phase of typedFunction.
| * | | typedFunction undoes eta-expansion regardless of expected typeAdriaan Moors2016-03-302-45/+31
| | | | | | | | | | | | | | | | | | | | | | | | When recovering missing argument types for an eta-expanded method value, rework the expected type to a method type.
| * | | Keep Function when CBN arg thunk targets a SAMAdriaan Moors2016-03-304-29/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The body of `def delay[T](v: => T) = (v _): F0[T]` becomes `() => v` during `typedEta`, and then uncurry considers whether to strip the function wrapper since `v` is known to be a `Function0` thunk. Stripping is sound when the expected type is `Function0` for this expression, but that's no longer a given, since we could be expecting any nullary SAM. Also sweep up a bit around `typedEta`. Encapsulate the, erm, creative encoding of `m _` as `Typed(m, Function(Nil, EmptyTree))`.
| * | | Bring back AbstractFunction parentAdriaan Moors2016-03-302-1/+6
| | | | | | | | | | | | | | | | | | | | Jason points out we still need it for bytecode efficiency, due to mixin forwarders.
| * | | Keep SAM body in anonfun method in enclosing classJason Zaugg2016-03-301-5/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than in implementation of the abstract method in the expanded anonymous class. This leads to more more efficient use of the constant pool, code shapes more amenable to SAM inlining, and is compatible with the old behaviour of `-Xexperimental` in Scala 2.11, which ScalaJS now relies upon. Manual test: ``` scala> :paste -raw // Entering paste mode (ctrl-D to finish) package p1; trait T { val x = 0; def apply(): Any }; class DelambdafyInline { def t: T = (() => "") } // Exiting paste mode, now interpreting. scala> :javap -c p1.DelambdafyInline Compiled from "<pastie>" public class p1.DelambdafyInline { public p1.T t(); Code: 0: new #10 // class p1/DelambdafyInline$$anonfun$t$1 3: dup 4: aload_0 5: invokespecial #16 // Method p1/DelambdafyInline$$anonfun$t$1."<init>":(Lp1/DelambdafyInline;)V 8: areturn public final java.lang.Object p1$DelambdafyInline$$$anonfun$1(); Code: 0: ldc #22 // String 2: areturn public p1.DelambdafyInline(); Code: 0: aload_0 1: invokespecial #25 // Method java/lang/Object."<init>":()V 4: return } scala> :javap -c p1.DelambdafyInline$$anonfun$t$1 Compiled from "<pastie>" public final class p1.DelambdafyInline$$anonfun$t$1 implements p1.T,scala.Serializable { public static final long serialVersionUID; public int x(); Code: 0: aload_0 1: getfield #25 // Field x:I 4: ireturn public void p1$T$_setter_$x_$eq(int); Code: 0: aload_0 1: iload_1 2: putfield #25 // Field x:I 5: return public final java.lang.Object apply(); Code: 0: aload_0 1: getfield #34 // Field $outer:Lp1/DelambdafyInline; 4: invokevirtual #37 // Method p1/DelambdafyInline.p1$DelambdafyInline$$$anonfun$1:()Ljava/lang/Object; 7: areturn public p1.DelambdafyInline$$anonfun$t$1(p1.DelambdafyInline); Code: 0: aload_1 1: ifnonnull 6 4: aconst_null 5: athrow 6: aload_0 7: aload_1 8: putfield #34 // Field $outer:Lp1/DelambdafyInline; 11: aload_0 12: invokespecial #42 // Method java/lang/Object."<init>":()V 15: aload_0 16: invokespecial #45 // Method p1/T.$init$:()V 19: return } scala> :quit ``` Adriaan is to `git blame` for `reflection-mem-typecheck.scala`.
| * | | LMF cannot instantiate SAM of trait with non-trait superclassAdriaan Moors2016-03-294-17/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also, drop AbstractFunction for parent of anonymous subclass of function type that must have its class spun up at compile time (rather than at linkage time by LambdaMetaFactory). This revealed an old problem with typedTemplate, in which parent types may be normalized at the level of trees, while this change does not get propagated to the class's info in time for the constructor to be located when we type check the primary constructor.
| * | | LMF cannot run trait's "initializer" (constructor)Adriaan Moors2016-03-291-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | Thus, rule out traits that have a constructor (which we use as a proxy for having potentially side-effecting statements), and create an anonymous subclass for them at compile time.
| * | | Better detection of types LMF cannot instantiate.Adriaan Moors2016-03-292-15/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LambdaMetaFactory can only properly instantiate Java interfaces (with one abstract method, of course). A trait always compiles to an interface, but a subclass that can be instantiated may require mixing in further members, which LMF cannot do. (Nested traits, traits with fields,... do not qualify.) Traits that cannot be instantiated by LMF are still SAM targets, we simply created anonymous subclasses as before.