| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |