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

Side by Side Diff: src/runtime.cc

Issue 12217025: For HashTable-backed JS objects, use the proper type in the table() accessor (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698