summaryrefslogtreecommitdiff
path: root/runtime/mirror/class.h
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2015-09-21 11:36:30 -0700
committer Alex Light <allight@google.com> 2016-01-12 15:40:31 -0800
commit705ad49f353d3f90d8b63625aca2c2035bacdbef (patch)
treeac70af53158a80bc35c057aefae11428281df9ac /runtime/mirror/class.h
parentfae1db92d8433d0f75258c190bcf2c940731f036 (diff)
Support directly invoking interface default methods
With the Java 8 Language one is allowed to directly call default interface methods of interfaces one (directly) implements through the use of the super keyword. We support this behavior through the invoke-super opcode with the target being an interface. We add 3 tests for this behavior. Currently only supports slow-path interpreter. Invoke-super is currently extremely slow. Bug: 24618811 Change-Id: I7e06e17326f7dbae0116bd7dfefca151f0092bd2
Diffstat (limited to 'runtime/mirror/class.h')
-rw-r--r--runtime/mirror/class.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/runtime/mirror/class.h b/runtime/mirror/class.h
index ce879ba2ee..a9e6f06725 100644
--- a/runtime/mirror/class.h
+++ b/runtime/mirror/class.h
@@ -848,6 +848,11 @@ class MANAGED Class FINAL : public Object {
ArtMethod* FindVirtualMethodForSuper(ArtMethod* method, size_t pointer_size)
SHARED_REQUIRES(Locks::mutator_lock_);
+ // Given a method from some implementor of this interface, return the specific implementation
+ // method for this class.
+ ArtMethod* FindVirtualMethodForInterfaceSuper(ArtMethod* method, size_t pointer_size)
+ SHARED_REQUIRES(Locks::mutator_lock_);
+
// Given a method implemented by this class, but potentially from a
// super class or interface, return the specific implementation
// method for this class.
@@ -1058,7 +1063,7 @@ class MANAGED Class FINAL : public Object {
SHARED_REQUIRES(Locks::mutator_lock_);
pid_t GetClinitThreadId() SHARED_REQUIRES(Locks::mutator_lock_) {
- DCHECK(IsIdxLoaded() || IsErroneous());
+ DCHECK(IsIdxLoaded() || IsErroneous()) << PrettyClass(this);
return GetField32(OFFSET_OF_OBJECT_MEMBER(Class, clinit_thread_id_));
}