Index: runtime/vm/debugger.cc |
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc |
index 231ea4c61ae4714eaf36c36fa9e9a2d0e5ed3048..a92b4d5238092d1420dee86ed77dd614202bbf3d 100644 |
--- a/runtime/vm/debugger.cc |
+++ b/runtime/vm/debugger.cc |
@@ -310,8 +310,8 @@ void Debugger::InvokeEventHandler(DebuggerEvent* event) { |
if (ServiceNeedsDebuggerEvent(event->type()) && event->IsPauseEvent()) { |
// If we were paused, notify the service that we have resumed. |
- const Error& error = |
- Error::Handle(isolate_, isolate_->object_store()->sticky_error()); |
+ const Error& error = Error::Handle(zone(), |
+ isolate_->object_store()->sticky_error()); |
ASSERT(error.IsNull() || error.IsUnwindError()); |
// Only send a resume event when the isolate is not unwinding. |
@@ -365,7 +365,7 @@ RawError* Debugger::SignalIsolateInterrupted() { |
// If any error occurred while in the debug message loop, return it here. |
const Error& error = |
- Error::Handle(isolate_, isolate_->object_store()->sticky_error()); |
+ Error::Handle(zone(), isolate_->object_store()->sticky_error()); |
ASSERT(error.IsNull() || error.IsUnwindError()); |
isolate_->object_store()->clear_sticky_error(); |
return error.raw(); |
@@ -474,7 +474,7 @@ bool Debugger::HasBreakpoint(const Function& func) { |
// is a user-defined breakpoint that falls into the token |
// range of the function. This may be a false positive: the breakpoint |
// might be inside a local closure. |
- Script& script = Script::Handle(isolate_); |
+ Script& script = Script::Handle(zone()); |
BreakpointLocation* sbpt = breakpoint_locations_; |
while (sbpt != NULL) { |
script = sbpt->script(); |
@@ -1432,11 +1432,11 @@ ActivationFrame* Debugger::CollectDartFrame(Isolate* isolate, |
} |
-RawArray* Debugger::DeoptimizeToArray(Isolate* isolate, |
+RawArray* Debugger::DeoptimizeToArray(Thread* thread, |
StackFrame* frame, |
const Code& code) { |
ASSERT(code.is_optimized()); |
- |
+ Isolate* isolate = thread->isolate(); |
// Create the DeoptContext for this deoptimization. |
DeoptContext* deopt_context = |
new DeoptContext(frame, code, |
@@ -1448,7 +1448,7 @@ RawArray* Debugger::DeoptimizeToArray(Isolate* isolate, |
deopt_context->FillDestFrame(); |
deopt_context->MaterializeDeferredObjects(); |
- const Array& dest_frame = Array::Handle(isolate, |
+ const Array& dest_frame = Array::Handle(thread->zone(), |
deopt_context->DestFrameAsArray()); |
isolate->set_deopt_context(NULL); |
@@ -1459,12 +1459,14 @@ RawArray* Debugger::DeoptimizeToArray(Isolate* isolate, |
DebuggerStackTrace* Debugger::CollectStackTrace() { |
- Isolate* isolate = Isolate::Current(); |
+ Thread* thread = Thread::Current(); |
+ Zone* zone = thread->zone(); |
+ Isolate* isolate = thread->isolate(); |
DebuggerStackTrace* stack_trace = new DebuggerStackTrace(8); |
StackFrameIterator iterator(false); |
- Code& code = Code::Handle(isolate); |
- Code& inlined_code = Code::Handle(isolate); |
- Array& deopt_frame = Array::Handle(isolate); |
+ Code& code = Code::Handle(zone); |
+ Code& inlined_code = Code::Handle(zone); |
+ Array& deopt_frame = Array::Handle(zone); |
for (StackFrame* frame = iterator.NextFrame(); |
frame != NULL; |
@@ -1477,14 +1479,14 @@ DebuggerStackTrace* Debugger::CollectStackTrace() { |
if (frame->IsDartFrame()) { |
code = frame->LookupDartCode(); |
if (code.is_optimized() && !Compiler::always_optimize()) { |
- deopt_frame = DeoptimizeToArray(isolate, frame, code); |
+ deopt_frame = DeoptimizeToArray(thread, frame, code); |
for (InlinedFunctionsIterator it(code, frame->pc()); |
!it.Done(); |
it.Advance()) { |
inlined_code = it.code(); |
if (FLAG_trace_debugger_stacktrace) { |
const Function& function = |
- Function::Handle(isolate, inlined_code.function()); |
+ Function::Handle(zone, inlined_code.function()); |
ASSERT(!function.IsNull()); |
OS::PrintErr("CollectStackTrace: visiting inlined function: %s\n", |
function.ToFullyQualifiedCString()); |
@@ -1517,7 +1519,7 @@ ActivationFrame* Debugger::TopDartFrame() const { |
while ((frame != NULL) && !frame->IsDartFrame()) { |
frame = iterator.NextFrame(); |
} |
- Code& code = Code::Handle(isolate_, frame->LookupDartCode()); |
+ Code& code = Code::Handle(zone(), frame->LookupDartCode()); |
ActivationFrame* activation = |
new ActivationFrame(frame->pc(), frame->fp(), frame->sp(), code, |
Object::null_array(), 0); |
@@ -1864,10 +1866,11 @@ void Debugger::FindCompiledFunctions(const Script& script, |
intptr_t start_pos, |
intptr_t end_pos, |
GrowableObjectArray* function_list) { |
- Class& cls = Class::Handle(isolate_); |
- Array& functions = Array::Handle(isolate_); |
- GrowableObjectArray& closures = GrowableObjectArray::Handle(isolate_); |
- Function& function = Function::Handle(isolate_); |
+ Zone* zn = zone(); |
+ Class& cls = Class::Handle(zn); |
+ Array& functions = Array::Handle(zn); |
+ GrowableObjectArray& closures = GrowableObjectArray::Handle(zn); |
+ Function& function = Function::Handle(zn); |
const ClassTable& class_table = *isolate_->class_table(); |
const intptr_t num_classes = class_table.NumCids(); |
@@ -1947,12 +1950,13 @@ static void SelectBestFit(Function* best_fit, Function* func) { |
RawFunction* Debugger::FindBestFit(const Script& script, |
intptr_t token_pos) { |
- Class& cls = Class::Handle(isolate_); |
- Array& functions = Array::Handle(isolate_); |
- GrowableObjectArray& closures = GrowableObjectArray::Handle(isolate_); |
- Function& function = Function::Handle(isolate_); |
- Function& best_fit = Function::Handle(isolate_); |
- Error& error = Error::Handle(isolate_); |
+ Zone* zn = zone(); |
+ Class& cls = Class::Handle(zn); |
+ Array& functions = Array::Handle(zn); |
+ GrowableObjectArray& closures = GrowableObjectArray::Handle(zn); |
+ Function& function = Function::Handle(zn); |
+ Function& best_fit = Function::Handle(zn); |
+ Error& error = Error::Handle(zn); |
const ClassTable& class_table = *isolate_->class_table(); |
const intptr_t num_classes = class_table.NumCids(); |
@@ -2011,7 +2015,7 @@ BreakpointLocation* Debugger::SetBreakpoint(const Script& script, |
intptr_t last_token_pos, |
intptr_t requested_line, |
intptr_t requested_column) { |
- Function& func = Function::Handle(isolate_); |
+ Function& func = Function::Handle(zone()); |
func = FindBestFit(script, token_pos); |
if (func.IsNull()) { |
return NULL; |
@@ -2203,12 +2207,12 @@ BreakpointLocation* Debugger::BreakpointLocationAtLineCol( |
const String& script_url, |
intptr_t line_number, |
intptr_t column_number) { |
- Library& lib = Library::Handle(isolate_); |
- Script& script = Script::Handle(isolate_); |
+ Library& lib = Library::Handle(zone()); |
+ Script& script = Script::Handle(zone()); |
const GrowableObjectArray& libs = |
GrowableObjectArray::Handle(isolate_->object_store()->libraries()); |
const GrowableObjectArray& scripts = |
- GrowableObjectArray::Handle(isolate_, GrowableObjectArray::New()); |
+ GrowableObjectArray::Handle(zone(), GrowableObjectArray::New()); |
for (intptr_t i = 0; i < libs.Length(); i++) { |
lib ^= libs.At(i); |
script = lib.LookupScript(script_url); |
@@ -2398,10 +2402,10 @@ void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list, |
const String& prefix, |
bool include_private_fields) { |
DictionaryIterator it(lib); |
- Object& entry = Object::Handle(isolate_); |
- Field& field = Field::Handle(isolate_); |
- String& field_name = String::Handle(isolate_); |
- PassiveObject& field_value = PassiveObject::Handle(isolate_); |
+ Object& entry = Object::Handle(isolate_->current_zone()); |
+ Field& field = Field::Handle(zone()); |
+ String& field_name = String::Handle(zone()); |
+ PassiveObject& field_value = PassiveObject::Handle(isolate_->current_zone()); |
while (it.HasNext()) { |
entry = it.GetNext(); |
if (entry.IsField()) { |
@@ -2434,7 +2438,7 @@ void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list, |
RawArray* Debugger::GetLibraryFields(const Library& lib) { |
const GrowableObjectArray& field_list = |
GrowableObjectArray::Handle(GrowableObjectArray::New(8)); |
- CollectLibraryFields(field_list, lib, String::Handle(isolate_), true); |
+ CollectLibraryFields(field_list, lib, String::Handle(zone()), true); |
return Array::MakeArray(field_list); |
} |
@@ -2442,16 +2446,16 @@ RawArray* Debugger::GetLibraryFields(const Library& lib) { |
RawArray* Debugger::GetGlobalFields(const Library& lib) { |
const GrowableObjectArray& field_list = |
GrowableObjectArray::Handle(GrowableObjectArray::New(8)); |
- String& prefix_name = String::Handle(isolate_); |
+ String& prefix_name = String::Handle(zone()); |
CollectLibraryFields(field_list, lib, prefix_name, true); |
- Library& imported = Library::Handle(isolate_); |
+ Library& imported = Library::Handle(zone()); |
intptr_t num_imports = lib.num_imports(); |
for (intptr_t i = 0; i < num_imports; i++) { |
imported = lib.ImportLibraryAt(i); |
ASSERT(!imported.IsNull()); |
CollectLibraryFields(field_list, imported, prefix_name, false); |
} |
- LibraryPrefix& prefix = LibraryPrefix::Handle(isolate_); |
+ LibraryPrefix& prefix = LibraryPrefix::Handle(zone()); |
LibraryPrefixIterator it(lib); |
while (it.HasNext()) { |
prefix = it.GetNext(); |
@@ -2660,7 +2664,7 @@ RawError* Debugger::DebuggerStepCallback() { |
// If any error occurred while in the debug message loop, return it here. |
const Error& error = |
- Error::Handle(isolate_, isolate_->object_store()->sticky_error()); |
+ Error::Handle(zone(), isolate_->object_store()->sticky_error()); |
isolate_->object_store()->clear_sticky_error(); |
return error.raw(); |
} |
@@ -2749,7 +2753,7 @@ RawError* Debugger::SignalBpReached() { |
// If any error occurred while in the debug message loop, return it here. |
const Error& error = |
- Error::Handle(isolate_, isolate_->object_store()->sticky_error()); |
+ Error::Handle(zone(), isolate_->object_store()->sticky_error()); |
isolate_->object_store()->clear_sticky_error(); |
return error.raw(); |
} |
@@ -2806,7 +2810,7 @@ void Debugger::NotifyIsolateCreated() { |
// the given token position. |
RawFunction* Debugger::FindInnermostClosure(const Function& function, |
intptr_t token_pos) { |
- const Class& owner = Class::Handle(isolate_, function.Owner()); |
+ const Class& owner = Class::Handle(zone(), function.Owner()); |
if (owner.closures() == GrowableObjectArray::null()) { |
return Function::null(); |
} |
@@ -2814,12 +2818,12 @@ RawFunction* Debugger::FindInnermostClosure(const Function& function, |
// script as the outer function. We could have closures originating |
// in mixin classes whose source code is contained in a different |
// script. |
- const Script& outer_origin = Script::Handle(isolate_, function.script()); |
+ const Script& outer_origin = Script::Handle(zone(), function.script()); |
const GrowableObjectArray& closures = |
- GrowableObjectArray::Handle(isolate_, owner.closures()); |
+ GrowableObjectArray::Handle(zone(), owner.closures()); |
const intptr_t num_closures = closures.Length(); |
- Function& closure = Function::Handle(isolate_); |
- Function& best_fit = Function::Handle(isolate_); |
+ Function& closure = Function::Handle(zone()); |
+ Function& best_fit = Function::Handle(zone()); |
for (intptr_t i = 0; i < num_closures; i++) { |
closure ^= closures.At(i); |
if ((function.token_pos() < closure.token_pos()) && |
@@ -2847,13 +2851,13 @@ void Debugger::NotifyCompilation(const Function& func) { |
} |
// Iterate over all source breakpoints to check whether breakpoints |
// need to be set in the newly compiled function. |
- Script& script = Script::Handle(isolate_); |
+ Script& script = Script::Handle(zone()); |
for (BreakpointLocation* loc = breakpoint_locations_; |
loc != NULL; |
loc = loc->next()) { |
script = loc->script(); |
if (FunctionContains(func, script, loc->token_pos())) { |
- Function& inner_function = Function::Handle(isolate_); |
+ Function& inner_function = Function::Handle(zone()); |
inner_function = FindInnermostClosure(func, loc->token_pos()); |
if (!inner_function.IsNull()) { |
// The local function of a function we just compiled cannot |
@@ -2934,9 +2938,10 @@ void Debugger::NotifyDoneLoading() { |
// Common, fast path. |
return; |
} |
- Library& lib = Library::Handle(isolate_); |
- Script& script = Script::Handle(isolate_); |
- String& url = String::Handle(isolate_); |
+ Zone* zn = zone(); |
+ Library& lib = Library::Handle(zn); |
+ Script& script = Script::Handle(zn); |
+ String& url = String::Handle(zn); |
BreakpointLocation* loc = latent_locations_; |
BreakpointLocation* prev_loc = NULL; |
const GrowableObjectArray& libs = |
@@ -3209,7 +3214,7 @@ BreakpointLocation* Debugger::GetLatentBreakpoint(const String& url, |
intptr_t line, |
intptr_t column) { |
BreakpointLocation* bpt = latent_locations_; |
- String& bpt_url = String::Handle(isolate_); |
+ String& bpt_url = String::Handle(zone()); |
while (bpt != NULL) { |
bpt_url = bpt->url(); |
if (bpt_url.Equals(url) && |