Chromium Code Reviews| 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" |
| 11 #include "vm/code_generator.h" | 11 #include "vm/code_generator.h" |
| 12 #include "vm/code_index_table.h" | 12 #include "vm/code_index_table.h" |
| 13 #include "vm/code_patcher.h" | 13 #include "vm/code_patcher.h" |
| 14 #include "vm/compiler.h" | 14 #include "vm/compiler.h" |
| 15 #include "vm/compiler_stats.h" | 15 #include "vm/compiler_stats.h" |
| 16 #include "vm/class_finalizer.h" | 16 #include "vm/class_finalizer.h" |
| 17 #include "vm/dart.h" | 17 #include "vm/dart.h" |
| 18 #include "vm/dart_api_impl.h" | |
|
Ivan Posva
2011/10/18 20:44:28
Is this still needed?
turnidge
2011/10/18 22:03:12
Removed.
| |
| 18 #include "vm/debuginfo.h" | 19 #include "vm/debuginfo.h" |
| 19 #include "vm/growable_array.h" | 20 #include "vm/growable_array.h" |
| 20 #include "vm/heap.h" | 21 #include "vm/heap.h" |
| 21 #include "vm/ic_stubs.h" | 22 #include "vm/ic_stubs.h" |
| 22 #include "vm/object_store.h" | 23 #include "vm/object_store.h" |
| 23 #include "vm/parser.h" | 24 #include "vm/parser.h" |
| 24 #include "vm/runtime_entry.h" | 25 #include "vm/runtime_entry.h" |
| 25 #include "vm/scopes.h" | 26 #include "vm/scopes.h" |
| 26 #include "vm/timer.h" | 27 #include "vm/timer.h" |
| 27 #include "vm/unicode.h" | 28 #include "vm/unicode.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 68 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 68 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 69 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 69 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 70 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 70 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 71 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 71 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 72 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 72 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 73 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 73 RawClass* Object::exception_handlers_class_ = | 74 RawClass* Object::exception_handlers_class_ = |
| 74 reinterpret_cast<RawClass*>(RAW_NULL); | 75 reinterpret_cast<RawClass*>(RAW_NULL); |
| 75 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 76 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 76 RawClass* Object::context_scope_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 77 RawClass* Object::context_scope_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 78 RawClass* Object::api_failure_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | |
| 77 #undef RAW_NULL | 79 #undef RAW_NULL |
| 78 | 80 |
| 79 int Object::GetSingletonClassIndex(const RawClass* raw_class) { | 81 int Object::GetSingletonClassIndex(const RawClass* raw_class) { |
| 80 ASSERT(raw_class->IsHeapObject()); | 82 ASSERT(raw_class->IsHeapObject()); |
| 81 if (raw_class == class_class()) { | 83 if (raw_class == class_class()) { |
| 82 return kClassClass; | 84 return kClassClass; |
| 83 } else if (raw_class == null_class()) { | 85 } else if (raw_class == null_class()) { |
| 84 return kNullClass; | 86 return kNullClass; |
| 85 } else if (raw_class == var_class()) { | 87 } else if (raw_class == var_class()) { |
| 86 return kVarClass; | 88 return kVarClass; |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 117 } else if (raw_class == instructions_class()) { | 119 } else if (raw_class == instructions_class()) { |
| 118 return kInstructionsClass; | 120 return kInstructionsClass; |
| 119 } else if (raw_class == pc_descriptors_class()) { | 121 } else if (raw_class == pc_descriptors_class()) { |
| 120 return kPcDescriptorsClass; | 122 return kPcDescriptorsClass; |
| 121 } else if (raw_class == exception_handlers_class()) { | 123 } else if (raw_class == exception_handlers_class()) { |
| 122 return kExceptionHandlersClass; | 124 return kExceptionHandlersClass; |
| 123 } else if (raw_class == context_class()) { | 125 } else if (raw_class == context_class()) { |
| 124 return kContextClass; | 126 return kContextClass; |
| 125 } else if (raw_class == context_scope_class()) { | 127 } else if (raw_class == context_scope_class()) { |
| 126 return kContextScopeClass; | 128 return kContextScopeClass; |
| 129 } else if (raw_class == api_failure_class()) { | |
| 130 return kApiFailureClass; | |
| 127 } | 131 } |
| 128 return kInvalidIndex; | 132 return kInvalidIndex; |
| 129 } | 133 } |
| 130 | 134 |
| 131 | 135 |
| 132 RawClass* Object::GetSingletonClass(int index) { | 136 RawClass* Object::GetSingletonClass(int index) { |
| 133 switch (index) { | 137 switch (index) { |
| 134 case kClassClass: return class_class(); | 138 case kClassClass: return class_class(); |
| 135 case kNullClass: return null_class(); | 139 case kNullClass: return null_class(); |
| 136 case kVarClass: return var_class(); | 140 case kVarClass: return var_class(); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 148 case kTokenStreamClass: return token_stream_class(); | 152 case kTokenStreamClass: return token_stream_class(); |
| 149 case kScriptClass: return script_class(); | 153 case kScriptClass: return script_class(); |
| 150 case kLibraryClass: return library_class(); | 154 case kLibraryClass: return library_class(); |
| 151 case kLibraryPrefixClass: return library_prefix_class(); | 155 case kLibraryPrefixClass: return library_prefix_class(); |
| 152 case kCodeClass: return code_class(); | 156 case kCodeClass: return code_class(); |
| 153 case kInstructionsClass: return instructions_class(); | 157 case kInstructionsClass: return instructions_class(); |
| 154 case kPcDescriptorsClass: return pc_descriptors_class(); | 158 case kPcDescriptorsClass: return pc_descriptors_class(); |
| 155 case kExceptionHandlersClass: return exception_handlers_class(); | 159 case kExceptionHandlersClass: return exception_handlers_class(); |
| 156 case kContextClass: return context_class(); | 160 case kContextClass: return context_class(); |
| 157 case kContextScopeClass: return context_scope_class(); | 161 case kContextScopeClass: return context_scope_class(); |
| 162 case kApiFailureClass: return api_failure_class(); | |
| 158 default: break; | 163 default: break; |
| 159 } | 164 } |
| 160 UNREACHABLE(); | 165 UNREACHABLE(); |
| 161 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. | 166 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. |
| 162 } | 167 } |
| 163 | 168 |
| 164 | 169 |
| 165 const char* Object::GetSingletonClassName(int index) { | 170 const char* Object::GetSingletonClassName(int index) { |
| 166 switch (index) { | 171 switch (index) { |
| 167 case kClassClass: return "Class"; | 172 case kClassClass: return "Class"; |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 180 case kTokenStreamClass: return "TokenStream"; | 185 case kTokenStreamClass: return "TokenStream"; |
| 181 case kScriptClass: return "Script"; | 186 case kScriptClass: return "Script"; |
| 182 case kLibraryClass: return "Library"; | 187 case kLibraryClass: return "Library"; |
| 183 case kLibraryPrefixClass: return "LibraryPrefix"; | 188 case kLibraryPrefixClass: return "LibraryPrefix"; |
| 184 case kCodeClass: return "Code"; | 189 case kCodeClass: return "Code"; |
| 185 case kInstructionsClass: return "Instructions"; | 190 case kInstructionsClass: return "Instructions"; |
| 186 case kPcDescriptorsClass: return "PcDescriptors"; | 191 case kPcDescriptorsClass: return "PcDescriptors"; |
| 187 case kExceptionHandlersClass: return "ExceptionHandlers"; | 192 case kExceptionHandlersClass: return "ExceptionHandlers"; |
| 188 case kContextClass: return "Context"; | 193 case kContextClass: return "Context"; |
| 189 case kContextScopeClass: return "ContextScope"; | 194 case kContextScopeClass: return "ContextScope"; |
| 195 case kApiFailureClass: return "ApiFailure"; | |
| 190 default: break; | 196 default: break; |
| 191 } | 197 } |
| 192 UNREACHABLE(); | 198 UNREACHABLE(); |
| 193 return NULL; | 199 return NULL; |
| 194 } | 200 } |
| 195 | 201 |
| 196 | 202 |
| 197 void Object::InitOnce() { | 203 void Object::InitOnce() { |
| 198 // TODO(iposva): NoGCScope needs to be added here. | 204 // TODO(iposva): NoGCScope needs to be added here. |
| 199 ASSERT(class_class() == null_); | 205 ASSERT(class_class() == null_); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 310 | 316 |
| 311 cls = Class::New<ExceptionHandlers>(); | 317 cls = Class::New<ExceptionHandlers>(); |
| 312 exception_handlers_class_ = cls.raw(); | 318 exception_handlers_class_ = cls.raw(); |
| 313 | 319 |
| 314 cls = Class::New<Context>(); | 320 cls = Class::New<Context>(); |
| 315 context_class_ = cls.raw(); | 321 context_class_ = cls.raw(); |
| 316 | 322 |
| 317 cls = Class::New<ContextScope>(); | 323 cls = Class::New<ContextScope>(); |
| 318 context_scope_class_ = cls.raw(); | 324 context_scope_class_ = cls.raw(); |
| 319 | 325 |
| 326 cls = Class::New<ApiFailure>(); | |
| 327 api_failure_class_ = cls.raw(); | |
| 328 | |
| 320 ASSERT(class_class() != null_); | 329 ASSERT(class_class() != null_); |
| 321 } | 330 } |
| 322 | 331 |
| 323 | 332 |
| 324 void Object::Init(Isolate* isolate) { | 333 void Object::Init(Isolate* isolate) { |
| 325 TIMERSCOPE(time_bootstrap); | 334 TIMERSCOPE(time_bootstrap); |
| 326 ObjectStore* object_store = isolate->object_store(); | 335 ObjectStore* object_store = isolate->object_store(); |
| 327 | 336 |
| 328 Class& cls = Class::Handle(); | 337 Class& cls = Class::Handle(); |
| 329 Type& type = Type::Handle(); | 338 Type& type = Type::Handle(); |
| (...skipping 3987 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4317 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { | 4326 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { |
| 4318 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); | 4327 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); |
| 4319 } | 4328 } |
| 4320 | 4329 |
| 4321 | 4330 |
| 4322 const char* UnhandledException::ToCString() const { | 4331 const char* UnhandledException::ToCString() const { |
| 4323 return "UnhandledException"; | 4332 return "UnhandledException"; |
| 4324 } | 4333 } |
| 4325 | 4334 |
| 4326 | 4335 |
| 4336 RawApiFailure* ApiFailure::New(const String& message, | |
| 4337 Heap::Space space) { | |
|
Ivan Posva
2011/10/18 20:44:28
Is a new line needed here?
turnidge
2011/10/18 22:03:12
Removed.
| |
| 4338 const Class& cls = Class::Handle(Object::api_failure_class()); | |
| 4339 ApiFailure& result = ApiFailure::Handle(); | |
| 4340 { | |
| 4341 RawObject* raw = Object::Allocate(cls, | |
| 4342 ApiFailure::InstanceSize(), | |
| 4343 space); | |
| 4344 NoGCScope no_gc; | |
| 4345 result ^= raw; | |
| 4346 } | |
| 4347 result.set_message(message); | |
| 4348 return result.raw(); | |
| 4349 } | |
| 4350 | |
| 4351 | |
| 4352 void ApiFailure::set_message(const String& message) const { | |
| 4353 StorePointer(&raw_ptr()->message_, message.raw()); | |
| 4354 } | |
| 4355 | |
| 4356 | |
| 4357 const char* ApiFailure::ToCString() const { | |
| 4358 return "ApiFailure"; | |
| 4359 } | |
| 4360 | |
|
Ivan Posva
2011/10/18 20:44:28
new line
turnidge
2011/10/18 22:03:12
Done.
| |
| 4327 bool Instance::Equals(const Instance& other) const { | 4361 bool Instance::Equals(const Instance& other) const { |
| 4328 if (this->raw() == other.raw()) { | 4362 if (this->raw() == other.raw()) { |
| 4329 return true; // "===". | 4363 return true; // "===". |
| 4330 } | 4364 } |
| 4331 | 4365 |
| 4332 if (other.IsNull() || (this->clazz() != other.clazz())) { | 4366 if (other.IsNull() || (this->clazz() != other.clazz())) { |
| 4333 return false; | 4367 return false; |
| 4334 } | 4368 } |
| 4335 | 4369 |
| 4336 { | 4370 { |
| (...skipping 2021 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6358 const String& str = String::Handle(pattern()); | 6392 const String& str = String::Handle(pattern()); |
| 6359 const char* format = "JSRegExp: pattern=%s flags=%s"; | 6393 const char* format = "JSRegExp: pattern=%s flags=%s"; |
| 6360 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 6394 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
| 6361 char* chars = reinterpret_cast<char*>( | 6395 char* chars = reinterpret_cast<char*>( |
| 6362 Isolate::Current()->current_zone()->Allocate(len + 1)); | 6396 Isolate::Current()->current_zone()->Allocate(len + 1)); |
| 6363 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 6397 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
| 6364 return chars; | 6398 return chars; |
| 6365 } | 6399 } |
| 6366 | 6400 |
| 6367 } // namespace dart | 6401 } // namespace dart |
| OLD | NEW |