summaryrefslogtreecommitdiffstats
path: root/runtime/entrypoints/interpreter
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2014-03-13 23:45:53 -0700
committerIan Rogers <irogers@google.com>2014-03-14 11:28:10 -0700
commit53b8b09fc80329539585dcf43657bc5f4ecefdff (patch)
treecac0f82fbb89bd907104e3fed6c36203e11a3de0 /runtime/entrypoints/interpreter
parent0dea9872082bc3e576ed6cefed86b0d6c0c45ffd (diff)
downloadart-53b8b09fc80329539585dcf43657bc5f4ecefdff.zip
art-53b8b09fc80329539585dcf43657bc5f4ecefdff.tar.gz
art-53b8b09fc80329539585dcf43657bc5f4ecefdff.tar.bz2
Refactor reflective method invocation.
Move invocation code out of JNI internal into reflection, including ArgArray code. Make reflective invocation use the ArgArray to build arguments rather than allocating a jvalue[] and unboxing arguments into that. Move reflection part of jni_internal_test into reflection_test. Make greater use of fast JNI. Change-Id: Ib381372df5f9a83679e30e7275de24fa0e6b1057
Diffstat (limited to 'runtime/entrypoints/interpreter')
-rw-r--r--runtime/entrypoints/interpreter/interpreter_entrypoints.cc6
1 files changed, 2 insertions, 4 deletions
diff --git a/runtime/entrypoints/interpreter/interpreter_entrypoints.cc b/runtime/entrypoints/interpreter/interpreter_entrypoints.cc
index 2067a45..a0ba6b9 100644
--- a/runtime/entrypoints/interpreter/interpreter_entrypoints.cc
+++ b/runtime/entrypoints/interpreter/interpreter_entrypoints.cc
@@ -16,10 +16,10 @@
#include "class_linker.h"
#include "interpreter/interpreter.h"
-#include "invoke_arg_array_builder.h"
#include "mirror/art_method-inl.h"
#include "mirror/object-inl.h"
#include "object_utils.h"
+#include "reflection.h"
#include "runtime.h"
#include "stack.h"
@@ -46,9 +46,7 @@ extern "C" void artInterpreterToCompiledCodeBridge(Thread* self, MethodHelper& m
}
uint16_t arg_offset = (code_item == NULL) ? 0 : code_item->registers_size_ - code_item->ins_size_;
if (kUsePortableCompiler) {
- ArgArray arg_array(mh.GetShorty(), mh.GetShortyLength());
- arg_array.BuildArgArrayFromFrame(shadow_frame, arg_offset);
- method->Invoke(self, arg_array.GetArray(), arg_array.GetNumBytes(), result, mh.GetShorty());
+ InvokeWithShadowFrame(self, shadow_frame, arg_offset, mh, result);
} else {
method->Invoke(self, shadow_frame->GetVRegArgs(arg_offset),
(shadow_frame->NumberOfVRegs() - arg_offset) * sizeof(uint32_t),