Line data Source code
1 : // Copyright 2017 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #ifndef V8_OBJECTS_JS_COLLECTION_INL_H_
6 : #define V8_OBJECTS_JS_COLLECTION_INL_H_
7 :
8 : #include "src/objects/js-collection.h"
9 :
10 : #include "src/heap/heap-write-barrier-inl.h"
11 : #include "src/objects-inl.h"
12 : #include "src/objects/heap-object-inl.h"
13 : #include "src/objects/ordered-hash-table-inl.h"
14 : #include "src/roots-inl.h"
15 :
16 : // Has to be the last include (doesn't have include guards):
17 : #include "src/objects/object-macros.h"
18 :
19 : namespace v8 {
20 : namespace internal {
21 :
22 : OBJECT_CONSTRUCTORS_IMPL(JSCollection, JSObject)
23 : OBJECT_CONSTRUCTORS_IMPL(JSMap, JSCollection)
24 : OBJECT_CONSTRUCTORS_IMPL(JSSet, JSCollection)
25 : OBJECT_CONSTRUCTORS_IMPL(JSWeakCollection, JSObject)
26 : OBJECT_CONSTRUCTORS_IMPL(JSWeakMap, JSWeakCollection)
27 : OBJECT_CONSTRUCTORS_IMPL(JSWeakSet, JSWeakCollection)
28 :
29 : // TODO(jkummerow): Move JSCollectionIterator to js-collection.h?
30 : // TODO(jkummerow): Introduce IsJSCollectionIterator() check? Or unchecked
31 : // version of OBJECT_CONSTRUCTORS_IMPL macro?
32 : JSCollectionIterator::JSCollectionIterator(Address ptr) : JSObject(ptr) {}
33 : template <class Derived, class TableType>
34 : OrderedHashTableIterator<Derived, TableType>::OrderedHashTableIterator(
35 : Address ptr)
36 : : JSCollectionIterator(ptr) {}
37 :
38 : JSMapIterator::JSMapIterator(Address ptr)
39 : : OrderedHashTableIterator<JSMapIterator, OrderedHashMap>(ptr) {
40 : SLOW_DCHECK(IsJSMapIterator());
41 : }
42 :
43 : JSSetIterator::JSSetIterator(Address ptr)
44 : : OrderedHashTableIterator<JSSetIterator, OrderedHashSet>(ptr) {
45 : SLOW_DCHECK(IsJSSetIterator());
46 : }
47 :
48 2314833 : ACCESSORS(JSCollection, table, Object, kTableOffset)
49 1590 : ACCESSORS(JSCollectionIterator, table, Object, kTableOffset)
50 3246 : ACCESSORS(JSCollectionIterator, index, Object, kIndexOffset)
51 :
52 256835 : ACCESSORS(JSWeakCollection, table, Object, kTableOffset)
53 :
54 : CAST_ACCESSOR(JSCollection)
55 : CAST_ACCESSOR(JSSet)
56 : CAST_ACCESSOR(JSSetIterator)
57 : CAST_ACCESSOR(JSMap)
58 : CAST_ACCESSOR(JSMapIterator)
59 : CAST_ACCESSOR(JSWeakCollection)
60 : CAST_ACCESSOR(JSWeakMap)
61 : CAST_ACCESSOR(JSWeakSet)
62 :
63 : Object JSMapIterator::CurrentValue() {
64 : OrderedHashMap table = OrderedHashMap::cast(this->table());
65 : int index = Smi::ToInt(this->index());
66 : Object value = table->ValueAt(index);
67 : DCHECK(!value->IsTheHole());
68 : return value;
69 : }
70 :
71 : } // namespace internal
72 : } // namespace v8
73 :
74 : #include "src/objects/object-macros-undef.h"
75 :
76 : #endif // V8_OBJECTS_JS_COLLECTION_INL_H_
|