OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // modification, are permitted provided that the following conditions are | 3 // found in the LICENSE file. |
4 // met: | |
5 // | |
6 // * Redistributions of source code must retain the above copyright | |
7 // notice, this list of conditions and the following disclaimer. | |
8 // * Redistributions in binary form must reproduce the above | |
9 // copyright notice, this list of conditions and the following | |
10 // disclaimer in the documentation and/or other materials provided | |
11 // with the distribution. | |
12 // * Neither the name of Google Inc. nor the names of its | |
13 // contributors may be used to endorse or promote products derived | |
14 // from this software without specific prior written permission. | |
15 // | |
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
27 | 4 |
28 #ifndef V8_OBJECTS_VISITING_H_ | 5 #ifndef V8_OBJECTS_VISITING_H_ |
29 #define V8_OBJECTS_VISITING_H_ | 6 #define V8_OBJECTS_VISITING_H_ |
30 | 7 |
31 #include "allocation.h" | 8 #include "objects.h" |
| 9 #include "spaces.h" |
32 | 10 |
33 // This file provides base classes and auxiliary methods for defining | 11 // This file provides base classes and auxiliary methods for defining |
34 // static object visitors used during GC. | 12 // static object visitors used during GC. |
35 // Visiting HeapObject body with a normal ObjectVisitor requires performing | 13 // Visiting HeapObject body with a normal ObjectVisitor requires performing |
36 // two switches on object's instance type to determine object size and layout | 14 // two switches on object's instance type to determine object size and layout |
37 // and one or more virtual method calls on visitor itself. | 15 // and one or more virtual method calls on visitor itself. |
38 // Static visitor is different: it provides a dispatch table which contains | 16 // Static visitor is different: it provides a dispatch table which contains |
39 // pointers to specialized visit functions. Each map has the visitor_id | 17 // pointers to specialized visit functions. Each map has the visitor_id |
40 // field which contains an index of specialized visitor to use. | 18 // field which contains an index of specialized visitor to use. |
41 | 19 |
42 namespace v8 { | 20 namespace v8 { |
43 namespace internal { | 21 namespace internal { |
44 | 22 |
45 | |
46 // Base class for all static visitors. | 23 // Base class for all static visitors. |
47 class StaticVisitorBase : public AllStatic { | 24 class StaticVisitorBase : public AllStatic { |
48 public: | 25 public: |
49 #define VISITOR_ID_LIST(V) \ | 26 #define VISITOR_ID_LIST(V) \ |
50 V(SeqOneByteString) \ | 27 V(SeqOneByteString) \ |
51 V(SeqTwoByteString) \ | 28 V(SeqTwoByteString) \ |
52 V(ShortcutCandidate) \ | 29 V(ShortcutCandidate) \ |
53 V(ByteArray) \ | 30 V(ByteArray) \ |
54 V(FreeSpace) \ | 31 V(FreeSpace) \ |
55 V(FixedArray) \ | 32 V(FixedArray) \ |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 // access the next-element pointers. | 470 // access the next-element pointers. |
494 template <class T> | 471 template <class T> |
495 Object* VisitWeakList(Heap* heap, | 472 Object* VisitWeakList(Heap* heap, |
496 Object* list, | 473 Object* list, |
497 WeakObjectRetainer* retainer, | 474 WeakObjectRetainer* retainer, |
498 bool record_slots); | 475 bool record_slots); |
499 | 476 |
500 } } // namespace v8::internal | 477 } } // namespace v8::internal |
501 | 478 |
502 #endif // V8_OBJECTS_VISITING_H_ | 479 #endif // V8_OBJECTS_VISITING_H_ |
OLD | NEW |