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

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

Issue 9169102: Add Dart_PropagateError. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Removed some unneeded includes 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/bigint_operations.h" 9 #include "vm/bigint_operations.h"
10 #include "vm/bootstrap.h" 10 #include "vm/bootstrap.h"
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 const char* cname, 387 const char* cname,
388 const Script& script, 388 const Script& script,
389 const Library& lib) { 389 const Library& lib) {
390 const String& name = String::Handle(String::NewSymbol(cname)); 390 const String& name = String::Handle(String::NewSymbol(cname));
391 cls.set_name(name); 391 cls.set_name(name);
392 cls.set_script(script); 392 cls.set_script(script);
393 lib.AddClass(cls); 393 lib.AddClass(cls);
394 } 394 }
395 395
396 396
397 void Object::Init(Isolate* isolate) { 397 RawError* Object::Init(Isolate* isolate) {
398 TIMERSCOPE(time_bootstrap); 398 TIMERSCOPE(time_bootstrap);
399 ObjectStore* object_store = isolate->object_store(); 399 ObjectStore* object_store = isolate->object_store();
400 400
401 Class& cls = Class::Handle(); 401 Class& cls = Class::Handle();
402 Type& type = Type::Handle(); 402 Type& type = Type::Handle();
403 Array& array = Array::Handle(); 403 Array& array = Array::Handle();
404 404
405 // All RawArray fields will be initialized to an empty array, therefore 405 // All RawArray fields will be initialized to an empty array, therefore
406 // initialize array class first. 406 // initialize array class first.
407 cls = Class::New<Array>(); 407 cls = Class::New<Array>();
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 bool_value = Bool::New(false); 622 bool_value = Bool::New(false);
623 object_store->set_false_value(bool_value); 623 object_store->set_false_value(bool_value);
624 624
625 // Setup some default native field classes which can be extended for 625 // Setup some default native field classes which can be extended for
626 // specifying native fields in dart classes. 626 // specifying native fields in dart classes.
627 Library::InitNativeWrappersLibrary(isolate); 627 Library::InitNativeWrappersLibrary(isolate);
628 ASSERT(isolate->object_store()->native_wrappers_library() != Library::null()); 628 ASSERT(isolate->object_store()->native_wrappers_library() != Library::null());
629 629
630 // Finish the initialization by compiling the bootstrap scripts containing the 630 // Finish the initialization by compiling the bootstrap scripts containing the
631 // base interfaces and the implementation of the internal classes. 631 // base interfaces and the implementation of the internal classes.
632 Bootstrap::Compile(core_lib, script); 632 Error& error = Error::Handle();
633 Bootstrap::Compile(core_impl_lib, impl_script); 633 error = Bootstrap::Compile(core_lib, script);
634 if (!error.IsNull()) {
635 return error.raw();
636 }
637 error = Bootstrap::Compile(core_impl_lib, impl_script);
638 if (!error.IsNull()) {
639 return error.raw();
640 }
634 641
635 Bootstrap::SetupNativeResolver(); 642 Bootstrap::SetupNativeResolver();
636 643
637 // Remove the Object superclass cycle by setting the super type to null (not 644 // Remove the Object superclass cycle by setting the super type to null (not
638 // to the type of null). 645 // to the type of null).
639 cls = object_store->object_class(); 646 cls = object_store->object_class();
640 cls.set_super_type(Type::Handle()); 647 cls.set_super_type(Type::Handle());
641 648
642 ClassFinalizer::VerifyBootstrapClasses(); 649 ClassFinalizer::VerifyBootstrapClasses();
650 return Error::null();
643 } 651 }
644 652
645 653
646 void Object::InitFromSnapshot(Isolate* isolate) { 654 void Object::InitFromSnapshot(Isolate* isolate) {
647 TIMERSCOPE(time_bootstrap); 655 TIMERSCOPE(time_bootstrap);
648 ObjectStore* object_store = isolate->object_store(); 656 ObjectStore* object_store = isolate->object_store();
649 657
650 Class& cls = Class::Handle(); 658 Class& cls = Class::Handle();
651 659
652 // Set up empty classes in the object store, these will get 660 // Set up empty classes in the object store, these will get
(...skipping 3807 matching lines...) Expand 10 before | Expand all | Expand 10 after
4460 ASSERT(value.IsSymbol()); 4468 ASSERT(value.IsSymbol());
4461 StorePointer(&raw_ptr()->name_, value.raw()); 4469 StorePointer(&raw_ptr()->name_, value.raw());
4462 } 4470 }
4463 4471
4464 4472
4465 void LibraryPrefix::set_library(const Library& value) const { 4473 void LibraryPrefix::set_library(const Library& value) const {
4466 StorePointer(&raw_ptr()->library_, value.raw()); 4474 StorePointer(&raw_ptr()->library_, value.raw());
4467 } 4475 }
4468 4476
4469 4477
4470 void Library::CompileAll() { 4478 RawError* Library::CompileAll() {
4479 Error& error = Error::Handle();
4471 Library& lib = Library::Handle( 4480 Library& lib = Library::Handle(
4472 Isolate::Current()->object_store()->registered_libraries()); 4481 Isolate::Current()->object_store()->registered_libraries());
4473 Class& cls = Class::Handle(); 4482 Class& cls = Class::Handle();
4474 while (!lib.IsNull()) { 4483 while (!lib.IsNull()) {
4475 ClassDictionaryIterator it(lib); 4484 ClassDictionaryIterator it(lib);
4476 while (it.HasNext()) { 4485 while (it.HasNext()) {
4477 cls ^= it.GetNextClass(); 4486 cls ^= it.GetNextClass();
4478 if (!cls.is_interface()) { 4487 if (!cls.is_interface()) {
4479 Compiler::CompileAllFunctions(cls); 4488 error = Compiler::CompileAllFunctions(cls);
4480 } 4489 }
4481 } 4490 }
4482 Array& anon_classes = Array::Handle(lib.raw_ptr()->anonymous_classes_); 4491 Array& anon_classes = Array::Handle(lib.raw_ptr()->anonymous_classes_);
4483 for (int i = 0; i < lib.raw_ptr()->num_anonymous_; i++) { 4492 for (int i = 0; i < lib.raw_ptr()->num_anonymous_; i++) {
4484 cls ^= anon_classes.At(i); 4493 cls ^= anon_classes.At(i);
4485 ASSERT(!cls.is_interface()); 4494 ASSERT(!cls.is_interface());
4486 Compiler::CompileAllFunctions(cls); 4495 error = Compiler::CompileAllFunctions(cls);
4487 } 4496 }
4488 lib = lib.next_registered(); 4497 lib = lib.next_registered();
4489 } 4498 }
4499 return error.raw();
4490 } 4500 }
4491 4501
4492 4502
4493 RawInstructions* Instructions::New(intptr_t size) { 4503 RawInstructions* Instructions::New(intptr_t size) {
4494 const Class& instructions_class = Class::Handle(Object::instructions_class()); 4504 const Class& instructions_class = Class::Handle(Object::instructions_class());
4495 Instructions& result = Instructions::Handle(); 4505 Instructions& result = Instructions::Handle();
4496 { 4506 {
4497 uword aligned_size = Instructions::InstanceSize(size); 4507 uword aligned_size = Instructions::InstanceSize(size);
4498 RawObject* raw = Object::Allocate(instructions_class, 4508 RawObject* raw = Object::Allocate(instructions_class,
4499 aligned_size, 4509 aligned_size,
(...skipping 3123 matching lines...) Expand 10 before | Expand all | Expand 10 after
7623 const String& str = String::Handle(pattern()); 7633 const String& str = String::Handle(pattern());
7624 const char* format = "JSRegExp: pattern=%s flags=%s"; 7634 const char* format = "JSRegExp: pattern=%s flags=%s";
7625 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 7635 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
7626 char* chars = reinterpret_cast<char*>( 7636 char* chars = reinterpret_cast<char*>(
7627 Isolate::Current()->current_zone()->Allocate(len + 1)); 7637 Isolate::Current()->current_zone()->Allocate(len + 1));
7628 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 7638 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
7629 return chars; 7639 return chars;
7630 } 7640 }
7631 7641
7632 } // namespace dart 7642 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698