| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 holder->set_table(*table); | 753 holder->set_table(*table); |
| 754 return *holder; | 754 return *holder; |
| 755 } | 755 } |
| 756 | 756 |
| 757 | 757 |
| 758 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetAdd) { | 758 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetAdd) { |
| 759 HandleScope scope(isolate); | 759 HandleScope scope(isolate); |
| 760 ASSERT(args.length() == 2); | 760 ASSERT(args.length() == 2); |
| 761 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); | 761 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); |
| 762 Handle<Object> key(args[1]); | 762 Handle<Object> key(args[1]); |
| 763 Handle<ObjectHashSet> table(ObjectHashSet::cast(holder->table())); | 763 Handle<ObjectHashSet> table(holder->table()); |
| 764 table = ObjectHashSetAdd(table, key); | 764 table = ObjectHashSetAdd(table, key); |
| 765 holder->set_table(*table); | 765 holder->set_table(*table); |
| 766 return isolate->heap()->undefined_value(); | 766 return isolate->heap()->undefined_value(); |
| 767 } | 767 } |
| 768 | 768 |
| 769 | 769 |
| 770 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetHas) { | 770 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetHas) { |
| 771 HandleScope scope(isolate); | 771 HandleScope scope(isolate); |
| 772 ASSERT(args.length() == 2); | 772 ASSERT(args.length() == 2); |
| 773 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); | 773 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); |
| 774 Handle<Object> key(args[1]); | 774 Handle<Object> key(args[1]); |
| 775 Handle<ObjectHashSet> table(ObjectHashSet::cast(holder->table())); | 775 Handle<ObjectHashSet> table(holder->table()); |
| 776 return isolate->heap()->ToBoolean(table->Contains(*key)); | 776 return isolate->heap()->ToBoolean(table->Contains(*key)); |
| 777 } | 777 } |
| 778 | 778 |
| 779 | 779 |
| 780 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetDelete) { | 780 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetDelete) { |
| 781 HandleScope scope(isolate); | 781 HandleScope scope(isolate); |
| 782 ASSERT(args.length() == 2); | 782 ASSERT(args.length() == 2); |
| 783 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); | 783 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); |
| 784 Handle<Object> key(args[1]); | 784 Handle<Object> key(args[1]); |
| 785 Handle<ObjectHashSet> table(ObjectHashSet::cast(holder->table())); | 785 Handle<ObjectHashSet> table(holder->table()); |
| 786 table = ObjectHashSetRemove(table, key); | 786 table = ObjectHashSetRemove(table, key); |
| 787 holder->set_table(*table); | 787 holder->set_table(*table); |
| 788 return isolate->heap()->undefined_value(); | 788 return isolate->heap()->undefined_value(); |
| 789 } | 789 } |
| 790 | 790 |
| 791 | 791 |
| 792 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetGetSize) { | 792 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetGetSize) { |
| 793 HandleScope scope(isolate); | 793 HandleScope scope(isolate); |
| 794 ASSERT(args.length() == 1); | 794 ASSERT(args.length() == 1); |
| 795 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); | 795 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); |
| 796 Handle<ObjectHashSet> table(ObjectHashSet::cast(holder->table())); | 796 Handle<ObjectHashSet> table(holder->table()); |
| 797 return Smi::FromInt(table->NumberOfElements()); | 797 return Smi::FromInt(table->NumberOfElements()); |
| 798 } | 798 } |
| 799 | 799 |
| 800 | 800 |
| 801 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapInitialize) { | 801 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapInitialize) { |
| 802 HandleScope scope(isolate); | 802 HandleScope scope(isolate); |
| 803 ASSERT(args.length() == 1); | 803 ASSERT(args.length() == 1); |
| 804 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); | 804 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); |
| 805 Handle<ObjectHashTable> table = isolate->factory()->NewObjectHashTable(0); | 805 Handle<ObjectHashTable> table = isolate->factory()->NewObjectHashTable(0); |
| 806 holder->set_table(*table); | 806 holder->set_table(*table); |
| 807 return *holder; | 807 return *holder; |
| 808 } | 808 } |
| 809 | 809 |
| 810 | 810 |
| 811 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapGet) { | 811 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapGet) { |
| 812 HandleScope scope(isolate); | 812 HandleScope scope(isolate); |
| 813 ASSERT(args.length() == 2); | 813 ASSERT(args.length() == 2); |
| 814 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); | 814 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); |
| 815 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); | 815 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
| 816 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table())); | 816 Handle<ObjectHashTable> table(holder->table()); |
| 817 Handle<Object> lookup(table->Lookup(*key)); | 817 Handle<Object> lookup(table->Lookup(*key)); |
| 818 return lookup->IsTheHole() ? isolate->heap()->undefined_value() : *lookup; | 818 return lookup->IsTheHole() ? isolate->heap()->undefined_value() : *lookup; |
| 819 } | 819 } |
| 820 | 820 |
| 821 | 821 |
| 822 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapHas) { | 822 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapHas) { |
| 823 HandleScope scope(isolate); | 823 HandleScope scope(isolate); |
| 824 ASSERT(args.length() == 2); | 824 ASSERT(args.length() == 2); |
| 825 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); | 825 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); |
| 826 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); | 826 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
| 827 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table())); | 827 Handle<ObjectHashTable> table(holder->table()); |
| 828 Handle<Object> lookup(table->Lookup(*key)); | 828 Handle<Object> lookup(table->Lookup(*key)); |
| 829 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); | 829 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); |
| 830 } | 830 } |
| 831 | 831 |
| 832 | 832 |
| 833 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapDelete) { | 833 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapDelete) { |
| 834 HandleScope scope(isolate); | 834 HandleScope scope(isolate); |
| 835 ASSERT(args.length() == 2); | 835 ASSERT(args.length() == 2); |
| 836 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); | 836 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); |
| 837 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); | 837 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
| 838 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table())); | 838 Handle<ObjectHashTable> table(holder->table()); |
| 839 Handle<Object> lookup(table->Lookup(*key)); | 839 Handle<Object> lookup(table->Lookup(*key)); |
| 840 Handle<ObjectHashTable> new_table = | 840 Handle<ObjectHashTable> new_table = |
| 841 PutIntoObjectHashTable(table, key, isolate->factory()->the_hole_value()); | 841 PutIntoObjectHashTable(table, key, isolate->factory()->the_hole_value()); |
| 842 holder->set_table(*new_table); | 842 holder->set_table(*new_table); |
| 843 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); | 843 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); |
| 844 } | 844 } |
| 845 | 845 |
| 846 | 846 |
| 847 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapSet) { | 847 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapSet) { |
| 848 HandleScope scope(isolate); | 848 HandleScope scope(isolate); |
| 849 ASSERT(args.length() == 3); | 849 ASSERT(args.length() == 3); |
| 850 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); | 850 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); |
| 851 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); | 851 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); |
| 852 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 852 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |
| 853 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table())); | 853 Handle<ObjectHashTable> table(holder->table()); |
| 854 Handle<ObjectHashTable> new_table = PutIntoObjectHashTable(table, key, value); | 854 Handle<ObjectHashTable> new_table = PutIntoObjectHashTable(table, key, value); |
| 855 holder->set_table(*new_table); | 855 holder->set_table(*new_table); |
| 856 return isolate->heap()->undefined_value(); | 856 return isolate->heap()->undefined_value(); |
| 857 } | 857 } |
| 858 | 858 |
| 859 | 859 |
| 860 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapGetSize) { | 860 RUNTIME_FUNCTION(MaybeObject*, Runtime_MapGetSize) { |
| 861 HandleScope scope(isolate); | 861 HandleScope scope(isolate); |
| 862 ASSERT(args.length() == 1); | 862 ASSERT(args.length() == 1); |
| 863 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); | 863 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); |
| 864 Handle<ObjectHashTable> table(ObjectHashTable::cast(holder->table())); | 864 Handle<ObjectHashTable> table(holder->table()); |
| 865 return Smi::FromInt(table->NumberOfElements()); | 865 return Smi::FromInt(table->NumberOfElements()); |
| 866 } | 866 } |
| 867 | 867 |
| 868 | 868 |
| 869 static JSWeakMap* WeakMapInitialize(Isolate* isolate, | 869 static JSWeakMap* WeakMapInitialize(Isolate* isolate, |
| 870 Handle<JSWeakMap> weakmap) { | 870 Handle<JSWeakMap> weakmap) { |
| 871 ASSERT(weakmap->map()->inobject_properties() == 0); | 871 ASSERT(weakmap->map()->inobject_properties() == 0); |
| 872 Handle<ObjectHashTable> table = isolate->factory()->NewObjectHashTable(0); | 872 Handle<ObjectHashTable> table = isolate->factory()->NewObjectHashTable(0); |
| 873 weakmap->set_table(*table); | 873 weakmap->set_table(*table); |
| 874 weakmap->set_next(Smi::FromInt(0)); | 874 weakmap->set_next(Smi::FromInt(0)); |
| 875 return *weakmap; | 875 return *weakmap; |
| 876 } | 876 } |
| 877 | 877 |
| 878 | 878 |
| 879 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapInitialize) { | 879 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapInitialize) { |
| 880 HandleScope scope(isolate); | 880 HandleScope scope(isolate); |
| 881 ASSERT(args.length() == 1); | 881 ASSERT(args.length() == 1); |
| 882 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); | 882 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); |
| 883 return WeakMapInitialize(isolate, weakmap); | 883 return WeakMapInitialize(isolate, weakmap); |
| 884 } | 884 } |
| 885 | 885 |
| 886 | 886 |
| 887 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapGet) { | 887 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapGet) { |
| 888 HandleScope scope(isolate); | 888 HandleScope scope(isolate); |
| 889 ASSERT(args.length() == 2); | 889 ASSERT(args.length() == 2); |
| 890 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); | 890 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); |
| 891 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); | 891 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); |
| 892 Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table())); | 892 Handle<ObjectHashTable> table(weakmap->table()); |
| 893 Handle<Object> lookup(table->Lookup(*key)); | 893 Handle<Object> lookup(table->Lookup(*key)); |
| 894 return lookup->IsTheHole() ? isolate->heap()->undefined_value() : *lookup; | 894 return lookup->IsTheHole() ? isolate->heap()->undefined_value() : *lookup; |
| 895 } | 895 } |
| 896 | 896 |
| 897 | 897 |
| 898 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapHas) { | 898 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapHas) { |
| 899 HandleScope scope(isolate); | 899 HandleScope scope(isolate); |
| 900 ASSERT(args.length() == 2); | 900 ASSERT(args.length() == 2); |
| 901 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); | 901 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); |
| 902 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); | 902 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); |
| 903 Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table())); | 903 Handle<ObjectHashTable> table(weakmap->table()); |
| 904 Handle<Object> lookup(table->Lookup(*key)); | 904 Handle<Object> lookup(table->Lookup(*key)); |
| 905 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); | 905 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); |
| 906 } | 906 } |
| 907 | 907 |
| 908 | 908 |
| 909 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapDelete) { | 909 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapDelete) { |
| 910 HandleScope scope(isolate); | 910 HandleScope scope(isolate); |
| 911 ASSERT(args.length() == 2); | 911 ASSERT(args.length() == 2); |
| 912 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); | 912 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); |
| 913 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); | 913 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); |
| 914 Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table())); | 914 Handle<ObjectHashTable> table(weakmap->table()); |
| 915 Handle<Object> lookup(table->Lookup(*key)); | 915 Handle<Object> lookup(table->Lookup(*key)); |
| 916 Handle<ObjectHashTable> new_table = | 916 Handle<ObjectHashTable> new_table = |
| 917 PutIntoObjectHashTable(table, key, isolate->factory()->the_hole_value()); | 917 PutIntoObjectHashTable(table, key, isolate->factory()->the_hole_value()); |
| 918 weakmap->set_table(*new_table); | 918 weakmap->set_table(*new_table); |
| 919 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); | 919 return isolate->heap()->ToBoolean(!lookup->IsTheHole()); |
| 920 } | 920 } |
| 921 | 921 |
| 922 | 922 |
| 923 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapSet) { | 923 RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapSet) { |
| 924 HandleScope scope(isolate); | 924 HandleScope scope(isolate); |
| 925 ASSERT(args.length() == 3); | 925 ASSERT(args.length() == 3); |
| 926 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); | 926 CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); |
| 927 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); | 927 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); |
| 928 Handle<Object> value(args[2]); | 928 Handle<Object> value(args[2]); |
| 929 Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table())); | 929 Handle<ObjectHashTable> table(weakmap->table()); |
| 930 Handle<ObjectHashTable> new_table = PutIntoObjectHashTable(table, key, value); | 930 Handle<ObjectHashTable> new_table = PutIntoObjectHashTable(table, key, value); |
| 931 weakmap->set_table(*new_table); | 931 weakmap->set_table(*new_table); |
| 932 return isolate->heap()->undefined_value(); | 932 return isolate->heap()->undefined_value(); |
| 933 } | 933 } |
| 934 | 934 |
| 935 | 935 |
| 936 RUNTIME_FUNCTION(MaybeObject*, Runtime_ClassOf) { | 936 RUNTIME_FUNCTION(MaybeObject*, Runtime_ClassOf) { |
| 937 NoHandleAllocation ha; | 937 NoHandleAllocation ha; |
| 938 ASSERT(args.length() == 1); | 938 ASSERT(args.length() == 1); |
| 939 Object* obj = args[0]; | 939 Object* obj = args[0]; |
| (...skipping 12587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13527 // Handle last resort GC and make sure to allow future allocations | 13527 // Handle last resort GC and make sure to allow future allocations |
| 13528 // to grow the heap without causing GCs (if possible). | 13528 // to grow the heap without causing GCs (if possible). |
| 13529 isolate->counters()->gc_last_resort_from_js()->Increment(); | 13529 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 13530 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 13530 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
| 13531 "Runtime::PerformGC"); | 13531 "Runtime::PerformGC"); |
| 13532 } | 13532 } |
| 13533 } | 13533 } |
| 13534 | 13534 |
| 13535 | 13535 |
| 13536 } } // namespace v8::internal | 13536 } } // namespace v8::internal |
| OLD | NEW |