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

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

Issue 2622833002: WIP [esnext] implement async iteration proposal (Closed)
Patch Set: Make (most of) for-await-of work (no IteratorClose yet..) 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 3562 matching lines...) Expand 10 before | Expand all | Expand 10 after
5733 ACCESSORS(PromiseReactionJobInfo, deferred_promise, Object, 5741 ACCESSORS(PromiseReactionJobInfo, deferred_promise, Object,
5734 kDeferredPromiseOffset); 5742 kDeferredPromiseOffset);
5735 ACCESSORS(PromiseReactionJobInfo, deferred_on_resolve, Object, 5743 ACCESSORS(PromiseReactionJobInfo, deferred_on_resolve, Object,
5736 kDeferredOnResolveOffset); 5744 kDeferredOnResolveOffset);
5737 ACCESSORS(PromiseReactionJobInfo, deferred_on_reject, Object, 5745 ACCESSORS(PromiseReactionJobInfo, deferred_on_reject, Object,
5738 kDeferredOnRejectOffset); 5746 kDeferredOnRejectOffset);
5739 SMI_ACCESSORS(PromiseReactionJobInfo, debug_id, kDebugIdOffset); 5747 SMI_ACCESSORS(PromiseReactionJobInfo, debug_id, kDebugIdOffset);
5740 SMI_ACCESSORS(PromiseReactionJobInfo, debug_name, kDebugNameOffset); 5748 SMI_ACCESSORS(PromiseReactionJobInfo, debug_name, kDebugNameOffset);
5741 ACCESSORS(PromiseReactionJobInfo, context, Context, kContextOffset); 5749 ACCESSORS(PromiseReactionJobInfo, context, Context, kContextOffset);
5742 5750
5751 ACCESSORS(AsyncGeneratorRequest, next, Object, kNextOffset)
5752 SMI_ACCESSORS(AsyncGeneratorRequest, resume_mode, kResumeModeOffset)
5753 ACCESSORS(AsyncGeneratorRequest, value, Object, kValueOffset)
5754 ACCESSORS(AsyncGeneratorRequest, promise, Object, kPromiseOffset)
5755 ACCESSORS(AsyncGeneratorRequest, awaited_promise, Object, kAwaitedPromiseOffset)
5756
5743 Map* PrototypeInfo::ObjectCreateMap() { 5757 Map* PrototypeInfo::ObjectCreateMap() {
5744 return Map::cast(WeakCell::cast(object_create_map())->value()); 5758 return Map::cast(WeakCell::cast(object_create_map())->value());
5745 } 5759 }
5746 5760
5747 // static 5761 // static
5748 void PrototypeInfo::SetObjectCreateMap(Handle<PrototypeInfo> info, 5762 void PrototypeInfo::SetObjectCreateMap(Handle<PrototypeInfo> info,
5749 Handle<Map> map) { 5763 Handle<Map> map) {
5750 Handle<WeakCell> cell = Map::WeakCellForMap(map); 5764 Handle<WeakCell> cell = Map::WeakCellForMap(map);
5751 info->set_object_create_map(*cell); 5765 info->set_object_create_map(*cell);
5752 } 5766 }
(...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after
6765 } 6779 }
6766 6780
6767 bool JSGeneratorObject::is_closed() const { 6781 bool JSGeneratorObject::is_closed() const {
6768 return continuation() == kGeneratorClosed; 6782 return continuation() == kGeneratorClosed;
6769 } 6783 }
6770 6784
6771 bool JSGeneratorObject::is_executing() const { 6785 bool JSGeneratorObject::is_executing() const {
6772 return continuation() == kGeneratorExecuting; 6786 return continuation() == kGeneratorExecuting;
6773 } 6787 }
6774 6788
6789 ACCESSORS(JSAsyncGeneratorObject, queue, HeapObject, kQueueOffset)
6790
6775 ACCESSORS(JSValue, value, Object, kValueOffset) 6791 ACCESSORS(JSValue, value, Object, kValueOffset)
6776 6792
6777 6793
6778 HeapNumber* HeapNumber::cast(Object* object) { 6794 HeapNumber* HeapNumber::cast(Object* object) {
6779 SLOW_DCHECK(object->IsHeapNumber() || object->IsMutableHeapNumber()); 6795 SLOW_DCHECK(object->IsHeapNumber() || object->IsMutableHeapNumber());
6780 return reinterpret_cast<HeapNumber*>(object); 6796 return reinterpret_cast<HeapNumber*>(object);
6781 } 6797 }
6782 6798
6783 6799
6784 const HeapNumber* HeapNumber::cast(const Object* object) { 6800 const HeapNumber* HeapNumber::cast(const Object* object) {
(...skipping 1617 matching lines...) Expand 10 before | Expand all | Expand 10 after
8402 ACCESSORS(JSIteratorResult, value, Object, kValueOffset) 8418 ACCESSORS(JSIteratorResult, value, Object, kValueOffset)
8403 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset) 8419 ACCESSORS(JSIteratorResult, done, Object, kDoneOffset)
8404 8420
8405 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset) 8421 ACCESSORS(JSArrayIterator, object, Object, kIteratedObjectOffset)
8406 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset) 8422 ACCESSORS(JSArrayIterator, index, Object, kNextIndexOffset)
8407 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset) 8423 ACCESSORS(JSArrayIterator, object_map, Object, kIteratedObjectMapOffset)
8408 8424
8409 ACCESSORS(JSStringIterator, string, String, kStringOffset) 8425 ACCESSORS(JSStringIterator, string, String, kStringOffset)
8410 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset) 8426 SMI_ACCESSORS(JSStringIterator, index, kNextIndexOffset)
8411 8427
8428 ACCESSORS(JSAsyncFromSyncIterator, sync_iterator, HeapObject,
8429 kSyncIteratorOffset)
8430
8412 #undef INT_ACCESSORS 8431 #undef INT_ACCESSORS
8413 #undef ACCESSORS 8432 #undef ACCESSORS
8414 #undef ACCESSORS_CHECKED 8433 #undef ACCESSORS_CHECKED
8415 #undef ACCESSORS_CHECKED2 8434 #undef ACCESSORS_CHECKED2
8416 #undef SMI_ACCESSORS 8435 #undef SMI_ACCESSORS
8417 #undef SYNCHRONIZED_SMI_ACCESSORS 8436 #undef SYNCHRONIZED_SMI_ACCESSORS
8418 #undef NOBARRIER_SMI_ACCESSORS 8437 #undef NOBARRIER_SMI_ACCESSORS
8419 #undef BOOL_GETTER 8438 #undef BOOL_GETTER
8420 #undef BOOL_ACCESSORS 8439 #undef BOOL_ACCESSORS
8421 #undef FIELD_ADDR 8440 #undef FIELD_ADDR
(...skipping 30 matching lines...) Expand all
8452 #undef WRITE_INT64_FIELD 8471 #undef WRITE_INT64_FIELD
8453 #undef READ_BYTE_FIELD 8472 #undef READ_BYTE_FIELD
8454 #undef WRITE_BYTE_FIELD 8473 #undef WRITE_BYTE_FIELD
8455 #undef NOBARRIER_READ_BYTE_FIELD 8474 #undef NOBARRIER_READ_BYTE_FIELD
8456 #undef NOBARRIER_WRITE_BYTE_FIELD 8475 #undef NOBARRIER_WRITE_BYTE_FIELD
8457 8476
8458 } // namespace internal 8477 } // namespace internal
8459 } // namespace v8 8478 } // namespace v8
8460 8479
8461 #endif // V8_OBJECTS_INL_H_ 8480 #endif // V8_OBJECTS_INL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698