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

Side by Side Diff: runtime/vm/debugger.cc

Issue 512933002: Use PassiveObject were possible. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/debugger.h" 5 #include "vm/debugger.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 8
9 #include "vm/code_generator.h" 9 #include "vm/code_generator.h"
10 #include "vm/code_patcher.h" 10 #include "vm/code_patcher.h"
(...skipping 1953 matching lines...) Expand 10 before | Expand all | Expand 10 after
1964 1964
1965 // TODO(hausner): Merge some of this functionality with the code in 1965 // TODO(hausner): Merge some of this functionality with the code in
1966 // dart_api_impl.cc. 1966 // dart_api_impl.cc.
1967 RawObject* Debugger::GetInstanceField(const Class& cls, 1967 RawObject* Debugger::GetInstanceField(const Class& cls,
1968 const String& field_name, 1968 const String& field_name,
1969 const Instance& object) { 1969 const Instance& object) {
1970 const Function& getter_func = 1970 const Function& getter_func =
1971 Function::Handle(cls.LookupGetterFunction(field_name)); 1971 Function::Handle(cls.LookupGetterFunction(field_name));
1972 ASSERT(!getter_func.IsNull()); 1972 ASSERT(!getter_func.IsNull());
1973 1973
1974 Object& result = Object::Handle(); 1974 PassiveObject& result = PassiveObject::Handle();
1975 bool saved_ignore_flag = ignore_breakpoints_; 1975 bool saved_ignore_flag = ignore_breakpoints_;
1976 ignore_breakpoints_ = true; 1976 ignore_breakpoints_ = true;
1977 1977
1978 LongJumpScope jump; 1978 LongJumpScope jump;
1979 if (setjmp(*jump.Set()) == 0) { 1979 if (setjmp(*jump.Set()) == 0) {
1980 const Array& args = Array::Handle(Array::New(1)); 1980 const Array& args = Array::Handle(Array::New(1));
1981 args.SetAt(0, object); 1981 args.SetAt(0, object);
1982 result = DartEntry::InvokeFunction(getter_func, args); 1982 result = DartEntry::InvokeFunction(getter_func, args);
1983 } else { 1983 } else {
1984 result = isolate_->object_store()->sticky_error(); 1984 result = isolate_->object_store()->sticky_error();
(...skipping 16 matching lines...) Expand all
2001 } 2001 }
2002 // There is no field or the field has not been initialized yet. 2002 // There is no field or the field has not been initialized yet.
2003 // We must have a getter. Run the getter. 2003 // We must have a getter. Run the getter.
2004 const Function& getter_func = 2004 const Function& getter_func =
2005 Function::Handle(cls.LookupGetterFunction(field_name)); 2005 Function::Handle(cls.LookupGetterFunction(field_name));
2006 ASSERT(!getter_func.IsNull()); 2006 ASSERT(!getter_func.IsNull());
2007 if (getter_func.IsNull()) { 2007 if (getter_func.IsNull()) {
2008 return Object::null(); 2008 return Object::null();
2009 } 2009 }
2010 2010
2011 Object& result = Object::Handle(); 2011 PassiveObject& result = PassiveObject::Handle();
2012 bool saved_ignore_flag = ignore_breakpoints_; 2012 bool saved_ignore_flag = ignore_breakpoints_;
2013 ignore_breakpoints_ = true; 2013 ignore_breakpoints_ = true;
2014 LongJumpScope jump; 2014 LongJumpScope jump;
2015 if (setjmp(*jump.Set()) == 0) { 2015 if (setjmp(*jump.Set()) == 0) {
2016 result = DartEntry::InvokeFunction(getter_func, Object::empty_array()); 2016 result = DartEntry::InvokeFunction(getter_func, Object::empty_array());
2017 } else { 2017 } else {
2018 result = isolate_->object_store()->sticky_error(); 2018 result = isolate_->object_store()->sticky_error();
2019 } 2019 }
2020 ignore_breakpoints_ = saved_ignore_flag; 2020 ignore_breakpoints_ = saved_ignore_flag;
2021 return result.raw(); 2021 return result.raw();
2022 } 2022 }
2023 2023
2024 2024
2025 RawArray* Debugger::GetInstanceFields(const Instance& obj) { 2025 RawArray* Debugger::GetInstanceFields(const Instance& obj) {
2026 Class& cls = Class::Handle(obj.clazz()); 2026 Class& cls = Class::Handle(obj.clazz());
2027 Array& fields = Array::Handle(); 2027 Array& fields = Array::Handle();
2028 Field& field = Field::Handle(); 2028 Field& field = Field::Handle();
2029 const GrowableObjectArray& field_list = 2029 const GrowableObjectArray& field_list =
2030 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); 2030 GrowableObjectArray::Handle(GrowableObjectArray::New(8));
2031 String& field_name = String::Handle(); 2031 String& field_name = String::Handle();
2032 Object& field_value = Object::Handle(); 2032 PassiveObject& field_value = PassiveObject::Handle();
2033 // Iterate over fields in class hierarchy to count all instance fields. 2033 // Iterate over fields in class hierarchy to count all instance fields.
2034 while (!cls.IsNull()) { 2034 while (!cls.IsNull()) {
2035 fields = cls.fields(); 2035 fields = cls.fields();
2036 for (intptr_t i = 0; i < fields.Length(); i++) { 2036 for (intptr_t i = 0; i < fields.Length(); i++) {
2037 field ^= fields.At(i); 2037 field ^= fields.At(i);
2038 if (!field.is_static()) { 2038 if (!field.is_static()) {
2039 field_name = field.name(); 2039 field_name = field.name();
2040 field_list.Add(field_name); 2040 field_list.Add(field_name);
2041 field_value = GetInstanceField(cls, field_name, obj); 2041 field_value = GetInstanceField(cls, field_name, obj);
2042 field_list.Add(field_value); 2042 field_list.Add(field_value);
2043 } 2043 }
2044 } 2044 }
2045 cls = cls.SuperClass(); 2045 cls = cls.SuperClass();
2046 } 2046 }
2047 return Array::MakeArray(field_list); 2047 return Array::MakeArray(field_list);
2048 } 2048 }
2049 2049
2050 2050
2051 RawArray* Debugger::GetStaticFields(const Class& cls) { 2051 RawArray* Debugger::GetStaticFields(const Class& cls) {
2052 const GrowableObjectArray& field_list = 2052 const GrowableObjectArray& field_list =
2053 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); 2053 GrowableObjectArray::Handle(GrowableObjectArray::New(8));
2054 Array& fields = Array::Handle(cls.fields()); 2054 Array& fields = Array::Handle(cls.fields());
2055 Field& field = Field::Handle(); 2055 Field& field = Field::Handle();
2056 String& field_name = String::Handle(); 2056 String& field_name = String::Handle();
2057 Object& field_value = Object::Handle(); 2057 PassiveObject& field_value = PassiveObject::Handle();
2058 for (intptr_t i = 0; i < fields.Length(); i++) { 2058 for (intptr_t i = 0; i < fields.Length(); i++) {
2059 field ^= fields.At(i); 2059 field ^= fields.At(i);
2060 if (field.is_static()) { 2060 if (field.is_static()) {
2061 field_name = field.name(); 2061 field_name = field.name();
2062 field_value = GetStaticField(cls, field_name); 2062 field_value = GetStaticField(cls, field_name);
2063 field_list.Add(field_name); 2063 field_list.Add(field_name);
2064 field_list.Add(field_value); 2064 field_list.Add(field_value);
2065 } 2065 }
2066 } 2066 }
2067 return Array::MakeArray(field_list); 2067 return Array::MakeArray(field_list);
2068 } 2068 }
2069 2069
2070 2070
2071 void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list, 2071 void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list,
2072 const Library& lib, 2072 const Library& lib,
2073 const String& prefix, 2073 const String& prefix,
2074 bool include_private_fields) { 2074 bool include_private_fields) {
2075 DictionaryIterator it(lib); 2075 DictionaryIterator it(lib);
2076 Object& entry = Object::Handle(isolate_); 2076 Object& entry = Object::Handle(isolate_);
2077 Field& field = Field::Handle(isolate_); 2077 Field& field = Field::Handle(isolate_);
2078 String& field_name = String::Handle(isolate_); 2078 String& field_name = String::Handle(isolate_);
2079 Object& field_value = Object::Handle(isolate_); 2079 PassiveObject& field_value = PassiveObject::Handle(isolate_);
2080 while (it.HasNext()) { 2080 while (it.HasNext()) {
2081 entry = it.GetNext(); 2081 entry = it.GetNext();
2082 if (entry.IsField()) { 2082 if (entry.IsField()) {
2083 field ^= entry.raw(); 2083 field ^= entry.raw();
2084 ASSERT(field.is_static()); 2084 ASSERT(field.is_static());
2085 field_name = field.name(); 2085 field_name = field.name();
2086 if ((field_name.CharAt(0) == '_') && !include_private_fields) { 2086 if ((field_name.CharAt(0) == '_') && !include_private_fields) {
2087 // Skip library-private field. 2087 // Skip library-private field.
2088 continue; 2088 continue;
2089 } 2089 }
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
2579 } 2579 }
2580 2580
2581 2581
2582 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { 2582 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) {
2583 ASSERT(bpt->next() == NULL); 2583 ASSERT(bpt->next() == NULL);
2584 bpt->set_next(code_breakpoints_); 2584 bpt->set_next(code_breakpoints_);
2585 code_breakpoints_ = bpt; 2585 code_breakpoints_ = bpt;
2586 } 2586 }
2587 2587
2588 } // namespace dart 2588 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698