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

Unified Diff: runtime/vm/object.cc

Issue 8992020: First part of inspecting local variables (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years 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
Index: runtime/vm/object.cc
===================================================================
--- runtime/vm/object.cc (revision 2646)
+++ runtime/vm/object.cc (working copy)
@@ -68,6 +68,8 @@
RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
+RawClass* Object::var_descriptors_class_ =
+ reinterpret_cast<RawClass*>(RAW_NULL);
RawClass* Object::exception_handlers_class_ =
reinterpret_cast<RawClass*>(RAW_NULL);
RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
@@ -117,6 +119,8 @@
return kInstructionsClass;
} else if (raw_class == pc_descriptors_class()) {
return kPcDescriptorsClass;
+ } else if (raw_class == var_descriptors_class()) {
+ return kLocalVarDescriptorsClass;
} else if (raw_class == exception_handlers_class()) {
return kExceptionHandlersClass;
} else if (raw_class == context_class()) {
@@ -153,6 +157,7 @@
case kCodeClass: return code_class();
case kInstructionsClass: return instructions_class();
case kPcDescriptorsClass: return pc_descriptors_class();
+ case kLocalVarDescriptorsClass: return var_descriptors_class();
case kExceptionHandlersClass: return exception_handlers_class();
case kContextClass: return context_class();
case kContextScopeClass: return context_scope_class();
@@ -186,6 +191,7 @@
case kCodeClass: return "Code";
case kInstructionsClass: return "Instructions";
case kPcDescriptorsClass: return "PcDescriptors";
+ case kLocalVarDescriptorsClass: return "LocalVarDescriptors";
case kExceptionHandlersClass: return "ExceptionHandlers";
case kContextClass: return "Context";
case kContextScopeClass: return "ContextScope";
@@ -320,6 +326,9 @@
cls = Class::New<PcDescriptors>();
pc_descriptors_class_ = cls.raw();
+ cls = Class::New<LocalVarDescriptors>();
+ var_descriptors_class_ = cls.raw();
+
cls = Class::New<ExceptionHandlers>();
exception_handlers_class_ = cls.raw();
@@ -4578,6 +4587,68 @@
}
+RawString* LocalVarDescriptors::GetName(intptr_t var_index) const {
+ ASSERT(var_index < Length());
+ const Array& names = Array::Handle(raw_ptr()->names_);
+ ASSERT(Length() == names.Length());
+ const String& name = String::CheckedHandle(names.At(var_index));
+ return name.raw();
+}
+
+
+void LocalVarDescriptors::GetRange(intptr_t var_index,
+ intptr_t* begin_token_pos,
+ intptr_t* end_token_pos) const {
+ ASSERT(var_index < Length());
+ RawLocalVarDescriptors::VarInfo *info = &raw_ptr()->data_[var_index];
+ *begin_token_pos = info->begin_pos;
+ *end_token_pos = info->end_pos;
+}
+
+
+void LocalVarDescriptors::SetVar(intptr_t var_index,
+ const String& name,
+ intptr_t stack_slot,
+ intptr_t begin_pos,
+ intptr_t end_pos) const {
+ ASSERT(var_index < Length());
+ const Array& names = Array::Handle(raw_ptr()->names_);
+ ASSERT(Length() == names.Length());
+ names.SetAt(var_index, name);
+ RawLocalVarDescriptors::VarInfo *info = &raw_ptr()->data_[var_index];
+ info->index = stack_slot;
+ info->begin_pos = begin_pos;
+ info->end_pos = end_pos;
+}
+
+
+const char* LocalVarDescriptors::ToCString() const {
+ UNIMPLEMENTED();
+ return "";
+}
+
+
+RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) {
+ const Class& cls = Class::Handle(Object::var_descriptors_class());
+ LocalVarDescriptors& result = LocalVarDescriptors::Handle();
+ {
+ uword size = LocalVarDescriptors::InstanceSize(num_variables);
+ RawObject* raw = Object::Allocate(cls, size, Heap::kOld);
+ NoGCScope no_gc;
+ result ^= raw;
+ result.raw_ptr()->length_ = num_variables;
+ }
+ const Array& names = Array::Handle(Array::New(num_variables, Heap::kOld));
+ result.raw_ptr()->names_ = names.raw();
+ return result.raw();
+}
+
+
+intptr_t LocalVarDescriptors::Length() const {
+ return raw_ptr()->length_;
+}
+
+
intptr_t ExceptionHandlers::Length() const {
return Smi::Value(raw_ptr()->length_);
}

Powered by Google App Engine
This is Rietveld 408576698