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

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
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"
11 #include "vm/code_generator.h" 11 #include "vm/code_generator.h"
12 #include "vm/code_index_table.h" 12 #include "vm/code_index_table.h"
13 #include "vm/code_patcher.h" 13 #include "vm/code_patcher.h"
14 #include "vm/compiler.h" 14 #include "vm/compiler.h"
15 #include "vm/compiler_stats.h" 15 #include "vm/compiler_stats.h"
16 #include "vm/class_finalizer.h" 16 #include "vm/class_finalizer.h"
17 #include "vm/dart.h" 17 #include "vm/dart.h"
18 #include "vm/dart_api_impl.h"
Ivan Posva 2011/10/18 20:44:28 Is this still needed?
turnidge 2011/10/18 22:03:12 Removed.
18 #include "vm/debuginfo.h" 19 #include "vm/debuginfo.h"
19 #include "vm/growable_array.h" 20 #include "vm/growable_array.h"
20 #include "vm/heap.h" 21 #include "vm/heap.h"
21 #include "vm/ic_stubs.h" 22 #include "vm/ic_stubs.h"
22 #include "vm/object_store.h" 23 #include "vm/object_store.h"
23 #include "vm/parser.h" 24 #include "vm/parser.h"
24 #include "vm/runtime_entry.h" 25 #include "vm/runtime_entry.h"
25 #include "vm/scopes.h" 26 #include "vm/scopes.h"
26 #include "vm/timer.h" 27 #include "vm/timer.h"
27 #include "vm/unicode.h" 28 #include "vm/unicode.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 68 RawClass* Object::script_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
68 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 69 RawClass* Object::library_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
69 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 70 RawClass* Object::library_prefix_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
70 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 71 RawClass* Object::code_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
71 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 72 RawClass* Object::instructions_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
72 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 73 RawClass* Object::pc_descriptors_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
73 RawClass* Object::exception_handlers_class_ = 74 RawClass* Object::exception_handlers_class_ =
74 reinterpret_cast<RawClass*>(RAW_NULL); 75 reinterpret_cast<RawClass*>(RAW_NULL);
75 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 76 RawClass* Object::context_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
76 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_failure_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
77 #undef RAW_NULL 79 #undef RAW_NULL
78 80
79 int Object::GetSingletonClassIndex(const RawClass* raw_class) { 81 int Object::GetSingletonClassIndex(const RawClass* raw_class) {
80 ASSERT(raw_class->IsHeapObject()); 82 ASSERT(raw_class->IsHeapObject());
81 if (raw_class == class_class()) { 83 if (raw_class == class_class()) {
82 return kClassClass; 84 return kClassClass;
83 } else if (raw_class == null_class()) { 85 } else if (raw_class == null_class()) {
84 return kNullClass; 86 return kNullClass;
85 } else if (raw_class == var_class()) { 87 } else if (raw_class == var_class()) {
86 return kVarClass; 88 return kVarClass;
(...skipping 30 matching lines...) Expand all
117 } else if (raw_class == instructions_class()) { 119 } else if (raw_class == instructions_class()) {
118 return kInstructionsClass; 120 return kInstructionsClass;
119 } else if (raw_class == pc_descriptors_class()) { 121 } else if (raw_class == pc_descriptors_class()) {
120 return kPcDescriptorsClass; 122 return kPcDescriptorsClass;
121 } else if (raw_class == exception_handlers_class()) { 123 } else if (raw_class == exception_handlers_class()) {
122 return kExceptionHandlersClass; 124 return kExceptionHandlersClass;
123 } else if (raw_class == context_class()) { 125 } else if (raw_class == context_class()) {
124 return kContextClass; 126 return kContextClass;
125 } else if (raw_class == context_scope_class()) { 127 } else if (raw_class == context_scope_class()) {
126 return kContextScopeClass; 128 return kContextScopeClass;
129 } else if (raw_class == api_failure_class()) {
130 return kApiFailureClass;
127 } 131 }
128 return kInvalidIndex; 132 return kInvalidIndex;
129 } 133 }
130 134
131 135
132 RawClass* Object::GetSingletonClass(int index) { 136 RawClass* Object::GetSingletonClass(int index) {
133 switch (index) { 137 switch (index) {
134 case kClassClass: return class_class(); 138 case kClassClass: return class_class();
135 case kNullClass: return null_class(); 139 case kNullClass: return null_class();
136 case kVarClass: return var_class(); 140 case kVarClass: return var_class();
(...skipping 11 matching lines...) Expand all
148 case kTokenStreamClass: return token_stream_class(); 152 case kTokenStreamClass: return token_stream_class();
149 case kScriptClass: return script_class(); 153 case kScriptClass: return script_class();
150 case kLibraryClass: return library_class(); 154 case kLibraryClass: return library_class();
151 case kLibraryPrefixClass: return library_prefix_class(); 155 case kLibraryPrefixClass: return library_prefix_class();
152 case kCodeClass: return code_class(); 156 case kCodeClass: return code_class();
153 case kInstructionsClass: return instructions_class(); 157 case kInstructionsClass: return instructions_class();
154 case kPcDescriptorsClass: return pc_descriptors_class(); 158 case kPcDescriptorsClass: return pc_descriptors_class();
155 case kExceptionHandlersClass: return exception_handlers_class(); 159 case kExceptionHandlersClass: return exception_handlers_class();
156 case kContextClass: return context_class(); 160 case kContextClass: return context_class();
157 case kContextScopeClass: return context_scope_class(); 161 case kContextScopeClass: return context_scope_class();
162 case kApiFailureClass: return api_failure_class();
158 default: break; 163 default: break;
159 } 164 }
160 UNREACHABLE(); 165 UNREACHABLE();
161 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. 166 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL.
162 } 167 }
163 168
164 169
165 const char* Object::GetSingletonClassName(int index) { 170 const char* Object::GetSingletonClassName(int index) {
166 switch (index) { 171 switch (index) {
167 case kClassClass: return "Class"; 172 case kClassClass: return "Class";
(...skipping 12 matching lines...) Expand all
180 case kTokenStreamClass: return "TokenStream"; 185 case kTokenStreamClass: return "TokenStream";
181 case kScriptClass: return "Script"; 186 case kScriptClass: return "Script";
182 case kLibraryClass: return "Library"; 187 case kLibraryClass: return "Library";
183 case kLibraryPrefixClass: return "LibraryPrefix"; 188 case kLibraryPrefixClass: return "LibraryPrefix";
184 case kCodeClass: return "Code"; 189 case kCodeClass: return "Code";
185 case kInstructionsClass: return "Instructions"; 190 case kInstructionsClass: return "Instructions";
186 case kPcDescriptorsClass: return "PcDescriptors"; 191 case kPcDescriptorsClass: return "PcDescriptors";
187 case kExceptionHandlersClass: return "ExceptionHandlers"; 192 case kExceptionHandlersClass: return "ExceptionHandlers";
188 case kContextClass: return "Context"; 193 case kContextClass: return "Context";
189 case kContextScopeClass: return "ContextScope"; 194 case kContextScopeClass: return "ContextScope";
195 case kApiFailureClass: return "ApiFailure";
190 default: break; 196 default: break;
191 } 197 }
192 UNREACHABLE(); 198 UNREACHABLE();
193 return NULL; 199 return NULL;
194 } 200 }
195 201
196 202
197 void Object::InitOnce() { 203 void Object::InitOnce() {
198 // TODO(iposva): NoGCScope needs to be added here. 204 // TODO(iposva): NoGCScope needs to be added here.
199 ASSERT(class_class() == null_); 205 ASSERT(class_class() == null_);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 316
311 cls = Class::New<ExceptionHandlers>(); 317 cls = Class::New<ExceptionHandlers>();
312 exception_handlers_class_ = cls.raw(); 318 exception_handlers_class_ = cls.raw();
313 319
314 cls = Class::New<Context>(); 320 cls = Class::New<Context>();
315 context_class_ = cls.raw(); 321 context_class_ = cls.raw();
316 322
317 cls = Class::New<ContextScope>(); 323 cls = Class::New<ContextScope>();
318 context_scope_class_ = cls.raw(); 324 context_scope_class_ = cls.raw();
319 325
326 cls = Class::New<ApiFailure>();
327 api_failure_class_ = cls.raw();
328
320 ASSERT(class_class() != null_); 329 ASSERT(class_class() != null_);
321 } 330 }
322 331
323 332
324 void Object::Init(Isolate* isolate) { 333 void Object::Init(Isolate* isolate) {
325 TIMERSCOPE(time_bootstrap); 334 TIMERSCOPE(time_bootstrap);
326 ObjectStore* object_store = isolate->object_store(); 335 ObjectStore* object_store = isolate->object_store();
327 336
328 Class& cls = Class::Handle(); 337 Class& cls = Class::Handle();
329 Type& type = Type::Handle(); 338 Type& type = Type::Handle();
(...skipping 3987 matching lines...) Expand 10 before | Expand all | Expand 10 after
4317 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { 4326 void UnhandledException::set_stacktrace(const Instance& stacktrace) const {
4318 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); 4327 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw());
4319 } 4328 }
4320 4329
4321 4330
4322 const char* UnhandledException::ToCString() const { 4331 const char* UnhandledException::ToCString() const {
4323 return "UnhandledException"; 4332 return "UnhandledException";
4324 } 4333 }
4325 4334
4326 4335
4336 RawApiFailure* ApiFailure::New(const String& message,
4337 Heap::Space space) {
Ivan Posva 2011/10/18 20:44:28 Is a new line needed here?
turnidge 2011/10/18 22:03:12 Removed.
4338 const Class& cls = Class::Handle(Object::api_failure_class());
4339 ApiFailure& result = ApiFailure::Handle();
4340 {
4341 RawObject* raw = Object::Allocate(cls,
4342 ApiFailure::InstanceSize(),
4343 space);
4344 NoGCScope no_gc;
4345 result ^= raw;
4346 }
4347 result.set_message(message);
4348 return result.raw();
4349 }
4350
4351
4352 void ApiFailure::set_message(const String& message) const {
4353 StorePointer(&raw_ptr()->message_, message.raw());
4354 }
4355
4356
4357 const char* ApiFailure::ToCString() const {
4358 return "ApiFailure";
4359 }
4360
Ivan Posva 2011/10/18 20:44:28 new line
turnidge 2011/10/18 22:03:12 Done.
4327 bool Instance::Equals(const Instance& other) const { 4361 bool Instance::Equals(const Instance& other) const {
4328 if (this->raw() == other.raw()) { 4362 if (this->raw() == other.raw()) {
4329 return true; // "===". 4363 return true; // "===".
4330 } 4364 }
4331 4365
4332 if (other.IsNull() || (this->clazz() != other.clazz())) { 4366 if (other.IsNull() || (this->clazz() != other.clazz())) {
4333 return false; 4367 return false;
4334 } 4368 }
4335 4369
4336 { 4370 {
(...skipping 2021 matching lines...) Expand 10 before | Expand all | Expand 10 after
6358 const String& str = String::Handle(pattern()); 6392 const String& str = String::Handle(pattern());
6359 const char* format = "JSRegExp: pattern=%s flags=%s"; 6393 const char* format = "JSRegExp: pattern=%s flags=%s";
6360 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 6394 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
6361 char* chars = reinterpret_cast<char*>( 6395 char* chars = reinterpret_cast<char*>(
6362 Isolate::Current()->current_zone()->Allocate(len + 1)); 6396 Isolate::Current()->current_zone()->Allocate(len + 1));
6363 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 6397 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
6364 return chars; 6398 return chars;
6365 } 6399 }
6366 6400
6367 } // namespace dart 6401 } // namespace dart
OLDNEW
« runtime/vm/dart_api_impl.cc ('K') | « 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