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

Side by Side Diff: src/objects-inl.h

Issue 2622833002: WIP [esnext] implement async iteration proposal (Closed)
Patch Set: Created 3 years, 11 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 // Review notes: 5 // Review notes:
6 // 6 //
7 // - The use of macros in these inline functions may seem superfluous 7 // - The use of macros in these inline functions may seem superfluous
8 // but it is absolutely needed to make sure gcc generates optimal 8 // but it is absolutely needed to make sure gcc generates optimal
9 // code. gcc is not happy when attempting to inline too deep. 9 // code. gcc is not happy when attempting to inline too deep.
10 // 10 //
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 TYPE_CHECKER(BytecodeArray, BYTECODE_ARRAY_TYPE) 137 TYPE_CHECKER(BytecodeArray, BYTECODE_ARRAY_TYPE)
138 TYPE_CHECKER(Cell, CELL_TYPE) 138 TYPE_CHECKER(Cell, CELL_TYPE)
139 TYPE_CHECKER(Code, CODE_TYPE) 139 TYPE_CHECKER(Code, CODE_TYPE)
140 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) 140 TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE)
141 TYPE_CHECKER(Foreign, FOREIGN_TYPE) 141 TYPE_CHECKER(Foreign, FOREIGN_TYPE)
142 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE) 142 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE)
143 TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) 143 TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE)
144 TYPE_CHECKER(JSArgumentsObject, JS_ARGUMENTS_TYPE) 144 TYPE_CHECKER(JSArgumentsObject, JS_ARGUMENTS_TYPE)
145 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) 145 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE)
146 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) 146 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE)
147 TYPE_CHECKER(JSAsyncGeneratorObject, JS_ASYNC_GENERATOR_OBJECT_TYPE)
147 TYPE_CHECKER(JSBoundFunction, JS_BOUND_FUNCTION_TYPE) 148 TYPE_CHECKER(JSBoundFunction, JS_BOUND_FUNCTION_TYPE)
148 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) 149 TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE)
149 TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) 150 TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE)
150 TYPE_CHECKER(JSDate, JS_DATE_TYPE) 151 TYPE_CHECKER(JSDate, JS_DATE_TYPE)
151 TYPE_CHECKER(JSError, JS_ERROR_TYPE) 152 TYPE_CHECKER(JSError, JS_ERROR_TYPE)
152 TYPE_CHECKER(JSFunction, JS_FUNCTION_TYPE) 153 TYPE_CHECKER(JSFunction, JS_FUNCTION_TYPE)
153 TYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE)
154 TYPE_CHECKER(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE) 154 TYPE_CHECKER(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE)
155 TYPE_CHECKER(JSMap, JS_MAP_TYPE) 155 TYPE_CHECKER(JSMap, JS_MAP_TYPE)
156 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE) 156 TYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE)
157 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) 157 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE)
158 TYPE_CHECKER(JSModuleNamespace, JS_MODULE_NAMESPACE_TYPE) 158 TYPE_CHECKER(JSModuleNamespace, JS_MODULE_NAMESPACE_TYPE)
159 TYPE_CHECKER(JSPromiseCapability, JS_PROMISE_CAPABILITY_TYPE) 159 TYPE_CHECKER(JSPromiseCapability, JS_PROMISE_CAPABILITY_TYPE)
160 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE) 160 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE)
161 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) 161 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE)
162 TYPE_CHECKER(JSSet, JS_SET_TYPE) 162 TYPE_CHECKER(JSSet, JS_SET_TYPE)
163 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) 163 TYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE)
(...skipping 28 matching lines...) Expand all
192 InstanceType instance_type = map()->instance_type(); 192 InstanceType instance_type = map()->instance_type();
193 return instance_type == FIXED_ARRAY_TYPE || 193 return instance_type == FIXED_ARRAY_TYPE ||
194 instance_type == TRANSITION_ARRAY_TYPE; 194 instance_type == TRANSITION_ARRAY_TYPE;
195 } 195 }
196 196
197 // External objects are not extensible, so the map check is enough. 197 // External objects are not extensible, so the map check is enough.
198 bool HeapObject::IsExternal() const { 198 bool HeapObject::IsExternal() const {
199 return map() == GetHeap()->external_map(); 199 return map() == GetHeap()->external_map();
200 } 200 }
201 201
202 bool HeapObject::IsJSGeneratorObject() const {
203 return map()->instance_type() == JS_GENERATOR_OBJECT_TYPE ||
204 IsJSAsyncGeneratorObject();
205 }
206
202 #define SIMD128_TYPE_CHECKER(TYPE, Type, type, lane_count, lane_type) \ 207 #define SIMD128_TYPE_CHECKER(TYPE, Type, type, lane_count, lane_type) \
203 bool HeapObject::Is##Type() const { return map() == GetHeap()->type##_map(); } 208 bool HeapObject::Is##Type() const { return map() == GetHeap()->type##_map(); }
204 SIMD128_TYPES(SIMD128_TYPE_CHECKER) 209 SIMD128_TYPES(SIMD128_TYPE_CHECKER)
205 #undef SIMD128_TYPE_CHECKER 210 #undef SIMD128_TYPE_CHECKER
206 211
207 #define IS_TYPE_FUNCTION_DEF(type_) \ 212 #define IS_TYPE_FUNCTION_DEF(type_) \
208 bool Object::Is##type_() const { \ 213 bool Object::Is##type_() const { \
209 return IsHeapObject() && HeapObject::cast(this)->Is##type_(); \ 214 return IsHeapObject() && HeapObject::cast(this)->Is##type_(); \
210 } 215 }
211 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DEF) 216 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DEF)
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 CAST_ACCESSOR(Int32x4) 644 CAST_ACCESSOR(Int32x4)
640 CAST_ACCESSOR(Int8x16) 645 CAST_ACCESSOR(Int8x16)
641 CAST_ACCESSOR(JSArray) 646 CAST_ACCESSOR(JSArray)
642 CAST_ACCESSOR(JSArrayBuffer) 647 CAST_ACCESSOR(JSArrayBuffer)
643 CAST_ACCESSOR(JSArrayBufferView) 648 CAST_ACCESSOR(JSArrayBufferView)
644 CAST_ACCESSOR(JSBoundFunction) 649 CAST_ACCESSOR(JSBoundFunction)
645 CAST_ACCESSOR(JSDataView) 650 CAST_ACCESSOR(JSDataView)
646 CAST_ACCESSOR(JSDate) 651 CAST_ACCESSOR(JSDate)
647 CAST_ACCESSOR(JSFunction) 652 CAST_ACCESSOR(JSFunction)
648 CAST_ACCESSOR(JSGeneratorObject) 653 CAST_ACCESSOR(JSGeneratorObject)
654 CAST_ACCESSOR(JSAsyncGeneratorObject)
649 CAST_ACCESSOR(JSGlobalObject) 655 CAST_ACCESSOR(JSGlobalObject)
650 CAST_ACCESSOR(JSGlobalProxy) 656 CAST_ACCESSOR(JSGlobalProxy)
651 CAST_ACCESSOR(JSMap) 657 CAST_ACCESSOR(JSMap)
652 CAST_ACCESSOR(JSMapIterator) 658 CAST_ACCESSOR(JSMapIterator)
653 CAST_ACCESSOR(JSMessageObject) 659 CAST_ACCESSOR(JSMessageObject)
654 CAST_ACCESSOR(JSModuleNamespace) 660 CAST_ACCESSOR(JSModuleNamespace)
655 CAST_ACCESSOR(JSObject) 661 CAST_ACCESSOR(JSObject)
656 CAST_ACCESSOR(JSProxy) 662 CAST_ACCESSOR(JSProxy)
657 CAST_ACCESSOR(JSReceiver) 663 CAST_ACCESSOR(JSReceiver)
658 CAST_ACCESSOR(JSRegExp) 664 CAST_ACCESSOR(JSRegExp)
(...skipping 1492 matching lines...) Expand 10 before | Expand all | Expand 10 after
2151 // Check for the most common kind of JavaScript object before 2157 // Check for the most common kind of JavaScript object before
2152 // falling into the generic switch. This speeds up the internal 2158 // falling into the generic switch. This speeds up the internal
2153 // field operations considerably on average. 2159 // field operations considerably on average.
2154 if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize; 2160 if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize;
2155 switch (type) { 2161 switch (type) {
2156 case JS_API_OBJECT_TYPE: 2162 case JS_API_OBJECT_TYPE:
2157 case JS_SPECIAL_API_OBJECT_TYPE: 2163 case JS_SPECIAL_API_OBJECT_TYPE:
2158 return JSObject::kHeaderSize; 2164 return JSObject::kHeaderSize;
2159 case JS_GENERATOR_OBJECT_TYPE: 2165 case JS_GENERATOR_OBJECT_TYPE:
2160 return JSGeneratorObject::kSize; 2166 return JSGeneratorObject::kSize;
2167 case JS_ASYNC_GENERATOR_OBJECT_TYPE:
2168 return JSAsyncGeneratorObject::kSize;
2161 case JS_GLOBAL_PROXY_TYPE: 2169 case JS_GLOBAL_PROXY_TYPE:
2162 return JSGlobalProxy::kSize; 2170 return JSGlobalProxy::kSize;
2163 case JS_GLOBAL_OBJECT_TYPE: 2171 case JS_GLOBAL_OBJECT_TYPE:
2164 return JSGlobalObject::kSize; 2172 return JSGlobalObject::kSize;
2165 case JS_BOUND_FUNCTION_TYPE: 2173 case JS_BOUND_FUNCTION_TYPE:
2166 return JSBoundFunction::kSize; 2174 return JSBoundFunction::kSize;
2167 case JS_FUNCTION_TYPE: 2175 case JS_FUNCTION_TYPE:
2168 return JSFunction::kSize; 2176 return JSFunction::kSize;
2169 case JS_VALUE_TYPE: 2177 case JS_VALUE_TYPE:
2170 return JSValue::kSize; 2178 return JSValue::kSize;
(...skipping 3582 matching lines...) Expand 10 before | Expand all | Expand 10 after
5753 ACCESSORS(PromiseReactionJobInfo, deferred_promise, Object, 5761 ACCESSORS(PromiseReactionJobInfo, deferred_promise, Object,
5754 kDeferredPromiseOffset); 5762 kDeferredPromiseOffset);
5755 ACCESSORS(PromiseReactionJobInfo, deferred_on_resolve, Object, 5763 ACCESSORS(PromiseReactionJobInfo, deferred_on_resolve, Object,
5756 kDeferredOnResolveOffset); 5764 kDeferredOnResolveOffset);
5757 ACCESSORS(PromiseReactionJobInfo, deferred_on_reject, Object, 5765 ACCESSORS(PromiseReactionJobInfo, deferred_on_reject, Object,
5758 kDeferredOnRejectOffset); 5766 kDeferredOnRejectOffset);
5759 SMI_ACCESSORS(PromiseReactionJobInfo, debug_id, kDebugIdOffset); 5767 SMI_ACCESSORS(PromiseReactionJobInfo, debug_id, kDebugIdOffset);
5760 SMI_ACCESSORS(PromiseReactionJobInfo, debug_name, kDebugNameOffset); 5768 SMI_ACCESSORS(PromiseReactionJobInfo, debug_name, kDebugNameOffset);
5761 ACCESSORS(PromiseReactionJobInfo, context, Context, kContextOffset); 5769 ACCESSORS(PromiseReactionJobInfo, context, Context, kContextOffset);
5762 5770
5771 ACCESSORS(AsyncGeneratorRequest, next, Object, kNextOffset)
5772 SMI_ACCESSORS(AsyncGeneratorRequest, resume_mode, kResumeModeOffset)
5773 ACCESSORS(AsyncGeneratorRequest, value, Object, kValueOffset)
5774 ACCESSORS(AsyncGeneratorRequest, promise, Object, kPromiseOffset)
5775 ACCESSORS(AsyncGeneratorRequest, awaited_promise, Object, kAwaitedPromiseOffset)
5776
5763 Map* PrototypeInfo::ObjectCreateMap() { 5777 Map* PrototypeInfo::ObjectCreateMap() {
5764 return Map::cast(WeakCell::cast(object_create_map())->value()); 5778 return Map::cast(WeakCell::cast(object_create_map())->value());
5765 } 5779 }
5766 5780
5767 // static 5781 // static
5768 void PrototypeInfo::SetObjectCreateMap(Handle<PrototypeInfo> info, 5782 void PrototypeInfo::SetObjectCreateMap(Handle<PrototypeInfo> info,
5769 Handle<Map> map) { 5783 Handle<Map> map) {
5770 Handle<WeakCell> cell = Map::WeakCellForMap(map); 5784 Handle<WeakCell> cell = Map::WeakCellForMap(map);
5771 info->set_object_create_map(*cell); 5785 info->set_object_create_map(*cell);
5772 } 5786 }
(...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after
6785 } 6799 }
6786 6800
6787 bool JSGeneratorObject::is_closed() const { 6801 bool JSGeneratorObject::is_closed() const {
6788 return continuation() == kGeneratorClosed; 6802 return continuation() == kGeneratorClosed;
6789 } 6803 }
6790 6804
6791 bool JSGeneratorObject::is_executing() const { 6805 bool JSGeneratorObject::is_executing() const {
6792 return continuation() == kGeneratorExecuting; 6806 return continuation() == kGeneratorExecuting;
6793 } 6807 }
6794 6808
6809 ACCESSORS(JSAsyncGeneratorObject, queue, HeapObject, kQueueOffset)
6810
6795 ACCESSORS(JSValue, value, Object, kValueOffset) 6811 ACCESSORS(JSValue, value, Object, kValueOffset)
6796 6812
6797 6813
6798 HeapNumber* HeapNumber::cast(Object* object) { 6814 HeapNumber* HeapNumber::cast(Object* object) {
6799 SLOW_DCHECK(object->IsHeapNumber() || object->IsMutableHeapNumber()); 6815 SLOW_DCHECK(object->IsHeapNumber() || object->IsMutableHeapNumber());
6800 return reinterpret_cast<HeapNumber*>(object); 6816 return reinterpret_cast<HeapNumber*>(object);
6801 } 6817 }
6802 6818
6803 6819
6804 const HeapNumber* HeapNumber::cast(const Object* object) { 6820 const HeapNumber* HeapNumber::cast(const Object* object) {
(...skipping 1617 matching lines...) Expand 10 before | Expand all | Expand 10 after
8422 ACCESSORS(JSIteratorResult, value, Object, kValueOffset) 8438 ACCESSORS(JSIteratorResult, value, Object, kValueOffset)
8423 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset) 8439 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset)
8424 8440
8425 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset) 8441 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset)
8426 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset) 8442 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset)
8427 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset) 8443 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset)
8428 8444
8429 ACCESSORS(JSStringIterator, string, String, kStringOffset) 8445 ACCESSORS(JSStringIterator, string, String, kStringOffset)
8430 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) 8446 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset)
8431 8447
8448 ACCESSORS(JSAsyncFromSyncIterator, sync_iterator, HeapObject,
8449 kSyncIteratorOffset)
8450
8432 #undef INT_ACCESSORS 8451 #undef INT_ACCESSORS
8433 #undef ACCESSORS 8452 #undef ACCESSORS
8434 #undef ACCESSORS_CHECKED 8453 #undef ACCESSORS_CHECKED
8435 #undef ACCESSORS_CHECKED2 8454 #undef ACCESSORS_CHECKED2
8436 #undef SMI_ACCESSORS 8455 #undef SMI_ACCESSORS
8437 #undef SYNCHRONIZED_SMI_ACCESSORS 8456 #undef SYNCHRONIZED_SMI_ACCESSORS
8438 #undef NOBARRIER_SMI_ACCESSORS 8457 #undef NOBARRIER_SMI_ACCESSORS
8439 #undef BOOL_GETTER 8458 #undef BOOL_GETTER
8440 #undef BOOL_ACCESSORS 8459 #undef BOOL_ACCESSORS
8441 #undef FIELD_ADDR 8460 #undef FIELD_ADDR
(...skipping 30 matching lines...) Expand all
8472 #undef WRITE_INT64_FIELD 8491 #undef WRITE_INT64_FIELD
8473 #undef READ_BYTE_FIELD 8492 #undef READ_BYTE_FIELD
8474 #undef WRITE_BYTE_FIELD 8493 #undef WRITE_BYTE_FIELD
8475 #undef NOBARRIER_READ_BYTE_FIELD 8494 #undef NOBARRIER_READ_BYTE_FIELD
8476 #undef NOBARRIER_WRITE_BYTE_FIELD 8495 #undef NOBARRIER_WRITE_BYTE_FIELD
8477 8496
8478 } // namespace internal 8497 } // namespace internal
8479 } // namespace v8 8498 } // namespace v8
8480 8499
8481 #endif // V8_OBJECTS_INL_H_ 8500 #endif // V8_OBJECTS_INL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698