OLD | NEW |
---|---|
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 "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
547 const GrowableObjectArray& libraries = | 547 const GrowableObjectArray& libraries = |
548 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); | 548 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); |
549 object_store->set_libraries(libraries); | 549 object_store->set_libraries(libraries); |
550 | 550 |
551 // Basic infrastructure has been setup, initialize the class dictionary. | 551 // Basic infrastructure has been setup, initialize the class dictionary. |
552 Library::InitCoreLibrary(isolate); | 552 Library::InitCoreLibrary(isolate); |
553 Library& core_lib = Library::Handle(Library::CoreLibrary()); | 553 Library& core_lib = Library::Handle(Library::CoreLibrary()); |
554 ASSERT(!core_lib.IsNull()); | 554 ASSERT(!core_lib.IsNull()); |
555 Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); | 555 Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
556 ASSERT(!core_impl_lib.IsNull()); | 556 ASSERT(!core_impl_lib.IsNull()); |
557 Library::InitScalarlistLibrary(isolate); | |
Ivan Posva
2012/09/20 06:42:26
Can you explain why this has to be done so early?
Mads Ager (google)
2012/09/20 06:49:43
The code below adds the classes to the library, so
| |
558 Library& scalarlist_lib = Library::Handle(Library::ScalarlistLibrary()); | |
557 | 559 |
558 const GrowableObjectArray& pending_classes = | 560 const GrowableObjectArray& pending_classes = |
559 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); | 561 GrowableObjectArray::Handle(GrowableObjectArray::New(Heap::kOld)); |
560 object_store->set_pending_classes(pending_classes); | 562 object_store->set_pending_classes(pending_classes); |
561 | 563 |
562 Context& context = Context::Handle(Context::New(0, Heap::kOld)); | 564 Context& context = Context::Handle(Context::New(0, Heap::kOld)); |
563 object_store->set_empty_context(context); | 565 object_store->set_empty_context(context); |
564 | 566 |
565 // Now that the symbol table is initialized and that the core dictionary as | 567 // Now that the symbol table is initialized and that the core dictionary as |
566 // well as the core implementation dictionary have been setup, preallocate | 568 // well as the core implementation dictionary have been setup, preallocate |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
679 name = Symbols::Bigint(); | 681 name = Symbols::Bigint(); |
680 RegisterPrivateClass(cls, name, core_lib); | 682 RegisterPrivateClass(cls, name, core_lib); |
681 pending_classes.Add(cls, Heap::kOld); | 683 pending_classes.Add(cls, Heap::kOld); |
682 | 684 |
683 cls = Class::New<Double>(); | 685 cls = Class::New<Double>(); |
684 object_store->set_double_class(cls); | 686 object_store->set_double_class(cls); |
685 name = Symbols::Double(); | 687 name = Symbols::Double(); |
686 RegisterPrivateClass(cls, name, core_lib); | 688 RegisterPrivateClass(cls, name, core_lib); |
687 pending_classes.Add(cls, Heap::kOld); | 689 pending_classes.Add(cls, Heap::kOld); |
688 | 690 |
689 cls = Class::New<Int8Array>(); | |
690 object_store->set_int8_array_class(cls); | |
691 name = Symbols::_Int8Array(); | |
692 RegisterPrivateClass(cls, name, core_lib); | |
693 | |
694 cls = Class::New<Uint8Array>(); | |
695 object_store->set_uint8_array_class(cls); | |
696 name = Symbols::_Uint8Array(); | |
697 RegisterPrivateClass(cls, name, core_lib); | |
698 | |
699 cls = Class::New<Int16Array>(); | |
700 object_store->set_int16_array_class(cls); | |
701 name = Symbols::_Int16Array(); | |
702 RegisterPrivateClass(cls, name, core_lib); | |
703 | |
704 cls = Class::New<Uint16Array>(); | |
705 object_store->set_uint16_array_class(cls); | |
706 name = Symbols::_Uint16Array(); | |
707 RegisterPrivateClass(cls, name, core_lib); | |
708 | |
709 cls = Class::New<Int32Array>(); | |
710 object_store->set_int32_array_class(cls); | |
711 name = Symbols::_Int32Array(); | |
712 RegisterPrivateClass(cls, name, core_lib); | |
713 | |
714 cls = Class::New<Uint32Array>(); | |
715 object_store->set_uint32_array_class(cls); | |
716 name = Symbols::_Uint32Array(); | |
717 RegisterPrivateClass(cls, name, core_lib); | |
718 | |
719 cls = Class::New<Int64Array>(); | |
720 object_store->set_int64_array_class(cls); | |
721 name = Symbols::_Int64Array(); | |
722 RegisterPrivateClass(cls, name, core_lib); | |
723 | |
724 cls = Class::New<Uint64Array>(); | |
725 object_store->set_uint64_array_class(cls); | |
726 name = Symbols::_Uint64Array(); | |
727 RegisterPrivateClass(cls, name, core_lib); | |
728 | |
729 cls = Class::New<Float32Array>(); | |
730 object_store->set_float32_array_class(cls); | |
731 name = Symbols::_Float32Array(); | |
732 RegisterPrivateClass(cls, name, core_lib); | |
733 | |
734 cls = Class::New<Float64Array>(); | |
735 object_store->set_float64_array_class(cls); | |
736 name = Symbols::_Float64Array(); | |
737 RegisterPrivateClass(cls, name, core_lib); | |
738 | |
739 cls = Class::New<ExternalInt8Array>(); | |
740 object_store->set_external_int8_array_class(cls); | |
741 name = Symbols::_ExternalInt8Array(); | |
742 RegisterPrivateClass(cls, name, core_lib); | |
743 | |
744 cls = Class::New<ExternalUint8Array>(); | |
745 object_store->set_external_uint8_array_class(cls); | |
746 name = Symbols::_ExternalUint8Array(); | |
747 RegisterPrivateClass(cls, name, core_lib); | |
748 | |
749 cls = Class::New<ExternalInt16Array>(); | |
750 object_store->set_external_int16_array_class(cls); | |
751 name = Symbols::_ExternalInt16Array(); | |
752 RegisterPrivateClass(cls, name, core_lib); | |
753 | |
754 cls = Class::New<ExternalUint16Array>(); | |
755 object_store->set_external_uint16_array_class(cls); | |
756 name = Symbols::_ExternalUint16Array(); | |
757 RegisterPrivateClass(cls, name, core_lib); | |
758 | |
759 cls = Class::New<ExternalInt32Array>(); | |
760 object_store->set_external_int32_array_class(cls); | |
761 name = Symbols::_ExternalInt32Array(); | |
762 RegisterPrivateClass(cls, name, core_lib); | |
763 | |
764 cls = Class::New<ExternalUint32Array>(); | |
765 object_store->set_external_uint32_array_class(cls); | |
766 name = Symbols::_ExternalUint32Array(); | |
767 RegisterPrivateClass(cls, name, core_lib); | |
768 | |
769 cls = Class::New<ExternalInt64Array>(); | |
770 object_store->set_external_int64_array_class(cls); | |
771 name = Symbols::_ExternalInt64Array(); | |
772 RegisterPrivateClass(cls, name, core_lib); | |
773 | |
774 cls = Class::New<ExternalUint64Array>(); | |
775 object_store->set_external_uint64_array_class(cls); | |
776 name = Symbols::_ExternalUint64Array(); | |
777 RegisterPrivateClass(cls, name, core_lib); | |
778 | |
779 cls = Class::New<ExternalFloat32Array>(); | |
780 object_store->set_external_float32_array_class(cls); | |
781 name = Symbols::_ExternalFloat32Array(); | |
782 RegisterPrivateClass(cls, name, core_lib); | |
783 | |
784 cls = Class::New<ExternalFloat64Array>(); | |
785 object_store->set_external_float64_array_class(cls); | |
786 name = Symbols::_ExternalFloat64Array(); | |
787 RegisterPrivateClass(cls, name, core_lib); | |
788 | |
789 cls = Class::New<WeakProperty>(); | 691 cls = Class::New<WeakProperty>(); |
790 object_store->set_weak_property_class(cls); | 692 object_store->set_weak_property_class(cls); |
791 name = Symbols::_WeakProperty(); | 693 name = Symbols::_WeakProperty(); |
792 RegisterPrivateClass(cls, name, core_lib); | 694 RegisterPrivateClass(cls, name, core_lib); |
793 | 695 |
696 cls = Class::New<Int8Array>(); | |
697 object_store->set_int8_array_class(cls); | |
698 name = Symbols::_Int8Array(); | |
699 RegisterPrivateClass(cls, name, scalarlist_lib); | |
700 | |
701 cls = Class::New<Uint8Array>(); | |
702 object_store->set_uint8_array_class(cls); | |
703 name = Symbols::_Uint8Array(); | |
704 RegisterPrivateClass(cls, name, scalarlist_lib); | |
705 | |
706 cls = Class::New<Int16Array>(); | |
707 object_store->set_int16_array_class(cls); | |
708 name = Symbols::_Int16Array(); | |
709 RegisterPrivateClass(cls, name, scalarlist_lib); | |
710 | |
711 cls = Class::New<Uint16Array>(); | |
712 object_store->set_uint16_array_class(cls); | |
713 name = Symbols::_Uint16Array(); | |
714 RegisterPrivateClass(cls, name, scalarlist_lib); | |
715 | |
716 cls = Class::New<Int32Array>(); | |
717 object_store->set_int32_array_class(cls); | |
718 name = Symbols::_Int32Array(); | |
719 RegisterPrivateClass(cls, name, scalarlist_lib); | |
720 | |
721 cls = Class::New<Uint32Array>(); | |
722 object_store->set_uint32_array_class(cls); | |
723 name = Symbols::_Uint32Array(); | |
724 RegisterPrivateClass(cls, name, scalarlist_lib); | |
725 | |
726 cls = Class::New<Int64Array>(); | |
727 object_store->set_int64_array_class(cls); | |
728 name = Symbols::_Int64Array(); | |
729 RegisterPrivateClass(cls, name, scalarlist_lib); | |
730 | |
731 cls = Class::New<Uint64Array>(); | |
732 object_store->set_uint64_array_class(cls); | |
733 name = Symbols::_Uint64Array(); | |
734 RegisterPrivateClass(cls, name, scalarlist_lib); | |
735 | |
736 cls = Class::New<Float32Array>(); | |
737 object_store->set_float32_array_class(cls); | |
738 name = Symbols::_Float32Array(); | |
739 RegisterPrivateClass(cls, name, scalarlist_lib); | |
740 | |
741 cls = Class::New<Float64Array>(); | |
742 object_store->set_float64_array_class(cls); | |
743 name = Symbols::_Float64Array(); | |
744 RegisterPrivateClass(cls, name, scalarlist_lib); | |
745 | |
746 cls = Class::New<ExternalInt8Array>(); | |
747 object_store->set_external_int8_array_class(cls); | |
748 name = Symbols::_ExternalInt8Array(); | |
749 RegisterPrivateClass(cls, name, scalarlist_lib); | |
750 | |
751 cls = Class::New<ExternalUint8Array>(); | |
752 object_store->set_external_uint8_array_class(cls); | |
753 name = Symbols::_ExternalUint8Array(); | |
754 RegisterPrivateClass(cls, name, scalarlist_lib); | |
755 | |
756 cls = Class::New<ExternalInt16Array>(); | |
757 object_store->set_external_int16_array_class(cls); | |
758 name = Symbols::_ExternalInt16Array(); | |
759 RegisterPrivateClass(cls, name, scalarlist_lib); | |
760 | |
761 cls = Class::New<ExternalUint16Array>(); | |
762 object_store->set_external_uint16_array_class(cls); | |
763 name = Symbols::_ExternalUint16Array(); | |
764 RegisterPrivateClass(cls, name, scalarlist_lib); | |
765 | |
766 cls = Class::New<ExternalInt32Array>(); | |
767 object_store->set_external_int32_array_class(cls); | |
768 name = Symbols::_ExternalInt32Array(); | |
769 RegisterPrivateClass(cls, name, scalarlist_lib); | |
770 | |
771 cls = Class::New<ExternalUint32Array>(); | |
772 object_store->set_external_uint32_array_class(cls); | |
773 name = Symbols::_ExternalUint32Array(); | |
774 RegisterPrivateClass(cls, name, scalarlist_lib); | |
775 | |
776 cls = Class::New<ExternalInt64Array>(); | |
777 object_store->set_external_int64_array_class(cls); | |
778 name = Symbols::_ExternalInt64Array(); | |
779 RegisterPrivateClass(cls, name, scalarlist_lib); | |
780 | |
781 cls = Class::New<ExternalUint64Array>(); | |
782 object_store->set_external_uint64_array_class(cls); | |
783 name = Symbols::_ExternalUint64Array(); | |
784 RegisterPrivateClass(cls, name, scalarlist_lib); | |
785 | |
786 cls = Class::New<ExternalFloat32Array>(); | |
787 object_store->set_external_float32_array_class(cls); | |
788 name = Symbols::_ExternalFloat32Array(); | |
789 RegisterPrivateClass(cls, name, scalarlist_lib); | |
790 | |
791 cls = Class::New<ExternalFloat64Array>(); | |
792 object_store->set_external_float64_array_class(cls); | |
793 name = Symbols::_ExternalFloat64Array(); | |
794 RegisterPrivateClass(cls, name, scalarlist_lib); | |
795 | |
794 // Set the super type of class Stacktrace to Object type so that the | 796 // Set the super type of class Stacktrace to Object type so that the |
795 // 'toString' method is implemented. | 797 // 'toString' method is implemented. |
796 cls = object_store->stacktrace_class(); | 798 cls = object_store->stacktrace_class(); |
797 cls.set_super_type(type); | 799 cls.set_super_type(type); |
798 | 800 |
799 // Note: The abstract class Function is represented by VM class | 801 // Note: The abstract class Function is represented by VM class |
800 // DartFunction, not VM class Function. | 802 // DartFunction, not VM class Function. |
801 name = Symbols::Function(); | 803 name = Symbols::Function(); |
802 cls = Class::New<DartFunction>(); | 804 cls = Class::New<DartFunction>(); |
803 RegisterClass(cls, name, core_lib); | 805 RegisterClass(cls, name, core_lib); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
939 ASSERT(!mirrors_lib.IsNull()); | 941 ASSERT(!mirrors_lib.IsNull()); |
940 error = Bootstrap::Compile(mirrors_lib, mirrors_script); | 942 error = Bootstrap::Compile(mirrors_lib, mirrors_script); |
941 if (!error.IsNull()) { | 943 if (!error.IsNull()) { |
942 return error.raw(); | 944 return error.raw(); |
943 } | 945 } |
944 patch_script = Bootstrap::LoadMirrorsScript(true); | 946 patch_script = Bootstrap::LoadMirrorsScript(true); |
945 error = mirrors_lib.Patch(patch_script); | 947 error = mirrors_lib.Patch(patch_script); |
946 if (!error.IsNull()) { | 948 if (!error.IsNull()) { |
947 return error.raw(); | 949 return error.raw(); |
948 } | 950 } |
951 const Script& scalarlist_script = Script::Handle( | |
952 Bootstrap::LoadScalarlistScript(false)); | |
953 ASSERT(!scalarlist_lib.IsNull()); | |
954 error = Bootstrap::Compile(scalarlist_lib, scalarlist_script); | |
955 if (!error.IsNull()) { | |
956 return error.raw(); | |
957 } | |
958 patch_script = Bootstrap::LoadScalarlistScript(true); | |
959 error = scalarlist_lib.Patch(patch_script); | |
960 if (!error.IsNull()) { | |
961 return error.raw(); | |
962 } | |
949 Bootstrap::SetupNativeResolver(); | 963 Bootstrap::SetupNativeResolver(); |
950 | 964 |
951 // Remove the Object superclass cycle by setting the super type to null (not | 965 // Remove the Object superclass cycle by setting the super type to null (not |
952 // to the type of null). | 966 // to the type of null). |
953 cls = object_store->object_class(); | 967 cls = object_store->object_class(); |
954 cls.set_super_type(Type::Handle()); | 968 cls.set_super_type(Type::Handle()); |
955 | 969 |
956 ClassFinalizer::VerifyBootstrapClasses(); | 970 ClassFinalizer::VerifyBootstrapClasses(); |
957 return Error::null(); | 971 return Error::null(); |
958 } | 972 } |
(...skipping 5663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6622 lib.Register(); | 6636 lib.Register(); |
6623 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); | 6637 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
6624 lib.AddImport(isolate_lib); | 6638 lib.AddImport(isolate_lib); |
6625 const Library& wrappers_lib = | 6639 const Library& wrappers_lib = |
6626 Library::Handle(Library::NativeWrappersLibrary()); | 6640 Library::Handle(Library::NativeWrappersLibrary()); |
6627 lib.AddImport(wrappers_lib); | 6641 lib.AddImport(wrappers_lib); |
6628 isolate->object_store()->set_mirrors_library(lib); | 6642 isolate->object_store()->set_mirrors_library(lib); |
6629 } | 6643 } |
6630 | 6644 |
6631 | 6645 |
6646 void Library::InitScalarlistLibrary(Isolate* isolate) { | |
6647 const String& url = String::Handle(Symbols::New("dart:scalarlist")); | |
6648 const Library& lib = Library::Handle(Library::New(url)); | |
6649 lib.Register(); | |
6650 const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); | |
6651 lib.AddImport(core_impl_lib); | |
6652 isolate->object_store()->set_scalarlist_library(lib); | |
6653 } | |
6654 | |
6655 | |
6632 void Library::InitNativeWrappersLibrary(Isolate* isolate) { | 6656 void Library::InitNativeWrappersLibrary(Isolate* isolate) { |
6633 static const int kNumNativeWrappersClasses = 4; | 6657 static const int kNumNativeWrappersClasses = 4; |
6634 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); | 6658 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); |
6635 const String& native_flds_lib_url = String::Handle( | 6659 const String& native_flds_lib_url = String::Handle( |
6636 Symbols::New("dart:nativewrappers")); | 6660 Symbols::New("dart:nativewrappers")); |
6637 const Library& native_flds_lib = Library::Handle( | 6661 const Library& native_flds_lib = Library::Handle( |
6638 Library::NewLibraryHelper(native_flds_lib_url, false)); | 6662 Library::NewLibraryHelper(native_flds_lib_url, false)); |
6639 native_flds_lib.Register(); | 6663 native_flds_lib.Register(); |
6640 isolate->object_store()->set_native_wrappers_library(native_flds_lib); | 6664 isolate->object_store()->set_native_wrappers_library(native_flds_lib); |
6641 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; | 6665 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6750 RawLibrary* Library::IsolateLibrary() { | 6774 RawLibrary* Library::IsolateLibrary() { |
6751 return Isolate::Current()->object_store()->isolate_library(); | 6775 return Isolate::Current()->object_store()->isolate_library(); |
6752 } | 6776 } |
6753 | 6777 |
6754 | 6778 |
6755 RawLibrary* Library::MirrorsLibrary() { | 6779 RawLibrary* Library::MirrorsLibrary() { |
6756 return Isolate::Current()->object_store()->mirrors_library(); | 6780 return Isolate::Current()->object_store()->mirrors_library(); |
6757 } | 6781 } |
6758 | 6782 |
6759 | 6783 |
6784 RawLibrary* Library::ScalarlistLibrary() { | |
6785 return Isolate::Current()->object_store()->scalarlist_library(); | |
6786 } | |
6787 | |
6788 | |
6760 RawLibrary* Library::NativeWrappersLibrary() { | 6789 RawLibrary* Library::NativeWrappersLibrary() { |
6761 return Isolate::Current()->object_store()->native_wrappers_library(); | 6790 return Isolate::Current()->object_store()->native_wrappers_library(); |
6762 } | 6791 } |
6763 | 6792 |
6764 | 6793 |
6765 const char* Library::ToCString() const { | 6794 const char* Library::ToCString() const { |
6766 const char* kFormat = "Library:'%s'"; | 6795 const char* kFormat = "Library:'%s'"; |
6767 const String& name = String::Handle(url()); | 6796 const String& name = String::Handle(url()); |
6768 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; | 6797 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; |
6769 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); | 6798 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
(...skipping 4845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11615 } | 11644 } |
11616 return result.raw(); | 11645 return result.raw(); |
11617 } | 11646 } |
11618 | 11647 |
11619 | 11648 |
11620 const char* WeakProperty::ToCString() const { | 11649 const char* WeakProperty::ToCString() const { |
11621 return "_WeakProperty"; | 11650 return "_WeakProperty"; |
11622 } | 11651 } |
11623 | 11652 |
11624 } // namespace dart | 11653 } // namespace dart |
OLD | NEW |