Chromium Code Reviews| 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 |