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/quick_exception_handler.cc | |
parent | 6fb66a2bc4e1c0b7931101153e58714991237af7 (diff) | |
download | android_art-eb8167a4f4d27fce0530f6724ab8032610cd146b.tar.gz android_art-eb8167a4f4d27fce0530f6724ab8032610cd146b.tar.bz2 android_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/quick_exception_handler.cc')
-rw-r--r-- | runtime/quick_exception_handler.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/runtime/quick_exception_handler.cc b/runtime/quick_exception_handler.cc index aee0d64290..8300195d58 100644 --- a/runtime/quick_exception_handler.cc +++ b/runtime/quick_exception_handler.cc @@ -20,7 +20,7 @@ #include "deoptimize_stack_visitor.h" #include "entrypoints/entrypoint_utils.h" #include "mirror/art_method-inl.h" -#include "sirt_ref-inl.h" +#include "handle_scope-inl.h" namespace art { @@ -35,10 +35,11 @@ QuickExceptionHandler::QuickExceptionHandler(Thread* self, bool is_deoptimizatio void QuickExceptionHandler::FindCatch(const ThrowLocation& throw_location, mirror::Throwable* exception) { DCHECK(!is_deoptimization_); - SirtRef<mirror::Throwable> exception_ref(self_, exception); + StackHandleScope<1> hs(self_); + Handle<mirror::Throwable> exception_ref(hs.NewHandle(exception)); // Walk the stack to find catch handler or prepare for deoptimization. - CatchBlockStackVisitor visitor(self_, context_, exception_ref, this); + CatchBlockStackVisitor visitor(self_, context_, &exception_ref, this); visitor.WalkStack(true); mirror::ArtMethod* catch_method = *handler_quick_frame_; @@ -56,13 +57,13 @@ void QuickExceptionHandler::FindCatch(const ThrowLocation& throw_location, DCHECK(!self_->IsExceptionPending()); } else { // Put exception back in root set with clear throw location. - self_->SetException(ThrowLocation(), exception_ref.get()); + self_->SetException(ThrowLocation(), exception_ref.Get()); } // The debugger may suspend this thread and walk its stack. Let's do this before popping // instrumentation frames. instrumentation::Instrumentation* instrumentation = Runtime::Current()->GetInstrumentation(); instrumentation->ExceptionCaughtEvent(self_, throw_location, catch_method, handler_dex_pc_, - exception_ref.get()); + exception_ref.Get()); } void QuickExceptionHandler::DeoptimizeStack() { |