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

Side by Side Diff: src/heap/objects-visiting.cc

Issue 1272933004: [heap] Avoid inclusion of objects-visiting-inl.h header. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 4 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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/heap/mark-compact-inl.h" 7 #include "src/heap/mark-compact-inl.h"
8 #include "src/heap/objects-visiting.h" 8 #include "src/heap/objects-visiting.h"
9 #include "src/heap/objects-visiting-inl.h"
9 10
10 namespace v8 { 11 namespace v8 {
11 namespace internal { 12 namespace internal {
12 13
13 14
14 StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId( 15 StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId(
15 int instance_type, int instance_size, bool has_unboxed_fields) { 16 int instance_type, int instance_size, bool has_unboxed_fields) {
16 if (instance_type < FIRST_NONSTRING_TYPE) { 17 if (instance_type < FIRST_NONSTRING_TYPE) {
17 switch (instance_type & kStringRepresentationMask) { 18 switch (instance_type & kStringRepresentationMask) {
18 case kSeqStringTag: 19 case kSeqStringTag:
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric, 173 return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
173 instance_size, has_unboxed_fields); 174 instance_size, has_unboxed_fields);
174 175
175 default: 176 default:
176 UNREACHABLE(); 177 UNREACHABLE();
177 return kVisitorIdCount; 178 return kVisitorIdCount;
178 } 179 }
179 } 180 }
180 181
181 182
183 void HeapObject::IterateBody(InstanceType type, int object_size,
184 ObjectVisitor* v) {
185 // Avoiding <Type>::cast(this) because it accesses the map pointer field.
186 // During GC, the map pointer field is encoded.
187 if (type < FIRST_NONSTRING_TYPE) {
188 switch (type & kStringRepresentationMask) {
189 case kSeqStringTag:
190 break;
191 case kConsStringTag:
192 ConsString::BodyDescriptor::IterateBody(this, v);
193 break;
194 case kSlicedStringTag:
195 SlicedString::BodyDescriptor::IterateBody(this, v);
196 break;
197 case kExternalStringTag:
198 if ((type & kStringEncodingMask) == kOneByteStringTag) {
199 reinterpret_cast<ExternalOneByteString*>(this)
200 ->ExternalOneByteStringIterateBody(v);
201 } else {
202 reinterpret_cast<ExternalTwoByteString*>(this)
203 ->ExternalTwoByteStringIterateBody(v);
204 }
205 break;
206 }
207 return;
208 }
209
210 switch (type) {
211 case FIXED_ARRAY_TYPE:
212 FixedArray::BodyDescriptor::IterateBody(this, object_size, v);
213 break;
214 case FIXED_DOUBLE_ARRAY_TYPE:
215 break;
216 case JS_OBJECT_TYPE:
217 case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
218 case JS_GENERATOR_OBJECT_TYPE:
219 case JS_MODULE_TYPE:
220 case JS_VALUE_TYPE:
221 case JS_DATE_TYPE:
222 case JS_ARRAY_TYPE:
223 case JS_ARRAY_BUFFER_TYPE:
224 case JS_TYPED_ARRAY_TYPE:
225 case JS_DATA_VIEW_TYPE:
226 case JS_SET_TYPE:
227 case JS_MAP_TYPE:
228 case JS_SET_ITERATOR_TYPE:
229 case JS_MAP_ITERATOR_TYPE:
230 case JS_WEAK_MAP_TYPE:
231 case JS_WEAK_SET_TYPE:
232 case JS_REGEXP_TYPE:
233 case JS_GLOBAL_PROXY_TYPE:
234 case JS_GLOBAL_OBJECT_TYPE:
235 case JS_BUILTINS_OBJECT_TYPE:
236 case JS_MESSAGE_OBJECT_TYPE:
237 JSObject::BodyDescriptor::IterateBody(this, object_size, v);
238 break;
239 case JS_FUNCTION_TYPE:
240 reinterpret_cast<JSFunction*>(this)
241 ->JSFunctionIterateBody(object_size, v);
242 break;
243 case ODDBALL_TYPE:
244 Oddball::BodyDescriptor::IterateBody(this, v);
245 break;
246 case JS_PROXY_TYPE:
247 JSProxy::BodyDescriptor::IterateBody(this, v);
248 break;
249 case JS_FUNCTION_PROXY_TYPE:
250 JSFunctionProxy::BodyDescriptor::IterateBody(this, v);
251 break;
252 case FOREIGN_TYPE:
253 reinterpret_cast<Foreign*>(this)->ForeignIterateBody(v);
254 break;
255 case MAP_TYPE:
256 Map::BodyDescriptor::IterateBody(this, v);
257 break;
258 case CODE_TYPE:
259 reinterpret_cast<Code*>(this)->CodeIterateBody(v);
260 break;
261 case CELL_TYPE:
262 Cell::BodyDescriptor::IterateBody(this, v);
263 break;
264 case PROPERTY_CELL_TYPE:
265 PropertyCell::BodyDescriptor::IterateBody(this, v);
266 break;
267 case WEAK_CELL_TYPE:
268 WeakCell::BodyDescriptor::IterateBody(this, v);
269 break;
270 case SYMBOL_TYPE:
271 Symbol::BodyDescriptor::IterateBody(this, v);
272 break;
273
274 case HEAP_NUMBER_TYPE:
275 case MUTABLE_HEAP_NUMBER_TYPE:
276 case FLOAT32X4_TYPE:
277 case INT32X4_TYPE:
278 case BOOL32X4_TYPE:
279 case INT16X8_TYPE:
280 case BOOL16X8_TYPE:
281 case INT8X16_TYPE:
282 case BOOL8X16_TYPE:
283 case FILLER_TYPE:
284 case BYTE_ARRAY_TYPE:
285 case BYTECODE_ARRAY_TYPE:
286 case FREE_SPACE_TYPE:
287 break;
288
289 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
290 case FIXED_##TYPE##_ARRAY_TYPE: \
291 reinterpret_cast<FixedTypedArrayBase*>(this) \
292 ->FixedTypedArrayBaseIterateBody(v); \
293 break;
294 TYPED_ARRAYS(TYPED_ARRAY_CASE)
295 #undef TYPED_ARRAY_CASE
296
297 case SHARED_FUNCTION_INFO_TYPE: {
298 SharedFunctionInfo::BodyDescriptor::IterateBody(this, v);
299 break;
300 }
301
302 #define MAKE_STRUCT_CASE(NAME, Name, name) case NAME##_TYPE:
303 STRUCT_LIST(MAKE_STRUCT_CASE)
304 #undef MAKE_STRUCT_CASE
305 if (type == ALLOCATION_SITE_TYPE) {
306 AllocationSite::BodyDescriptor::IterateBody(this, v);
307 } else {
308 StructBodyDescriptor::IterateBody(this, object_size, v);
309 }
310 break;
311 default:
312 PrintF("Unknown type: %d\n", type);
313 UNREACHABLE();
314 }
315 }
316
317
182 // We don't record weak slots during marking or scavenges. Instead we do it 318 // We don't record weak slots during marking or scavenges. Instead we do it
183 // once when we complete mark-compact cycle. Note that write barrier has no 319 // once when we complete mark-compact cycle. Note that write barrier has no
184 // effect if we are already in the middle of compacting mark-sweep cycle and we 320 // effect if we are already in the middle of compacting mark-sweep cycle and we
185 // have to record slots manually. 321 // have to record slots manually.
186 static bool MustRecordSlots(Heap* heap) { 322 static bool MustRecordSlots(Heap* heap) {
187 return heap->gc_state() == Heap::MARK_COMPACT && 323 return heap->gc_state() == Heap::MARK_COMPACT &&
188 heap->mark_compact_collector()->is_compacting(); 324 heap->mark_compact_collector()->is_compacting();
189 } 325 }
190 326
191 327
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 }; 493 };
358 494
359 495
360 template Object* VisitWeakList<Context>(Heap* heap, Object* list, 496 template Object* VisitWeakList<Context>(Heap* heap, Object* list,
361 WeakObjectRetainer* retainer); 497 WeakObjectRetainer* retainer);
362 498
363 template Object* VisitWeakList<AllocationSite>(Heap* heap, Object* list, 499 template Object* VisitWeakList<AllocationSite>(Heap* heap, Object* list,
364 WeakObjectRetainer* retainer); 500 WeakObjectRetainer* retainer);
365 } // namespace internal 501 } // namespace internal
366 } // namespace v8 502 } // namespace v8
OLDNEW
« no previous file with comments | « src/DEPS ('k') | src/heap/objects-visiting-inl.h » ('j') | src/objects.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698