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

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

Issue 10919267: Introduce a VM-only dart:scalarlist library for byte arrays. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Use abstract classes instead of interfaces. Created 8 years, 3 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/object_store.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) 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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698