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

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: merging with master Created 4 years, 7 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/heap/objects-visiting.cc ('k') | src/isolate.cc » ('j') | 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 // 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 673 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 684
685 // Returns if the given context may access the given global object. If 685 // Returns if the given context may access the given global object. If
686 // the result is false, the pending exception is guaranteed to be 686 // the result is false, the pending exception is guaranteed to be
687 // set. 687 // set.
688 bool MayAccess(Handle<Context> accessing_context, Handle<JSObject> receiver); 688 bool MayAccess(Handle<Context> accessing_context, Handle<JSObject> receiver);
689 689
690 void SetFailedAccessCheckCallback(v8::FailedAccessCheckCallback callback); 690 void SetFailedAccessCheckCallback(v8::FailedAccessCheckCallback callback);
691 void ReportFailedAccessCheck(Handle<JSObject> receiver); 691 void ReportFailedAccessCheck(Handle<JSObject> receiver);
692 692
693 // Exception throwing support. The caller should use the result 693 // Exception throwing support. The caller should use the result
694 // of Throw() as its return value. 694 // of Throw() as its return vaue.
695 Object* Throw(Object* exception, MessageLocation* location = NULL); 695 Object* Throw(Object* exception, MessageLocation* location = NULL);
696 Object* ThrowIllegalOperation(); 696 Object* ThrowIllegalOperation();
697 697
698 template <typename T> 698 template <typename T>
699 MUST_USE_RESULT MaybeHandle<T> Throw(Handle<Object> exception, 699 MUST_USE_RESULT MaybeHandle<T> Throw(Handle<Object> exception,
700 MessageLocation* location = NULL) { 700 MessageLocation* location = NULL) {
701 Throw(*exception, location); 701 Throw(*exception, location);
702 return MaybeHandle<T>(); 702 return MaybeHandle<T>();
703 } 703 }
704 704
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 date_cache_ = date_cache; 952 date_cache_ = date_cache;
953 } 953 }
954 954
955 Map* get_initial_js_array_map(ElementsKind kind); 955 Map* get_initial_js_array_map(ElementsKind kind);
956 956
957 static const int kArrayProtectorValid = 1; 957 static const int kArrayProtectorValid = 1;
958 static const int kArrayProtectorInvalid = 0; 958 static const int kArrayProtectorInvalid = 0;
959 959
960 bool IsFastArrayConstructorPrototypeChainIntact(); 960 bool IsFastArrayConstructorPrototypeChainIntact();
961 inline bool IsArraySpeciesLookupChainIntact(); 961 inline bool IsArraySpeciesLookupChainIntact();
962 bool IsIsConcatSpreadableLookupChainIntact();
962 963
963 // On intent to set an element in object, make sure that appropriate 964 // On intent to set an element in object, make sure that appropriate
964 // notifications occur if the set is on the elements of the array or 965 // notifications occur if the set is on the elements of the array or
965 // object prototype. Also ensure that changes to prototype chain between 966 // object prototype. Also ensure that changes to prototype chain between
966 // Array and Object fire notifications. 967 // Array and Object fire notifications.
967 void UpdateArrayProtectorOnSetElement(Handle<JSObject> object); 968 void UpdateArrayProtectorOnSetElement(Handle<JSObject> object);
968 void UpdateArrayProtectorOnSetLength(Handle<JSObject> object) { 969 void UpdateArrayProtectorOnSetLength(Handle<JSObject> object) {
969 UpdateArrayProtectorOnSetElement(object); 970 UpdateArrayProtectorOnSetElement(object);
970 } 971 }
971 void UpdateArrayProtectorOnSetPrototype(Handle<JSObject> object) { 972 void UpdateArrayProtectorOnSetPrototype(Handle<JSObject> object) {
972 UpdateArrayProtectorOnSetElement(object); 973 UpdateArrayProtectorOnSetElement(object);
973 } 974 }
974 void UpdateArrayProtectorOnNormalizeElements(Handle<JSObject> object) { 975 void UpdateArrayProtectorOnNormalizeElements(Handle<JSObject> object) {
975 UpdateArrayProtectorOnSetElement(object); 976 UpdateArrayProtectorOnSetElement(object);
976 } 977 }
977 void InvalidateArraySpeciesProtector(); 978 void InvalidateArraySpeciesProtector();
979 void InvalidateIsConcatSpreadableProtector();
978 980
979 // Returns true if array is the initial array prototype in any native context. 981 // Returns true if array is the initial array prototype in any native context.
980 bool IsAnyInitialArrayPrototype(Handle<JSArray> array); 982 bool IsAnyInitialArrayPrototype(Handle<JSArray> array);
981 983
982 CallInterfaceDescriptorData* call_descriptor_data(int index); 984 CallInterfaceDescriptorData* call_descriptor_data(int index);
983 985
984 void IterateDeferredHandles(ObjectVisitor* visitor); 986 void IterateDeferredHandles(ObjectVisitor* visitor);
985 void LinkDeferredHandles(DeferredHandles* deferred_handles); 987 void LinkDeferredHandles(DeferredHandles* deferred_handles);
986 void UnlinkDeferredHandles(DeferredHandles* deferred_handles); 988 void UnlinkDeferredHandles(DeferredHandles* deferred_handles);
987 989
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 FutexWaitListNode* futex_wait_list_node() { return &futex_wait_list_node_; } 1102 FutexWaitListNode* futex_wait_list_node() { return &futex_wait_list_node_; }
1101 1103
1102 CancelableTaskManager* cancelable_task_manager() { 1104 CancelableTaskManager* cancelable_task_manager() {
1103 return cancelable_task_manager_; 1105 return cancelable_task_manager_;
1104 } 1106 }
1105 1107
1106 interpreter::Interpreter* interpreter() const { return interpreter_; } 1108 interpreter::Interpreter* interpreter() const { return interpreter_; }
1107 1109
1108 base::AccountingAllocator* allocator() { return &allocator_; } 1110 base::AccountingAllocator* allocator() { return &allocator_; }
1109 1111
1112 bool IsInAnyContext(Object* object, uint32_t index);
1113
1110 protected: 1114 protected:
1111 explicit Isolate(bool enable_serializer); 1115 explicit Isolate(bool enable_serializer);
1116 bool IsArrayOrObjectPrototype(Object* object);
1112 1117
1113 private: 1118 private:
1114 friend struct GlobalState; 1119 friend struct GlobalState;
1115 friend struct InitializeGlobalState; 1120 friend struct InitializeGlobalState;
1116 Handle<JSObject> SetUpSubregistry(Handle<JSObject> registry, Handle<Map> map, 1121 Handle<JSObject> SetUpSubregistry(Handle<JSObject> registry, Handle<Map> map,
1117 const char* name); 1122 const char* name);
1118 1123
1119 // These fields are accessed through the API, offsets must be kept in sync 1124 // These fields are accessed through the API, offsets must be kept in sync
1120 // with v8::internal::Internals (in include/v8.h) constants. This is also 1125 // with v8::internal::Internals (in include/v8.h) constants. This is also
1121 // verified in Isolate::Init() using runtime checks. 1126 // verified in Isolate::Init() using runtime checks.
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 1594
1590 EmbeddedVector<char, 128> filename_; 1595 EmbeddedVector<char, 128> filename_;
1591 FILE* file_; 1596 FILE* file_;
1592 int scope_depth_; 1597 int scope_depth_;
1593 }; 1598 };
1594 1599
1595 } // namespace internal 1600 } // namespace internal
1596 } // namespace v8 1601 } // namespace v8
1597 1602
1598 #endif // V8_ISOLATE_H_ 1603 #endif // V8_ISOLATE_H_
OLDNEW
« no previous file with comments | « src/heap/objects-visiting.cc ('k') | src/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698