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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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/object.h" 5 #include "vm/object.h"
6 6
7 #include "vm/assembler.h" 7 #include "vm/assembler.h"
8 #include "vm/assert.h" 8 #include "vm/assert.h"
9 #include "vm/bigint_operations.h" 9 #include "vm/bigint_operations.h"
10 #include "vm/bootstrap.h" 10 #include "vm/bootstrap.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 reinterpret_cast<RawClass*>(RAW_NULL); 61 reinterpret_cast<RawClass*>(RAW_NULL);
62 RawClass* Object::function_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 62 RawClass* Object::function_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
63 RawClass* Object::field_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 63 RawClass* Object::field_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
64 RawClass* Object::token_stream_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 64 RawClass* Object::token_stream_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
65 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 65 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
66 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 66 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
67 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 67 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
68 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 68 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
69 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 69 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
70 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 70 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
71 RawClass* Object::var_descriptors_class_ =
72 reinterpret_cast<RawClass*>(RAW_NULL);
71 RawClass* Object::exception_handlers_class_ = 73 RawClass* Object::exception_handlers_class_ =
72 reinterpret_cast<RawClass*>(RAW_NULL); 74 reinterpret_cast<RawClass*>(RAW_NULL);
73 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 75 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
74 RawClass* Object::context_scope_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 76 RawClass* Object::context_scope_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
75 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 77 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
76 #undef RAW_NULL 78 #undef RAW_NULL
77 79
78 int Object::GetSingletonClassIndex(const RawClass* raw_class) { 80 int Object::GetSingletonClassIndex(const RawClass* raw_class) {
79 ASSERT(raw_class->IsHeapObject()); 81 ASSERT(raw_class->IsHeapObject());
80 if (raw_class == class_class()) { 82 if (raw_class == class_class()) {
(...skipping 29 matching lines...) Expand all
110 } else if (raw_class == library_class()) { 112 } else if (raw_class == library_class()) {
111 return kLibraryClass; 113 return kLibraryClass;
112 } else if (raw_class == library_prefix_class()) { 114 } else if (raw_class == library_prefix_class()) {
113 return kLibraryPrefixClass; 115 return kLibraryPrefixClass;
114 } else if (raw_class == code_class()) { 116 } else if (raw_class == code_class()) {
115 return kCodeClass; 117 return kCodeClass;
116 } else if (raw_class == instructions_class()) { 118 } else if (raw_class == instructions_class()) {
117 return kInstructionsClass; 119 return kInstructionsClass;
118 } else if (raw_class == pc_descriptors_class()) { 120 } else if (raw_class == pc_descriptors_class()) {
119 return kPcDescriptorsClass; 121 return kPcDescriptorsClass;
122 } else if (raw_class == var_descriptors_class()) {
123 return kLocalVarDescriptorsClass;
120 } else if (raw_class == exception_handlers_class()) { 124 } else if (raw_class == exception_handlers_class()) {
121 return kExceptionHandlersClass; 125 return kExceptionHandlersClass;
122 } else if (raw_class == context_class()) { 126 } else if (raw_class == context_class()) {
123 return kContextClass; 127 return kContextClass;
124 } else if (raw_class == context_scope_class()) { 128 } else if (raw_class == context_scope_class()) {
125 return kContextScopeClass; 129 return kContextScopeClass;
126 } else if (raw_class == api_error_class()) { 130 } else if (raw_class == api_error_class()) {
127 return kApiErrorClass; 131 return kApiErrorClass;
128 } 132 }
129 return kInvalidIndex; 133 return kInvalidIndex;
(...skipping 16 matching lines...) Expand all
146 return instantiated_type_arguments_class(); 150 return instantiated_type_arguments_class();
147 case kFunctionClass: return function_class(); 151 case kFunctionClass: return function_class();
148 case kFieldClass: return field_class(); 152 case kFieldClass: return field_class();
149 case kTokenStreamClass: return token_stream_class(); 153 case kTokenStreamClass: return token_stream_class();
150 case kScriptClass: return script_class(); 154 case kScriptClass: return script_class();
151 case kLibraryClass: return library_class(); 155 case kLibraryClass: return library_class();
152 case kLibraryPrefixClass: return library_prefix_class(); 156 case kLibraryPrefixClass: return library_prefix_class();
153 case kCodeClass: return code_class(); 157 case kCodeClass: return code_class();
154 case kInstructionsClass: return instructions_class(); 158 case kInstructionsClass: return instructions_class();
155 case kPcDescriptorsClass: return pc_descriptors_class(); 159 case kPcDescriptorsClass: return pc_descriptors_class();
160 case kLocalVarDescriptorsClass: return var_descriptors_class();
156 case kExceptionHandlersClass: return exception_handlers_class(); 161 case kExceptionHandlersClass: return exception_handlers_class();
157 case kContextClass: return context_class(); 162 case kContextClass: return context_class();
158 case kContextScopeClass: return context_scope_class(); 163 case kContextScopeClass: return context_scope_class();
159 case kApiErrorClass: return api_error_class(); 164 case kApiErrorClass: return api_error_class();
160 default: break; 165 default: break;
161 } 166 }
162 UNREACHABLE(); 167 UNREACHABLE();
163 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. 168 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL.
164 } 169 }
165 170
(...skipping 13 matching lines...) Expand all
179 case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments"; 184 case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments";
180 case kFunctionClass: return "Function"; 185 case kFunctionClass: return "Function";
181 case kFieldClass: return "Field"; 186 case kFieldClass: return "Field";
182 case kTokenStreamClass: return "TokenStream"; 187 case kTokenStreamClass: return "TokenStream";
183 case kScriptClass: return "Script"; 188 case kScriptClass: return "Script";
184 case kLibraryClass: return "Library"; 189 case kLibraryClass: return "Library";
185 case kLibraryPrefixClass: return "LibraryPrefix"; 190 case kLibraryPrefixClass: return "LibraryPrefix";
186 case kCodeClass: return "Code"; 191 case kCodeClass: return "Code";
187 case kInstructionsClass: return "Instructions"; 192 case kInstructionsClass: return "Instructions";
188 case kPcDescriptorsClass: return "PcDescriptors"; 193 case kPcDescriptorsClass: return "PcDescriptors";
194 case kLocalVarDescriptorsClass: return "LocalVarDescriptors";
189 case kExceptionHandlersClass: return "ExceptionHandlers"; 195 case kExceptionHandlersClass: return "ExceptionHandlers";
190 case kContextClass: return "Context"; 196 case kContextClass: return "Context";
191 case kContextScopeClass: return "ContextScope"; 197 case kContextScopeClass: return "ContextScope";
192 case kApiErrorClass: return "ApiError"; 198 case kApiErrorClass: return "ApiError";
193 default: break; 199 default: break;
194 } 200 }
195 UNREACHABLE(); 201 UNREACHABLE();
196 return NULL; 202 return NULL;
197 } 203 }
198 204
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 319
314 cls = Class::New<Code>(); 320 cls = Class::New<Code>();
315 code_class_ = cls.raw(); 321 code_class_ = cls.raw();
316 322
317 cls = Class::New<Instructions>(); 323 cls = Class::New<Instructions>();
318 instructions_class_ = cls.raw(); 324 instructions_class_ = cls.raw();
319 325
320 cls = Class::New<PcDescriptors>(); 326 cls = Class::New<PcDescriptors>();
321 pc_descriptors_class_ = cls.raw(); 327 pc_descriptors_class_ = cls.raw();
322 328
329 cls = Class::New<LocalVarDescriptors>();
330 var_descriptors_class_ = cls.raw();
331
323 cls = Class::New<ExceptionHandlers>(); 332 cls = Class::New<ExceptionHandlers>();
324 exception_handlers_class_ = cls.raw(); 333 exception_handlers_class_ = cls.raw();
325 334
326 cls = Class::New<Context>(); 335 cls = Class::New<Context>();
327 context_class_ = cls.raw(); 336 context_class_ = cls.raw();
328 337
329 cls = Class::New<ContextScope>(); 338 cls = Class::New<ContextScope>();
330 context_scope_class_ = cls.raw(); 339 context_scope_class_ = cls.raw();
331 340
332 cls = Class::New<ApiError>(); 341 cls = Class::New<ApiError>();
(...skipping 4238 matching lines...) Expand 10 before | Expand all | Expand 10 after
4571 // Layout the fields in the buffer. 4580 // Layout the fields in the buffer.
4572 intptr_t index = 0; 4581 intptr_t index = 0;
4573 for (intptr_t i = 0; i < Length(); i++) { 4582 for (intptr_t i = 0; i < Length(); i++) {
4574 index += OS::SNPrint((buffer + index), (len - index), kFormat, 4583 index += OS::SNPrint((buffer + index), (len - index), kFormat,
4575 PC(i), KindAsStr(i), NodeId(i), TryIndex(i), TokenIndex(i)); 4584 PC(i), KindAsStr(i), NodeId(i), TryIndex(i), TokenIndex(i));
4576 } 4585 }
4577 return buffer; 4586 return buffer;
4578 } 4587 }
4579 4588
4580 4589
4590 RawString* LocalVarDescriptors::GetName(intptr_t var_index) const {
4591 ASSERT(var_index < Length());
4592 const Array& names = Array::Handle(raw_ptr()->names_);
4593 ASSERT(Length() == names.Length());
4594 const String& name = String::CheckedHandle(names.At(var_index));
4595 return name.raw();
4596 }
4597
4598
4599 void LocalVarDescriptors::GetRange(intptr_t var_index,
4600 intptr_t* begin_token_pos,
4601 intptr_t* end_token_pos) const {
4602 ASSERT(var_index < Length());
4603 RawLocalVarDescriptors::VarInfo *info = &raw_ptr()->data_[var_index];
4604 *begin_token_pos = info->begin_pos;
4605 *end_token_pos = info->end_pos;
4606 }
4607
4608
4609 void LocalVarDescriptors::SetVar(intptr_t var_index,
4610 const String& name,
4611 intptr_t stack_slot,
4612 intptr_t begin_pos,
4613 intptr_t end_pos) const {
4614 ASSERT(var_index < Length());
4615 const Array& names = Array::Handle(raw_ptr()->names_);
4616 ASSERT(Length() == names.Length());
4617 names.SetAt(var_index, name);
4618 RawLocalVarDescriptors::VarInfo *info = &raw_ptr()->data_[var_index];
4619 info->index = stack_slot;
4620 info->begin_pos = begin_pos;
4621 info->end_pos = end_pos;
4622 }
4623
4624
4625 const char* LocalVarDescriptors::ToCString() const {
4626 UNIMPLEMENTED();
4627 return "";
4628 }
4629
4630
4631 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) {
4632 const Class& cls = Class::Handle(Object::var_descriptors_class());
4633 LocalVarDescriptors& result = LocalVarDescriptors::Handle();
4634 {
4635 uword size = LocalVarDescriptors::InstanceSize(num_variables);
4636 RawObject* raw = Object::Allocate(cls, size, Heap::kOld);
4637 NoGCScope no_gc;
4638 result ^= raw;
4639 result.raw_ptr()->length_ = num_variables;
4640 }
4641 const Array& names = Array::Handle(Array::New(num_variables, Heap::kOld));
4642 result.raw_ptr()->names_ = names.raw();
4643 return result.raw();
4644 }
4645
4646
4647 intptr_t LocalVarDescriptors::Length() const {
4648 return raw_ptr()->length_;
4649 }
4650
4651
4581 intptr_t ExceptionHandlers::Length() const { 4652 intptr_t ExceptionHandlers::Length() const {
4582 return Smi::Value(raw_ptr()->length_); 4653 return Smi::Value(raw_ptr()->length_);
4583 } 4654 }
4584 4655
4585 4656
4586 void ExceptionHandlers::SetLength(intptr_t value) const { 4657 void ExceptionHandlers::SetLength(intptr_t value) const {
4587 // This is only safe because we create a new Smi, which does not cause 4658 // This is only safe because we create a new Smi, which does not cause
4588 // heap allocation. 4659 // heap allocation.
4589 raw_ptr()->length_ = Smi::New(value); 4660 raw_ptr()->length_ = Smi::New(value);
4590 } 4661 }
(...skipping 2821 matching lines...) Expand 10 before | Expand all | Expand 10 after
7412 const String& str = String::Handle(pattern()); 7483 const String& str = String::Handle(pattern());
7413 const char* format = "JSRegExp: pattern=%s flags=%s"; 7484 const char* format = "JSRegExp: pattern=%s flags=%s";
7414 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 7485 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
7415 char* chars = reinterpret_cast<char*>( 7486 char* chars = reinterpret_cast<char*>(
7416 Isolate::Current()->current_zone()->Allocate(len + 1)); 7487 Isolate::Current()->current_zone()->Allocate(len + 1));
7417 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 7488 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
7418 return chars; 7489 return chars;
7419 } 7490 }
7420 7491
7421 } // namespace dart 7492 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698