diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-05-07 15:43:14 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2014-05-13 14:45:54 -0700 |
commit | eb8167a4f4d27fce0530f6724ab8032610cd146b (patch) | |
tree | bcfeaf13ad78f2dd68466bbd0e20c71944f7e854 /runtime/interpreter/interpreter.cc | |
parent | 6fb66a2bc4e1c0b7931101153e58714991237af7 (diff) | |
download | art-eb8167a4f4d27fce0530f6724ab8032610cd146b.tar.gz art-eb8167a4f4d27fce0530f6724ab8032610cd146b.tar.bz2 art-eb8167a4f4d27fce0530f6724ab8032610cd146b.zip |
Add Handle/HandleScope and delete SirtRef.
Delete SirtRef and replaced it with Handle. Handles are value types
which wrap around StackReference*.
Renamed StackIndirectReferenceTable to HandleScope.
Added a scoped handle wrapper which wraps around an Object** and
restores it in its destructor.
Renamed Handle::get -> Get.
Bug: 8473721
Change-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a
Diffstat (limited to 'runtime/interpreter/interpreter.cc')
-rw-r--r-- | runtime/interpreter/interpreter.cc | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/runtime/interpreter/interpreter.cc b/runtime/interpreter/interpreter.cc index a87f95c8d..20e2b8da1 100644 --- a/runtime/interpreter/interpreter.cc +++ b/runtime/interpreter/interpreter.cc @@ -71,10 +71,10 @@ static void UnstartedRuntimeJni(Thread* self, ArtMethod* method, } else if (name == "int java.lang.String.fastIndexOf(int, int)") { result->SetI(receiver->AsString()->FastIndexOf(args[0], args[1])); } else if (name == "java.lang.Object java.lang.reflect.Array.createMultiArray(java.lang.Class, int[])") { - SirtRef<mirror::Class> sirt_class(self, reinterpret_cast<Object*>(args[0])->AsClass()); - SirtRef<mirror::IntArray> sirt_dimensions(self, - reinterpret_cast<Object*>(args[1])->AsIntArray()); - result->SetL(Array::CreateMultiArray(self, sirt_class, sirt_dimensions)); + StackHandleScope<2> hs(self); + auto h_class(hs.NewHandle(reinterpret_cast<mirror::Class*>(args[0])->AsClass())); + auto h_dimensions(hs.NewHandle(reinterpret_cast<mirror::IntArray*>(args[1])->AsIntArray())); + result->SetL(Array::CreateMultiArray(self, h_class, h_dimensions)); } else if (name == "java.lang.Object java.lang.Throwable.nativeFillInStackTrace()") { ScopedObjectAccessUnchecked soa(self); if (Runtime::Current()->IsActiveTransaction()) { @@ -455,8 +455,9 @@ void EnterInterpreterFromInvoke(Thread* self, ArtMethod* method, Object* receive // Do this after populating the shadow frame in case EnsureInitialized causes a GC. if (method->IsStatic() && UNLIKELY(!method->GetDeclaringClass()->IsInitializing())) { ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); - SirtRef<mirror::Class> sirt_c(self, method->GetDeclaringClass()); - if (UNLIKELY(!class_linker->EnsureInitialized(sirt_c, true, true))) { + StackHandleScope<1> hs(self); + Handle<mirror::Class> h_class(hs.NewHandle(method->GetDeclaringClass())); + if (UNLIKELY(!class_linker->EnsureInitialized(h_class, true, true))) { CHECK(self->IsExceptionPending()); self->PopShadowFrame(); return; @@ -522,7 +523,8 @@ extern "C" void artInterpreterToInterpreterBridge(Thread* self, MethodHelper& mh ArtMethod* method = shadow_frame->GetMethod(); // Ensure static methods are initialized. if (method->IsStatic()) { - SirtRef<Class> declaringClass(self, method->GetDeclaringClass()); + StackHandleScope<1> hs(self); + Handle<Class> declaringClass(hs.NewHandle(method->GetDeclaringClass())); if (UNLIKELY(!declaringClass->IsInitializing())) { if (UNLIKELY(!Runtime::Current()->GetClassLinker()->EnsureInitialized(declaringClass, true, true))) { |