| 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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 69 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 70 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 70 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 71 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 71 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 72 RawClass* Object::var_descriptors_class_ = | 72 RawClass* Object::var_descriptors_class_ = |
| 73 reinterpret_cast<RawClass*>(RAW_NULL); | 73 reinterpret_cast<RawClass*>(RAW_NULL); |
| 74 RawClass* Object::exception_handlers_class_ = | 74 RawClass* Object::exception_handlers_class_ = |
| 75 reinterpret_cast<RawClass*>(RAW_NULL); | 75 reinterpret_cast<RawClass*>(RAW_NULL); |
| 76 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 76 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 77 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_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 78 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 79 RawClass* Object::language_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 80 RawClass* Object::unhandled_exception_class_ = |
| 81 reinterpret_cast<RawClass*>(RAW_NULL); |
| 82 RawClass* Object::unwind_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 79 #undef RAW_NULL | 83 #undef RAW_NULL |
| 80 | 84 |
| 81 int Object::GetSingletonClassIndex(const RawClass* raw_class) { | 85 int Object::GetSingletonClassIndex(const RawClass* raw_class) { |
| 82 ASSERT(raw_class->IsHeapObject()); | 86 ASSERT(raw_class->IsHeapObject()); |
| 83 if (raw_class == class_class()) { | 87 if (raw_class == class_class()) { |
| 84 return kClassClass; | 88 return kClassClass; |
| 85 } else if (raw_class == null_class()) { | 89 } else if (raw_class == null_class()) { |
| 86 return kNullClass; | 90 return kNullClass; |
| 87 } else if (raw_class == dynamic_class()) { | 91 } else if (raw_class == dynamic_class()) { |
| 88 return kDynamicClass; | 92 return kDynamicClass; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 } else if (raw_class == var_descriptors_class()) { | 127 } else if (raw_class == var_descriptors_class()) { |
| 124 return kLocalVarDescriptorsClass; | 128 return kLocalVarDescriptorsClass; |
| 125 } else if (raw_class == exception_handlers_class()) { | 129 } else if (raw_class == exception_handlers_class()) { |
| 126 return kExceptionHandlersClass; | 130 return kExceptionHandlersClass; |
| 127 } else if (raw_class == context_class()) { | 131 } else if (raw_class == context_class()) { |
| 128 return kContextClass; | 132 return kContextClass; |
| 129 } else if (raw_class == context_scope_class()) { | 133 } else if (raw_class == context_scope_class()) { |
| 130 return kContextScopeClass; | 134 return kContextScopeClass; |
| 131 } else if (raw_class == api_error_class()) { | 135 } else if (raw_class == api_error_class()) { |
| 132 return kApiErrorClass; | 136 return kApiErrorClass; |
| 137 } else if (raw_class == language_error_class()) { |
| 138 return kLanguageErrorClass; |
| 139 } else if (raw_class == unhandled_exception_class()) { |
| 140 return kUnhandledExceptionClass; |
| 141 } else if (raw_class == unwind_error_class()) { |
| 142 return kUnwindErrorClass; |
| 133 } | 143 } |
| 134 return kInvalidIndex; | 144 return kInvalidIndex; |
| 135 } | 145 } |
| 136 | 146 |
| 137 | 147 |
| 138 RawClass* Object::GetSingletonClass(int index) { | 148 RawClass* Object::GetSingletonClass(int index) { |
| 139 switch (index) { | 149 switch (index) { |
| 140 case kClassClass: return class_class(); | 150 case kClassClass: return class_class(); |
| 141 case kNullClass: return null_class(); | 151 case kNullClass: return null_class(); |
| 142 case kDynamicClass: return dynamic_class(); | 152 case kDynamicClass: return dynamic_class(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 156 case kLibraryClass: return library_class(); | 166 case kLibraryClass: return library_class(); |
| 157 case kLibraryPrefixClass: return library_prefix_class(); | 167 case kLibraryPrefixClass: return library_prefix_class(); |
| 158 case kCodeClass: return code_class(); | 168 case kCodeClass: return code_class(); |
| 159 case kInstructionsClass: return instructions_class(); | 169 case kInstructionsClass: return instructions_class(); |
| 160 case kPcDescriptorsClass: return pc_descriptors_class(); | 170 case kPcDescriptorsClass: return pc_descriptors_class(); |
| 161 case kLocalVarDescriptorsClass: return var_descriptors_class(); | 171 case kLocalVarDescriptorsClass: return var_descriptors_class(); |
| 162 case kExceptionHandlersClass: return exception_handlers_class(); | 172 case kExceptionHandlersClass: return exception_handlers_class(); |
| 163 case kContextClass: return context_class(); | 173 case kContextClass: return context_class(); |
| 164 case kContextScopeClass: return context_scope_class(); | 174 case kContextScopeClass: return context_scope_class(); |
| 165 case kApiErrorClass: return api_error_class(); | 175 case kApiErrorClass: return api_error_class(); |
| 176 case kLanguageErrorClass: return language_error_class(); |
| 177 case kUnhandledExceptionClass: return unhandled_exception_class(); |
| 178 case kUnwindErrorClass: return unwind_error_class(); |
| 166 default: break; | 179 default: break; |
| 167 } | 180 } |
| 168 UNREACHABLE(); | 181 UNREACHABLE(); |
| 169 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. | 182 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. |
| 170 } | 183 } |
| 171 | 184 |
| 172 | 185 |
| 173 const char* Object::GetSingletonClassName(int index) { | 186 const char* Object::GetSingletonClassName(int index) { |
| 174 switch (index) { | 187 switch (index) { |
| 175 case kClassClass: return "Class"; | 188 case kClassClass: return "Class"; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 190 case kLibraryClass: return "Library"; | 203 case kLibraryClass: return "Library"; |
| 191 case kLibraryPrefixClass: return "LibraryPrefix"; | 204 case kLibraryPrefixClass: return "LibraryPrefix"; |
| 192 case kCodeClass: return "Code"; | 205 case kCodeClass: return "Code"; |
| 193 case kInstructionsClass: return "Instructions"; | 206 case kInstructionsClass: return "Instructions"; |
| 194 case kPcDescriptorsClass: return "PcDescriptors"; | 207 case kPcDescriptorsClass: return "PcDescriptors"; |
| 195 case kLocalVarDescriptorsClass: return "LocalVarDescriptors"; | 208 case kLocalVarDescriptorsClass: return "LocalVarDescriptors"; |
| 196 case kExceptionHandlersClass: return "ExceptionHandlers"; | 209 case kExceptionHandlersClass: return "ExceptionHandlers"; |
| 197 case kContextClass: return "Context"; | 210 case kContextClass: return "Context"; |
| 198 case kContextScopeClass: return "ContextScope"; | 211 case kContextScopeClass: return "ContextScope"; |
| 199 case kApiErrorClass: return "ApiError"; | 212 case kApiErrorClass: return "ApiError"; |
| 213 case kLanguageErrorClass: return "LanguageError"; |
| 214 case kUnhandledExceptionClass: return "UnhandledException"; |
| 215 case kUnwindErrorClass: return "UnwindError"; |
| 200 default: break; | 216 default: break; |
| 201 } | 217 } |
| 202 UNREACHABLE(); | 218 UNREACHABLE(); |
| 203 return NULL; | 219 return NULL; |
| 204 } | 220 } |
| 205 | 221 |
| 206 | 222 |
| 207 void Object::InitOnce() { | 223 void Object::InitOnce() { |
| 208 // TODO(iposva): NoGCScope needs to be added here. | 224 // TODO(iposva): NoGCScope needs to be added here. |
| 209 ASSERT(class_class() == null_); | 225 ASSERT(class_class() == null_); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 | 352 |
| 337 cls = Class::New<Context>(); | 353 cls = Class::New<Context>(); |
| 338 context_class_ = cls.raw(); | 354 context_class_ = cls.raw(); |
| 339 | 355 |
| 340 cls = Class::New<ContextScope>(); | 356 cls = Class::New<ContextScope>(); |
| 341 context_scope_class_ = cls.raw(); | 357 context_scope_class_ = cls.raw(); |
| 342 | 358 |
| 343 cls = Class::New<ApiError>(); | 359 cls = Class::New<ApiError>(); |
| 344 api_error_class_ = cls.raw(); | 360 api_error_class_ = cls.raw(); |
| 345 | 361 |
| 362 cls = Class::New<LanguageError>(); |
| 363 language_error_class_ = cls.raw(); |
| 364 |
| 365 cls = Class::New<UnhandledException>(); |
| 366 unhandled_exception_class_ = cls.raw(); |
| 367 |
| 368 cls = Class::New<UnwindError>(); |
| 369 unwind_error_class_ = cls.raw(); |
| 370 |
| 346 ASSERT(class_class() != null_); | 371 ASSERT(class_class() != null_); |
| 347 } | 372 } |
| 348 | 373 |
| 349 | 374 |
| 350 RawClass* Object::CreateAndRegisterInterface(const char* cname, | 375 RawClass* Object::CreateAndRegisterInterface(const char* cname, |
| 351 const Script& script, | 376 const Script& script, |
| 352 const Library& lib) { | 377 const Library& lib) { |
| 353 const String& name = String::Handle(String::NewSymbol(cname)); | 378 const String& name = String::Handle(String::NewSymbol(cname)); |
| 354 const Class& cls = Class::Handle(Class::NewInterface(name, script)); | 379 const Class& cls = Class::Handle(Class::NewInterface(name, script)); |
| 355 lib.AddClass(cls); | 380 lib.AddClass(cls); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 cls = Class::New<ExternalTwoByteString>(); | 511 cls = Class::New<ExternalTwoByteString>(); |
| 487 object_store->set_external_two_byte_string_class(cls); | 512 object_store->set_external_two_byte_string_class(cls); |
| 488 RegisterClass(cls, "ExternalTwoByteString", impl_script, core_impl_lib); | 513 RegisterClass(cls, "ExternalTwoByteString", impl_script, core_impl_lib); |
| 489 pending_classes.Add(&Class::ZoneHandle(cls.raw())); | 514 pending_classes.Add(&Class::ZoneHandle(cls.raw())); |
| 490 | 515 |
| 491 cls = Class::New<ExternalFourByteString>(); | 516 cls = Class::New<ExternalFourByteString>(); |
| 492 object_store->set_external_four_byte_string_class(cls); | 517 object_store->set_external_four_byte_string_class(cls); |
| 493 RegisterClass(cls, "ExternalFourByteString", impl_script, core_impl_lib); | 518 RegisterClass(cls, "ExternalFourByteString", impl_script, core_impl_lib); |
| 494 pending_classes.Add(&Class::ZoneHandle(cls.raw())); | 519 pending_classes.Add(&Class::ZoneHandle(cls.raw())); |
| 495 | 520 |
| 496 cls = Class::New<UnhandledException>(); | |
| 497 object_store->set_unhandled_exception_class(cls); | |
| 498 RegisterClass(cls, "UnhandledException", impl_script, core_impl_lib); | |
| 499 pending_classes.Add(&Class::ZoneHandle(cls.raw())); | |
| 500 | |
| 501 cls = Class::New<Stacktrace>(); | 521 cls = Class::New<Stacktrace>(); |
| 502 object_store->set_stacktrace_class(cls); | 522 object_store->set_stacktrace_class(cls); |
| 503 RegisterClass(cls, "Stacktrace", impl_script, core_impl_lib); | 523 RegisterClass(cls, "Stacktrace", impl_script, core_impl_lib); |
| 504 pending_classes.Add(&Class::ZoneHandle(cls.raw())); | 524 pending_classes.Add(&Class::ZoneHandle(cls.raw())); |
| 505 // Super type set below, after Object is allocated. | 525 // Super type set below, after Object is allocated. |
| 506 | 526 |
| 507 cls = Class::New<JSRegExp>(); | 527 cls = Class::New<JSRegExp>(); |
| 508 object_store->set_jsregexp_class(cls); | 528 object_store->set_jsregexp_class(cls); |
| 509 RegisterClass(cls, "JSSyntaxRegExp", impl_script, core_impl_lib); | 529 RegisterClass(cls, "JSSyntaxRegExp", impl_script, core_impl_lib); |
| 510 pending_classes.Add(&Class::ZoneHandle(cls.raw())); | 530 pending_classes.Add(&Class::ZoneHandle(cls.raw())); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 | 693 |
| 674 cls = Class::New<ExternalTwoByteString>(); | 694 cls = Class::New<ExternalTwoByteString>(); |
| 675 object_store->set_external_two_byte_string_class(cls); | 695 object_store->set_external_two_byte_string_class(cls); |
| 676 | 696 |
| 677 cls = Class::New<ExternalFourByteString>(); | 697 cls = Class::New<ExternalFourByteString>(); |
| 678 object_store->set_external_four_byte_string_class(cls); | 698 object_store->set_external_four_byte_string_class(cls); |
| 679 | 699 |
| 680 cls = Class::New<Bool>(); | 700 cls = Class::New<Bool>(); |
| 681 object_store->set_bool_class(cls); | 701 object_store->set_bool_class(cls); |
| 682 | 702 |
| 683 cls = Class::New<UnhandledException>(); | |
| 684 object_store->set_unhandled_exception_class(cls); | |
| 685 | |
| 686 cls = Class::New<Stacktrace>(); | 703 cls = Class::New<Stacktrace>(); |
| 687 object_store->set_stacktrace_class(cls); | 704 object_store->set_stacktrace_class(cls); |
| 688 | 705 |
| 689 cls = Class::New<JSRegExp>(); | 706 cls = Class::New<JSRegExp>(); |
| 690 object_store->set_jsregexp_class(cls); | 707 object_store->set_jsregexp_class(cls); |
| 691 | 708 |
| 692 // Allocate pre-initialized values. | 709 // Allocate pre-initialized values. |
| 693 Bool& bool_value = Bool::Handle(); | 710 Bool& bool_value = Bool::Handle(); |
| 694 bool_value = Bool::New(true); | 711 bool_value = Bool::New(true); |
| 695 object_store->set_true_value(bool_value); | 712 object_store->set_true_value(bool_value); |
| (...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1157 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); | 1174 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); |
| 1158 new_canonical_types.SetAt(0, signature_type); | 1175 new_canonical_types.SetAt(0, signature_type); |
| 1159 result.set_canonical_types(new_canonical_types); | 1176 result.set_canonical_types(new_canonical_types); |
| 1160 return result.raw(); | 1177 return result.raw(); |
| 1161 } | 1178 } |
| 1162 | 1179 |
| 1163 | 1180 |
| 1164 RawClass* Class::GetClass(ObjectKind kind) { | 1181 RawClass* Class::GetClass(ObjectKind kind) { |
| 1165 ObjectStore* object_store = Isolate::Current()->object_store(); | 1182 ObjectStore* object_store = Isolate::Current()->object_store(); |
| 1166 switch (kind) { | 1183 switch (kind) { |
| 1167 case kUnhandledException: | |
| 1168 ASSERT(object_store->unhandled_exception_class() != Class::null()); | |
| 1169 return object_store->unhandled_exception_class(); | |
| 1170 case kSmi: | 1184 case kSmi: |
| 1171 ASSERT(object_store->smi_class() != Class::null()); | 1185 ASSERT(object_store->smi_class() != Class::null()); |
| 1172 return object_store->smi_class(); | 1186 return object_store->smi_class(); |
| 1173 case kMint: | 1187 case kMint: |
| 1174 ASSERT(object_store->mint_class() != Class::null()); | 1188 ASSERT(object_store->mint_class() != Class::null()); |
| 1175 return object_store->mint_class(); | 1189 return object_store->mint_class(); |
| 1176 case kBigint: | 1190 case kBigint: |
| 1177 ASSERT(object_store->bigint_class() != Class::null()); | 1191 ASSERT(object_store->bigint_class() != Class::null()); |
| 1178 return object_store->bigint_class(); | 1192 return object_store->bigint_class(); |
| 1179 case kDouble: | 1193 case kDouble: |
| (...skipping 3835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5015 intptr_t context_level) const { | 5029 intptr_t context_level) const { |
| 5016 VariableDescAddr(scope_index)->context_level = Smi::New(context_level); | 5030 VariableDescAddr(scope_index)->context_level = Smi::New(context_level); |
| 5017 } | 5031 } |
| 5018 | 5032 |
| 5019 | 5033 |
| 5020 const char* ContextScope::ToCString() const { | 5034 const char* ContextScope::ToCString() const { |
| 5021 return "ContextScope"; | 5035 return "ContextScope"; |
| 5022 } | 5036 } |
| 5023 | 5037 |
| 5024 | 5038 |
| 5039 const char* Error::ToCString() const { |
| 5040 // Error is an abstract class. We should never reach here. |
| 5041 UNREACHABLE(); |
| 5042 return "Error"; |
| 5043 } |
| 5044 |
| 5045 |
| 5046 RawApiError* ApiError::New(const String& message, Heap::Space space) { |
| 5047 const Class& cls = Class::Handle(Object::api_error_class()); |
| 5048 ApiError& result = ApiError::Handle(); |
| 5049 { |
| 5050 RawObject* raw = Object::Allocate(cls, |
| 5051 ApiError::InstanceSize(), |
| 5052 space); |
| 5053 NoGCScope no_gc; |
| 5054 result ^= raw; |
| 5055 } |
| 5056 result.set_message(message); |
| 5057 return result.raw(); |
| 5058 } |
| 5059 |
| 5060 |
| 5061 void ApiError::set_message(const String& message) const { |
| 5062 StorePointer(&raw_ptr()->message_, message.raw()); |
| 5063 } |
| 5064 |
| 5065 |
| 5066 const char* ApiError::ToCString() const { |
| 5067 return "ApiError"; |
| 5068 } |
| 5069 |
| 5070 |
| 5071 RawLanguageError* LanguageError::New(const String& message, Heap::Space space) { |
| 5072 const Class& cls = Class::Handle(Object::language_error_class()); |
| 5073 LanguageError& result = LanguageError::Handle(); |
| 5074 { |
| 5075 RawObject* raw = Object::Allocate(cls, |
| 5076 LanguageError::InstanceSize(), |
| 5077 space); |
| 5078 NoGCScope no_gc; |
| 5079 result ^= raw; |
| 5080 } |
| 5081 result.set_message(message); |
| 5082 return result.raw(); |
| 5083 } |
| 5084 |
| 5085 |
| 5086 void LanguageError::set_message(const String& message) const { |
| 5087 StorePointer(&raw_ptr()->message_, message.raw()); |
| 5088 } |
| 5089 |
| 5090 |
| 5091 const char* LanguageError::ToCString() const { |
| 5092 return "LanguageError"; |
| 5093 } |
| 5094 |
| 5095 |
| 5025 RawUnhandledException* UnhandledException::New(const Instance& exception, | 5096 RawUnhandledException* UnhandledException::New(const Instance& exception, |
| 5026 const Instance& stacktrace, | 5097 const Instance& stacktrace, |
| 5027 Heap::Space space) { | 5098 Heap::Space space) { |
| 5028 Isolate* isolate = Isolate::Current(); | 5099 const Class& cls = Class::Handle(Object::unhandled_exception_class()); |
| 5029 const Class& cls = Class::Handle( | |
| 5030 isolate->object_store()->unhandled_exception_class()); | |
| 5031 UnhandledException& result = UnhandledException::Handle(); | 5100 UnhandledException& result = UnhandledException::Handle(); |
| 5032 { | 5101 { |
| 5033 RawObject* raw = Object::Allocate(cls, | 5102 RawObject* raw = Object::Allocate(cls, |
| 5034 UnhandledException::InstanceSize(), | 5103 UnhandledException::InstanceSize(), |
| 5035 space); | 5104 space); |
| 5036 NoGCScope no_gc; | 5105 NoGCScope no_gc; |
| 5037 result ^= raw; | 5106 result ^= raw; |
| 5038 } | 5107 } |
| 5039 result.set_exception(exception); | 5108 result.set_exception(exception); |
| 5040 result.set_stacktrace(stacktrace); | 5109 result.set_stacktrace(stacktrace); |
| 5041 return result.raw(); | 5110 return result.raw(); |
| 5042 } | 5111 } |
| 5043 | 5112 |
| 5044 | 5113 |
| 5045 void UnhandledException::set_exception(const Instance& exception) const { | 5114 void UnhandledException::set_exception(const Instance& exception) const { |
| 5046 StorePointer(&raw_ptr()->exception_, exception.raw()); | 5115 StorePointer(&raw_ptr()->exception_, exception.raw()); |
| 5047 } | 5116 } |
| 5048 | 5117 |
| 5049 | 5118 |
| 5050 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { | 5119 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { |
| 5051 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); | 5120 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); |
| 5052 } | 5121 } |
| 5053 | 5122 |
| 5054 | 5123 |
| 5055 const char* UnhandledException::ToCString() const { | 5124 const char* UnhandledException::ToCString() const { |
| 5056 return "UnhandledException"; | 5125 return "UnhandledException"; |
| 5057 } | 5126 } |
| 5058 | 5127 |
| 5059 | 5128 |
| 5060 RawApiError* ApiError::New(const String& message, Heap::Space space) { | 5129 RawUnwindError* UnwindError::New(const String& message, Heap::Space space) { |
| 5061 const Class& cls = Class::Handle(Object::api_error_class()); | 5130 const Class& cls = Class::Handle(Object::unwind_error_class()); |
| 5062 ApiError& result = ApiError::Handle(); | 5131 UnwindError& result = UnwindError::Handle(); |
| 5063 { | 5132 { |
| 5064 RawObject* raw = Object::Allocate(cls, | 5133 RawObject* raw = Object::Allocate(cls, |
| 5065 ApiError::InstanceSize(), | 5134 UnwindError::InstanceSize(), |
| 5066 space); | 5135 space); |
| 5067 NoGCScope no_gc; | 5136 NoGCScope no_gc; |
| 5068 result ^= raw; | 5137 result ^= raw; |
| 5069 } | 5138 } |
| 5070 result.set_data(message); | 5139 result.set_message(message); |
| 5071 return result.raw(); | 5140 return result.raw(); |
| 5072 } | 5141 } |
| 5073 | 5142 |
| 5074 | 5143 |
| 5075 RawApiError* ApiError::New(const UnhandledException& exception, | 5144 void UnwindError::set_message(const String& message) const { |
| 5076 Heap::Space space) { | 5145 StorePointer(&raw_ptr()->message_, message.raw()); |
| 5077 const Class& cls = Class::Handle(Object::api_error_class()); | |
| 5078 ApiError& result = ApiError::Handle(); | |
| 5079 { | |
| 5080 RawObject* raw = Object::Allocate(cls, | |
| 5081 ApiError::InstanceSize(), | |
| 5082 space); | |
| 5083 NoGCScope no_gc; | |
| 5084 result ^= raw; | |
| 5085 } | |
| 5086 result.set_data(exception); | |
| 5087 return result.raw(); | |
| 5088 } | 5146 } |
| 5089 | 5147 |
| 5090 | 5148 |
| 5091 void ApiError::set_data(const Object& data) const { | 5149 const char* UnwindError::ToCString() const { |
| 5092 StorePointer(&raw_ptr()->data_, data.raw()); | 5150 return "UnwindError"; |
| 5093 } | |
| 5094 | |
| 5095 | |
| 5096 const char* ApiError::ToCString() const { | |
| 5097 return "ApiError"; | |
| 5098 } | 5151 } |
| 5099 | 5152 |
| 5100 | 5153 |
| 5101 bool Instance::Equals(const Instance& other) const { | 5154 bool Instance::Equals(const Instance& other) const { |
| 5102 if (this->raw() == other.raw()) { | 5155 if (this->raw() == other.raw()) { |
| 5103 return true; // "===". | 5156 return true; // "===". |
| 5104 } | 5157 } |
| 5105 | 5158 |
| 5106 if (other.IsNull() || (this->clazz() != other.clazz())) { | 5159 if (other.IsNull() || (this->clazz() != other.clazz())) { |
| 5107 return false; | 5160 return false; |
| (...skipping 2393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7501 const String& str = String::Handle(pattern()); | 7554 const String& str = String::Handle(pattern()); |
| 7502 const char* format = "JSRegExp: pattern=%s flags=%s"; | 7555 const char* format = "JSRegExp: pattern=%s flags=%s"; |
| 7503 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 7556 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
| 7504 char* chars = reinterpret_cast<char*>( | 7557 char* chars = reinterpret_cast<char*>( |
| 7505 Isolate::Current()->current_zone()->Allocate(len + 1)); | 7558 Isolate::Current()->current_zone()->Allocate(len + 1)); |
| 7506 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 7559 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
| 7507 return chars; | 7560 return chars; |
| 7508 } | 7561 } |
| 7509 | 7562 |
| 7510 } // namespace dart | 7563 } // namespace dart |
| OLD | NEW |