| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
Ensure ClassBTypes constructed from symbol and classfile are identical
|
| |
| |
| |
| |
| | |
For some reason this was not the case, leading to spurious inliner
warnings (no inline info found for method O$lzycompute).
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A super call (invokespecial) to a default method T.m is only allowed if
the interface T is a direct parent of the class. Super calls are
introduced for example in Mixin when generating forwarder methods:
trait T { override def clone(): Object = "hi" }
trait U extends T
class C extends U
The class C gets a forwarder that invokes T.clone(). During code
generation the interface T is added as direct parent to class C. Note
that T is not a (direct) parent in the frontend type of class C.
This commit stores interfaces that are added to a class during code
generation in the InlineInfo classfile attribute. This allows filtering
the interface list when constructing a ClassBType from a classfile.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The code was patched many times in the history and became a bit
scattered.
When emitting a virtual call, the receiver in the bytecode cannot just
be the method's owner (the class in which it is declared), because that
class may not be accessible at the callsite. Instead we use the type
of the receiver. This was basically done to fix
- aladdin bug 455 (9954eaf)
- SI-1430 (0bea2ab) - basically the same bug, slightly different
- SI-4283 (8707c9e) - the same for field reads
In this patch we extend the fix to field writes, and clean up the code.
This patch basically reverts 6eb55d4b, the fix for SI-4560, which was
rather a workaround than a fix. The underlying problem was that in some
cases, in a method invocation `foo.bar()`, the method `bar` was not
actually a member of `foo.tpe`, causing a NoSuchMethodErrors. The
issue was related to trait implementation classes. The idea of the fix
was to check, at code-gen time, `foo.tpe.member("bar")`, and if that
returns `NoSymbol`, use `barSym.owner`. With the new trait encoding
the underlying problem seems to be fixed - all tests still pass
(run/t4560.scala and run/t4560b.scala).
|
| |
| |
| |
| |
| |
| |
| |
| | |
In most cases when a class inherits a concrete method from a trait we
don't need to generate a forwarder to the default method in the class.
t5148 is moved to pos as it compiles without error now. the error
message ("missing or invalid dependency") is still tested by t6440b.
|
| |
| |
| | |
The package list is on the right.
|
|\ \
| | |
| | | |
SI-6710 / PR 5072 follow-up: fix Unit.box / Unit.unbox
|
| |/
| |
| |
| |
| |
| |
| | |
The backend replaces .box / .unbox methods by corresponding invocations
to BoxesRunTime, but not for Unit.
This commit restores the body of `Unit.box` and `Unit.unbox`.
|
|\ \
| | |
| | | |
Simplify scala.runtime
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
We can use the normal Scala language constructs instead.
|
| | |
| | |
| | |
| | | |
Because it was its only call site.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | |
| | |
| | |
| | | |
Because that is the only call site of that method.
|
| | |
| | |
| | |
| | | |
Because it is otherwise unused.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
|/
|
|
|
|
| |
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.
|
|\
| |
| | |
Cleanups related to the removal of trait impl classes
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
|
|\ \
| | |
| | | |
SI-6710 Clarify stub methods in primitive value classes
|
| |/
| |
| |
| |
| |
| |
| |
| |
| | |
- 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.
|
| | |
|
| | |
|
| | |
|
|/ |
|
|\
| |
| | |
Accomodate and exploit new library, lang features JDK 8
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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/
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
... 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.
|
| |
| |
| |
| | |
The API for doing so efficiently was made regular in Java 1.8.
|
| |
| |
| |
| |
| | |
By using newly introduced static methods in the Java standard
library.
|
|\ \
| | |
| | | |
Fix typo in the docs for the ++ method of Stream
|
| | | |
|
|\ \ \
| | | |
| | | | |
Add initial unit test for Catch and augment documentation
|
| |/ /
| | |
| | |
| | |
| | |
| | | |
- Add unit test for andFinally
- Reduce code duplication in andFinally
- Extend documentation
|
|\ \ \
| | | |
| | | | |
SI-9702 Fix backend crash with classOf[T] annotation argument
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|
|\ \ \ \
| |_|/ /
|/| | | |
Unify treatment of built-in functions and SAMs
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|