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

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

Issue 8334009: Use the distinguished class, ApiFailure, to signal when a Dart_Result is (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years, 2 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/raw_object.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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698