| 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 67 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 68 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 68 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 69 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 69 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 70 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 70 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 71 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 71 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 72 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 72 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 73 RawClass* Object::exception_handlers_class_ = | 73 RawClass* Object::exception_handlers_class_ = |
| 74 reinterpret_cast<RawClass*>(RAW_NULL); | 74 reinterpret_cast<RawClass*>(RAW_NULL); |
| 75 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 75 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 76 RawClass* Object::context_scope_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 76 RawClass* Object::context_scope_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 77 RawClass* Object::api_failure_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 77 #undef RAW_NULL | 78 #undef RAW_NULL |
| 78 | 79 |
| 79 int Object::GetSingletonClassIndex(const RawClass* raw_class) { | 80 int Object::GetSingletonClassIndex(const RawClass* raw_class) { |
| 80 ASSERT(raw_class->IsHeapObject()); | 81 ASSERT(raw_class->IsHeapObject()); |
| 81 if (raw_class == class_class()) { | 82 if (raw_class == class_class()) { |
| 82 return kClassClass; | 83 return kClassClass; |
| 83 } else if (raw_class == null_class()) { | 84 } else if (raw_class == null_class()) { |
| 84 return kNullClass; | 85 return kNullClass; |
| 85 } else if (raw_class == var_class()) { | 86 } else if (raw_class == var_class()) { |
| 86 return kVarClass; | 87 return kVarClass; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 117 } else if (raw_class == instructions_class()) { | 118 } else if (raw_class == instructions_class()) { |
| 118 return kInstructionsClass; | 119 return kInstructionsClass; |
| 119 } else if (raw_class == pc_descriptors_class()) { | 120 } else if (raw_class == pc_descriptors_class()) { |
| 120 return kPcDescriptorsClass; | 121 return kPcDescriptorsClass; |
| 121 } else if (raw_class == exception_handlers_class()) { | 122 } else if (raw_class == exception_handlers_class()) { |
| 122 return kExceptionHandlersClass; | 123 return kExceptionHandlersClass; |
| 123 } else if (raw_class == context_class()) { | 124 } else if (raw_class == context_class()) { |
| 124 return kContextClass; | 125 return kContextClass; |
| 125 } else if (raw_class == context_scope_class()) { | 126 } else if (raw_class == context_scope_class()) { |
| 126 return kContextScopeClass; | 127 return kContextScopeClass; |
| 128 } else if (raw_class == api_failure_class()) { |
| 129 return kApiFailureClass; |
| 127 } | 130 } |
| 128 return kInvalidIndex; | 131 return kInvalidIndex; |
| 129 } | 132 } |
| 130 | 133 |
| 131 | 134 |
| 132 RawClass* Object::GetSingletonClass(int index) { | 135 RawClass* Object::GetSingletonClass(int index) { |
| 133 switch (index) { | 136 switch (index) { |
| 134 case kClassClass: return class_class(); | 137 case kClassClass: return class_class(); |
| 135 case kNullClass: return null_class(); | 138 case kNullClass: return null_class(); |
| 136 case kVarClass: return var_class(); | 139 case kVarClass: return var_class(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 148 case kTokenStreamClass: return token_stream_class(); | 151 case kTokenStreamClass: return token_stream_class(); |
| 149 case kScriptClass: return script_class(); | 152 case kScriptClass: return script_class(); |
| 150 case kLibraryClass: return library_class(); | 153 case kLibraryClass: return library_class(); |
| 151 case kLibraryPrefixClass: return library_prefix_class(); | 154 case kLibraryPrefixClass: return library_prefix_class(); |
| 152 case kCodeClass: return code_class(); | 155 case kCodeClass: return code_class(); |
| 153 case kInstructionsClass: return instructions_class(); | 156 case kInstructionsClass: return instructions_class(); |
| 154 case kPcDescriptorsClass: return pc_descriptors_class(); | 157 case kPcDescriptorsClass: return pc_descriptors_class(); |
| 155 case kExceptionHandlersClass: return exception_handlers_class(); | 158 case kExceptionHandlersClass: return exception_handlers_class(); |
| 156 case kContextClass: return context_class(); | 159 case kContextClass: return context_class(); |
| 157 case kContextScopeClass: return context_scope_class(); | 160 case kContextScopeClass: return context_scope_class(); |
| 161 case kApiFailureClass: return api_failure_class(); |
| 158 default: break; | 162 default: break; |
| 159 } | 163 } |
| 160 UNREACHABLE(); | 164 UNREACHABLE(); |
| 161 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. | 165 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. |
| 162 } | 166 } |
| 163 | 167 |
| 164 | 168 |
| 165 const char* Object::GetSingletonClassName(int index) { | 169 const char* Object::GetSingletonClassName(int index) { |
| 166 switch (index) { | 170 switch (index) { |
| 167 case kClassClass: return "Class"; | 171 case kClassClass: return "Class"; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 180 case kTokenStreamClass: return "TokenStream"; | 184 case kTokenStreamClass: return "TokenStream"; |
| 181 case kScriptClass: return "Script"; | 185 case kScriptClass: return "Script"; |
| 182 case kLibraryClass: return "Library"; | 186 case kLibraryClass: return "Library"; |
| 183 case kLibraryPrefixClass: return "LibraryPrefix"; | 187 case kLibraryPrefixClass: return "LibraryPrefix"; |
| 184 case kCodeClass: return "Code"; | 188 case kCodeClass: return "Code"; |
| 185 case kInstructionsClass: return "Instructions"; | 189 case kInstructionsClass: return "Instructions"; |
| 186 case kPcDescriptorsClass: return "PcDescriptors"; | 190 case kPcDescriptorsClass: return "PcDescriptors"; |
| 187 case kExceptionHandlersClass: return "ExceptionHandlers"; | 191 case kExceptionHandlersClass: return "ExceptionHandlers"; |
| 188 case kContextClass: return "Context"; | 192 case kContextClass: return "Context"; |
| 189 case kContextScopeClass: return "ContextScope"; | 193 case kContextScopeClass: return "ContextScope"; |
| 194 case kApiFailureClass: return "ApiFailure"; |
| 190 default: break; | 195 default: break; |
| 191 } | 196 } |
| 192 UNREACHABLE(); | 197 UNREACHABLE(); |
| 193 return NULL; | 198 return NULL; |
| 194 } | 199 } |
| 195 | 200 |
| 196 | 201 |
| 197 void Object::InitOnce() { | 202 void Object::InitOnce() { |
| 198 // TODO(iposva): NoGCScope needs to be added here. | 203 // TODO(iposva): NoGCScope needs to be added here. |
| 199 ASSERT(class_class() == null_); | 204 ASSERT(class_class() == null_); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 | 315 |
| 311 cls = Class::New<ExceptionHandlers>(); | 316 cls = Class::New<ExceptionHandlers>(); |
| 312 exception_handlers_class_ = cls.raw(); | 317 exception_handlers_class_ = cls.raw(); |
| 313 | 318 |
| 314 cls = Class::New<Context>(); | 319 cls = Class::New<Context>(); |
| 315 context_class_ = cls.raw(); | 320 context_class_ = cls.raw(); |
| 316 | 321 |
| 317 cls = Class::New<ContextScope>(); | 322 cls = Class::New<ContextScope>(); |
| 318 context_scope_class_ = cls.raw(); | 323 context_scope_class_ = cls.raw(); |
| 319 | 324 |
| 325 cls = Class::New<ApiFailure>(); |
| 326 api_failure_class_ = cls.raw(); |
| 327 |
| 320 ASSERT(class_class() != null_); | 328 ASSERT(class_class() != null_); |
| 321 } | 329 } |
| 322 | 330 |
| 323 | 331 |
| 324 void Object::Init(Isolate* isolate) { | 332 void Object::Init(Isolate* isolate) { |
| 325 TIMERSCOPE(time_bootstrap); | 333 TIMERSCOPE(time_bootstrap); |
| 326 ObjectStore* object_store = isolate->object_store(); | 334 ObjectStore* object_store = isolate->object_store(); |
| 327 | 335 |
| 328 Class& cls = Class::Handle(); | 336 Class& cls = Class::Handle(); |
| 329 Type& type = Type::Handle(); | 337 Type& type = Type::Handle(); |
| (...skipping 4077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4407 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { | 4415 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { |
| 4408 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); | 4416 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); |
| 4409 } | 4417 } |
| 4410 | 4418 |
| 4411 | 4419 |
| 4412 const char* UnhandledException::ToCString() const { | 4420 const char* UnhandledException::ToCString() const { |
| 4413 return "UnhandledException"; | 4421 return "UnhandledException"; |
| 4414 } | 4422 } |
| 4415 | 4423 |
| 4416 | 4424 |
| 4425 RawApiFailure* ApiFailure::New(const String& message, Heap::Space space) { |
| 4426 const Class& cls = Class::Handle(Object::api_failure_class()); |
| 4427 ApiFailure& result = ApiFailure::Handle(); |
| 4428 { |
| 4429 RawObject* raw = Object::Allocate(cls, |
| 4430 ApiFailure::InstanceSize(), |
| 4431 space); |
| 4432 NoGCScope no_gc; |
| 4433 result ^= raw; |
| 4434 } |
| 4435 result.set_message(message); |
| 4436 return result.raw(); |
| 4437 } |
| 4438 |
| 4439 |
| 4440 void ApiFailure::set_message(const String& message) const { |
| 4441 StorePointer(&raw_ptr()->message_, message.raw()); |
| 4442 } |
| 4443 |
| 4444 |
| 4445 const char* ApiFailure::ToCString() const { |
| 4446 return "ApiFailure"; |
| 4447 } |
| 4448 |
| 4449 |
| 4417 bool Instance::Equals(const Instance& other) const { | 4450 bool Instance::Equals(const Instance& other) const { |
| 4418 if (this->raw() == other.raw()) { | 4451 if (this->raw() == other.raw()) { |
| 4419 return true; // "===". | 4452 return true; // "===". |
| 4420 } | 4453 } |
| 4421 | 4454 |
| 4422 if (other.IsNull() || (this->clazz() != other.clazz())) { | 4455 if (other.IsNull() || (this->clazz() != other.clazz())) { |
| 4423 return false; | 4456 return false; |
| 4424 } | 4457 } |
| 4425 | 4458 |
| 4426 { | 4459 { |
| (...skipping 2032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6459 const String& str = String::Handle(pattern()); | 6492 const String& str = String::Handle(pattern()); |
| 6460 const char* format = "JSRegExp: pattern=%s flags=%s"; | 6493 const char* format = "JSRegExp: pattern=%s flags=%s"; |
| 6461 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 6494 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
| 6462 char* chars = reinterpret_cast<char*>( | 6495 char* chars = reinterpret_cast<char*>( |
| 6463 Isolate::Current()->current_zone()->Allocate(len + 1)); | 6496 Isolate::Current()->current_zone()->Allocate(len + 1)); |
| 6464 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 6497 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
| 6465 return chars; | 6498 return chars; |
| 6466 } | 6499 } |
| 6467 | 6500 |
| 6468 } // namespace dart | 6501 } // namespace dart |
| OLD | NEW |