| 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 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 intptr_t suffix_len = at_pos - dot_pos; | 180 intptr_t suffix_len = at_pos - dot_pos; |
| 181 if (suffix_len > 1) { | 181 if (suffix_len > 1) { |
| 182 // This is a named constructor. Add the name back to the string. | 182 // This is a named constructor. Add the name back to the string. |
| 183 const String& suffix = | 183 const String& suffix = |
| 184 String::Handle(String::SubString(name, dot_pos, suffix_len)); | 184 String::Handle(String::SubString(name, dot_pos, suffix_len)); |
| 185 return String::Concat(result, suffix); | 185 return String::Concat(result, suffix); |
| 186 } | 186 } |
| 187 | 187 |
| 188 if (is_setter) { | 188 if (is_setter) { |
| 189 // Setters need to end with '='. | 189 // Setters need to end with '='. |
| 190 const String& suffix = String::Handle(Symbols::Equals()); | 190 return String::Concat(result, Symbols::Equals()); |
| 191 return String::Concat(result, suffix); | |
| 192 } | 191 } |
| 193 | 192 |
| 194 return result.raw(); | 193 return result.raw(); |
| 195 } | 194 } |
| 196 | 195 |
| 197 | 196 |
| 198 template<typename type> | 197 template<typename type> |
| 199 static bool IsSpecialCharacter(type value) { | 198 static bool IsSpecialCharacter(type value) { |
| 200 return ((value == '"') || | 199 return ((value == '"') || |
| 201 (value == '\n') || | 200 (value == '\n') || |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 uword address = heap->Allocate(Array::InstanceSize(0), Heap::kOld); | 423 uword address = heap->Allocate(Array::InstanceSize(0), Heap::kOld); |
| 425 *empty_array_ = reinterpret_cast<RawArray*>(address + kHeapObjectTag); | 424 *empty_array_ = reinterpret_cast<RawArray*>(address + kHeapObjectTag); |
| 426 InitializeObject(address, kArrayCid, Array::InstanceSize(0)); | 425 InitializeObject(address, kArrayCid, Array::InstanceSize(0)); |
| 427 empty_array_->raw()->ptr()->length_ = Smi::New(0); | 426 empty_array_->raw()->ptr()->length_ = Smi::New(0); |
| 428 } | 427 } |
| 429 } | 428 } |
| 430 | 429 |
| 431 | 430 |
| 432 #define SET_CLASS_NAME(class_name, name) \ | 431 #define SET_CLASS_NAME(class_name, name) \ |
| 433 cls = class_name##_class(); \ | 432 cls = class_name##_class(); \ |
| 434 str = Symbols::name(); \ | 433 cls.set_name(Symbols::name()); \ |
| 435 cls.set_name(str); \ | |
| 436 | 434 |
| 437 void Object::RegisterSingletonClassNames() { | 435 void Object::RegisterSingletonClassNames() { |
| 438 Class& cls = Class::Handle(); | 436 Class& cls = Class::Handle(); |
| 439 String& str = String::Handle(); | |
| 440 | 437 |
| 441 // Set up names for all VM singleton classes. | 438 // Set up names for all VM singleton classes. |
| 442 SET_CLASS_NAME(class, Class); | 439 SET_CLASS_NAME(class, Class); |
| 443 SET_CLASS_NAME(null, Null); | 440 SET_CLASS_NAME(null, Null); |
| 444 SET_CLASS_NAME(dynamic, Dynamic); | 441 SET_CLASS_NAME(dynamic, Dynamic); |
| 445 SET_CLASS_NAME(void, Void); | 442 SET_CLASS_NAME(void, Void); |
| 446 SET_CLASS_NAME(unresolved_class, UnresolvedClass); | 443 SET_CLASS_NAME(unresolved_class, UnresolvedClass); |
| 447 SET_CLASS_NAME(type_arguments, TypeArguments); | 444 SET_CLASS_NAME(type_arguments, TypeArguments); |
| 448 SET_CLASS_NAME(instantiated_type_arguments, InstantiatedTypeArguments); | 445 SET_CLASS_NAME(instantiated_type_arguments, InstantiatedTypeArguments); |
| 449 SET_CLASS_NAME(patch_class, PatchClass); | 446 SET_CLASS_NAME(patch_class, PatchClass); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 470 SET_CLASS_NAME(megamorphic_cache, MegamorphicCache); | 467 SET_CLASS_NAME(megamorphic_cache, MegamorphicCache); |
| 471 SET_CLASS_NAME(subtypetestcache, SubtypeTestCache); | 468 SET_CLASS_NAME(subtypetestcache, SubtypeTestCache); |
| 472 SET_CLASS_NAME(api_error, ApiError); | 469 SET_CLASS_NAME(api_error, ApiError); |
| 473 SET_CLASS_NAME(language_error, LanguageError); | 470 SET_CLASS_NAME(language_error, LanguageError); |
| 474 SET_CLASS_NAME(unhandled_exception, UnhandledException); | 471 SET_CLASS_NAME(unhandled_exception, UnhandledException); |
| 475 SET_CLASS_NAME(unwind_error, UnwindError); | 472 SET_CLASS_NAME(unwind_error, UnwindError); |
| 476 | 473 |
| 477 // Set up names for object array and one byte string class which are | 474 // Set up names for object array and one byte string class which are |
| 478 // pre-allocated in the vm isolate also. | 475 // pre-allocated in the vm isolate also. |
| 479 cls = Dart::vm_isolate()->object_store()->array_class(); | 476 cls = Dart::vm_isolate()->object_store()->array_class(); |
| 480 str = Symbols::ObjectArray(); | 477 cls.set_name(Symbols::ObjectArray()); |
| 481 cls.set_name(str); | |
| 482 cls = Dart::vm_isolate()->object_store()->one_byte_string_class(); | 478 cls = Dart::vm_isolate()->object_store()->one_byte_string_class(); |
| 483 str = Symbols::OneByteString(); | 479 cls.set_name(Symbols::OneByteString()); |
| 484 cls.set_name(str); | |
| 485 } | 480 } |
| 486 | 481 |
| 487 | 482 |
| 488 // Make unused space in an object whose type has been transformed safe | 483 // Make unused space in an object whose type has been transformed safe |
| 489 // for traversing during GC. | 484 // for traversing during GC. |
| 490 // The unused part of the transformed object is marked as an Array | 485 // The unused part of the transformed object is marked as an Array |
| 491 // object or a regular Object so that it can be traversed during garbage | 486 // object or a regular Object so that it can be traversed during garbage |
| 492 // collection. | 487 // collection. |
| 493 void Object::MakeUnusedSpaceTraversable(const Object& obj, | 488 void Object::MakeUnusedSpaceTraversable(const Object& obj, |
| 494 intptr_t original_size, | 489 intptr_t original_size, |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 | 611 |
| 617 Context& context = Context::Handle(Context::New(0, Heap::kOld)); | 612 Context& context = Context::Handle(Context::New(0, Heap::kOld)); |
| 618 object_store->set_empty_context(context); | 613 object_store->set_empty_context(context); |
| 619 | 614 |
| 620 // Now that the symbol table is initialized and that the core dictionary as | 615 // Now that the symbol table is initialized and that the core dictionary as |
| 621 // well as the core implementation dictionary have been setup, preallocate | 616 // well as the core implementation dictionary have been setup, preallocate |
| 622 // remaining classes and register them by name in the dictionaries. | 617 // remaining classes and register them by name in the dictionaries. |
| 623 String& name = String::Handle(); | 618 String& name = String::Handle(); |
| 624 cls = Class::New<Bool>(); | 619 cls = Class::New<Bool>(); |
| 625 object_store->set_bool_class(cls); | 620 object_store->set_bool_class(cls); |
| 626 name = Symbols::Bool(); | 621 RegisterClass(cls, Symbols::Bool(), core_lib); |
| 627 RegisterClass(cls, name, core_lib); | |
| 628 pending_classes.Add(cls, Heap::kOld); | 622 pending_classes.Add(cls, Heap::kOld); |
| 629 | 623 |
| 630 cls = object_store->array_class(); // Was allocated above. | 624 cls = object_store->array_class(); // Was allocated above. |
| 631 name = Symbols::ObjectArray(); | 625 RegisterPrivateClass(cls, Symbols::ObjectArray(), core_lib); |
| 632 RegisterPrivateClass(cls, name, core_lib); | |
| 633 pending_classes.Add(cls, Heap::kOld); | 626 pending_classes.Add(cls, Heap::kOld); |
| 634 // We cannot use NewNonParameterizedType(cls), because Array is parameterized. | 627 // We cannot use NewNonParameterizedType(cls), because Array is parameterized. |
| 635 type ^= Type::New(Object::Handle(cls.raw()), | 628 type ^= Type::New(Object::Handle(cls.raw()), |
| 636 TypeArguments::Handle(), | 629 TypeArguments::Handle(), |
| 637 Scanner::kDummyTokenIndex); | 630 Scanner::kDummyTokenIndex); |
| 638 type.set_is_finalized_instantiated(); | 631 type.set_is_finalized_instantiated(); |
| 639 type ^= type.Canonicalize(); | 632 type ^= type.Canonicalize(); |
| 640 object_store->set_array_type(type); | 633 object_store->set_array_type(type); |
| 641 | 634 |
| 642 cls = object_store->growable_object_array_class(); // Was allocated above. | 635 cls = object_store->growable_object_array_class(); // Was allocated above. |
| 643 name = Symbols::GrowableObjectArray(); | 636 RegisterPrivateClass(cls, Symbols::GrowableObjectArray(), core_lib); |
| 644 RegisterPrivateClass(cls, name, core_lib); | |
| 645 pending_classes.Add(cls, Heap::kOld); | 637 pending_classes.Add(cls, Heap::kOld); |
| 646 | 638 |
| 647 cls = Class::New<ImmutableArray>(); | 639 cls = Class::New<ImmutableArray>(); |
| 648 object_store->set_immutable_array_class(cls); | 640 object_store->set_immutable_array_class(cls); |
| 649 cls.set_type_arguments_field_offset(Array::type_arguments_offset()); | 641 cls.set_type_arguments_field_offset(Array::type_arguments_offset()); |
| 650 ASSERT(object_store->immutable_array_class() != object_store->array_class()); | 642 ASSERT(object_store->immutable_array_class() != object_store->array_class()); |
| 651 name = Symbols::ImmutableArray(); | 643 RegisterPrivateClass(cls, Symbols::ImmutableArray(), core_lib); |
| 652 RegisterPrivateClass(cls, name, core_lib); | |
| 653 pending_classes.Add(cls, Heap::kOld); | 644 pending_classes.Add(cls, Heap::kOld); |
| 654 | 645 |
| 655 cls = object_store->one_byte_string_class(); // Was allocated above. | 646 cls = object_store->one_byte_string_class(); // Was allocated above. |
| 656 name = Symbols::OneByteString(); | 647 RegisterPrivateClass(cls, Symbols::OneByteString(), core_lib); |
| 657 RegisterPrivateClass(cls, name, core_lib); | |
| 658 pending_classes.Add(cls, Heap::kOld); | 648 pending_classes.Add(cls, Heap::kOld); |
| 659 | 649 |
| 660 cls = object_store->two_byte_string_class(); // Was allocated above. | 650 cls = object_store->two_byte_string_class(); // Was allocated above. |
| 661 name = Symbols::TwoByteString(); | 651 RegisterPrivateClass(cls, Symbols::TwoByteString(), core_lib); |
| 662 RegisterPrivateClass(cls, name, core_lib); | |
| 663 pending_classes.Add(cls, Heap::kOld); | 652 pending_classes.Add(cls, Heap::kOld); |
| 664 | 653 |
| 665 cls = Class::NewStringClass(kExternalOneByteStringCid); | 654 cls = Class::NewStringClass(kExternalOneByteStringCid); |
| 666 object_store->set_external_one_byte_string_class(cls); | 655 object_store->set_external_one_byte_string_class(cls); |
| 667 name = Symbols::ExternalOneByteString(); | 656 RegisterPrivateClass(cls, Symbols::ExternalOneByteString(), core_lib); |
| 668 RegisterPrivateClass(cls, name, core_lib); | |
| 669 pending_classes.Add(cls, Heap::kOld); | 657 pending_classes.Add(cls, Heap::kOld); |
| 670 | 658 |
| 671 cls = Class::NewStringClass(kExternalTwoByteStringCid); | 659 cls = Class::NewStringClass(kExternalTwoByteStringCid); |
| 672 object_store->set_external_two_byte_string_class(cls); | 660 object_store->set_external_two_byte_string_class(cls); |
| 673 name = Symbols::ExternalTwoByteString(); | 661 RegisterPrivateClass(cls, Symbols::ExternalTwoByteString(), core_lib); |
| 674 RegisterPrivateClass(cls, name, core_lib); | |
| 675 pending_classes.Add(cls, Heap::kOld); | 662 pending_classes.Add(cls, Heap::kOld); |
| 676 | 663 |
| 677 cls = Class::New<Stacktrace>(); | 664 cls = Class::New<Stacktrace>(); |
| 678 object_store->set_stacktrace_class(cls); | 665 object_store->set_stacktrace_class(cls); |
| 679 name = Symbols::Stacktrace(); | 666 RegisterClass(cls, Symbols::Stacktrace(), core_lib); |
| 680 RegisterClass(cls, name, core_lib); | |
| 681 pending_classes.Add(cls, Heap::kOld); | 667 pending_classes.Add(cls, Heap::kOld); |
| 682 // Super type set below, after Object is allocated. | 668 // Super type set below, after Object is allocated. |
| 683 | 669 |
| 684 cls = Class::New<JSRegExp>(); | 670 cls = Class::New<JSRegExp>(); |
| 685 object_store->set_jsregexp_class(cls); | 671 object_store->set_jsregexp_class(cls); |
| 686 name = Symbols::JSSyntaxRegExp(); | 672 RegisterPrivateClass(cls, Symbols::JSSyntaxRegExp(), core_lib); |
| 687 RegisterPrivateClass(cls, name, core_lib); | |
| 688 pending_classes.Add(cls, Heap::kOld); | 673 pending_classes.Add(cls, Heap::kOld); |
| 689 | 674 |
| 690 // Initialize the base interfaces used by the core VM classes. | 675 // Initialize the base interfaces used by the core VM classes. |
| 691 const Script& script = Script::Handle(Bootstrap::LoadCoreScript(false)); | 676 const Script& script = Script::Handle(Bootstrap::LoadCoreScript(false)); |
| 692 | 677 |
| 693 // Allocate and initialize the pre-allocated classes in the core library. | 678 // Allocate and initialize the pre-allocated classes in the core library. |
| 694 cls = Class::New<Instance>(kInstanceCid); | 679 cls = Class::New<Instance>(kInstanceCid); |
| 695 object_store->set_object_class(cls); | 680 object_store->set_object_class(cls); |
| 696 name = Symbols::Object(); | 681 cls.set_name(Symbols::Object()); |
| 697 cls.set_name(name); | |
| 698 cls.set_script(script); | 682 cls.set_script(script); |
| 699 cls.set_is_prefinalized(); | 683 cls.set_is_prefinalized(); |
| 700 core_lib.AddClass(cls); | 684 core_lib.AddClass(cls); |
| 701 pending_classes.Add(cls, Heap::kOld); | 685 pending_classes.Add(cls, Heap::kOld); |
| 702 type = Type::NewNonParameterizedType(cls); | 686 type = Type::NewNonParameterizedType(cls); |
| 703 object_store->set_object_type(type); | 687 object_store->set_object_type(type); |
| 704 | 688 |
| 705 cls = object_store->type_class(); | 689 cls = object_store->type_class(); |
| 706 name = Symbols::Type(); | 690 RegisterPrivateClass(cls, Symbols::Type(), core_lib); |
| 707 RegisterPrivateClass(cls, name, core_lib); | |
| 708 pending_classes.Add(cls, Heap::kOld); | 691 pending_classes.Add(cls, Heap::kOld); |
| 709 | 692 |
| 710 cls = object_store->type_parameter_class(); | 693 cls = object_store->type_parameter_class(); |
| 711 name = Symbols::TypeParameter(); | 694 RegisterPrivateClass(cls, Symbols::TypeParameter(), core_lib); |
| 712 RegisterPrivateClass(cls, name, core_lib); | |
| 713 pending_classes.Add(cls, Heap::kOld); | 695 pending_classes.Add(cls, Heap::kOld); |
| 714 | 696 |
| 715 cls = Class::New<Integer>(); | 697 cls = Class::New<Integer>(); |
| 716 object_store->set_integer_implementation_class(cls); | 698 object_store->set_integer_implementation_class(cls); |
| 717 name = Symbols::IntegerImplementation(); | 699 RegisterPrivateClass(cls, Symbols::IntegerImplementation(), core_lib); |
| 718 RegisterPrivateClass(cls, name, core_lib); | |
| 719 pending_classes.Add(cls, Heap::kOld); | 700 pending_classes.Add(cls, Heap::kOld); |
| 720 | 701 |
| 721 cls = Class::New<Smi>(); | 702 cls = Class::New<Smi>(); |
| 722 object_store->set_smi_class(cls); | 703 object_store->set_smi_class(cls); |
| 723 name = Symbols::Smi(); | 704 RegisterPrivateClass(cls, Symbols::_Smi(), core_lib); |
| 724 RegisterPrivateClass(cls, name, core_lib); | |
| 725 pending_classes.Add(cls, Heap::kOld); | 705 pending_classes.Add(cls, Heap::kOld); |
| 726 | 706 |
| 727 cls = Class::New<Mint>(); | 707 cls = Class::New<Mint>(); |
| 728 object_store->set_mint_class(cls); | 708 object_store->set_mint_class(cls); |
| 729 name = Symbols::Mint(); | 709 RegisterPrivateClass(cls, Symbols::_Mint(), core_lib); |
| 730 RegisterPrivateClass(cls, name, core_lib); | |
| 731 pending_classes.Add(cls, Heap::kOld); | 710 pending_classes.Add(cls, Heap::kOld); |
| 732 | 711 |
| 733 cls = Class::New<Bigint>(); | 712 cls = Class::New<Bigint>(); |
| 734 object_store->set_bigint_class(cls); | 713 object_store->set_bigint_class(cls); |
| 735 name = Symbols::Bigint(); | 714 RegisterPrivateClass(cls, Symbols::_Bigint(), core_lib); |
| 736 RegisterPrivateClass(cls, name, core_lib); | |
| 737 pending_classes.Add(cls, Heap::kOld); | 715 pending_classes.Add(cls, Heap::kOld); |
| 738 | 716 |
| 739 cls = Class::New<Double>(); | 717 cls = Class::New<Double>(); |
| 740 object_store->set_double_class(cls); | 718 object_store->set_double_class(cls); |
| 741 name = Symbols::Double(); | 719 RegisterPrivateClass(cls, Symbols::_Double(), core_lib); |
| 742 RegisterPrivateClass(cls, name, core_lib); | |
| 743 pending_classes.Add(cls, Heap::kOld); | 720 pending_classes.Add(cls, Heap::kOld); |
| 744 | 721 |
| 745 cls = Class::New<WeakProperty>(); | 722 cls = Class::New<WeakProperty>(); |
| 746 object_store->set_weak_property_class(cls); | 723 object_store->set_weak_property_class(cls); |
| 747 name = Symbols::_WeakProperty(); | 724 RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib); |
| 748 RegisterPrivateClass(cls, name, core_lib); | |
| 749 | 725 |
| 750 Library::InitScalarlistLibrary(isolate); | 726 Library::InitScalarlistLibrary(isolate); |
| 751 Library& scalarlist_lib = Library::Handle(Library::ScalarlistLibrary()); | 727 Library& scalarlist_lib = Library::Handle(Library::ScalarlistLibrary()); |
| 752 | 728 |
| 753 cls = Class::New<Int8Array>(); | 729 cls = Class::New<Int8Array>(); |
| 754 object_store->set_int8_array_class(cls); | 730 object_store->set_int8_array_class(cls); |
| 755 name = Symbols::_Int8Array(); | 731 RegisterPrivateClass(cls, Symbols::_Int8Array(), scalarlist_lib); |
| 756 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 757 | 732 |
| 758 cls = Class::New<Uint8Array>(); | 733 cls = Class::New<Uint8Array>(); |
| 759 object_store->set_uint8_array_class(cls); | 734 object_store->set_uint8_array_class(cls); |
| 760 name = Symbols::_Uint8Array(); | 735 RegisterPrivateClass(cls, Symbols::_Uint8Array(), scalarlist_lib); |
| 761 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 762 | 736 |
| 763 cls = Class::New<Uint8ClampedArray>(); | 737 cls = Class::New<Uint8ClampedArray>(); |
| 764 object_store->set_uint8_clamped_array_class(cls); | 738 object_store->set_uint8_clamped_array_class(cls); |
| 765 name = Symbols::_Uint8ClampedArray(); | 739 RegisterPrivateClass(cls, Symbols::_Uint8ClampedArray(), scalarlist_lib); |
| 766 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 767 | 740 |
| 768 cls = Class::New<Int16Array>(); | 741 cls = Class::New<Int16Array>(); |
| 769 object_store->set_int16_array_class(cls); | 742 object_store->set_int16_array_class(cls); |
| 770 name = Symbols::_Int16Array(); | 743 RegisterPrivateClass(cls, Symbols::_Int16Array(), scalarlist_lib); |
| 771 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 772 | 744 |
| 773 cls = Class::New<Uint16Array>(); | 745 cls = Class::New<Uint16Array>(); |
| 774 object_store->set_uint16_array_class(cls); | 746 object_store->set_uint16_array_class(cls); |
| 775 name = Symbols::_Uint16Array(); | 747 RegisterPrivateClass(cls, Symbols::_Uint16Array(), scalarlist_lib); |
| 776 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 777 | 748 |
| 778 cls = Class::New<Int32Array>(); | 749 cls = Class::New<Int32Array>(); |
| 779 object_store->set_int32_array_class(cls); | 750 object_store->set_int32_array_class(cls); |
| 780 name = Symbols::_Int32Array(); | 751 RegisterPrivateClass(cls, Symbols::_Int32Array(), scalarlist_lib); |
| 781 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 782 | 752 |
| 783 cls = Class::New<Uint32Array>(); | 753 cls = Class::New<Uint32Array>(); |
| 784 object_store->set_uint32_array_class(cls); | 754 object_store->set_uint32_array_class(cls); |
| 785 name = Symbols::_Uint32Array(); | 755 RegisterPrivateClass(cls, Symbols::_Uint32Array(), scalarlist_lib); |
| 786 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 787 | 756 |
| 788 cls = Class::New<Int64Array>(); | 757 cls = Class::New<Int64Array>(); |
| 789 object_store->set_int64_array_class(cls); | 758 object_store->set_int64_array_class(cls); |
| 790 name = Symbols::_Int64Array(); | 759 RegisterPrivateClass(cls, Symbols::_Int64Array(), scalarlist_lib); |
| 791 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 792 | 760 |
| 793 cls = Class::New<Uint64Array>(); | 761 cls = Class::New<Uint64Array>(); |
| 794 object_store->set_uint64_array_class(cls); | 762 object_store->set_uint64_array_class(cls); |
| 795 name = Symbols::_Uint64Array(); | 763 RegisterPrivateClass(cls, Symbols::_Uint64Array(), scalarlist_lib); |
| 796 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 797 | 764 |
| 798 cls = Class::New<Float32Array>(); | 765 cls = Class::New<Float32Array>(); |
| 799 object_store->set_float32_array_class(cls); | 766 object_store->set_float32_array_class(cls); |
| 800 name = Symbols::_Float32Array(); | 767 RegisterPrivateClass(cls, Symbols::_Float32Array(), scalarlist_lib); |
| 801 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 802 | 768 |
| 803 cls = Class::New<Float64Array>(); | 769 cls = Class::New<Float64Array>(); |
| 804 object_store->set_float64_array_class(cls); | 770 object_store->set_float64_array_class(cls); |
| 805 name = Symbols::_Float64Array(); | 771 RegisterPrivateClass(cls, Symbols::_Float64Array(), scalarlist_lib); |
| 806 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 807 | 772 |
| 808 cls = Class::New<ExternalInt8Array>(); | 773 cls = Class::New<ExternalInt8Array>(); |
| 809 object_store->set_external_int8_array_class(cls); | 774 object_store->set_external_int8_array_class(cls); |
| 810 name = Symbols::_ExternalInt8Array(); | 775 RegisterPrivateClass(cls, Symbols::_ExternalInt8Array(), scalarlist_lib); |
| 811 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 812 | 776 |
| 813 cls = Class::New<ExternalUint8Array>(); | 777 cls = Class::New<ExternalUint8Array>(); |
| 814 object_store->set_external_uint8_array_class(cls); | 778 object_store->set_external_uint8_array_class(cls); |
| 815 name = Symbols::_ExternalUint8Array(); | 779 RegisterPrivateClass(cls, Symbols::_ExternalUint8Array(), scalarlist_lib); |
| 816 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 817 | 780 |
| 818 cls = Class::New<ExternalUint8ClampedArray>(); | 781 cls = Class::New<ExternalUint8ClampedArray>(); |
| 819 object_store->set_external_uint8_clamped_array_class(cls); | 782 object_store->set_external_uint8_clamped_array_class(cls); |
| 820 name = Symbols::_ExternalUint8ClampedArray(); | 783 RegisterPrivateClass(cls, |
| 821 RegisterPrivateClass(cls, name, scalarlist_lib); | 784 Symbols::_ExternalUint8ClampedArray(), |
| 785 scalarlist_lib); |
| 822 | 786 |
| 823 cls = Class::New<ExternalInt16Array>(); | 787 cls = Class::New<ExternalInt16Array>(); |
| 824 object_store->set_external_int16_array_class(cls); | 788 object_store->set_external_int16_array_class(cls); |
| 825 name = Symbols::_ExternalInt16Array(); | 789 RegisterPrivateClass(cls, Symbols::_ExternalInt16Array(), scalarlist_lib); |
| 826 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 827 | 790 |
| 828 cls = Class::New<ExternalUint16Array>(); | 791 cls = Class::New<ExternalUint16Array>(); |
| 829 object_store->set_external_uint16_array_class(cls); | 792 object_store->set_external_uint16_array_class(cls); |
| 830 name = Symbols::_ExternalUint16Array(); | 793 RegisterPrivateClass(cls, Symbols::_ExternalUint16Array(), scalarlist_lib); |
| 831 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 832 | 794 |
| 833 cls = Class::New<ExternalInt32Array>(); | 795 cls = Class::New<ExternalInt32Array>(); |
| 834 object_store->set_external_int32_array_class(cls); | 796 object_store->set_external_int32_array_class(cls); |
| 835 name = Symbols::_ExternalInt32Array(); | 797 RegisterPrivateClass(cls, Symbols::_ExternalInt32Array(), scalarlist_lib); |
| 836 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 837 | 798 |
| 838 cls = Class::New<ExternalUint32Array>(); | 799 cls = Class::New<ExternalUint32Array>(); |
| 839 object_store->set_external_uint32_array_class(cls); | 800 object_store->set_external_uint32_array_class(cls); |
| 840 name = Symbols::_ExternalUint32Array(); | 801 RegisterPrivateClass(cls, Symbols::_ExternalUint32Array(), scalarlist_lib); |
| 841 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 842 | 802 |
| 843 cls = Class::New<ExternalInt64Array>(); | 803 cls = Class::New<ExternalInt64Array>(); |
| 844 object_store->set_external_int64_array_class(cls); | 804 object_store->set_external_int64_array_class(cls); |
| 845 name = Symbols::_ExternalInt64Array(); | 805 RegisterPrivateClass(cls, Symbols::_ExternalInt64Array(), scalarlist_lib); |
| 846 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 847 | 806 |
| 848 cls = Class::New<ExternalUint64Array>(); | 807 cls = Class::New<ExternalUint64Array>(); |
| 849 object_store->set_external_uint64_array_class(cls); | 808 object_store->set_external_uint64_array_class(cls); |
| 850 name = Symbols::_ExternalUint64Array(); | 809 RegisterPrivateClass(cls, Symbols::_ExternalUint64Array(), scalarlist_lib); |
| 851 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 852 | 810 |
| 853 cls = Class::New<ExternalFloat32Array>(); | 811 cls = Class::New<ExternalFloat32Array>(); |
| 854 object_store->set_external_float32_array_class(cls); | 812 object_store->set_external_float32_array_class(cls); |
| 855 name = Symbols::_ExternalFloat32Array(); | 813 RegisterPrivateClass(cls, Symbols::_ExternalFloat32Array(), scalarlist_lib); |
| 856 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 857 | 814 |
| 858 cls = Class::New<ExternalFloat64Array>(); | 815 cls = Class::New<ExternalFloat64Array>(); |
| 859 object_store->set_external_float64_array_class(cls); | 816 object_store->set_external_float64_array_class(cls); |
| 860 name = Symbols::_ExternalFloat64Array(); | 817 RegisterPrivateClass(cls, Symbols::_ExternalFloat64Array(), scalarlist_lib); |
| 861 RegisterPrivateClass(cls, name, scalarlist_lib); | |
| 862 | 818 |
| 863 // Set the super type of class Stacktrace to Object type so that the | 819 // Set the super type of class Stacktrace to Object type so that the |
| 864 // 'toString' method is implemented. | 820 // 'toString' method is implemented. |
| 865 cls = object_store->stacktrace_class(); | 821 cls = object_store->stacktrace_class(); |
| 866 cls.set_super_type(type); | 822 cls.set_super_type(type); |
| 867 | 823 |
| 868 // Note: The abstract class Function is represented by VM class | 824 // Note: The abstract class Function is represented by VM class |
| 869 // DartFunction, not VM class Function. | 825 // DartFunction, not VM class Function. |
| 870 name = Symbols::Function(); | |
| 871 cls = Class::New<DartFunction>(); | 826 cls = Class::New<DartFunction>(); |
| 872 RegisterClass(cls, name, core_lib); | 827 RegisterClass(cls, Symbols::Function(), core_lib); |
| 873 pending_classes.Add(cls, Heap::kOld); | 828 pending_classes.Add(cls, Heap::kOld); |
| 874 type = Type::NewNonParameterizedType(cls); | 829 type = Type::NewNonParameterizedType(cls); |
| 875 object_store->set_function_type(type); | 830 object_store->set_function_type(type); |
| 876 | 831 |
| 877 cls = Class::New<Number>(); | 832 cls = Class::New<Number>(); |
| 878 name = Symbols::Number(); | 833 RegisterClass(cls, Symbols::Number(), core_lib); |
| 879 RegisterClass(cls, name, core_lib); | |
| 880 pending_classes.Add(cls, Heap::kOld); | 834 pending_classes.Add(cls, Heap::kOld); |
| 881 type = Type::NewNonParameterizedType(cls); | 835 type = Type::NewNonParameterizedType(cls); |
| 882 object_store->set_number_type(type); | 836 object_store->set_number_type(type); |
| 883 | 837 |
| 884 name = Symbols::New("int"); | 838 cls = Class::New<Instance>(Symbols::Int(), script, Scanner::kDummyTokenIndex); |
| 885 cls = Class::New<Instance>(name, script, Scanner::kDummyTokenIndex); | 839 RegisterClass(cls, Symbols::Int(), core_lib); |
| 886 RegisterClass(cls, name, core_lib); | |
| 887 pending_classes.Add(cls, Heap::kOld); | 840 pending_classes.Add(cls, Heap::kOld); |
| 888 type = Type::NewNonParameterizedType(cls); | 841 type = Type::NewNonParameterizedType(cls); |
| 889 object_store->set_int_type(type); | 842 object_store->set_int_type(type); |
| 890 | 843 |
| 891 name = Symbols::New("double"); | 844 cls = Class::New<Instance>(Symbols::Double(), |
| 892 cls = Class::New<Instance>(name, script, Scanner::kDummyTokenIndex); | 845 script, |
| 893 RegisterClass(cls, name, core_lib); | 846 Scanner::kDummyTokenIndex); |
| 847 RegisterClass(cls, Symbols::Double(), core_lib); |
| 894 pending_classes.Add(cls, Heap::kOld); | 848 pending_classes.Add(cls, Heap::kOld); |
| 895 type = Type::NewNonParameterizedType(cls); | 849 type = Type::NewNonParameterizedType(cls); |
| 896 object_store->set_double_type(type); | 850 object_store->set_double_type(type); |
| 897 | 851 |
| 898 name = Symbols::New("String"); | 852 name = Symbols::New("String"); |
| 899 cls = Class::New<Instance>(name, script, Scanner::kDummyTokenIndex); | 853 cls = Class::New<Instance>(name, script, Scanner::kDummyTokenIndex); |
| 900 RegisterClass(cls, name, core_lib); | 854 RegisterClass(cls, name, core_lib); |
| 901 pending_classes.Add(cls, Heap::kOld); | 855 pending_classes.Add(cls, Heap::kOld); |
| 902 type = Type::NewNonParameterizedType(cls); | 856 type = Type::NewNonParameterizedType(cls); |
| 903 object_store->set_string_type(type); | 857 object_store->set_string_type(type); |
| 904 | 858 |
| 905 name = Symbols::New("List"); | 859 cls = Class::New<Instance>(Symbols::List(), |
| 906 cls = Class::New<Instance>(name, script, Scanner::kDummyTokenIndex); | 860 script, |
| 907 RegisterClass(cls, name, core_lib); | 861 Scanner::kDummyTokenIndex); |
| 862 RegisterClass(cls, Symbols::List(), core_lib); |
| 908 pending_classes.Add(cls, Heap::kOld); | 863 pending_classes.Add(cls, Heap::kOld); |
| 909 object_store->set_list_class(cls); | 864 object_store->set_list_class(cls); |
| 910 | 865 |
| 911 cls = object_store->bool_class(); | 866 cls = object_store->bool_class(); |
| 912 type = Type::NewNonParameterizedType(cls); | 867 type = Type::NewNonParameterizedType(cls); |
| 913 object_store->set_bool_type(type); | 868 object_store->set_bool_type(type); |
| 914 | 869 |
| 915 cls = object_store->smi_class(); | 870 cls = object_store->smi_class(); |
| 916 type = Type::NewNonParameterizedType(cls); | 871 type = Type::NewNonParameterizedType(cls); |
| 917 object_store->set_smi_type(type); | 872 object_store->set_smi_type(type); |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1288 | 1243 |
| 1289 RawString* Class::UserVisibleName() const { | 1244 RawString* Class::UserVisibleName() const { |
| 1290 if (FLAG_show_internal_names) { | 1245 if (FLAG_show_internal_names) { |
| 1291 return Name(); | 1246 return Name(); |
| 1292 } | 1247 } |
| 1293 switch (id()) { | 1248 switch (id()) { |
| 1294 case kIntegerCid: | 1249 case kIntegerCid: |
| 1295 case kSmiCid: | 1250 case kSmiCid: |
| 1296 case kMintCid: | 1251 case kMintCid: |
| 1297 case kBigintCid: | 1252 case kBigintCid: |
| 1298 return Symbols::New("int"); | 1253 return Symbols::Int().raw(); |
| 1299 case kDoubleCid: | 1254 case kDoubleCid: |
| 1300 return Symbols::New("double"); | 1255 return Symbols::Double().raw(); |
| 1301 case kOneByteStringCid: | 1256 case kOneByteStringCid: |
| 1302 case kTwoByteStringCid: | 1257 case kTwoByteStringCid: |
| 1303 case kExternalOneByteStringCid: | 1258 case kExternalOneByteStringCid: |
| 1304 case kExternalTwoByteStringCid: | 1259 case kExternalTwoByteStringCid: |
| 1305 return Symbols::New("String"); | 1260 return Symbols::New("String"); |
| 1306 case kArrayCid: | 1261 case kArrayCid: |
| 1307 case kImmutableArrayCid: | 1262 case kImmutableArrayCid: |
| 1308 case kGrowableObjectArrayCid: | 1263 case kGrowableObjectArrayCid: |
| 1309 return Symbols::New("List"); | 1264 return Symbols::List().raw(); |
| 1310 case kInt8ArrayCid: | 1265 case kInt8ArrayCid: |
| 1311 case kExternalInt8ArrayCid: | 1266 case kExternalInt8ArrayCid: |
| 1312 return Symbols::New("Int8List"); | 1267 return Symbols::Int8List().raw(); |
| 1313 case kUint8ArrayCid: | 1268 case kUint8ArrayCid: |
| 1314 case kExternalUint8ArrayCid: | 1269 case kExternalUint8ArrayCid: |
| 1315 return Symbols::New("Uint8List"); | 1270 return Symbols::Uint8List().raw(); |
| 1316 case kUint8ClampedArrayCid: | 1271 case kUint8ClampedArrayCid: |
| 1317 case kExternalUint8ClampedArrayCid: | 1272 case kExternalUint8ClampedArrayCid: |
| 1318 return Symbols::New("Uint8ClampedList"); | 1273 return Symbols::Uint8ClampedList().raw(); |
| 1319 case kInt16ArrayCid: | 1274 case kInt16ArrayCid: |
| 1320 case kExternalInt16ArrayCid: | 1275 case kExternalInt16ArrayCid: |
| 1321 return Symbols::New("Int16List"); | 1276 return Symbols::Int16List().raw(); |
| 1322 case kUint16ArrayCid: | 1277 case kUint16ArrayCid: |
| 1323 case kExternalUint16ArrayCid: | 1278 case kExternalUint16ArrayCid: |
| 1324 return Symbols::New("Uint16List"); | 1279 return Symbols::Uint16List().raw(); |
| 1325 case kInt32ArrayCid: | 1280 case kInt32ArrayCid: |
| 1326 case kExternalInt32ArrayCid: | 1281 case kExternalInt32ArrayCid: |
| 1327 return Symbols::New("Int32List"); | 1282 return Symbols::Int32List().raw(); |
| 1328 case kUint32ArrayCid: | 1283 case kUint32ArrayCid: |
| 1329 case kExternalUint32ArrayCid: | 1284 case kExternalUint32ArrayCid: |
| 1330 return Symbols::New("Uint32List"); | 1285 return Symbols::Uint32List().raw(); |
| 1331 case kInt64ArrayCid: | 1286 case kInt64ArrayCid: |
| 1332 case kExternalInt64ArrayCid: | 1287 case kExternalInt64ArrayCid: |
| 1333 return Symbols::New("Int64List"); | 1288 return Symbols::Int64List().raw(); |
| 1334 case kUint64ArrayCid: | 1289 case kUint64ArrayCid: |
| 1335 case kExternalUint64ArrayCid: | 1290 case kExternalUint64ArrayCid: |
| 1336 return Symbols::New("Uint64List"); | 1291 return Symbols::Uint64List().raw(); |
| 1337 case kFloat32ArrayCid: | 1292 case kFloat32ArrayCid: |
| 1338 case kExternalFloat32ArrayCid: | 1293 case kExternalFloat32ArrayCid: |
| 1339 return Symbols::New("Float32List"); | 1294 return Symbols::Float32List().raw(); |
| 1340 case kFloat64ArrayCid: | 1295 case kFloat64ArrayCid: |
| 1341 case kExternalFloat64ArrayCid: | 1296 case kExternalFloat64ArrayCid: |
| 1342 return Symbols::New("Float64List"); | 1297 return Symbols::Float64List().raw(); |
| 1343 default: | 1298 default: |
| 1344 if (!IsSignatureClass()) { | 1299 if (!IsSignatureClass()) { |
| 1345 const String& name = String::Handle(Name()); | 1300 const String& name = String::Handle(Name()); |
| 1346 return IdentifierPrettyName(name); | 1301 return IdentifierPrettyName(name); |
| 1347 } else { | 1302 } else { |
| 1348 return Name(); | 1303 return Name(); |
| 1349 } | 1304 } |
| 1350 } | 1305 } |
| 1351 UNREACHABLE(); | 1306 UNREACHABLE(); |
| 1352 } | 1307 } |
| (...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2119 } | 2074 } |
| 2120 // Check for two function types. | 2075 // Check for two function types. |
| 2121 const Function& fun = Function::Handle(signature_function()); | 2076 const Function& fun = Function::Handle(signature_function()); |
| 2122 return fun.TypeTest(test_kind, | 2077 return fun.TypeTest(test_kind, |
| 2123 type_arguments, | 2078 type_arguments, |
| 2124 other_fun, | 2079 other_fun, |
| 2125 other_type_arguments, | 2080 other_type_arguments, |
| 2126 malformed_error); | 2081 malformed_error); |
| 2127 } | 2082 } |
| 2128 // Check if type S has a call() method of function type T. | 2083 // Check if type S has a call() method of function type T. |
| 2129 const String& function_name = String::Handle(Symbols::Call()); | 2084 Function& function = |
| 2130 Function& function = Function::Handle(LookupDynamicFunction(function_name)); | 2085 Function::Handle(LookupDynamicFunction(Symbols::Call())); |
| 2131 if (function.IsNull()) { | 2086 if (function.IsNull()) { |
| 2132 // Walk up the super_class chain. | 2087 // Walk up the super_class chain. |
| 2133 Class& cls = Class::Handle(SuperClass()); | 2088 Class& cls = Class::Handle(SuperClass()); |
| 2134 while (!cls.IsNull() && function.IsNull()) { | 2089 while (!cls.IsNull() && function.IsNull()) { |
| 2135 function = cls.LookupDynamicFunction(function_name); | 2090 function = cls.LookupDynamicFunction(Symbols::Call()); |
| 2136 cls = cls.SuperClass(); | 2091 cls = cls.SuperClass(); |
| 2137 } | 2092 } |
| 2138 } | 2093 } |
| 2139 if (!function.IsNull()) { | 2094 if (!function.IsNull()) { |
| 2140 if (other_is_function_class || | 2095 if (other_is_function_class || |
| 2141 function.TypeTest(test_kind, | 2096 function.TypeTest(test_kind, |
| 2142 type_arguments, | 2097 type_arguments, |
| 2143 other_fun, | 2098 other_fun, |
| 2144 other_type_arguments, | 2099 other_type_arguments, |
| 2145 malformed_error)) { | 2100 malformed_error)) { |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2473 void UnresolvedClass::set_library_prefix( | 2428 void UnresolvedClass::set_library_prefix( |
| 2474 const LibraryPrefix& library_prefix) const { | 2429 const LibraryPrefix& library_prefix) const { |
| 2475 StorePointer(&raw_ptr()->library_prefix_, library_prefix.raw()); | 2430 StorePointer(&raw_ptr()->library_prefix_, library_prefix.raw()); |
| 2476 } | 2431 } |
| 2477 | 2432 |
| 2478 | 2433 |
| 2479 RawString* UnresolvedClass::Name() const { | 2434 RawString* UnresolvedClass::Name() const { |
| 2480 if (library_prefix() != LibraryPrefix::null()) { | 2435 if (library_prefix() != LibraryPrefix::null()) { |
| 2481 const LibraryPrefix& lib_prefix = LibraryPrefix::Handle(library_prefix()); | 2436 const LibraryPrefix& lib_prefix = LibraryPrefix::Handle(library_prefix()); |
| 2482 String& name = String::Handle(); | 2437 String& name = String::Handle(); |
| 2483 String& str = String::Handle(); | |
| 2484 name = lib_prefix.name(); // Qualifier. | 2438 name = lib_prefix.name(); // Qualifier. |
| 2485 str = Symbols::Dot(); | 2439 name = String::Concat(name, Symbols::Dot()); |
| 2486 name = String::Concat(name, str); | 2440 const String& str = String::Handle(ident()); |
| 2487 str = ident(); | |
| 2488 name = String::Concat(name, str); | 2441 name = String::Concat(name, str); |
| 2489 return name.raw(); | 2442 return name.raw(); |
| 2490 } else { | 2443 } else { |
| 2491 return ident(); | 2444 return ident(); |
| 2492 } | 2445 } |
| 2493 } | 2446 } |
| 2494 | 2447 |
| 2495 | 2448 |
| 2496 const char* UnresolvedClass::ToCString() const { | 2449 const char* UnresolvedClass::ToCString() const { |
| 2497 const char* format = "unresolved class '%s'"; | 2450 const char* format = "unresolved class '%s'"; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2570 | 2523 |
| 2571 RawString* AbstractTypeArguments::SubvectorName( | 2524 RawString* AbstractTypeArguments::SubvectorName( |
| 2572 intptr_t from_index, | 2525 intptr_t from_index, |
| 2573 intptr_t len, | 2526 intptr_t len, |
| 2574 NameVisibility name_visibility) const { | 2527 NameVisibility name_visibility) const { |
| 2575 ASSERT(from_index + len <= Length()); | 2528 ASSERT(from_index + len <= Length()); |
| 2576 String& name = String::Handle(); | 2529 String& name = String::Handle(); |
| 2577 const intptr_t num_strings = 2*len + 1; // "<""T"", ""T"">". | 2530 const intptr_t num_strings = 2*len + 1; // "<""T"", ""T"">". |
| 2578 const Array& strings = Array::Handle(Array::New(num_strings)); | 2531 const Array& strings = Array::Handle(Array::New(num_strings)); |
| 2579 intptr_t s = 0; | 2532 intptr_t s = 0; |
| 2580 strings.SetAt(s++, String::Handle(Symbols::New("<"))); | 2533 strings.SetAt(s++, Symbols::LAngleBracket()); |
| 2581 const String& kCommaSpace = String::Handle(Symbols::New(", ")); | |
| 2582 AbstractType& type = AbstractType::Handle(); | 2534 AbstractType& type = AbstractType::Handle(); |
| 2583 for (intptr_t i = 0; i < len; i++) { | 2535 for (intptr_t i = 0; i < len; i++) { |
| 2584 type = TypeAt(from_index + i); | 2536 type = TypeAt(from_index + i); |
| 2585 name = type.BuildName(name_visibility); | 2537 name = type.BuildName(name_visibility); |
| 2586 strings.SetAt(s++, name); | 2538 strings.SetAt(s++, name); |
| 2587 if (i < len - 1) { | 2539 if (i < len - 1) { |
| 2588 strings.SetAt(s++, kCommaSpace); | 2540 strings.SetAt(s++, Symbols::CommaSpace()); |
| 2589 } | 2541 } |
| 2590 } | 2542 } |
| 2591 strings.SetAt(s++, String::Handle(Symbols::New(">"))); | 2543 strings.SetAt(s++, Symbols::RAngleBracket()); |
| 2592 ASSERT(s == num_strings); | 2544 ASSERT(s == num_strings); |
| 2593 name = String::ConcatAll(strings); | 2545 name = String::ConcatAll(strings); |
| 2594 return Symbols::New(name); | 2546 return Symbols::New(name); |
| 2595 } | 2547 } |
| 2596 | 2548 |
| 2597 | 2549 |
| 2598 bool AbstractTypeArguments::Equals(const AbstractTypeArguments& other) const { | 2550 bool AbstractTypeArguments::Equals(const AbstractTypeArguments& other) const { |
| 2599 ASSERT(!IsNull()); // Use AbstractTypeArguments::AreEqual(). | 2551 ASSERT(!IsNull()); // Use AbstractTypeArguments::AreEqual(). |
| 2600 if (this->raw() == other.raw()) { | 2552 if (this->raw() == other.raw()) { |
| 2601 return true; | 2553 return true; |
| (...skipping 928 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3530 | 3482 |
| 3531 void Function::set_is_inlinable(bool value) const { | 3483 void Function::set_is_inlinable(bool value) const { |
| 3532 set_kind_tag(InlinableBit::update(value, raw_ptr()->kind_tag_)); | 3484 set_kind_tag(InlinableBit::update(value, raw_ptr()->kind_tag_)); |
| 3533 } | 3485 } |
| 3534 | 3486 |
| 3535 | 3487 |
| 3536 bool Function::IsInlineable() const { | 3488 bool Function::IsInlineable() const { |
| 3537 // '==' call is handled specially. | 3489 // '==' call is handled specially. |
| 3538 return InlinableBit::decode(raw_ptr()->kind_tag_) && | 3490 return InlinableBit::decode(raw_ptr()->kind_tag_) && |
| 3539 HasCode() && | 3491 HasCode() && |
| 3540 name() != Symbols::EqualOperator(); | 3492 name() != Symbols::EqualOperator().raw(); |
| 3541 } | 3493 } |
| 3542 | 3494 |
| 3543 | 3495 |
| 3544 intptr_t Function::NumParameters() const { | 3496 intptr_t Function::NumParameters() const { |
| 3545 return num_fixed_parameters() + NumOptionalParameters(); | 3497 return num_fixed_parameters() + NumOptionalParameters(); |
| 3546 } | 3498 } |
| 3547 | 3499 |
| 3548 | 3500 |
| 3549 intptr_t Function::NumImplicitParameters() const { | 3501 intptr_t Function::NumImplicitParameters() const { |
| 3550 if (kind() == RawFunction::kConstructor) { | 3502 if (kind() == RawFunction::kConstructor) { |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4031 closure_function.SetNumOptionalParameters(num_opt_params, has_opt_pos_params); | 3983 closure_function.SetNumOptionalParameters(num_opt_params, has_opt_pos_params); |
| 4032 closure_function.set_parameter_types(Array::Handle(Array::New(num_params, | 3984 closure_function.set_parameter_types(Array::Handle(Array::New(num_params, |
| 4033 Heap::kOld))); | 3985 Heap::kOld))); |
| 4034 closure_function.set_parameter_names(Array::Handle(Array::New(num_params, | 3986 closure_function.set_parameter_names(Array::Handle(Array::New(num_params, |
| 4035 Heap::kOld))); | 3987 Heap::kOld))); |
| 4036 AbstractType& param_type = AbstractType::Handle(); | 3988 AbstractType& param_type = AbstractType::Handle(); |
| 4037 String& param_name = String::Handle(); | 3989 String& param_name = String::Handle(); |
| 4038 // Add implicit closure object parameter. | 3990 // Add implicit closure object parameter. |
| 4039 param_type = Type::DynamicType(); | 3991 param_type = Type::DynamicType(); |
| 4040 closure_function.SetParameterTypeAt(0, param_type); | 3992 closure_function.SetParameterTypeAt(0, param_type); |
| 4041 param_name = Symbols::ClosureParameter(); | 3993 closure_function.SetParameterNameAt(0, Symbols::ClosureParameter()); |
| 4042 closure_function.SetParameterNameAt(0, param_name); | |
| 4043 for (int i = kClosure; i < num_params; i++) { | 3994 for (int i = kClosure; i < num_params; i++) { |
| 4044 param_type = ParameterTypeAt(has_receiver - kClosure + i); | 3995 param_type = ParameterTypeAt(has_receiver - kClosure + i); |
| 4045 closure_function.SetParameterTypeAt(i, param_type); | 3996 closure_function.SetParameterTypeAt(i, param_type); |
| 4046 param_name = ParameterNameAt(has_receiver - kClosure + i); | 3997 param_name = ParameterNameAt(has_receiver - kClosure + i); |
| 4047 closure_function.SetParameterNameAt(i, param_name); | 3998 closure_function.SetParameterNameAt(i, param_name); |
| 4048 } | 3999 } |
| 4049 | 4000 |
| 4050 // Lookup or create a new signature class for the closure function in the | 4001 // Lookup or create a new signature class for the closure function in the |
| 4051 // library of the owner class. | 4002 // library of the owner class. |
| 4052 const Class& owner_class = Class::Handle(Owner()); | 4003 const Class& owner_class = Class::Handle(Owner()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4076 return closure_function.raw(); | 4027 return closure_function.raw(); |
| 4077 } | 4028 } |
| 4078 | 4029 |
| 4079 | 4030 |
| 4080 RawString* Function::BuildSignature( | 4031 RawString* Function::BuildSignature( |
| 4081 bool instantiate, | 4032 bool instantiate, |
| 4082 NameVisibility name_visibility, | 4033 NameVisibility name_visibility, |
| 4083 const AbstractTypeArguments& instantiator) const { | 4034 const AbstractTypeArguments& instantiator) const { |
| 4084 const GrowableObjectArray& pieces = | 4035 const GrowableObjectArray& pieces = |
| 4085 GrowableObjectArray::Handle(GrowableObjectArray::New()); | 4036 GrowableObjectArray::Handle(GrowableObjectArray::New()); |
| 4086 const String& kCommaSpace = String::Handle(Symbols::New(", ")); | |
| 4087 const String& kColonSpace = String::Handle(Symbols::New(": ")); | |
| 4088 const String& kLParen = String::Handle(Symbols::New("(")); | |
| 4089 const String& kRParenArrow = String::Handle(Symbols::New(") => ")); | |
| 4090 const String& kLBracket = String::Handle(Symbols::New("[")); | |
| 4091 const String& kRBracket = String::Handle(Symbols::New("]")); | |
| 4092 const String& kLBrace = String::Handle(Symbols::New("{")); | |
| 4093 const String& kRBrace = String::Handle(Symbols::New("}")); | |
| 4094 String& name = String::Handle(); | 4037 String& name = String::Handle(); |
| 4095 if (!instantiate && !is_static() && (name_visibility == kInternalName)) { | 4038 if (!instantiate && !is_static() && (name_visibility == kInternalName)) { |
| 4096 // Prefix the signature with its class and type parameters, if any (e.g. | 4039 // Prefix the signature with its class and type parameters, if any (e.g. |
| 4097 // "Map<K, V>(K) => bool"). | 4040 // "Map<K, V>(K) => bool"). |
| 4098 // The signature of static functions cannot be type parameterized. | 4041 // The signature of static functions cannot be type parameterized. |
| 4099 const String& kSpaceExtendsSpace = | |
| 4100 String::Handle(Symbols::New(" extends ")); | |
| 4101 const String& kLAngleBracket = String::Handle(Symbols::New("<")); | |
| 4102 const String& kRAngleBracket = String::Handle(Symbols::New(">")); | |
| 4103 const Class& function_class = Class::Handle(Owner()); | 4042 const Class& function_class = Class::Handle(Owner()); |
| 4104 ASSERT(!function_class.IsNull()); | 4043 ASSERT(!function_class.IsNull()); |
| 4105 const TypeArguments& type_parameters = TypeArguments::Handle( | 4044 const TypeArguments& type_parameters = TypeArguments::Handle( |
| 4106 function_class.type_parameters()); | 4045 function_class.type_parameters()); |
| 4107 if (!type_parameters.IsNull()) { | 4046 if (!type_parameters.IsNull()) { |
| 4108 const String& function_class_name = String::Handle(function_class.Name()); | 4047 const String& function_class_name = String::Handle(function_class.Name()); |
| 4109 pieces.Add(function_class_name); | 4048 pieces.Add(function_class_name); |
| 4110 intptr_t num_type_parameters = type_parameters.Length(); | 4049 intptr_t num_type_parameters = type_parameters.Length(); |
| 4111 pieces.Add(kLAngleBracket); | 4050 pieces.Add(Symbols::LAngleBracket()); |
| 4112 TypeParameter& type_parameter = TypeParameter::Handle(); | 4051 TypeParameter& type_parameter = TypeParameter::Handle(); |
| 4113 AbstractType& bound = AbstractType::Handle(); | 4052 AbstractType& bound = AbstractType::Handle(); |
| 4114 for (intptr_t i = 0; i < num_type_parameters; i++) { | 4053 for (intptr_t i = 0; i < num_type_parameters; i++) { |
| 4115 type_parameter ^= type_parameters.TypeAt(i); | 4054 type_parameter ^= type_parameters.TypeAt(i); |
| 4116 name = type_parameter.name(); | 4055 name = type_parameter.name(); |
| 4117 pieces.Add(name); | 4056 pieces.Add(name); |
| 4118 bound = type_parameter.bound(); | 4057 bound = type_parameter.bound(); |
| 4119 if (!bound.IsNull() && !bound.IsObjectType()) { | 4058 if (!bound.IsNull() && !bound.IsObjectType()) { |
| 4120 pieces.Add(kSpaceExtendsSpace); | 4059 pieces.Add(Symbols::SpaceExtendsSpace()); |
| 4121 name = bound.BuildName(name_visibility); | 4060 name = bound.BuildName(name_visibility); |
| 4122 pieces.Add(name); | 4061 pieces.Add(name); |
| 4123 } | 4062 } |
| 4124 if (i < num_type_parameters - 1) { | 4063 if (i < num_type_parameters - 1) { |
| 4125 pieces.Add(kCommaSpace); | 4064 pieces.Add(Symbols::CommaSpace()); |
| 4126 } | 4065 } |
| 4127 } | 4066 } |
| 4128 pieces.Add(kRAngleBracket); | 4067 pieces.Add(Symbols::RAngleBracket()); |
| 4129 } | 4068 } |
| 4130 } | 4069 } |
| 4131 AbstractType& param_type = AbstractType::Handle(); | 4070 AbstractType& param_type = AbstractType::Handle(); |
| 4132 const intptr_t num_params = NumParameters(); | 4071 const intptr_t num_params = NumParameters(); |
| 4133 const intptr_t num_fixed_params = num_fixed_parameters(); | 4072 const intptr_t num_fixed_params = num_fixed_parameters(); |
| 4134 const intptr_t num_opt_pos_params = NumOptionalPositionalParameters(); | 4073 const intptr_t num_opt_pos_params = NumOptionalPositionalParameters(); |
| 4135 const intptr_t num_opt_named_params = NumOptionalNamedParameters(); | 4074 const intptr_t num_opt_named_params = NumOptionalNamedParameters(); |
| 4136 const intptr_t num_opt_params = num_opt_pos_params + num_opt_named_params; | 4075 const intptr_t num_opt_params = num_opt_pos_params + num_opt_named_params; |
| 4137 ASSERT((num_fixed_params + num_opt_params) == num_params); | 4076 ASSERT((num_fixed_params + num_opt_params) == num_params); |
| 4138 pieces.Add(kLParen); | 4077 pieces.Add(Symbols::LParen()); |
| 4139 intptr_t i = 0; | 4078 intptr_t i = 0; |
| 4140 if (name_visibility == kUserVisibleName) { | 4079 if (name_visibility == kUserVisibleName) { |
| 4141 // Hide implicit parameters. | 4080 // Hide implicit parameters. |
| 4142 i = NumImplicitParameters(); | 4081 i = NumImplicitParameters(); |
| 4143 } | 4082 } |
| 4144 while (i < num_fixed_params) { | 4083 while (i < num_fixed_params) { |
| 4145 param_type = ParameterTypeAt(i); | 4084 param_type = ParameterTypeAt(i); |
| 4146 ASSERT(!param_type.IsNull()); | 4085 ASSERT(!param_type.IsNull()); |
| 4147 if (instantiate && !param_type.IsInstantiated()) { | 4086 if (instantiate && !param_type.IsInstantiated()) { |
| 4148 param_type = param_type.InstantiateFrom(instantiator); | 4087 param_type = param_type.InstantiateFrom(instantiator); |
| 4149 } | 4088 } |
| 4150 name = param_type.BuildName(name_visibility); | 4089 name = param_type.BuildName(name_visibility); |
| 4151 pieces.Add(name); | 4090 pieces.Add(name); |
| 4152 if (i != (num_params - 1)) { | 4091 if (i != (num_params - 1)) { |
| 4153 pieces.Add(kCommaSpace); | 4092 pieces.Add(Symbols::CommaSpace()); |
| 4154 } | 4093 } |
| 4155 i++; | 4094 i++; |
| 4156 } | 4095 } |
| 4157 if (num_opt_params > 0) { | 4096 if (num_opt_params > 0) { |
| 4158 if (num_opt_pos_params > 0) { | 4097 if (num_opt_pos_params > 0) { |
| 4159 pieces.Add(kLBracket); | 4098 pieces.Add(Symbols::LBracket()); |
| 4160 } else { | 4099 } else { |
| 4161 pieces.Add(kLBrace); | 4100 pieces.Add(Symbols::LBrace()); |
| 4162 } | 4101 } |
| 4163 for (intptr_t i = num_fixed_params; i < num_params; i++) { | 4102 for (intptr_t i = num_fixed_params; i < num_params; i++) { |
| 4164 // The parameter name of an optional positional parameter does not need | 4103 // The parameter name of an optional positional parameter does not need |
| 4165 // to be part of the signature, since it is not used. | 4104 // to be part of the signature, since it is not used. |
| 4166 if (num_opt_named_params > 0) { | 4105 if (num_opt_named_params > 0) { |
| 4167 name = ParameterNameAt(i); | 4106 name = ParameterNameAt(i); |
| 4168 pieces.Add(name); | 4107 pieces.Add(name); |
| 4169 pieces.Add(kColonSpace); | 4108 pieces.Add(Symbols::ColonSpace()); |
| 4170 } | 4109 } |
| 4171 param_type = ParameterTypeAt(i); | 4110 param_type = ParameterTypeAt(i); |
| 4172 if (instantiate && !param_type.IsInstantiated()) { | 4111 if (instantiate && !param_type.IsInstantiated()) { |
| 4173 param_type = param_type.InstantiateFrom(instantiator); | 4112 param_type = param_type.InstantiateFrom(instantiator); |
| 4174 } | 4113 } |
| 4175 ASSERT(!param_type.IsNull()); | 4114 ASSERT(!param_type.IsNull()); |
| 4176 name = param_type.BuildName(name_visibility); | 4115 name = param_type.BuildName(name_visibility); |
| 4177 pieces.Add(name); | 4116 pieces.Add(name); |
| 4178 if (i != (num_params - 1)) { | 4117 if (i != (num_params - 1)) { |
| 4179 pieces.Add(kCommaSpace); | 4118 pieces.Add(Symbols::CommaSpace()); |
| 4180 } | 4119 } |
| 4181 } | 4120 } |
| 4182 if (num_opt_pos_params > 0) { | 4121 if (num_opt_pos_params > 0) { |
| 4183 pieces.Add(kRBracket); | 4122 pieces.Add(Symbols::RBracket()); |
| 4184 } else { | 4123 } else { |
| 4185 pieces.Add(kRBrace); | 4124 pieces.Add(Symbols::RBrace()); |
| 4186 } | 4125 } |
| 4187 } | 4126 } |
| 4188 pieces.Add(kRParenArrow); | 4127 pieces.Add(Symbols::RParenArrow()); |
| 4189 AbstractType& res_type = AbstractType::Handle(result_type()); | 4128 AbstractType& res_type = AbstractType::Handle(result_type()); |
| 4190 if (instantiate && !res_type.IsInstantiated()) { | 4129 if (instantiate && !res_type.IsInstantiated()) { |
| 4191 res_type = res_type.InstantiateFrom(instantiator); | 4130 res_type = res_type.InstantiateFrom(instantiator); |
| 4192 } | 4131 } |
| 4193 name = res_type.BuildName(name_visibility); | 4132 name = res_type.BuildName(name_visibility); |
| 4194 pieces.Add(name); | 4133 pieces.Add(name); |
| 4195 const Array& strings = Array::Handle(Array::MakeArray(pieces)); | 4134 const Array& strings = Array::Handle(Array::MakeArray(pieces)); |
| 4196 return Symbols::New(String::Handle(String::ConcatAll(strings))); | 4135 return Symbols::New(String::Handle(String::ConcatAll(strings))); |
| 4197 } | 4136 } |
| 4198 | 4137 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4239 | 4178 |
| 4240 | 4179 |
| 4241 RawString* Function::UserVisibleName() const { | 4180 RawString* Function::UserVisibleName() const { |
| 4242 const String& str = String::Handle(name()); | 4181 const String& str = String::Handle(name()); |
| 4243 return IdentifierPrettyName(str); | 4182 return IdentifierPrettyName(str); |
| 4244 } | 4183 } |
| 4245 | 4184 |
| 4246 | 4185 |
| 4247 RawString* Function::QualifiedUserVisibleName() const { | 4186 RawString* Function::QualifiedUserVisibleName() const { |
| 4248 String& tmp = String::Handle(); | 4187 String& tmp = String::Handle(); |
| 4249 String& suffix = String::Handle(); | |
| 4250 const Class& cls = Class::Handle(Owner()); | 4188 const Class& cls = Class::Handle(Owner()); |
| 4251 | 4189 |
| 4252 if (IsClosureFunction()) { | 4190 if (IsClosureFunction()) { |
| 4253 if (IsLocalFunction()) { | 4191 if (IsLocalFunction()) { |
| 4254 const Function& parent = Function::Handle(parent_function()); | 4192 const Function& parent = Function::Handle(parent_function()); |
| 4255 tmp = parent.QualifiedUserVisibleName(); | 4193 tmp = parent.QualifiedUserVisibleName(); |
| 4256 } else { | 4194 } else { |
| 4257 return UserVisibleName(); | 4195 return UserVisibleName(); |
| 4258 } | 4196 } |
| 4259 } else { | 4197 } else { |
| 4260 if (cls.IsTopLevel()) { | 4198 if (cls.IsTopLevel()) { |
| 4261 return UserVisibleName(); | 4199 return UserVisibleName(); |
| 4262 } else { | 4200 } else { |
| 4263 tmp = cls.UserVisibleName(); | 4201 tmp = cls.UserVisibleName(); |
| 4264 } | 4202 } |
| 4265 } | 4203 } |
| 4266 suffix = Symbols::Dot(); | 4204 tmp = String::Concat(tmp, Symbols::Dot()); |
| 4267 tmp = String::Concat(tmp, suffix); | 4205 const String& suffix = String::Handle(UserVisibleName()); |
| 4268 suffix = UserVisibleName(); | |
| 4269 return String::Concat(tmp, suffix); | 4206 return String::Concat(tmp, suffix); |
| 4270 } | 4207 } |
| 4271 | 4208 |
| 4272 | 4209 |
| 4273 // Construct fingerprint from token stream. The token stream contains also | 4210 // Construct fingerprint from token stream. The token stream contains also |
| 4274 // arguments. | 4211 // arguments. |
| 4275 int32_t Function::SourceFingerprint() const { | 4212 int32_t Function::SourceFingerprint() const { |
| 4276 uint32_t result = String::Handle(Signature()).Hash(); | 4213 uint32_t result = String::Handle(Signature()).Hash(); |
| 4277 TokenStream::Iterator tokens_iterator(TokenStream::Handle( | 4214 TokenStream::Iterator tokens_iterator(TokenStream::Handle( |
| 4278 Script::Handle(script()).tokens()), token_pos()); | 4215 Script::Handle(script()).tokens()), token_pos()); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4425 | 4362 |
| 4426 RawString* Field::GetterName(const String& field_name) { | 4363 RawString* Field::GetterName(const String& field_name) { |
| 4427 String& str = String::Handle(); | 4364 String& str = String::Handle(); |
| 4428 str = String::New(kGetterPrefix); | 4365 str = String::New(kGetterPrefix); |
| 4429 str = String::Concat(str, field_name); | 4366 str = String::Concat(str, field_name); |
| 4430 return str.raw(); | 4367 return str.raw(); |
| 4431 } | 4368 } |
| 4432 | 4369 |
| 4433 | 4370 |
| 4434 RawString* Field::GetterSymbol(const String& field_name) { | 4371 RawString* Field::GetterSymbol(const String& field_name) { |
| 4435 String& str = String::Handle(); | 4372 const String& str = String::Handle(Field::GetterName(field_name)); |
| 4436 str = Field::GetterName(field_name); | |
| 4437 return Symbols::New(str); | 4373 return Symbols::New(str); |
| 4438 } | 4374 } |
| 4439 | 4375 |
| 4440 | 4376 |
| 4441 RawString* Field::SetterName(const String& field_name) { | 4377 RawString* Field::SetterName(const String& field_name) { |
| 4442 String& str = String::Handle(); | 4378 String& str = String::Handle(); |
| 4443 str = String::New(kSetterPrefix); | 4379 str = String::New(kSetterPrefix); |
| 4444 str = String::Concat(str, field_name); | 4380 str = String::Concat(str, field_name); |
| 4445 return str.raw(); | 4381 return str.raw(); |
| 4446 } | 4382 } |
| 4447 | 4383 |
| 4448 | 4384 |
| 4449 RawString* Field::SetterSymbol(const String& field_name) { | 4385 RawString* Field::SetterSymbol(const String& field_name) { |
| 4450 String& str = String::Handle(); | 4386 const String& str = String::Handle(Field::SetterName(field_name)); |
| 4451 str = Field::SetterName(field_name); | |
| 4452 return Symbols::New(str); | 4387 return Symbols::New(str); |
| 4453 } | 4388 } |
| 4454 | 4389 |
| 4455 | 4390 |
| 4456 RawString* Field::NameFromGetter(const String& getter_name) { | 4391 RawString* Field::NameFromGetter(const String& getter_name) { |
| 4457 String& str = String::Handle(); | 4392 String& str = String::Handle(); |
| 4458 str = String::SubString(getter_name, strlen(kGetterPrefix)); | 4393 str = String::SubString(getter_name, strlen(kGetterPrefix)); |
| 4459 return str.raw(); | 4394 return str.raw(); |
| 4460 } | 4395 } |
| 4461 | 4396 |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4638 | 4573 |
| 4639 | 4574 |
| 4640 RawString* TokenStream::GenerateSource() const { | 4575 RawString* TokenStream::GenerateSource() const { |
| 4641 Iterator iterator(*this, 0); | 4576 Iterator iterator(*this, 0); |
| 4642 const ExternalUint8Array& data = ExternalUint8Array::Handle(GetStream()); | 4577 const ExternalUint8Array& data = ExternalUint8Array::Handle(GetStream()); |
| 4643 const GrowableObjectArray& literals = | 4578 const GrowableObjectArray& literals = |
| 4644 GrowableObjectArray::Handle(GrowableObjectArray::New(data.Length())); | 4579 GrowableObjectArray::Handle(GrowableObjectArray::New(data.Length())); |
| 4645 const String& private_key = String::Handle(PrivateKey()); | 4580 const String& private_key = String::Handle(PrivateKey()); |
| 4646 intptr_t private_len = private_key.Length(); | 4581 intptr_t private_len = private_key.Length(); |
| 4647 | 4582 |
| 4648 String& blank = String::Handle(String::New(" ")); | |
| 4649 String& newline = String::Handle(String::New("\n")); | |
| 4650 String& two_newlines = String::Handle(String::New("\n\n")); | |
| 4651 String& double_quotes = String::Handle(String::New("\"")); | |
| 4652 String& dollar = String::Handle(String::New("$")); | |
| 4653 String& two_spaces = String::Handle(String::New(" ")); | |
| 4654 String& raw_string = String::Handle(String::New("r")); | |
| 4655 | |
| 4656 Token::Kind curr = iterator.CurrentTokenKind(); | 4583 Token::Kind curr = iterator.CurrentTokenKind(); |
| 4657 Token::Kind prev = Token::kILLEGAL; | 4584 Token::Kind prev = Token::kILLEGAL; |
| 4658 // Handles used in the loop. | 4585 // Handles used in the loop. |
| 4659 Object& obj = Object::Handle(); | 4586 Object& obj = Object::Handle(); |
| 4660 String& literal = String::Handle(); | 4587 String& literal = String::Handle(); |
| 4661 // Current indentation level. | 4588 // Current indentation level. |
| 4662 int indent = 0; | 4589 int indent = 0; |
| 4663 | 4590 |
| 4664 while (curr != Token::kEOS) { | 4591 while (curr != Token::kEOS) { |
| 4665 // Remember current values for this token. | 4592 // Remember current values for this token. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 4686 (prev != Token::kINTERPOL_VAR) && | 4613 (prev != Token::kINTERPOL_VAR) && |
| 4687 (prev != Token::kINTERPOL_END)) { | 4614 (prev != Token::kINTERPOL_END)) { |
| 4688 is_raw_string = true; | 4615 is_raw_string = true; |
| 4689 } else { | 4616 } else { |
| 4690 escape_characters = true; | 4617 escape_characters = true; |
| 4691 } | 4618 } |
| 4692 } | 4619 } |
| 4693 } | 4620 } |
| 4694 if ((prev != Token::kINTERPOL_VAR) && (prev != Token::kINTERPOL_END)) { | 4621 if ((prev != Token::kINTERPOL_VAR) && (prev != Token::kINTERPOL_END)) { |
| 4695 if (is_raw_string) { | 4622 if (is_raw_string) { |
| 4696 literals.Add(raw_string); | 4623 literals.Add(Symbols::LowercaseR()); |
| 4697 } | 4624 } |
| 4698 literals.Add(double_quotes); | 4625 literals.Add(Symbols::DoubleQuotes()); |
| 4699 } | 4626 } |
| 4700 if (escape_characters) { | 4627 if (escape_characters) { |
| 4701 literal = String::EscapeSpecialCharacters(literal, is_raw_string); | 4628 literal = String::EscapeSpecialCharacters(literal, is_raw_string); |
| 4702 literals.Add(literal); | 4629 literals.Add(literal); |
| 4703 } else { | 4630 } else { |
| 4704 literals.Add(literal); | 4631 literals.Add(literal); |
| 4705 } | 4632 } |
| 4706 if ((next != Token::kINTERPOL_VAR) && (next != Token::kINTERPOL_START)) { | 4633 if ((next != Token::kINTERPOL_VAR) && (next != Token::kINTERPOL_START)) { |
| 4707 literals.Add(double_quotes); | 4634 literals.Add(Symbols::DoubleQuotes()); |
| 4708 } | 4635 } |
| 4709 } else if (curr == Token::kINTERPOL_VAR) { | 4636 } else if (curr == Token::kINTERPOL_VAR) { |
| 4710 literals.Add(dollar); | 4637 literals.Add(Symbols::Dollar()); |
| 4711 if (literal.CharAt(0) == Scanner::kPrivateIdentifierStart) { | 4638 if (literal.CharAt(0) == Scanner::kPrivateIdentifierStart) { |
| 4712 literal = String::SubString(literal, 0, literal.Length() - private_len); | 4639 literal = String::SubString(literal, 0, literal.Length() - private_len); |
| 4713 } | 4640 } |
| 4714 literals.Add(literal); | 4641 literals.Add(literal); |
| 4715 } else if (curr == Token::kIDENT) { | 4642 } else if (curr == Token::kIDENT) { |
| 4716 if (literal.CharAt(0) == Scanner::kPrivateIdentifierStart) { | 4643 if (literal.CharAt(0) == Scanner::kPrivateIdentifierStart) { |
| 4717 literal = String::SubString(literal, 0, literal.Length() - private_len); | 4644 literal = String::SubString(literal, 0, literal.Length() - private_len); |
| 4718 } | 4645 } |
| 4719 literals.Add(literal); | 4646 literals.Add(literal); |
| 4720 } else { | 4647 } else { |
| 4721 literals.Add(literal); | 4648 literals.Add(literal); |
| 4722 } | 4649 } |
| 4723 // Determine the separation text based on this current token. | 4650 // Determine the separation text based on this current token. |
| 4724 const String* separator = NULL; | 4651 const String* separator = NULL; |
| 4725 switch (curr) { | 4652 switch (curr) { |
| 4726 case Token::kLBRACE: | 4653 case Token::kLBRACE: |
| 4727 indent++; | 4654 indent++; |
| 4728 separator = &newline; | 4655 separator = &Symbols::NewLine(); |
| 4729 break; | 4656 break; |
| 4730 case Token::kRBRACE: | 4657 case Token::kRBRACE: |
| 4731 if (indent == 0) { | 4658 if (indent == 0) { |
| 4732 separator = &two_newlines; | 4659 separator = &Symbols::TwoNewlines(); |
| 4733 } else { | 4660 } else { |
| 4734 separator = &newline; | 4661 separator = &Symbols::NewLine(); |
| 4735 } | 4662 } |
| 4736 break; | 4663 break; |
| 4737 case Token::kSEMICOLON: | 4664 case Token::kSEMICOLON: |
| 4738 separator = &newline; | 4665 separator = &Symbols::NewLine(); |
| 4739 break; | 4666 break; |
| 4740 case Token::kPERIOD: | 4667 case Token::kPERIOD: |
| 4741 case Token::kLPAREN: | 4668 case Token::kLPAREN: |
| 4742 case Token::kLBRACK: | 4669 case Token::kLBRACK: |
| 4743 case Token::kTIGHTADD: | 4670 case Token::kTIGHTADD: |
| 4744 case Token::kINTERPOL_VAR: | 4671 case Token::kINTERPOL_VAR: |
| 4745 case Token::kINTERPOL_START: | 4672 case Token::kINTERPOL_START: |
| 4746 case Token::kINTERPOL_END: | 4673 case Token::kINTERPOL_END: |
| 4747 break; | 4674 break; |
| 4748 default: | 4675 default: |
| 4749 separator = ␣ | 4676 separator = &Symbols::Blank(); |
| 4750 break; | 4677 break; |
| 4751 } | 4678 } |
| 4752 // Determine whether the separation text needs to be updated based on the | 4679 // Determine whether the separation text needs to be updated based on the |
| 4753 // next token. | 4680 // next token. |
| 4754 switch (next) { | 4681 switch (next) { |
| 4755 case Token::kRBRACE: | 4682 case Token::kRBRACE: |
| 4756 indent--; | 4683 indent--; |
| 4757 break; | 4684 break; |
| 4758 case Token::kSEMICOLON: | 4685 case Token::kSEMICOLON: |
| 4759 case Token::kPERIOD: | 4686 case Token::kPERIOD: |
| 4760 case Token::kCOMMA: | 4687 case Token::kCOMMA: |
| 4761 case Token::kLPAREN: | 4688 case Token::kLPAREN: |
| 4762 case Token::kRPAREN: | 4689 case Token::kRPAREN: |
| 4763 case Token::kLBRACK: | 4690 case Token::kLBRACK: |
| 4764 case Token::kRBRACK: | 4691 case Token::kRBRACK: |
| 4765 case Token::kINTERPOL_VAR: | 4692 case Token::kINTERPOL_VAR: |
| 4766 case Token::kINTERPOL_START: | 4693 case Token::kINTERPOL_START: |
| 4767 case Token::kINTERPOL_END: | 4694 case Token::kINTERPOL_END: |
| 4768 separator = NULL; | 4695 separator = NULL; |
| 4769 break; | 4696 break; |
| 4770 case Token::kELSE: | 4697 case Token::kELSE: |
| 4771 separator = ␣ | 4698 separator = &Symbols::Blank(); |
| 4772 default: | 4699 default: |
| 4773 // Do nothing. | 4700 // Do nothing. |
| 4774 break; | 4701 break; |
| 4775 } | 4702 } |
| 4776 // Update the few cases where both tokens need to be taken into account. | 4703 // Update the few cases where both tokens need to be taken into account. |
| 4777 if (((curr == Token::kIF) || (curr == Token::kFOR)) && | 4704 if (((curr == Token::kIF) || (curr == Token::kFOR)) && |
| 4778 (next == Token::kLPAREN)) { | 4705 (next == Token::kLPAREN)) { |
| 4779 separator = ␣ | 4706 separator = &Symbols::Blank(); |
| 4780 } else if ((curr == Token::kASSIGN) && (next == Token::kLPAREN)) { | 4707 } else if ((curr == Token::kASSIGN) && (next == Token::kLPAREN)) { |
| 4781 separator = & blank; | 4708 separator = &Symbols::Blank(); |
| 4782 } else if ((curr == Token::kLBRACE) && (next == Token::kRBRACE)) { | 4709 } else if ((curr == Token::kLBRACE) && (next == Token::kRBRACE)) { |
| 4783 separator = NULL; | 4710 separator = NULL; |
| 4784 } | 4711 } |
| 4785 if (separator != NULL) { | 4712 if (separator != NULL) { |
| 4786 literals.Add(*separator); | 4713 literals.Add(*separator); |
| 4787 if (separator == &newline) { | 4714 if (separator == &Symbols::NewLine()) { |
| 4788 for (int i = 0; i < indent; i++) { | 4715 for (int i = 0; i < indent; i++) { |
| 4789 literals.Add(two_spaces); | 4716 literals.Add(Symbols::TwoSpaces()); |
| 4790 } | 4717 } |
| 4791 } | 4718 } |
| 4792 } | 4719 } |
| 4793 // Setup for next iteration. | 4720 // Setup for next iteration. |
| 4794 prev = curr; | 4721 prev = curr; |
| 4795 curr = next; | 4722 curr = next; |
| 4796 } | 4723 } |
| 4797 const Array& source = Array::Handle(Array::MakeArray(literals)); | 4724 const Array& source = Array::Handle(Array::MakeArray(literals)); |
| 4798 return String::ConcatAll(source); | 4725 return String::ConcatAll(source); |
| 4799 } | 4726 } |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5212 if (FLAG_compiler_stats) { | 5139 if (FLAG_compiler_stats) { |
| 5213 CompilerStats::src_length += src.Length(); | 5140 CompilerStats::src_length += src.Length(); |
| 5214 } | 5141 } |
| 5215 } | 5142 } |
| 5216 | 5143 |
| 5217 | 5144 |
| 5218 void Script::GetTokenLocation(intptr_t token_pos, | 5145 void Script::GetTokenLocation(intptr_t token_pos, |
| 5219 intptr_t* line, | 5146 intptr_t* line, |
| 5220 intptr_t* column) const { | 5147 intptr_t* column) const { |
| 5221 const String& src = String::Handle(Source()); | 5148 const String& src = String::Handle(Source()); |
| 5222 const String& dummy_key = String::Handle(Symbols::Empty()); | |
| 5223 const TokenStream& tkns = TokenStream::Handle(tokens()); | 5149 const TokenStream& tkns = TokenStream::Handle(tokens()); |
| 5224 intptr_t src_pos = tkns.ComputeSourcePosition(token_pos); | 5150 intptr_t src_pos = tkns.ComputeSourcePosition(token_pos); |
| 5225 Scanner scanner(src, dummy_key); | 5151 Scanner scanner(src, Symbols::Empty()); |
| 5226 scanner.ScanTo(src_pos); | 5152 scanner.ScanTo(src_pos); |
| 5227 *line = scanner.CurrentPosition().line; | 5153 *line = scanner.CurrentPosition().line; |
| 5228 *column = scanner.CurrentPosition().column; | 5154 *column = scanner.CurrentPosition().column; |
| 5229 } | 5155 } |
| 5230 | 5156 |
| 5231 | 5157 |
| 5232 void Script::TokenRangeAtLine(intptr_t line_number, | 5158 void Script::TokenRangeAtLine(intptr_t line_number, |
| 5233 intptr_t* first_token_index, | 5159 intptr_t* first_token_index, |
| 5234 intptr_t* last_token_index) const { | 5160 intptr_t* last_token_index) const { |
| 5235 const String& src = String::Handle(Source()); | 5161 const String& src = String::Handle(Source()); |
| 5236 const String& dummy_key = String::Handle(Symbols::Empty()); | |
| 5237 const TokenStream& tkns = TokenStream::Handle(tokens()); | 5162 const TokenStream& tkns = TokenStream::Handle(tokens()); |
| 5238 Scanner scanner(src, dummy_key); | 5163 Scanner scanner(src, Symbols::Empty()); |
| 5239 scanner.TokenRangeAtLine(line_number, first_token_index, last_token_index); | 5164 scanner.TokenRangeAtLine(line_number, first_token_index, last_token_index); |
| 5240 if (*first_token_index >= 0) { | 5165 if (*first_token_index >= 0) { |
| 5241 *first_token_index = tkns.ComputeTokenPosition(*first_token_index); | 5166 *first_token_index = tkns.ComputeTokenPosition(*first_token_index); |
| 5242 } | 5167 } |
| 5243 if (*last_token_index >= 0) { | 5168 if (*last_token_index >= 0) { |
| 5244 *last_token_index = tkns.ComputeTokenPosition(*last_token_index); | 5169 *last_token_index = tkns.ComputeTokenPosition(*last_token_index); |
| 5245 } | 5170 } |
| 5246 } | 5171 } |
| 5247 | 5172 |
| 5248 | 5173 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5261 current_line++; | 5186 current_line++; |
| 5262 } else if (src.CharAt(ix) == '\r') { | 5187 } else if (src.CharAt(ix) == '\r') { |
| 5263 if ((ix + 1 != src.Length()) && (src.CharAt(ix + 1) != '\n')) { | 5188 if ((ix + 1 != src.Length()) && (src.CharAt(ix + 1) != '\n')) { |
| 5264 current_line++; | 5189 current_line++; |
| 5265 } | 5190 } |
| 5266 } else { | 5191 } else { |
| 5267 last_char = ix; | 5192 last_char = ix; |
| 5268 } | 5193 } |
| 5269 } | 5194 } |
| 5270 // Guarantee that returned string is never NULL. | 5195 // Guarantee that returned string is never NULL. |
| 5271 String& line = String::Handle(Symbols::Empty()); | |
| 5272 if (line_start >= 0) { | 5196 if (line_start >= 0) { |
| 5273 line = String::SubString(src, line_start, last_char - line_start + 1); | 5197 const String& line = String::Handle( |
| 5198 String::SubString(src, line_start, last_char - line_start + 1)); |
| 5199 return line.raw(); |
| 5200 } else { |
| 5201 return Symbols::Empty().raw(); |
| 5274 } | 5202 } |
| 5275 return line.raw(); | |
| 5276 } | 5203 } |
| 5277 | 5204 |
| 5278 | 5205 |
| 5279 RawString* Script::GetSnippet(intptr_t from_line, | 5206 RawString* Script::GetSnippet(intptr_t from_line, |
| 5280 intptr_t from_column, | 5207 intptr_t from_column, |
| 5281 intptr_t to_line, | 5208 intptr_t to_line, |
| 5282 intptr_t to_column) const { | 5209 intptr_t to_column) const { |
| 5283 const String& src = String::Handle(Source()); | 5210 const String& src = String::Handle(Source()); |
| 5284 intptr_t length = src.Length(); | 5211 intptr_t length = src.Length(); |
| 5285 intptr_t line = 1; | 5212 intptr_t line = 1; |
| (...skipping 3249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8535 if (cls.IsSignatureClass()) { | 8462 if (cls.IsSignatureClass()) { |
| 8536 if (function != NULL) { | 8463 if (function != NULL) { |
| 8537 *function = Closure::function(*this); | 8464 *function = Closure::function(*this); |
| 8538 } | 8465 } |
| 8539 if (context != NULL) { | 8466 if (context != NULL) { |
| 8540 *context = Closure::context(*this); | 8467 *context = Closure::context(*this); |
| 8541 } | 8468 } |
| 8542 return true; | 8469 return true; |
| 8543 } | 8470 } |
| 8544 // Try to resolve a "call" method. | 8471 // Try to resolve a "call" method. |
| 8545 const String& call_symbol = String::Handle(Symbols::Call()); | |
| 8546 Function& call_function = Function::Handle(); | 8472 Function& call_function = Function::Handle(); |
| 8547 do { | 8473 do { |
| 8548 call_function = cls.LookupDynamicFunction(call_symbol); | 8474 call_function = cls.LookupDynamicFunction(Symbols::Call()); |
| 8549 if (!call_function.IsNull()) { | 8475 if (!call_function.IsNull()) { |
| 8550 if (function != NULL) { | 8476 if (function != NULL) { |
| 8551 *function = call_function.raw(); | 8477 *function = call_function.raw(); |
| 8552 } | 8478 } |
| 8553 if (context != NULL) { | 8479 if (context != NULL) { |
| 8554 *context = Isolate::Current()->object_store()->empty_context(); | 8480 *context = Isolate::Current()->object_store()->empty_context(); |
| 8555 } | 8481 } |
| 8556 return true; | 8482 return true; |
| 8557 } | 8483 } |
| 8558 cls = cls.SuperClass(); | 8484 cls = cls.SuperClass(); |
| (...skipping 2124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10683 | 10609 |
| 10684 | 10610 |
| 10685 RawString* String::SubString(const String& str, | 10611 RawString* String::SubString(const String& str, |
| 10686 intptr_t begin_index, | 10612 intptr_t begin_index, |
| 10687 intptr_t length, | 10613 intptr_t length, |
| 10688 Heap::Space space) { | 10614 Heap::Space space) { |
| 10689 ASSERT(!str.IsNull()); | 10615 ASSERT(!str.IsNull()); |
| 10690 ASSERT(begin_index >= 0); | 10616 ASSERT(begin_index >= 0); |
| 10691 ASSERT(length >= 0); | 10617 ASSERT(length >= 0); |
| 10692 if (begin_index <= str.Length() && length == 0) { | 10618 if (begin_index <= str.Length() && length == 0) { |
| 10693 return Symbols::Empty(); | 10619 return Symbols::Empty().raw(); |
| 10694 } | 10620 } |
| 10695 if (begin_index > str.Length()) { | 10621 if (begin_index > str.Length()) { |
| 10696 return String::null(); | 10622 return String::null(); |
| 10697 } | 10623 } |
| 10698 String& result = String::Handle(); | 10624 String& result = String::Handle(); |
| 10699 bool is_one_byte_string = true; | 10625 bool is_one_byte_string = true; |
| 10700 intptr_t char_size = str.CharSize(); | 10626 intptr_t char_size = str.CharSize(); |
| 10701 if (char_size == kTwoByteChar) { | 10627 if (char_size == kTwoByteChar) { |
| 10702 for (intptr_t i = begin_index; i < begin_index + length; ++i) { | 10628 for (intptr_t i = begin_index; i < begin_index + length; ++i) { |
| 10703 if (!Utf::IsLatin1(str.CharAt(i))) { | 10629 if (!Utf::IsLatin1(str.CharAt(i))) { |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11096 | 11022 |
| 11097 | 11023 |
| 11098 RawOneByteString* OneByteString::SubStringUnchecked(const String& str, | 11024 RawOneByteString* OneByteString::SubStringUnchecked(const String& str, |
| 11099 intptr_t begin_index, | 11025 intptr_t begin_index, |
| 11100 intptr_t length, | 11026 intptr_t length, |
| 11101 Heap::Space space) { | 11027 Heap::Space space) { |
| 11102 ASSERT(!str.IsNull() && str.IsOneByteString()); | 11028 ASSERT(!str.IsNull() && str.IsOneByteString()); |
| 11103 ASSERT(begin_index >= 0); | 11029 ASSERT(begin_index >= 0); |
| 11104 ASSERT(length >= 0); | 11030 ASSERT(length >= 0); |
| 11105 if (begin_index <= str.Length() && length == 0) { | 11031 if (begin_index <= str.Length() && length == 0) { |
| 11106 return OneByteString::raw(String::Handle(Symbols::Empty())); | 11032 return OneByteString::raw(Symbols::Empty()); |
| 11107 } | 11033 } |
| 11108 ASSERT(begin_index < str.Length()); | 11034 ASSERT(begin_index < str.Length()); |
| 11109 RawOneByteString* result = OneByteString::New(length, space); | 11035 RawOneByteString* result = OneByteString::New(length, space); |
| 11110 NoGCScope no_gc; | 11036 NoGCScope no_gc; |
| 11111 if (length > 0) { | 11037 if (length > 0) { |
| 11112 uint8_t* dest = &result->ptr()->data_[0]; | 11038 uint8_t* dest = &result->ptr()->data_[0]; |
| 11113 uint8_t* src = &raw_ptr(str)->data_[begin_index]; | 11039 uint8_t* src = &raw_ptr(str)->data_[begin_index]; |
| 11114 memmove(dest, src, length); | 11040 memmove(dest, src, length); |
| 11115 } | 11041 } |
| 11116 return result; | 11042 return result; |
| (...skipping 1386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12503 } | 12429 } |
| 12504 return result.raw(); | 12430 return result.raw(); |
| 12505 } | 12431 } |
| 12506 | 12432 |
| 12507 | 12433 |
| 12508 const char* WeakProperty::ToCString() const { | 12434 const char* WeakProperty::ToCString() const { |
| 12509 return "_WeakProperty"; | 12435 return "_WeakProperty"; |
| 12510 } | 12436 } |
| 12511 | 12437 |
| 12512 } // namespace dart | 12438 } // namespace dart |
| OLD | NEW |