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

Side by Side Diff: src/isolate.h

Issue 1409123003: [runtime] Avoid @@isConcatSpreadable lookup for fast path Array.prototype.concat (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: adding more tests Created 4 years, 8 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #ifndef V8_ISOLATE_H_ 5 #ifndef V8_ISOLATE_H_
6 #define V8_ISOLATE_H_ 6 #define V8_ISOLATE_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <set> 9 #include <set>
10 10
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 961
962 void set_date_cache(DateCache* date_cache) { 962 void set_date_cache(DateCache* date_cache) {
963 if (date_cache != date_cache_) { 963 if (date_cache != date_cache_) {
964 delete date_cache_; 964 delete date_cache_;
965 } 965 }
966 date_cache_ = date_cache; 966 date_cache_ = date_cache;
967 } 967 }
968 968
969 Map* get_initial_js_array_map(ElementsKind kind); 969 Map* get_initial_js_array_map(ElementsKind kind);
970 970
971 // The elements protector is valid if there are no additional elements
972 // on the Array prototype chain.
971 static const int kArrayProtectorValid = 1; 973 static const int kArrayProtectorValid = 1;
972 static const int kArrayProtectorInvalid = 0; 974 static const int kArrayProtectorInvalid = 0;
973
974 bool IsFastArrayConstructorPrototypeChainIntact(); 975 bool IsFastArrayConstructorPrototypeChainIntact();
975 bool IsArraySpeciesLookupChainIntact(); 976 bool IsArraySpeciesLookupChainIntact();
977 bool IsArrayIsConcatSpreadableLookupChainIntact();
976 978
977 // On intent to set an element in object, make sure that appropriate 979 // On intent to set an element in object, make sure that appropriate
978 // notifications occur if the set is on the elements of the array or 980 // notifications occur if the set is on the elements of the array or
979 // object prototype. Also ensure that changes to prototype chain between 981 // object prototype. Also ensure that changes to prototype chain between
980 // Array and Object fire notifications. 982 // Array and Object fire notifications.
981 void UpdateArrayProtectorOnSetElement(Handle<JSObject> object); 983 void UpdateArrayProtectorOnSetElement(Handle<JSObject> object);
982 void UpdateArrayProtectorOnSetLength(Handle<JSObject> object) { 984 void UpdateArrayProtectorOnSetLength(Handle<JSObject> object) {
983 UpdateArrayProtectorOnSetElement(object); 985 UpdateArrayProtectorOnSetElement(object);
984 } 986 }
985 void UpdateArrayProtectorOnSetPrototype(Handle<JSObject> object) { 987 void UpdateArrayProtectorOnSetPrototype(Handle<JSObject> object) {
986 UpdateArrayProtectorOnSetElement(object); 988 UpdateArrayProtectorOnSetElement(object);
987 } 989 }
988 void UpdateArrayProtectorOnNormalizeElements(Handle<JSObject> object) { 990 void UpdateArrayProtectorOnNormalizeElements(Handle<JSObject> object) {
989 UpdateArrayProtectorOnSetElement(object); 991 UpdateArrayProtectorOnSetElement(object);
990 } 992 }
991 void InvalidateArraySpeciesProtector(); 993 void InvalidateArraySpeciesProtector();
994 void InvalidateArrayIsConcatSpreadableProtector();
992 995
993 // Returns true if array is the initial array prototype in any native context. 996 // Returns true if array is the initial array prototype in any native context.
994 bool IsAnyInitialArrayPrototype(Handle<JSArray> array); 997 bool IsAnyInitialArrayPrototype(Handle<JSArray> array);
995 998
996 CallInterfaceDescriptorData* call_descriptor_data(int index); 999 CallInterfaceDescriptorData* call_descriptor_data(int index);
997 1000
998 void IterateDeferredHandles(ObjectVisitor* visitor); 1001 void IterateDeferredHandles(ObjectVisitor* visitor);
999 void LinkDeferredHandles(DeferredHandles* deferred_handles); 1002 void LinkDeferredHandles(DeferredHandles* deferred_handles);
1000 void UnlinkDeferredHandles(DeferredHandles* deferred_handles); 1003 void UnlinkDeferredHandles(DeferredHandles* deferred_handles);
1001 1004
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 } 1114 }
1112 1115
1113 FutexWaitListNode* futex_wait_list_node() { return &futex_wait_list_node_; } 1116 FutexWaitListNode* futex_wait_list_node() { return &futex_wait_list_node_; }
1114 1117
1115 CancelableTaskManager* cancelable_task_manager() { 1118 CancelableTaskManager* cancelable_task_manager() {
1116 return cancelable_task_manager_; 1119 return cancelable_task_manager_;
1117 } 1120 }
1118 1121
1119 interpreter::Interpreter* interpreter() const { return interpreter_; } 1122 interpreter::Interpreter* interpreter() const { return interpreter_; }
1120 1123
1124 bool IsInContextIndex(Object* object, uint32_t index);
1125
1121 protected: 1126 protected:
1122 explicit Isolate(bool enable_serializer); 1127 explicit Isolate(bool enable_serializer);
1128 bool ArrayOrObjectPrototypeIsInContext(Object* object);
1123 1129
1124 private: 1130 private:
1125 friend struct GlobalState; 1131 friend struct GlobalState;
1126 friend struct InitializeGlobalState; 1132 friend struct InitializeGlobalState;
1127 Handle<JSObject> SetUpSubregistry(Handle<JSObject> registry, Handle<Map> map, 1133 Handle<JSObject> SetUpSubregistry(Handle<JSObject> registry, Handle<Map> map,
1128 const char* name); 1134 const char* name);
1129 1135
1130 // These fields are accessed through the API, offsets must be kept in sync 1136 // These fields are accessed through the API, offsets must be kept in sync
1131 // with v8::internal::Internals (in include/v8.h) constants. This is also 1137 // with v8::internal::Internals (in include/v8.h) constants. This is also
1132 // verified in Isolate::Init() using runtime checks. 1138 // verified in Isolate::Init() using runtime checks.
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 1599
1594 EmbeddedVector<char, 128> filename_; 1600 EmbeddedVector<char, 128> filename_;
1595 FILE* file_; 1601 FILE* file_;
1596 int scope_depth_; 1602 int scope_depth_;
1597 }; 1603 };
1598 1604
1599 } // namespace internal 1605 } // namespace internal
1600 } // namespace v8 1606 } // namespace v8
1601 1607
1602 #endif // V8_ISOLATE_H_ 1608 #endif // V8_ISOLATE_H_
OLDNEW
« no previous file with comments | « src/heap/objects-visiting.cc ('k') | src/isolate.cc » ('j') | src/isolate.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698