Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: runtime/vm/object.cc

Issue 9166016: Introduce the Error object class in the vm. It represents all of the (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_store.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698