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

Side by Side Diff: src/type-feedback-vector.cc

Issue 2133233002: [LoadIC] Handle simple field loads in the dispatcher (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix release builds for realz Created 4 years, 5 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
« no previous file with comments | « src/type-feedback-vector.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/type-feedback-vector.h" 5 #include "src/type-feedback-vector.h"
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/ic/ic.h" 8 #include "src/ic/ic.h"
9 #include "src/ic/ic-state.h" 9 #include "src/ic/ic-state.h"
10 #include "src/objects.h" 10 #include "src/objects.h"
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 Handle<Object> feedback_extra = handle(GetFeedbackExtra(), isolate); 420 Handle<Object> feedback_extra = handle(GetFeedbackExtra(), isolate);
421 if (!feedback_extra->IsFixedArray() || 421 if (!feedback_extra->IsFixedArray() ||
422 FixedArray::cast(*feedback_extra)->length() != length) { 422 FixedArray::cast(*feedback_extra)->length() != length) {
423 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length); 423 Handle<FixedArray> array = isolate->factory()->NewFixedArray(length);
424 SetFeedbackExtra(*array); 424 SetFeedbackExtra(*array);
425 return array; 425 return array;
426 } 426 }
427 return Handle<FixedArray>::cast(feedback_extra); 427 return Handle<FixedArray>::cast(feedback_extra);
428 } 428 }
429 429
430
431 void FeedbackNexus::InstallHandlers(Handle<FixedArray> array, 430 void FeedbackNexus::InstallHandlers(Handle<FixedArray> array,
432 MapHandleList* maps, 431 MapHandleList* maps,
433 CodeHandleList* handlers) { 432 List<Handle<Object>>* handlers) {
434 int receiver_count = maps->length(); 433 int receiver_count = maps->length();
435 for (int current = 0; current < receiver_count; ++current) { 434 for (int current = 0; current < receiver_count; ++current) {
436 Handle<Map> map = maps->at(current); 435 Handle<Map> map = maps->at(current);
437 Handle<WeakCell> cell = Map::WeakCellForMap(map); 436 Handle<WeakCell> cell = Map::WeakCellForMap(map);
438 array->set(current * 2, *cell); 437 array->set(current * 2, *cell);
439 array->set(current * 2 + 1, *handlers->at(current)); 438 array->set(current * 2 + 1, *handlers->at(current));
440 } 439 }
441 } 440 }
442 441
443 442
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 FeedbackNexus::ConfigureMegamorphic(); 648 FeedbackNexus::ConfigureMegamorphic();
650 } 649 }
651 650
652 651
653 void CallICNexus::ConfigureMegamorphic(int call_count) { 652 void CallICNexus::ConfigureMegamorphic(int call_count) {
654 SetFeedback(*TypeFeedbackVector::MegamorphicSentinel(GetIsolate()), 653 SetFeedback(*TypeFeedbackVector::MegamorphicSentinel(GetIsolate()),
655 SKIP_WRITE_BARRIER); 654 SKIP_WRITE_BARRIER);
656 SetFeedbackExtra(Smi::FromInt(call_count), SKIP_WRITE_BARRIER); 655 SetFeedbackExtra(Smi::FromInt(call_count), SKIP_WRITE_BARRIER);
657 } 656 }
658 657
659
660 void LoadICNexus::ConfigureMonomorphic(Handle<Map> receiver_map, 658 void LoadICNexus::ConfigureMonomorphic(Handle<Map> receiver_map,
661 Handle<Code> handler) { 659 Handle<Object> handler) {
662 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map); 660 Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map);
663 SetFeedback(*cell); 661 SetFeedback(*cell);
664 SetFeedbackExtra(*handler); 662 SetFeedbackExtra(*handler);
665 } 663 }
666 664
667 void LoadGlobalICNexus::ConfigureUninitialized() { 665 void LoadGlobalICNexus::ConfigureUninitialized() {
668 Isolate* isolate = GetIsolate(); 666 Isolate* isolate = GetIsolate();
669 SetFeedback(isolate->heap()->empty_weak_cell(), SKIP_WRITE_BARRIER); 667 SetFeedback(isolate->heap()->empty_weak_cell(), SKIP_WRITE_BARRIER);
670 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate), 668 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate),
671 SKIP_WRITE_BARRIER); 669 SKIP_WRITE_BARRIER);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 SetFeedback(*cell); 713 SetFeedback(*cell);
716 SetFeedbackExtra(*handler); 714 SetFeedbackExtra(*handler);
717 } else { 715 } else {
718 Handle<FixedArray> array = EnsureExtraArrayOfSize(2); 716 Handle<FixedArray> array = EnsureExtraArrayOfSize(2);
719 SetFeedback(*name); 717 SetFeedback(*name);
720 array->set(0, *cell); 718 array->set(0, *cell);
721 array->set(1, *handler); 719 array->set(1, *handler);
722 } 720 }
723 } 721 }
724 722
725
726 void LoadICNexus::ConfigurePolymorphic(MapHandleList* maps, 723 void LoadICNexus::ConfigurePolymorphic(MapHandleList* maps,
727 CodeHandleList* handlers) { 724 List<Handle<Object>>* handlers) {
728 Isolate* isolate = GetIsolate(); 725 Isolate* isolate = GetIsolate();
729 int receiver_count = maps->length(); 726 int receiver_count = maps->length();
730 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2); 727 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2);
731 InstallHandlers(array, maps, handlers); 728 InstallHandlers(array, maps, handlers);
732 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate), 729 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate),
733 SKIP_WRITE_BARRIER); 730 SKIP_WRITE_BARRIER);
734 } 731 }
735 732
736 void KeyedLoadICNexus::ConfigurePolymorphic(Handle<Name> name, 733 void KeyedLoadICNexus::ConfigurePolymorphic(Handle<Name> name,
737 MapHandleList* maps, 734 MapHandleList* maps,
738 CodeHandleList* handlers) { 735 List<Handle<Object>>* handlers) {
739 int receiver_count = maps->length(); 736 int receiver_count = maps->length();
740 DCHECK(receiver_count > 1); 737 DCHECK(receiver_count > 1);
741 Handle<FixedArray> array; 738 Handle<FixedArray> array;
742 if (name.is_null()) { 739 if (name.is_null()) {
743 array = EnsureArrayOfSize(receiver_count * 2); 740 array = EnsureArrayOfSize(receiver_count * 2);
744 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()), 741 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()),
745 SKIP_WRITE_BARRIER); 742 SKIP_WRITE_BARRIER);
746 } else { 743 } else {
747 array = EnsureExtraArrayOfSize(receiver_count * 2); 744 array = EnsureExtraArrayOfSize(receiver_count * 2);
748 SetFeedback(*name); 745 SetFeedback(*name);
749 } 746 }
750 747
751 InstallHandlers(array, maps, handlers); 748 InstallHandlers(array, maps, handlers);
752 } 749 }
753 750
754
755 void StoreICNexus::ConfigurePolymorphic(MapHandleList* maps, 751 void StoreICNexus::ConfigurePolymorphic(MapHandleList* maps,
756 CodeHandleList* handlers) { 752 List<Handle<Object>>* handlers) {
757 Isolate* isolate = GetIsolate(); 753 Isolate* isolate = GetIsolate();
758 int receiver_count = maps->length(); 754 int receiver_count = maps->length();
759 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2); 755 Handle<FixedArray> array = EnsureArrayOfSize(receiver_count * 2);
760 InstallHandlers(array, maps, handlers); 756 InstallHandlers(array, maps, handlers);
761 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate), 757 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(isolate),
762 SKIP_WRITE_BARRIER); 758 SKIP_WRITE_BARRIER);
763 } 759 }
764 760
765
766 void KeyedStoreICNexus::ConfigurePolymorphic(Handle<Name> name, 761 void KeyedStoreICNexus::ConfigurePolymorphic(Handle<Name> name,
767 MapHandleList* maps, 762 MapHandleList* maps,
768 CodeHandleList* handlers) { 763 List<Handle<Object>>* handlers) {
769 int receiver_count = maps->length(); 764 int receiver_count = maps->length();
770 DCHECK(receiver_count > 1); 765 DCHECK(receiver_count > 1);
771 Handle<FixedArray> array; 766 Handle<FixedArray> array;
772 if (name.is_null()) { 767 if (name.is_null()) {
773 array = EnsureArrayOfSize(receiver_count * 2); 768 array = EnsureArrayOfSize(receiver_count * 2);
774 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()), 769 SetFeedbackExtra(*TypeFeedbackVector::UninitializedSentinel(GetIsolate()),
775 SKIP_WRITE_BARRIER); 770 SKIP_WRITE_BARRIER);
776 } else { 771 } else {
777 array = EnsureExtraArrayOfSize(receiver_count * 2); 772 array = EnsureExtraArrayOfSize(receiver_count * 2);
778 SetFeedback(*name); 773 SetFeedback(*name);
(...skipping 21 matching lines...) Expand all
800 Handle<Map> transitioned_map = transitioned_maps->at(i); 795 Handle<Map> transitioned_map = transitioned_maps->at(i);
801 cell = Map::WeakCellForMap(transitioned_map); 796 cell = Map::WeakCellForMap(transitioned_map);
802 array->set((i * 3) + 1, *cell); 797 array->set((i * 3) + 1, *cell);
803 } else { 798 } else {
804 array->set((i * 3) + 1, *undefined_value); 799 array->set((i * 3) + 1, *undefined_value);
805 } 800 }
806 array->set((i * 3) + 2, *handlers->at(i)); 801 array->set((i * 3) + 2, *handlers->at(i));
807 } 802 }
808 } 803 }
809 804
805 namespace {
806
807 int GetStepSize(FixedArray* array, Isolate* isolate) {
808 // The array should be of the form
809 // [map, handler, map, handler, ...]
810 // or
811 // [map, map, handler, map, map, handler, ...]
812 // where "map" is either a WeakCell or |undefined|,
813 // and "handler" is either a Code object or a Smi.
814 DCHECK(array->length() >= 2);
815 Object* second = array->get(1);
816 if (second->IsWeakCell() || second->IsUndefined(isolate)) return 3;
817 DCHECK(second->IsCode() || second->IsSmi());
818 return 2;
819 }
820
821 #ifdef DEBUG // Only used by DCHECKs below.
822 bool IsHandler(Object* object) {
823 return object->IsSmi() ||
824 (object->IsCode() && Code::cast(object)->is_handler());
825 }
826 #endif
827
828 } // namespace
810 829
811 int FeedbackNexus::ExtractMaps(MapHandleList* maps) const { 830 int FeedbackNexus::ExtractMaps(MapHandleList* maps) const {
812 Isolate* isolate = GetIsolate(); 831 Isolate* isolate = GetIsolate();
813 Object* feedback = GetFeedback(); 832 Object* feedback = GetFeedback();
814 bool is_named_feedback = IsPropertyNameFeedback(feedback); 833 bool is_named_feedback = IsPropertyNameFeedback(feedback);
815 if (feedback->IsFixedArray() || is_named_feedback) { 834 if (feedback->IsFixedArray() || is_named_feedback) {
816 int found = 0; 835 int found = 0;
817 if (is_named_feedback) { 836 if (is_named_feedback) {
818 feedback = GetFeedbackExtra(); 837 feedback = GetFeedbackExtra();
819 } 838 }
820 FixedArray* array = FixedArray::cast(feedback); 839 FixedArray* array = FixedArray::cast(feedback);
821 // The array should be of the form 840 int increment = GetStepSize(array, isolate);
822 // [map, handler, map, handler, ...]
823 // or
824 // [map, map, handler, map, map, handler, ...]
825 DCHECK(array->length() >= 2);
826 int increment = array->get(1)->IsCode() ? 2 : 3;
827 for (int i = 0; i < array->length(); i += increment) { 841 for (int i = 0; i < array->length(); i += increment) {
828 DCHECK(array->get(i)->IsWeakCell()); 842 DCHECK(array->get(i)->IsWeakCell());
829 WeakCell* cell = WeakCell::cast(array->get(i)); 843 WeakCell* cell = WeakCell::cast(array->get(i));
830 if (!cell->cleared()) { 844 if (!cell->cleared()) {
831 Map* map = Map::cast(cell->value()); 845 Map* map = Map::cast(cell->value());
832 maps->Add(handle(map, isolate)); 846 maps->Add(handle(map, isolate));
833 found++; 847 found++;
834 } 848 }
835 } 849 }
836 return found; 850 return found;
837 } else if (feedback->IsWeakCell()) { 851 } else if (feedback->IsWeakCell()) {
838 WeakCell* cell = WeakCell::cast(feedback); 852 WeakCell* cell = WeakCell::cast(feedback);
839 if (!cell->cleared()) { 853 if (!cell->cleared()) {
840 Map* map = Map::cast(cell->value()); 854 Map* map = Map::cast(cell->value());
841 maps->Add(handle(map, isolate)); 855 maps->Add(handle(map, isolate));
842 return 1; 856 return 1;
843 } 857 }
844 } 858 }
845 859
846 return 0; 860 return 0;
847 } 861 }
848 862
849 863 MaybeHandle<Object> FeedbackNexus::FindHandlerForMap(Handle<Map> map) const {
850 MaybeHandle<Code> FeedbackNexus::FindHandlerForMap(Handle<Map> map) const {
851 Object* feedback = GetFeedback(); 864 Object* feedback = GetFeedback();
865 Isolate* isolate = GetIsolate();
852 bool is_named_feedback = IsPropertyNameFeedback(feedback); 866 bool is_named_feedback = IsPropertyNameFeedback(feedback);
853 if (feedback->IsFixedArray() || is_named_feedback) { 867 if (feedback->IsFixedArray() || is_named_feedback) {
854 if (is_named_feedback) { 868 if (is_named_feedback) {
855 feedback = GetFeedbackExtra(); 869 feedback = GetFeedbackExtra();
856 } 870 }
857 FixedArray* array = FixedArray::cast(feedback); 871 FixedArray* array = FixedArray::cast(feedback);
858 DCHECK(array->length() >= 2); 872 int increment = GetStepSize(array, isolate);
859 int increment = array->get(1)->IsCode() ? 2 : 3;
860 for (int i = 0; i < array->length(); i += increment) { 873 for (int i = 0; i < array->length(); i += increment) {
861 DCHECK(array->get(i)->IsWeakCell()); 874 DCHECK(array->get(i)->IsWeakCell());
862 WeakCell* cell = WeakCell::cast(array->get(i)); 875 WeakCell* cell = WeakCell::cast(array->get(i));
863 if (!cell->cleared()) { 876 if (!cell->cleared()) {
864 Map* array_map = Map::cast(cell->value()); 877 Map* array_map = Map::cast(cell->value());
865 if (array_map == *map) { 878 if (array_map == *map) {
866 Code* code = Code::cast(array->get(i + increment - 1)); 879 Object* code = array->get(i + increment - 1);
867 DCHECK(code->kind() == Code::HANDLER); 880 DCHECK(IsHandler(code));
868 return handle(code); 881 return handle(code, isolate);
869 } 882 }
870 } 883 }
871 } 884 }
872 } else if (feedback->IsWeakCell()) { 885 } else if (feedback->IsWeakCell()) {
873 WeakCell* cell = WeakCell::cast(feedback); 886 WeakCell* cell = WeakCell::cast(feedback);
874 if (!cell->cleared()) { 887 if (!cell->cleared()) {
875 Map* cell_map = Map::cast(cell->value()); 888 Map* cell_map = Map::cast(cell->value());
876 if (cell_map == *map) { 889 if (cell_map == *map) {
877 Code* code = Code::cast(GetFeedbackExtra()); 890 Object* code = GetFeedbackExtra();
878 DCHECK(code->kind() == Code::HANDLER); 891 DCHECK(IsHandler(code));
879 return handle(code); 892 return handle(code, isolate);
880 } 893 }
881 } 894 }
882 } 895 }
883 896
884 return MaybeHandle<Code>(); 897 return MaybeHandle<Code>();
885 } 898 }
886 899
887 900 bool FeedbackNexus::FindHandlers(List<Handle<Object>>* code_list,
888 bool FeedbackNexus::FindHandlers(CodeHandleList* code_list, int length) const { 901 int length) const {
889 Object* feedback = GetFeedback(); 902 Object* feedback = GetFeedback();
903 Isolate* isolate = GetIsolate();
890 int count = 0; 904 int count = 0;
891 bool is_named_feedback = IsPropertyNameFeedback(feedback); 905 bool is_named_feedback = IsPropertyNameFeedback(feedback);
892 if (feedback->IsFixedArray() || is_named_feedback) { 906 if (feedback->IsFixedArray() || is_named_feedback) {
893 if (is_named_feedback) { 907 if (is_named_feedback) {
894 feedback = GetFeedbackExtra(); 908 feedback = GetFeedbackExtra();
895 } 909 }
896 FixedArray* array = FixedArray::cast(feedback); 910 FixedArray* array = FixedArray::cast(feedback);
897 // The array should be of the form 911 int increment = GetStepSize(array, isolate);
898 // [map, handler, map, handler, ...]
899 // or
900 // [map, map, handler, map, map, handler, ...]
901 // Be sure to skip handlers whose maps have been cleared.
902 DCHECK(array->length() >= 2);
903 int increment = array->get(1)->IsCode() ? 2 : 3;
904 for (int i = 0; i < array->length(); i += increment) { 912 for (int i = 0; i < array->length(); i += increment) {
905 DCHECK(array->get(i)->IsWeakCell()); 913 DCHECK(array->get(i)->IsWeakCell());
906 WeakCell* cell = WeakCell::cast(array->get(i)); 914 WeakCell* cell = WeakCell::cast(array->get(i));
915 // Be sure to skip handlers whose maps have been cleared.
907 if (!cell->cleared()) { 916 if (!cell->cleared()) {
908 Code* code = Code::cast(array->get(i + increment - 1)); 917 Object* code = array->get(i + increment - 1);
909 DCHECK(code->kind() == Code::HANDLER); 918 DCHECK(IsHandler(code));
910 code_list->Add(handle(code)); 919 code_list->Add(handle(code, isolate));
911 count++; 920 count++;
912 } 921 }
913 } 922 }
914 } else if (feedback->IsWeakCell()) { 923 } else if (feedback->IsWeakCell()) {
915 WeakCell* cell = WeakCell::cast(feedback); 924 WeakCell* cell = WeakCell::cast(feedback);
916 if (!cell->cleared()) { 925 if (!cell->cleared()) {
917 Code* code = Code::cast(GetFeedbackExtra()); 926 Object* code = GetFeedbackExtra();
918 DCHECK(code->kind() == Code::HANDLER); 927 DCHECK(IsHandler(code));
919 code_list->Add(handle(code)); 928 code_list->Add(handle(code, isolate));
920 count++; 929 count++;
921 } 930 }
922 } 931 }
923 return count == length; 932 return count == length;
924 } 933 }
925 934
926 935
927 void LoadICNexus::Clear(Code* host) { LoadIC::Clear(GetIsolate(), host, this); } 936 void LoadICNexus::Clear(Code* host) { LoadIC::Clear(GetIsolate(), host, this); }
928 937
929 void LoadGlobalICNexus::Clear(Code* host) { 938 void LoadGlobalICNexus::Clear(Code* host) {
(...skipping 29 matching lines...) Expand all
959 968
960 969
961 void KeyedStoreICNexus::Clear(Code* host) { 970 void KeyedStoreICNexus::Clear(Code* host) {
962 KeyedStoreIC::Clear(GetIsolate(), host, this); 971 KeyedStoreIC::Clear(GetIsolate(), host, this);
963 } 972 }
964 973
965 974
966 KeyedAccessStoreMode KeyedStoreICNexus::GetKeyedAccessStoreMode() const { 975 KeyedAccessStoreMode KeyedStoreICNexus::GetKeyedAccessStoreMode() const {
967 KeyedAccessStoreMode mode = STANDARD_STORE; 976 KeyedAccessStoreMode mode = STANDARD_STORE;
968 MapHandleList maps; 977 MapHandleList maps;
969 CodeHandleList handlers; 978 List<Handle<Object>> handlers;
970 979
971 if (GetKeyType() == PROPERTY) return mode; 980 if (GetKeyType() == PROPERTY) return mode;
972 981
973 ExtractMaps(&maps); 982 ExtractMaps(&maps);
974 FindHandlers(&handlers, maps.length()); 983 FindHandlers(&handlers, maps.length());
975 for (int i = 0; i < handlers.length(); i++) { 984 for (int i = 0; i < handlers.length(); i++) {
976 // The first handler that isn't the slow handler will have the bits we need. 985 // The first handler that isn't the slow handler will have the bits we need.
977 Handle<Code> handler = handlers.at(i); 986 Handle<Code> handler = Handle<Code>::cast(handlers.at(i));
978 CodeStub::Major major_key = CodeStub::MajorKeyFromKey(handler->stub_key()); 987 CodeStub::Major major_key = CodeStub::MajorKeyFromKey(handler->stub_key());
979 uint32_t minor_key = CodeStub::MinorKeyFromKey(handler->stub_key()); 988 uint32_t minor_key = CodeStub::MinorKeyFromKey(handler->stub_key());
980 CHECK(major_key == CodeStub::KeyedStoreSloppyArguments || 989 CHECK(major_key == CodeStub::KeyedStoreSloppyArguments ||
981 major_key == CodeStub::StoreFastElement || 990 major_key == CodeStub::StoreFastElement ||
982 major_key == CodeStub::StoreElement || 991 major_key == CodeStub::StoreElement ||
983 major_key == CodeStub::ElementsTransitionAndStore || 992 major_key == CodeStub::ElementsTransitionAndStore ||
984 major_key == CodeStub::NoCache); 993 major_key == CodeStub::NoCache);
985 if (major_key != CodeStub::NoCache) { 994 if (major_key != CodeStub::NoCache) {
986 mode = CommonStoreModeBits::decode(minor_key); 995 mode = CommonStoreModeBits::decode(minor_key);
987 break; 996 break;
(...skipping 13 matching lines...) Expand all
1001 1010
1002 IcCheckType KeyedStoreICNexus::GetKeyType() const { 1011 IcCheckType KeyedStoreICNexus::GetKeyType() const {
1003 Object* feedback = GetFeedback(); 1012 Object* feedback = GetFeedback();
1004 if (feedback == *TypeFeedbackVector::MegamorphicSentinel(GetIsolate())) { 1013 if (feedback == *TypeFeedbackVector::MegamorphicSentinel(GetIsolate())) {
1005 return static_cast<IcCheckType>(Smi::cast(GetFeedbackExtra())->value()); 1014 return static_cast<IcCheckType>(Smi::cast(GetFeedbackExtra())->value());
1006 } 1015 }
1007 return IsPropertyNameFeedback(feedback) ? PROPERTY : ELEMENT; 1016 return IsPropertyNameFeedback(feedback) ? PROPERTY : ELEMENT;
1008 } 1017 }
1009 } // namespace internal 1018 } // namespace internal
1010 } // namespace v8 1019 } // namespace v8
OLDNEW
« no previous file with comments | « src/type-feedback-vector.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698