| 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 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 78 #undef RAW_NULL | 78 #undef RAW_NULL |
| 79 | 79 |
| 80 int Object::GetSingletonClassIndex(const RawClass* raw_class) { | 80 int Object::GetSingletonClassIndex(const RawClass* raw_class) { |
| 81 ASSERT(raw_class->IsHeapObject()); | 81 ASSERT(raw_class->IsHeapObject()); |
| 82 if (raw_class == class_class()) { | 82 if (raw_class == class_class()) { |
| 83 return kClassClass; | 83 return kClassClass; |
| 84 } else if (raw_class == null_class()) { | 84 } else if (raw_class == null_class()) { |
| 85 return kNullClass; | 85 return kNullClass; |
| 86 } else if (raw_class == dynamic_class()) { | 86 } else if (raw_class == dynamic_class()) { |
| 87 return kDynamicClass; | 87 return kDynamicClass; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 118 } else if (raw_class == instructions_class()) { | 118 } else if (raw_class == instructions_class()) { |
| 119 return kInstructionsClass; | 119 return kInstructionsClass; |
| 120 } else if (raw_class == pc_descriptors_class()) { | 120 } else if (raw_class == pc_descriptors_class()) { |
| 121 return kPcDescriptorsClass; | 121 return kPcDescriptorsClass; |
| 122 } else if (raw_class == exception_handlers_class()) { | 122 } else if (raw_class == exception_handlers_class()) { |
| 123 return kExceptionHandlersClass; | 123 return kExceptionHandlersClass; |
| 124 } else if (raw_class == context_class()) { | 124 } else if (raw_class == context_class()) { |
| 125 return kContextClass; | 125 return kContextClass; |
| 126 } else if (raw_class == context_scope_class()) { | 126 } else if (raw_class == context_scope_class()) { |
| 127 return kContextScopeClass; | 127 return kContextScopeClass; |
| 128 } else if (raw_class == api_failure_class()) { | 128 } else if (raw_class == api_error_class()) { |
| 129 return kApiFailureClass; | 129 return kApiErrorClass; |
| 130 } | 130 } |
| 131 return kInvalidIndex; | 131 return kInvalidIndex; |
| 132 } | 132 } |
| 133 | 133 |
| 134 | 134 |
| 135 RawClass* Object::GetSingletonClass(int index) { | 135 RawClass* Object::GetSingletonClass(int index) { |
| 136 switch (index) { | 136 switch (index) { |
| 137 case kClassClass: return class_class(); | 137 case kClassClass: return class_class(); |
| 138 case kNullClass: return null_class(); | 138 case kNullClass: return null_class(); |
| 139 case kDynamicClass: return dynamic_class(); | 139 case kDynamicClass: return dynamic_class(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 151 case kTokenStreamClass: return token_stream_class(); | 151 case kTokenStreamClass: return token_stream_class(); |
| 152 case kScriptClass: return script_class(); | 152 case kScriptClass: return script_class(); |
| 153 case kLibraryClass: return library_class(); | 153 case kLibraryClass: return library_class(); |
| 154 case kLibraryPrefixClass: return library_prefix_class(); | 154 case kLibraryPrefixClass: return library_prefix_class(); |
| 155 case kCodeClass: return code_class(); | 155 case kCodeClass: return code_class(); |
| 156 case kInstructionsClass: return instructions_class(); | 156 case kInstructionsClass: return instructions_class(); |
| 157 case kPcDescriptorsClass: return pc_descriptors_class(); | 157 case kPcDescriptorsClass: return pc_descriptors_class(); |
| 158 case kExceptionHandlersClass: return exception_handlers_class(); | 158 case kExceptionHandlersClass: return exception_handlers_class(); |
| 159 case kContextClass: return context_class(); | 159 case kContextClass: return context_class(); |
| 160 case kContextScopeClass: return context_scope_class(); | 160 case kContextScopeClass: return context_scope_class(); |
| 161 case kApiFailureClass: return api_failure_class(); | 161 case kApiErrorClass: return api_error_class(); |
| 162 default: break; | 162 default: break; |
| 163 } | 163 } |
| 164 UNREACHABLE(); | 164 UNREACHABLE(); |
| 165 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. | 165 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. |
| 166 } | 166 } |
| 167 | 167 |
| 168 | 168 |
| 169 const char* Object::GetSingletonClassName(int index) { | 169 const char* Object::GetSingletonClassName(int index) { |
| 170 switch (index) { | 170 switch (index) { |
| 171 case kClassClass: return "Class"; | 171 case kClassClass: return "Class"; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 184 case kTokenStreamClass: return "TokenStream"; | 184 case kTokenStreamClass: return "TokenStream"; |
| 185 case kScriptClass: return "Script"; | 185 case kScriptClass: return "Script"; |
| 186 case kLibraryClass: return "Library"; | 186 case kLibraryClass: return "Library"; |
| 187 case kLibraryPrefixClass: return "LibraryPrefix"; | 187 case kLibraryPrefixClass: return "LibraryPrefix"; |
| 188 case kCodeClass: return "Code"; | 188 case kCodeClass: return "Code"; |
| 189 case kInstructionsClass: return "Instructions"; | 189 case kInstructionsClass: return "Instructions"; |
| 190 case kPcDescriptorsClass: return "PcDescriptors"; | 190 case kPcDescriptorsClass: return "PcDescriptors"; |
| 191 case kExceptionHandlersClass: return "ExceptionHandlers"; | 191 case kExceptionHandlersClass: return "ExceptionHandlers"; |
| 192 case kContextClass: return "Context"; | 192 case kContextClass: return "Context"; |
| 193 case kContextScopeClass: return "ContextScope"; | 193 case kContextScopeClass: return "ContextScope"; |
| 194 case kApiFailureClass: return "ApiFailure"; | 194 case kApiErrorClass: return "ApiError"; |
| 195 default: break; | 195 default: break; |
| 196 } | 196 } |
| 197 UNREACHABLE(); | 197 UNREACHABLE(); |
| 198 return NULL; | 198 return NULL; |
| 199 } | 199 } |
| 200 | 200 |
| 201 | 201 |
| 202 void Object::InitOnce() { | 202 void Object::InitOnce() { |
| 203 // TODO(iposva): NoGCScope needs to be added here. | 203 // TODO(iposva): NoGCScope needs to be added here. |
| 204 ASSERT(class_class() == null_); | 204 ASSERT(class_class() == null_); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 | 321 |
| 322 cls = Class::New<ExceptionHandlers>(); | 322 cls = Class::New<ExceptionHandlers>(); |
| 323 exception_handlers_class_ = cls.raw(); | 323 exception_handlers_class_ = cls.raw(); |
| 324 | 324 |
| 325 cls = Class::New<Context>(); | 325 cls = Class::New<Context>(); |
| 326 context_class_ = cls.raw(); | 326 context_class_ = cls.raw(); |
| 327 | 327 |
| 328 cls = Class::New<ContextScope>(); | 328 cls = Class::New<ContextScope>(); |
| 329 context_scope_class_ = cls.raw(); | 329 context_scope_class_ = cls.raw(); |
| 330 | 330 |
| 331 cls = Class::New<ApiFailure>(); | 331 cls = Class::New<ApiError>(); |
| 332 api_failure_class_ = cls.raw(); | 332 api_error_class_ = cls.raw(); |
| 333 | 333 |
| 334 ASSERT(class_class() != null_); | 334 ASSERT(class_class() != null_); |
| 335 } | 335 } |
| 336 | 336 |
| 337 | 337 |
| 338 void Object::Init(Isolate* isolate) { | 338 void Object::Init(Isolate* isolate) { |
| 339 TIMERSCOPE(time_bootstrap); | 339 TIMERSCOPE(time_bootstrap); |
| 340 ObjectStore* object_store = isolate->object_store(); | 340 ObjectStore* object_store = isolate->object_store(); |
| 341 | 341 |
| 342 Class& cls = Class::Handle(); | 342 Class& cls = Class::Handle(); |
| (...skipping 4398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4741 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { | 4741 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { |
| 4742 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); | 4742 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); |
| 4743 } | 4743 } |
| 4744 | 4744 |
| 4745 | 4745 |
| 4746 const char* UnhandledException::ToCString() const { | 4746 const char* UnhandledException::ToCString() const { |
| 4747 return "UnhandledException"; | 4747 return "UnhandledException"; |
| 4748 } | 4748 } |
| 4749 | 4749 |
| 4750 | 4750 |
| 4751 RawApiFailure* ApiFailure::New(const String& message, Heap::Space space) { | 4751 RawApiError* ApiError::New(const String& message, Heap::Space space) { |
| 4752 const Class& cls = Class::Handle(Object::api_failure_class()); | 4752 const Class& cls = Class::Handle(Object::api_error_class()); |
| 4753 ApiFailure& result = ApiFailure::Handle(); | 4753 ApiError& result = ApiError::Handle(); |
| 4754 { | 4754 { |
| 4755 RawObject* raw = Object::Allocate(cls, | 4755 RawObject* raw = Object::Allocate(cls, |
| 4756 ApiFailure::InstanceSize(), | 4756 ApiError::InstanceSize(), |
| 4757 space); | 4757 space); |
| 4758 NoGCScope no_gc; | 4758 NoGCScope no_gc; |
| 4759 result ^= raw; | 4759 result ^= raw; |
| 4760 } | 4760 } |
| 4761 result.set_message(message); | 4761 result.set_data(message); |
| 4762 return result.raw(); | 4762 return result.raw(); |
| 4763 } | 4763 } |
| 4764 | 4764 |
| 4765 | 4765 |
| 4766 void ApiFailure::set_message(const String& message) const { | 4766 RawApiError* ApiError::New(const UnhandledException& exception, |
| 4767 StorePointer(&raw_ptr()->message_, message.raw()); | 4767 Heap::Space space) { |
| 4768 const Class& cls = Class::Handle(Object::api_error_class()); |
| 4769 ApiError& result = ApiError::Handle(); |
| 4770 { |
| 4771 RawObject* raw = Object::Allocate(cls, |
| 4772 ApiError::InstanceSize(), |
| 4773 space); |
| 4774 NoGCScope no_gc; |
| 4775 result ^= raw; |
| 4776 } |
| 4777 result.set_data(exception); |
| 4778 return result.raw(); |
| 4768 } | 4779 } |
| 4769 | 4780 |
| 4770 | 4781 |
| 4771 const char* ApiFailure::ToCString() const { | 4782 void ApiError::set_data(const Object& data) const { |
| 4772 return "ApiFailure"; | 4783 StorePointer(&raw_ptr()->data_, data.raw()); |
| 4784 } |
| 4785 |
| 4786 |
| 4787 const char* ApiError::ToCString() const { |
| 4788 return "ApiError"; |
| 4773 } | 4789 } |
| 4774 | 4790 |
| 4775 | 4791 |
| 4776 bool Instance::Equals(const Instance& other) const { | 4792 bool Instance::Equals(const Instance& other) const { |
| 4777 if (this->raw() == other.raw()) { | 4793 if (this->raw() == other.raw()) { |
| 4778 return true; // "===". | 4794 return true; // "===". |
| 4779 } | 4795 } |
| 4780 | 4796 |
| 4781 if (other.IsNull() || (this->clazz() != other.clazz())) { | 4797 if (other.IsNull() || (this->clazz() != other.clazz())) { |
| 4782 return false; | 4798 return false; |
| (...skipping 2181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6964 const String& str = String::Handle(pattern()); | 6980 const String& str = String::Handle(pattern()); |
| 6965 const char* format = "JSRegExp: pattern=%s flags=%s"; | 6981 const char* format = "JSRegExp: pattern=%s flags=%s"; |
| 6966 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 6982 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
| 6967 char* chars = reinterpret_cast<char*>( | 6983 char* chars = reinterpret_cast<char*>( |
| 6968 Isolate::Current()->current_zone()->Allocate(len + 1)); | 6984 Isolate::Current()->current_zone()->Allocate(len + 1)); |
| 6969 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 6985 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
| 6970 return chars; | 6986 return chars; |
| 6971 } | 6987 } |
| 6972 | 6988 |
| 6973 } // namespace dart | 6989 } // namespace dart |
| OLD | NEW |