Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Unified Diff: runtime/vm/exceptions.cc

Issue 1393373003: Remove isolate argument from handle allocation: Part I (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Cleanups Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/debugger.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/exceptions.cc
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index 8230ac7f8a408935d59323388531a0dce86ecd2c..d5d4b3938b218fbd20b2c9f5ac59a7e9e88d575c 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -37,11 +37,11 @@ class StacktraceBuilder : public ValueObject {
class RegularStacktraceBuilder : public StacktraceBuilder {
public:
- explicit RegularStacktraceBuilder(Isolate* isolate)
+ explicit RegularStacktraceBuilder(Zone* zone)
: code_list_(
- GrowableObjectArray::Handle(isolate, GrowableObjectArray::New())),
+ GrowableObjectArray::Handle(zone, GrowableObjectArray::New())),
pc_offset_list_(
- GrowableObjectArray::Handle(isolate, GrowableObjectArray::New())) { }
+ GrowableObjectArray::Handle(zone, GrowableObjectArray::New())) { }
~RegularStacktraceBuilder() { }
const GrowableObjectArray& code_list() const { return code_list_; }
@@ -111,7 +111,7 @@ void PreallocatedStacktraceBuilder::AddFrame(const Code& code,
}
-static void BuildStackTrace(Isolate* isolate, StacktraceBuilder* builder) {
+static void BuildStackTrace(StacktraceBuilder* builder) {
StackFrameIterator frames(StackFrameIterator::kDontValidateFrames);
StackFrame* frame = frames.NextFrame();
ASSERT(frame != NULL); // We expect to find a dart invocation frame.
@@ -247,18 +247,20 @@ static RawField* LookupStacktraceField(const Instance& instance) {
// 'class Error' is not a predefined class.
return Field::null();
}
- Isolate* isolate = Isolate::Current();
- Class& error_class = Class::Handle(isolate,
+ Thread* thread = Thread::Current();
+ Zone* zone = thread->zone();
+ Isolate* isolate = thread->isolate();
+ Class& error_class = Class::Handle(zone,
isolate->object_store()->error_class());
if (error_class.IsNull()) {
- const Library& core_lib = Library::Handle(isolate, Library::CoreLibrary());
+ const Library& core_lib = Library::Handle(zone, Library::CoreLibrary());
error_class = core_lib.LookupClass(Symbols::Error());
ASSERT(!error_class.IsNull());
isolate->object_store()->set_error_class(error_class);
}
// If instance class extends 'class Error' return '_stackTrace' field.
- Class& test_class = Class::Handle(isolate, instance.clazz());
- AbstractType& type = AbstractType::Handle(isolate, AbstractType::null());
+ Class& test_class = Class::Handle(zone, instance.clazz());
+ AbstractType& type = AbstractType::Handle(zone, AbstractType::null());
while (true) {
if (test_class.raw() == error_class.raw()) {
return error_class.LookupInstanceField(Symbols::_stackTrace());
@@ -273,14 +275,14 @@ static RawField* LookupStacktraceField(const Instance& instance) {
RawStacktrace* Exceptions::CurrentStacktrace() {
- Isolate* isolate = Isolate::Current();
- RegularStacktraceBuilder frame_builder(isolate);
- BuildStackTrace(isolate, &frame_builder);
+ Zone* zone = Thread::Current()->zone();
+ RegularStacktraceBuilder frame_builder(zone);
+ BuildStackTrace(&frame_builder);
// Create arrays for code and pc_offset tuples of each frame.
- const Array& full_code_array = Array::Handle(isolate,
+ const Array& full_code_array = Array::Handle(zone,
Array::MakeArray(frame_builder.code_list()));
- const Array& full_pc_offset_array = Array::Handle(isolate,
+ const Array& full_pc_offset_array = Array::Handle(zone,
Array::MakeArray(frame_builder.pc_offset_list()));
const Stacktrace& full_stacktrace = Stacktrace::Handle(
Stacktrace::New(full_code_array, full_pc_offset_array));
@@ -292,9 +294,10 @@ static void ThrowExceptionHelper(Thread* thread,
const Instance& incoming_exception,
const Instance& existing_stacktrace,
const bool is_rethrow) {
+ Zone* zone = thread->zone();
Isolate* isolate = thread->isolate();
bool use_preallocated_stacktrace = false;
- Instance& exception = Instance::Handle(isolate, incoming_exception.raw());
+ Instance& exception = Instance::Handle(zone, incoming_exception.raw());
if (exception.IsNull()) {
exception ^= Exceptions::Create(Exceptions::kNullThrown,
Object::empty_array());
@@ -305,7 +308,7 @@ static void ThrowExceptionHelper(Thread* thread,
uword handler_pc = 0;
uword handler_sp = 0;
uword handler_fp = 0;
- Instance& stacktrace = Instance::Handle(isolate);
+ Instance& stacktrace = Instance::Handle(zone);
bool handler_exists = false;
bool handler_needs_stacktrace = false;
if (use_preallocated_stacktrace) {
@@ -317,13 +320,13 @@ static void ThrowExceptionHelper(Thread* thread,
&handler_fp,
&handler_needs_stacktrace);
if (handler_needs_stacktrace) {
- BuildStackTrace(isolate, &frame_builder);
+ BuildStackTrace(&frame_builder);
}
} else {
// Get stacktrace field of class Error. This is needed to determine whether
// we have a subclass of Error which carries around its stack trace.
const Field& stacktrace_field =
- Field::Handle(isolate, LookupStacktraceField(exception));
+ Field::Handle(zone, LookupStacktraceField(exception));
// Find the exception handler and determine if the handler needs a
// stacktrace.
@@ -379,7 +382,7 @@ static void ThrowExceptionHelper(Thread* thread,
// dart invocation sequence above it, print diagnostics and terminate
// the isolate etc.).
const UnhandledException& unhandled_exception = UnhandledException::Handle(
- isolate, UnhandledException::New(exception, stacktrace));
+ zone, UnhandledException::New(exception, stacktrace));
stacktrace = Stacktrace::null();
JumpToExceptionHandler(thread,
handler_pc,
@@ -485,7 +488,8 @@ void Exceptions::Throw(Thread* thread, const Instance& exception) {
isolate->debugger()->SignalExceptionThrown(exception);
}
// Null object is a valid exception object.
- ThrowExceptionHelper(thread, exception, Stacktrace::Handle(isolate), false);
+ ThrowExceptionHelper(thread, exception,
+ Stacktrace::Handle(thread->zone()), false);
}
void Exceptions::ReThrow(Thread* thread,
@@ -499,13 +503,14 @@ void Exceptions::ReThrow(Thread* thread,
void Exceptions::PropagateError(const Error& error) {
Thread* thread = Thread::Current();
Isolate* isolate = thread->isolate();
+ Zone* zone = thread->zone();
ASSERT(isolate->top_exit_frame_info() != 0);
if (error.IsUnhandledException()) {
// If the error object represents an unhandled exception, then
// rethrow the exception in the normal fashion.
const UnhandledException& uhe = UnhandledException::Cast(error);
- const Instance& exc = Instance::Handle(isolate, uhe.exception());
- const Instance& stk = Instance::Handle(isolate, uhe.stacktrace());
+ const Instance& exc = Instance::Handle(zone, uhe.exception());
+ const Instance& stk = Instance::Handle(zone, uhe.stacktrace());
Exceptions::ReThrow(thread, exc, stk);
} else {
// Return to the invocation stub and return this error object. The
@@ -516,7 +521,7 @@ void Exceptions::PropagateError(const Error& error) {
uword handler_fp = 0;
FindErrorHandler(&handler_pc, &handler_sp, &handler_fp);
JumpToExceptionHandler(thread, handler_pc, handler_sp, handler_fp, error,
- Stacktrace::Handle(isolate)); // Null stacktrace.
+ Stacktrace::Handle(zone)); // Null stacktrace.
}
UNREACHABLE();
}
@@ -524,8 +529,8 @@ void Exceptions::PropagateError(const Error& error) {
void Exceptions::ThrowByType(ExceptionType type, const Array& arguments) {
Thread* thread = Thread::Current();
- Isolate* isolate = thread->isolate();
- const Object& result = Object::Handle(isolate, Create(type, arguments));
+ const Object& result =
+ Object::Handle(thread->zone(), Create(type, arguments));
if (result.IsError()) {
// We got an error while constructing the exception object.
// Propagate the error instead of throwing the exception.
@@ -541,7 +546,7 @@ void Exceptions::ThrowOOM() {
Thread* thread = Thread::Current();
Isolate* isolate = thread->isolate();
const Instance& oom = Instance::Handle(
- isolate, isolate->object_store()->out_of_memory());
+ thread->zone(), isolate->object_store()->out_of_memory());
Throw(thread, oom);
}
@@ -550,7 +555,7 @@ void Exceptions::ThrowStackOverflow() {
Thread* thread = Thread::Current();
Isolate* isolate = thread->isolate();
const Instance& stack_overflow = Instance::Handle(
- isolate, isolate->object_store()->stack_overflow());
+ thread->zone(), isolate->object_store()->stack_overflow());
Throw(thread, stack_overflow);
}
« no previous file with comments | « runtime/vm/debugger.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698