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 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 name = Symbols::Bigint(); | 680 name = Symbols::Bigint(); |
681 RegisterPrivateClass(cls, name, core_lib); | 681 RegisterPrivateClass(cls, name, core_lib); |
682 pending_classes.Add(cls, Heap::kOld); | 682 pending_classes.Add(cls, Heap::kOld); |
683 | 683 |
684 cls = Class::New<Double>(); | 684 cls = Class::New<Double>(); |
685 object_store->set_double_class(cls); | 685 object_store->set_double_class(cls); |
686 name = Symbols::Double(); | 686 name = Symbols::Double(); |
687 RegisterPrivateClass(cls, name, core_lib); | 687 RegisterPrivateClass(cls, name, core_lib); |
688 pending_classes.Add(cls, Heap::kOld); | 688 pending_classes.Add(cls, Heap::kOld); |
689 | 689 |
690 cls = Class::New<Int8Array>(); | |
691 object_store->set_int8_array_class(cls); | |
692 name = Symbols::_Int8Array(); | |
693 RegisterPrivateClass(cls, name, core_lib); | |
694 | |
695 cls = Class::New<Uint8Array>(); | |
696 object_store->set_uint8_array_class(cls); | |
697 name = Symbols::_Uint8Array(); | |
698 RegisterPrivateClass(cls, name, core_lib); | |
699 | |
700 cls = Class::New<Int16Array>(); | |
701 object_store->set_int16_array_class(cls); | |
702 name = Symbols::_Int16Array(); | |
703 RegisterPrivateClass(cls, name, core_lib); | |
704 | |
705 cls = Class::New<Uint16Array>(); | |
706 object_store->set_uint16_array_class(cls); | |
707 name = Symbols::_Uint16Array(); | |
708 RegisterPrivateClass(cls, name, core_lib); | |
709 | |
710 cls = Class::New<Int32Array>(); | |
711 object_store->set_int32_array_class(cls); | |
712 name = Symbols::_Int32Array(); | |
713 RegisterPrivateClass(cls, name, core_lib); | |
714 | |
715 cls = Class::New<Uint32Array>(); | |
716 object_store->set_uint32_array_class(cls); | |
717 name = Symbols::_Uint32Array(); | |
718 RegisterPrivateClass(cls, name, core_lib); | |
719 | |
720 cls = Class::New<Int64Array>(); | |
721 object_store->set_int64_array_class(cls); | |
722 name = Symbols::_Int64Array(); | |
723 RegisterPrivateClass(cls, name, core_lib); | |
724 | |
725 cls = Class::New<Uint64Array>(); | |
726 object_store->set_uint64_array_class(cls); | |
727 name = Symbols::_Uint64Array(); | |
728 RegisterPrivateClass(cls, name, core_lib); | |
729 | |
730 cls = Class::New<Float32Array>(); | |
731 object_store->set_float32_array_class(cls); | |
732 name = Symbols::_Float32Array(); | |
733 RegisterPrivateClass(cls, name, core_lib); | |
734 | |
735 cls = Class::New<Float64Array>(); | |
736 object_store->set_float64_array_class(cls); | |
737 name = Symbols::_Float64Array(); | |
738 RegisterPrivateClass(cls, name, core_lib); | |
739 | |
740 cls = Class::New<ExternalInt8Array>(); | |
741 object_store->set_external_int8_array_class(cls); | |
742 name = Symbols::_ExternalInt8Array(); | |
743 RegisterPrivateClass(cls, name, core_lib); | |
744 | |
745 cls = Class::New<ExternalUint8Array>(); | |
746 object_store->set_external_uint8_array_class(cls); | |
747 name = Symbols::_ExternalUint8Array(); | |
748 RegisterPrivateClass(cls, name, core_lib); | |
749 | |
750 cls = Class::New<ExternalInt16Array>(); | |
751 object_store->set_external_int16_array_class(cls); | |
752 name = Symbols::_ExternalInt16Array(); | |
753 RegisterPrivateClass(cls, name, core_lib); | |
754 | |
755 cls = Class::New<ExternalUint16Array>(); | |
756 object_store->set_external_uint16_array_class(cls); | |
757 name = Symbols::_ExternalUint16Array(); | |
758 RegisterPrivateClass(cls, name, core_lib); | |
759 | |
760 cls = Class::New<ExternalInt32Array>(); | |
761 object_store->set_external_int32_array_class(cls); | |
762 name = Symbols::_ExternalInt32Array(); | |
763 RegisterPrivateClass(cls, name, core_lib); | |
764 | |
765 cls = Class::New<ExternalUint32Array>(); | |
766 object_store->set_external_uint32_array_class(cls); | |
767 name = Symbols::_ExternalUint32Array(); | |
768 RegisterPrivateClass(cls, name, core_lib); | |
769 | |
770 cls = Class::New<ExternalInt64Array>(); | |
771 object_store->set_external_int64_array_class(cls); | |
772 name = Symbols::_ExternalInt64Array(); | |
773 RegisterPrivateClass(cls, name, core_lib); | |
774 | |
775 cls = Class::New<ExternalUint64Array>(); | |
776 object_store->set_external_uint64_array_class(cls); | |
777 name = Symbols::_ExternalUint64Array(); | |
778 RegisterPrivateClass(cls, name, core_lib); | |
779 | |
780 cls = Class::New<ExternalFloat32Array>(); | |
781 object_store->set_external_float32_array_class(cls); | |
782 name = Symbols::_ExternalFloat32Array(); | |
783 RegisterPrivateClass(cls, name, core_lib); | |
784 | |
785 cls = Class::New<ExternalFloat64Array>(); | |
786 object_store->set_external_float64_array_class(cls); | |
787 name = Symbols::_ExternalFloat64Array(); | |
788 RegisterPrivateClass(cls, name, core_lib); | |
789 | |
790 cls = Class::New<WeakProperty>(); | 690 cls = Class::New<WeakProperty>(); |
791 object_store->set_weak_property_class(cls); | 691 object_store->set_weak_property_class(cls); |
792 name = Symbols::_WeakProperty(); | 692 name = Symbols::_WeakProperty(); |
793 RegisterPrivateClass(cls, name, core_lib); | 693 RegisterPrivateClass(cls, name, core_lib); |
794 | 694 |
| 695 Library::InitScalarlistLibrary(isolate); |
| 696 Library& scalarlist_lib = Library::Handle(Library::ScalarlistLibrary()); |
| 697 |
| 698 cls = Class::New<Int8Array>(); |
| 699 object_store->set_int8_array_class(cls); |
| 700 name = Symbols::_Int8Array(); |
| 701 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 702 |
| 703 cls = Class::New<Uint8Array>(); |
| 704 object_store->set_uint8_array_class(cls); |
| 705 name = Symbols::_Uint8Array(); |
| 706 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 707 |
| 708 cls = Class::New<Int16Array>(); |
| 709 object_store->set_int16_array_class(cls); |
| 710 name = Symbols::_Int16Array(); |
| 711 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 712 |
| 713 cls = Class::New<Uint16Array>(); |
| 714 object_store->set_uint16_array_class(cls); |
| 715 name = Symbols::_Uint16Array(); |
| 716 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 717 |
| 718 cls = Class::New<Int32Array>(); |
| 719 object_store->set_int32_array_class(cls); |
| 720 name = Symbols::_Int32Array(); |
| 721 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 722 |
| 723 cls = Class::New<Uint32Array>(); |
| 724 object_store->set_uint32_array_class(cls); |
| 725 name = Symbols::_Uint32Array(); |
| 726 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 727 |
| 728 cls = Class::New<Int64Array>(); |
| 729 object_store->set_int64_array_class(cls); |
| 730 name = Symbols::_Int64Array(); |
| 731 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 732 |
| 733 cls = Class::New<Uint64Array>(); |
| 734 object_store->set_uint64_array_class(cls); |
| 735 name = Symbols::_Uint64Array(); |
| 736 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 737 |
| 738 cls = Class::New<Float32Array>(); |
| 739 object_store->set_float32_array_class(cls); |
| 740 name = Symbols::_Float32Array(); |
| 741 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 742 |
| 743 cls = Class::New<Float64Array>(); |
| 744 object_store->set_float64_array_class(cls); |
| 745 name = Symbols::_Float64Array(); |
| 746 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 747 |
| 748 cls = Class::New<ExternalInt8Array>(); |
| 749 object_store->set_external_int8_array_class(cls); |
| 750 name = Symbols::_ExternalInt8Array(); |
| 751 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 752 |
| 753 cls = Class::New<ExternalUint8Array>(); |
| 754 object_store->set_external_uint8_array_class(cls); |
| 755 name = Symbols::_ExternalUint8Array(); |
| 756 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 757 |
| 758 cls = Class::New<ExternalInt16Array>(); |
| 759 object_store->set_external_int16_array_class(cls); |
| 760 name = Symbols::_ExternalInt16Array(); |
| 761 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 762 |
| 763 cls = Class::New<ExternalUint16Array>(); |
| 764 object_store->set_external_uint16_array_class(cls); |
| 765 name = Symbols::_ExternalUint16Array(); |
| 766 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 767 |
| 768 cls = Class::New<ExternalInt32Array>(); |
| 769 object_store->set_external_int32_array_class(cls); |
| 770 name = Symbols::_ExternalInt32Array(); |
| 771 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 772 |
| 773 cls = Class::New<ExternalUint32Array>(); |
| 774 object_store->set_external_uint32_array_class(cls); |
| 775 name = Symbols::_ExternalUint32Array(); |
| 776 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 777 |
| 778 cls = Class::New<ExternalInt64Array>(); |
| 779 object_store->set_external_int64_array_class(cls); |
| 780 name = Symbols::_ExternalInt64Array(); |
| 781 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 782 |
| 783 cls = Class::New<ExternalUint64Array>(); |
| 784 object_store->set_external_uint64_array_class(cls); |
| 785 name = Symbols::_ExternalUint64Array(); |
| 786 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 787 |
| 788 cls = Class::New<ExternalFloat32Array>(); |
| 789 object_store->set_external_float32_array_class(cls); |
| 790 name = Symbols::_ExternalFloat32Array(); |
| 791 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 792 |
| 793 cls = Class::New<ExternalFloat64Array>(); |
| 794 object_store->set_external_float64_array_class(cls); |
| 795 name = Symbols::_ExternalFloat64Array(); |
| 796 RegisterPrivateClass(cls, name, scalarlist_lib); |
| 797 |
795 // Set the super type of class Stacktrace to Object type so that the | 798 // Set the super type of class Stacktrace to Object type so that the |
796 // 'toString' method is implemented. | 799 // 'toString' method is implemented. |
797 cls = object_store->stacktrace_class(); | 800 cls = object_store->stacktrace_class(); |
798 cls.set_super_type(type); | 801 cls.set_super_type(type); |
799 | 802 |
800 // Note: The abstract class Function is represented by VM class | 803 // Note: The abstract class Function is represented by VM class |
801 // DartFunction, not VM class Function. | 804 // DartFunction, not VM class Function. |
802 name = Symbols::Function(); | 805 name = Symbols::Function(); |
803 cls = Class::New<DartFunction>(); | 806 cls = Class::New<DartFunction>(); |
804 RegisterClass(cls, name, core_lib); | 807 RegisterClass(cls, name, core_lib); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
940 ASSERT(!mirrors_lib.IsNull()); | 943 ASSERT(!mirrors_lib.IsNull()); |
941 error = Bootstrap::Compile(mirrors_lib, mirrors_script); | 944 error = Bootstrap::Compile(mirrors_lib, mirrors_script); |
942 if (!error.IsNull()) { | 945 if (!error.IsNull()) { |
943 return error.raw(); | 946 return error.raw(); |
944 } | 947 } |
945 patch_script = Bootstrap::LoadMirrorsScript(true); | 948 patch_script = Bootstrap::LoadMirrorsScript(true); |
946 error = mirrors_lib.Patch(patch_script); | 949 error = mirrors_lib.Patch(patch_script); |
947 if (!error.IsNull()) { | 950 if (!error.IsNull()) { |
948 return error.raw(); | 951 return error.raw(); |
949 } | 952 } |
| 953 const Script& scalarlist_script = Script::Handle( |
| 954 Bootstrap::LoadScalarlistScript(false)); |
| 955 ASSERT(!scalarlist_lib.IsNull()); |
| 956 error = Bootstrap::Compile(scalarlist_lib, scalarlist_script); |
| 957 if (!error.IsNull()) { |
| 958 return error.raw(); |
| 959 } |
| 960 patch_script = Bootstrap::LoadScalarlistScript(true); |
| 961 error = scalarlist_lib.Patch(patch_script); |
| 962 if (!error.IsNull()) { |
| 963 return error.raw(); |
| 964 } |
950 Bootstrap::SetupNativeResolver(); | 965 Bootstrap::SetupNativeResolver(); |
951 | 966 |
952 // Remove the Object superclass cycle by setting the super type to null (not | 967 // Remove the Object superclass cycle by setting the super type to null (not |
953 // to the type of null). | 968 // to the type of null). |
954 cls = object_store->object_class(); | 969 cls = object_store->object_class(); |
955 cls.set_super_type(Type::Handle()); | 970 cls.set_super_type(Type::Handle()); |
956 | 971 |
957 ClassFinalizer::VerifyBootstrapClasses(); | 972 ClassFinalizer::VerifyBootstrapClasses(); |
958 return Error::null(); | 973 return Error::null(); |
959 } | 974 } |
(...skipping 5639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6599 lib.Register(); | 6614 lib.Register(); |
6600 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); | 6615 const Library& isolate_lib = Library::Handle(Library::IsolateLibrary()); |
6601 lib.AddImport(isolate_lib); | 6616 lib.AddImport(isolate_lib); |
6602 const Library& wrappers_lib = | 6617 const Library& wrappers_lib = |
6603 Library::Handle(Library::NativeWrappersLibrary()); | 6618 Library::Handle(Library::NativeWrappersLibrary()); |
6604 lib.AddImport(wrappers_lib); | 6619 lib.AddImport(wrappers_lib); |
6605 isolate->object_store()->set_mirrors_library(lib); | 6620 isolate->object_store()->set_mirrors_library(lib); |
6606 } | 6621 } |
6607 | 6622 |
6608 | 6623 |
| 6624 void Library::InitScalarlistLibrary(Isolate* isolate) { |
| 6625 const String& url = String::Handle(Symbols::New("dart:scalarlist")); |
| 6626 const Library& lib = Library::Handle(Library::New(url)); |
| 6627 lib.Register(); |
| 6628 const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary()); |
| 6629 lib.AddImport(core_impl_lib); |
| 6630 isolate->object_store()->set_scalarlist_library(lib); |
| 6631 } |
| 6632 |
| 6633 |
6609 void Library::InitNativeWrappersLibrary(Isolate* isolate) { | 6634 void Library::InitNativeWrappersLibrary(Isolate* isolate) { |
6610 static const int kNumNativeWrappersClasses = 4; | 6635 static const int kNumNativeWrappersClasses = 4; |
6611 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); | 6636 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); |
6612 const String& native_flds_lib_url = String::Handle( | 6637 const String& native_flds_lib_url = String::Handle( |
6613 Symbols::New("dart:nativewrappers")); | 6638 Symbols::New("dart:nativewrappers")); |
6614 const Library& native_flds_lib = Library::Handle( | 6639 const Library& native_flds_lib = Library::Handle( |
6615 Library::NewLibraryHelper(native_flds_lib_url, false)); | 6640 Library::NewLibraryHelper(native_flds_lib_url, false)); |
6616 native_flds_lib.Register(); | 6641 native_flds_lib.Register(); |
6617 isolate->object_store()->set_native_wrappers_library(native_flds_lib); | 6642 isolate->object_store()->set_native_wrappers_library(native_flds_lib); |
6618 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; | 6643 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6727 RawLibrary* Library::IsolateLibrary() { | 6752 RawLibrary* Library::IsolateLibrary() { |
6728 return Isolate::Current()->object_store()->isolate_library(); | 6753 return Isolate::Current()->object_store()->isolate_library(); |
6729 } | 6754 } |
6730 | 6755 |
6731 | 6756 |
6732 RawLibrary* Library::MirrorsLibrary() { | 6757 RawLibrary* Library::MirrorsLibrary() { |
6733 return Isolate::Current()->object_store()->mirrors_library(); | 6758 return Isolate::Current()->object_store()->mirrors_library(); |
6734 } | 6759 } |
6735 | 6760 |
6736 | 6761 |
| 6762 RawLibrary* Library::ScalarlistLibrary() { |
| 6763 return Isolate::Current()->object_store()->scalarlist_library(); |
| 6764 } |
| 6765 |
| 6766 |
6737 RawLibrary* Library::NativeWrappersLibrary() { | 6767 RawLibrary* Library::NativeWrappersLibrary() { |
6738 return Isolate::Current()->object_store()->native_wrappers_library(); | 6768 return Isolate::Current()->object_store()->native_wrappers_library(); |
6739 } | 6769 } |
6740 | 6770 |
6741 | 6771 |
6742 const char* Library::ToCString() const { | 6772 const char* Library::ToCString() const { |
6743 const char* kFormat = "Library:'%s'"; | 6773 const char* kFormat = "Library:'%s'"; |
6744 const String& name = String::Handle(url()); | 6774 const String& name = String::Handle(url()); |
6745 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; | 6775 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; |
6746 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); | 6776 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
(...skipping 5036 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11783 } | 11813 } |
11784 return result.raw(); | 11814 return result.raw(); |
11785 } | 11815 } |
11786 | 11816 |
11787 | 11817 |
11788 const char* WeakProperty::ToCString() const { | 11818 const char* WeakProperty::ToCString() const { |
11789 return "_WeakProperty"; | 11819 return "_WeakProperty"; |
11790 } | 11820 } |
11791 | 11821 |
11792 } // namespace dart | 11822 } // namespace dart |
OLD | NEW |