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

Side by Side Diff: runtime/vm/raw_object.cc

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 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
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/raw_object_snapshot.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/raw_object.h" 5 #include "vm/raw_object.h"
6 6
7 #include "vm/become.h" 7 #include "vm/become.h"
8 #include "vm/class_table.h" 8 #include "vm/class_table.h"
9 #include "vm/dart.h" 9 #include "vm/dart.h"
10 #include "vm/freelist.h" 10 #include "vm/freelist.h"
11 #include "vm/isolate.h" 11 #include "vm/isolate.h"
12 #include "vm/object.h" 12 #include "vm/object.h"
13 #include "vm/visitor.h" 13 #include "vm/visitor.h"
14 14
15
16 namespace dart { 15 namespace dart {
17 16
18 void RawObject::Validate(Isolate* isolate) const { 17 void RawObject::Validate(Isolate* isolate) const {
19 if (Object::void_class_ == reinterpret_cast<RawClass*>(kHeapObjectTag)) { 18 if (Object::void_class_ == reinterpret_cast<RawClass*>(kHeapObjectTag)) {
20 // Validation relies on properly initialized class classes. Skip if the 19 // Validation relies on properly initialized class classes. Skip if the
21 // VM is still being initialized. 20 // VM is still being initialized.
22 return; 21 return;
23 } 22 }
24 // All Smi values are valid. 23 // All Smi values are valid.
25 if (!IsHeapObject()) { 24 if (!IsHeapObject()) {
(...skipping 17 matching lines...) Expand all
43 (isolate->class_table()->At(class_id) == NULL)) { 42 (isolate->class_table()->At(class_id) == NULL)) {
44 // Null class not yet initialized; skip. 43 // Null class not yet initialized; skip.
45 return; 44 return;
46 } 45 }
47 intptr_t size = SizeTag::decode(tags); 46 intptr_t size = SizeTag::decode(tags);
48 if (size != 0 && size != SizeFromClass()) { 47 if (size != 0 && size != SizeFromClass()) {
49 FATAL1("Inconsistent class size encountered %" Pd "\n", size); 48 FATAL1("Inconsistent class size encountered %" Pd "\n", size);
50 } 49 }
51 } 50 }
52 51
53
54 intptr_t RawObject::SizeFromClass() const { 52 intptr_t RawObject::SizeFromClass() const {
55 // Only reasonable to be called on heap objects. 53 // Only reasonable to be called on heap objects.
56 ASSERT(IsHeapObject()); 54 ASSERT(IsHeapObject());
57 55
58 intptr_t class_id = GetClassId(); 56 intptr_t class_id = GetClassId();
59 intptr_t instance_size = 0; 57 intptr_t instance_size = 0;
60 switch (class_id) { 58 switch (class_id) {
61 case kCodeCid: { 59 case kCodeCid: {
62 const RawCode* raw_code = reinterpret_cast<const RawCode*>(this); 60 const RawCode* raw_code = reinterpret_cast<const RawCode*>(this);
63 intptr_t pointer_offsets_length = 61 intptr_t pointer_offsets_length =
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 } while ((instance_size > tags_size) && (--retries_remaining > 0)); 209 } while ((instance_size > tags_size) && (--retries_remaining > 0));
212 } 210 }
213 if ((instance_size != tags_size) && (tags_size != 0)) { 211 if ((instance_size != tags_size) && (tags_size != 0)) {
214 FATAL3("Size mismatch: %" Pd " from class vs %" Pd " from tags %x\n", 212 FATAL3("Size mismatch: %" Pd " from class vs %" Pd " from tags %x\n",
215 instance_size, tags_size, tags); 213 instance_size, tags_size, tags);
216 } 214 }
217 #endif // DEBUG 215 #endif // DEBUG
218 return instance_size; 216 return instance_size;
219 } 217 }
220 218
221
222 intptr_t RawObject::VisitPointersPredefined(ObjectPointerVisitor* visitor, 219 intptr_t RawObject::VisitPointersPredefined(ObjectPointerVisitor* visitor,
223 intptr_t class_id) { 220 intptr_t class_id) {
224 ASSERT(class_id < kNumPredefinedCids); 221 ASSERT(class_id < kNumPredefinedCids);
225 222
226 intptr_t size = 0; 223 intptr_t size = 0;
227 224
228 // Only reasonable to be called on heap objects. 225 // Only reasonable to be called on heap objects.
229 ASSERT(IsHeapObject()); 226 ASSERT(IsHeapObject());
230 227
231 switch (class_id) { 228 switch (class_id) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 OS::Print("Class Id: %" Pd "\n", class_id); 278 OS::Print("Class Id: %" Pd "\n", class_id);
282 UNREACHABLE(); 279 UNREACHABLE();
283 break; 280 break;
284 } 281 }
285 282
286 ASSERT(size != 0); 283 ASSERT(size != 0);
287 ASSERT(size == Size()); 284 ASSERT(size == Size());
288 return size; 285 return size;
289 } 286 }
290 287
291
292 bool RawObject::FindObject(FindObjectVisitor* visitor) { 288 bool RawObject::FindObject(FindObjectVisitor* visitor) {
293 ASSERT(visitor != NULL); 289 ASSERT(visitor != NULL);
294 return visitor->FindObject(this); 290 return visitor->FindObject(this);
295 } 291 }
296 292
297
298 intptr_t RawClass::VisitClassPointers(RawClass* raw_obj, 293 intptr_t RawClass::VisitClassPointers(RawClass* raw_obj,
299 ObjectPointerVisitor* visitor) { 294 ObjectPointerVisitor* visitor) {
300 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 295 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
301 return Class::InstanceSize(); 296 return Class::InstanceSize();
302 } 297 }
303 298
304
305 intptr_t RawUnresolvedClass::VisitUnresolvedClassPointers( 299 intptr_t RawUnresolvedClass::VisitUnresolvedClassPointers(
306 RawUnresolvedClass* raw_obj, 300 RawUnresolvedClass* raw_obj,
307 ObjectPointerVisitor* visitor) { 301 ObjectPointerVisitor* visitor) {
308 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 302 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
309 return UnresolvedClass::InstanceSize(); 303 return UnresolvedClass::InstanceSize();
310 } 304 }
311 305
312
313 intptr_t RawAbstractType::VisitAbstractTypePointers( 306 intptr_t RawAbstractType::VisitAbstractTypePointers(
314 RawAbstractType* raw_obj, 307 RawAbstractType* raw_obj,
315 ObjectPointerVisitor* visitor) { 308 ObjectPointerVisitor* visitor) {
316 // RawAbstractType is an abstract class. 309 // RawAbstractType is an abstract class.
317 UNREACHABLE(); 310 UNREACHABLE();
318 return 0; 311 return 0;
319 } 312 }
320 313
321
322 intptr_t RawType::VisitTypePointers(RawType* raw_obj, 314 intptr_t RawType::VisitTypePointers(RawType* raw_obj,
323 ObjectPointerVisitor* visitor) { 315 ObjectPointerVisitor* visitor) {
324 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 316 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
325 return Type::InstanceSize(); 317 return Type::InstanceSize();
326 } 318 }
327 319
328
329 intptr_t RawTypeRef::VisitTypeRefPointers(RawTypeRef* raw_obj, 320 intptr_t RawTypeRef::VisitTypeRefPointers(RawTypeRef* raw_obj,
330 ObjectPointerVisitor* visitor) { 321 ObjectPointerVisitor* visitor) {
331 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 322 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
332 return TypeRef::InstanceSize(); 323 return TypeRef::InstanceSize();
333 } 324 }
334 325
335
336 intptr_t RawTypeParameter::VisitTypeParameterPointers( 326 intptr_t RawTypeParameter::VisitTypeParameterPointers(
337 RawTypeParameter* raw_obj, 327 RawTypeParameter* raw_obj,
338 ObjectPointerVisitor* visitor) { 328 ObjectPointerVisitor* visitor) {
339 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 329 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
340 return TypeParameter::InstanceSize(); 330 return TypeParameter::InstanceSize();
341 } 331 }
342 332
343
344 intptr_t RawBoundedType::VisitBoundedTypePointers( 333 intptr_t RawBoundedType::VisitBoundedTypePointers(
345 RawBoundedType* raw_obj, 334 RawBoundedType* raw_obj,
346 ObjectPointerVisitor* visitor) { 335 ObjectPointerVisitor* visitor) {
347 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 336 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
348 return BoundedType::InstanceSize(); 337 return BoundedType::InstanceSize();
349 } 338 }
350 339
351
352 intptr_t RawMixinAppType::VisitMixinAppTypePointers( 340 intptr_t RawMixinAppType::VisitMixinAppTypePointers(
353 RawMixinAppType* raw_obj, 341 RawMixinAppType* raw_obj,
354 ObjectPointerVisitor* visitor) { 342 ObjectPointerVisitor* visitor) {
355 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 343 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
356 return MixinAppType::InstanceSize(); 344 return MixinAppType::InstanceSize();
357 } 345 }
358 346
359
360 intptr_t RawTypeArguments::VisitTypeArgumentsPointers( 347 intptr_t RawTypeArguments::VisitTypeArgumentsPointers(
361 RawTypeArguments* raw_obj, 348 RawTypeArguments* raw_obj,
362 ObjectPointerVisitor* visitor) { 349 ObjectPointerVisitor* visitor) {
363 intptr_t length = Smi::Value(raw_obj->ptr()->length_); 350 intptr_t length = Smi::Value(raw_obj->ptr()->length_);
364 visitor->VisitPointers(raw_obj->from(), raw_obj->to(length)); 351 visitor->VisitPointers(raw_obj->from(), raw_obj->to(length));
365 return TypeArguments::InstanceSize(length); 352 return TypeArguments::InstanceSize(length);
366 } 353 }
367 354
368
369 intptr_t RawPatchClass::VisitPatchClassPointers(RawPatchClass* raw_obj, 355 intptr_t RawPatchClass::VisitPatchClassPointers(RawPatchClass* raw_obj,
370 ObjectPointerVisitor* visitor) { 356 ObjectPointerVisitor* visitor) {
371 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 357 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
372 return PatchClass::InstanceSize(); 358 return PatchClass::InstanceSize();
373 } 359 }
374 360
375
376 intptr_t RawClosure::VisitClosurePointers(RawClosure* raw_obj, 361 intptr_t RawClosure::VisitClosurePointers(RawClosure* raw_obj,
377 ObjectPointerVisitor* visitor) { 362 ObjectPointerVisitor* visitor) {
378 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 363 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
379 return Closure::InstanceSize(); 364 return Closure::InstanceSize();
380 } 365 }
381 366
382
383 intptr_t RawClosureData::VisitClosureDataPointers( 367 intptr_t RawClosureData::VisitClosureDataPointers(
384 RawClosureData* raw_obj, 368 RawClosureData* raw_obj,
385 ObjectPointerVisitor* visitor) { 369 ObjectPointerVisitor* visitor) {
386 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 370 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
387 return ClosureData::InstanceSize(); 371 return ClosureData::InstanceSize();
388 } 372 }
389 373
390
391 intptr_t RawSignatureData::VisitSignatureDataPointers( 374 intptr_t RawSignatureData::VisitSignatureDataPointers(
392 RawSignatureData* raw_obj, 375 RawSignatureData* raw_obj,
393 ObjectPointerVisitor* visitor) { 376 ObjectPointerVisitor* visitor) {
394 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 377 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
395 return SignatureData::InstanceSize(); 378 return SignatureData::InstanceSize();
396 } 379 }
397 380
398
399 intptr_t RawRedirectionData::VisitRedirectionDataPointers( 381 intptr_t RawRedirectionData::VisitRedirectionDataPointers(
400 RawRedirectionData* raw_obj, 382 RawRedirectionData* raw_obj,
401 ObjectPointerVisitor* visitor) { 383 ObjectPointerVisitor* visitor) {
402 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 384 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
403 return RedirectionData::InstanceSize(); 385 return RedirectionData::InstanceSize();
404 } 386 }
405 387
406
407 bool RawFunction::CheckUsageCounter(RawFunction* raw_fun) { 388 bool RawFunction::CheckUsageCounter(RawFunction* raw_fun) {
408 // NOTE: This code runs while GC is in progress and runs within 389 // NOTE: This code runs while GC is in progress and runs within
409 // a NoHandleScope block. Hence it is not okay to use regular Zone or 390 // a NoHandleScope block. Hence it is not okay to use regular Zone or
410 // Scope handles. We use direct stack handles, and so the raw pointers in 391 // Scope handles. We use direct stack handles, and so the raw pointers in
411 // these handles are not traversed. The use of handles is mainly to 392 // these handles are not traversed. The use of handles is mainly to
412 // be able to reuse the handle based code and avoid having to add 393 // be able to reuse the handle based code and avoid having to add
413 // helper functions to the raw object interface. 394 // helper functions to the raw object interface.
414 Function fn; 395 Function fn;
415 fn = raw_fun; 396 fn = raw_fun;
416 397
417 // The function may not have code. 398 // The function may not have code.
418 if (!fn.HasCode()) return false; 399 if (!fn.HasCode()) return false;
419 // These may not increment the usage counter. 400 // These may not increment the usage counter.
420 if (fn.is_intrinsic()) return false; 401 if (fn.is_intrinsic()) return false;
421 402
422 if (fn.usage_counter() >= 0) { 403 if (fn.usage_counter() >= 0) {
423 fn.set_usage_counter(fn.usage_counter() / 2); 404 fn.set_usage_counter(fn.usage_counter() / 2);
424 } 405 }
425 return FLAG_always_drop_code || (fn.usage_counter() == 0); 406 return FLAG_always_drop_code || (fn.usage_counter() == 0);
426 } 407 }
427 408
428
429 bool RawFunction::ShouldVisitCode(RawCode* raw_code) { 409 bool RawFunction::ShouldVisitCode(RawCode* raw_code) {
430 // NOTE: This code runs while GC is in progress and runs within 410 // NOTE: This code runs while GC is in progress and runs within
431 // a NoHandleScope block. Hence it is not okay to use regular Zone or 411 // a NoHandleScope block. Hence it is not okay to use regular Zone or
432 // Scope handles. We use direct stack handles, and so the raw pointers in 412 // Scope handles. We use direct stack handles, and so the raw pointers in
433 // these handles are not traversed. The use of handles is mainly to 413 // these handles are not traversed. The use of handles is mainly to
434 // be able to reuse the handle based code and avoid having to add 414 // be able to reuse the handle based code and avoid having to add
435 // helper functions to the raw object interface. 415 // helper functions to the raw object interface.
436 Code code; 416 Code code;
437 code = raw_code; 417 code = raw_code;
438 if (code.IsNull()) return true; 418 if (code.IsNull()) return true;
439 if (code.is_optimized()) return true; 419 if (code.is_optimized()) return true;
440 if (code.HasBreakpoint()) return true; 420 if (code.HasBreakpoint()) return true;
441 return false; 421 return false;
442 } 422 }
443 423
444
445 intptr_t RawFunction::VisitFunctionPointers(RawFunction* raw_obj, 424 intptr_t RawFunction::VisitFunctionPointers(RawFunction* raw_obj,
446 ObjectPointerVisitor* visitor) { 425 ObjectPointerVisitor* visitor) {
447 if (visitor->visit_function_code() || !CheckUsageCounter(raw_obj)) { 426 if (visitor->visit_function_code() || !CheckUsageCounter(raw_obj)) {
448 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 427 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
449 return Function::InstanceSize(); 428 return Function::InstanceSize();
450 } 429 }
451 #if defined(DART_PRECOMPILED_RUNTIME) 430 #if defined(DART_PRECOMPILED_RUNTIME)
452 UNREACHABLE(); 431 UNREACHABLE();
453 #else 432 #else
454 visitor->VisitPointers(raw_obj->from(), raw_obj->to_no_code()); 433 visitor->VisitPointers(raw_obj->from(), raw_obj->to_no_code());
455 434
456 if (ShouldVisitCode(raw_obj->ptr()->code_)) { 435 if (ShouldVisitCode(raw_obj->ptr()->code_)) {
457 visitor->VisitPointer( 436 visitor->VisitPointer(
458 reinterpret_cast<RawObject**>(&raw_obj->ptr()->code_)); 437 reinterpret_cast<RawObject**>(&raw_obj->ptr()->code_));
459 } else { 438 } else {
460 visitor->add_skipped_code_function(raw_obj); 439 visitor->add_skipped_code_function(raw_obj);
461 } 440 }
462 441
463 if (ShouldVisitCode(raw_obj->ptr()->unoptimized_code_)) { 442 if (ShouldVisitCode(raw_obj->ptr()->unoptimized_code_)) {
464 visitor->VisitPointer( 443 visitor->VisitPointer(
465 reinterpret_cast<RawObject**>(&raw_obj->ptr()->unoptimized_code_)); 444 reinterpret_cast<RawObject**>(&raw_obj->ptr()->unoptimized_code_));
466 } else { 445 } else {
467 visitor->add_skipped_code_function(raw_obj); 446 visitor->add_skipped_code_function(raw_obj);
468 } 447 }
469 #endif 448 #endif
470 return Function::InstanceSize(); 449 return Function::InstanceSize();
471 } 450 }
472 451
473
474 intptr_t RawField::VisitFieldPointers(RawField* raw_obj, 452 intptr_t RawField::VisitFieldPointers(RawField* raw_obj,
475 ObjectPointerVisitor* visitor) { 453 ObjectPointerVisitor* visitor) {
476 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 454 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
477 return Field::InstanceSize(); 455 return Field::InstanceSize();
478 } 456 }
479 457
480
481 intptr_t RawLiteralToken::VisitLiteralTokenPointers( 458 intptr_t RawLiteralToken::VisitLiteralTokenPointers(
482 RawLiteralToken* raw_obj, 459 RawLiteralToken* raw_obj,
483 ObjectPointerVisitor* visitor) { 460 ObjectPointerVisitor* visitor) {
484 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 461 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
485 return LiteralToken::InstanceSize(); 462 return LiteralToken::InstanceSize();
486 } 463 }
487 464
488
489 intptr_t RawTokenStream::VisitTokenStreamPointers( 465 intptr_t RawTokenStream::VisitTokenStreamPointers(
490 RawTokenStream* raw_obj, 466 RawTokenStream* raw_obj,
491 ObjectPointerVisitor* visitor) { 467 ObjectPointerVisitor* visitor) {
492 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 468 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
493 return TokenStream::InstanceSize(); 469 return TokenStream::InstanceSize();
494 } 470 }
495 471
496
497 intptr_t RawScript::VisitScriptPointers(RawScript* raw_obj, 472 intptr_t RawScript::VisitScriptPointers(RawScript* raw_obj,
498 ObjectPointerVisitor* visitor) { 473 ObjectPointerVisitor* visitor) {
499 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 474 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
500 return Script::InstanceSize(); 475 return Script::InstanceSize();
501 } 476 }
502 477
503
504 intptr_t RawLibrary::VisitLibraryPointers(RawLibrary* raw_obj, 478 intptr_t RawLibrary::VisitLibraryPointers(RawLibrary* raw_obj,
505 ObjectPointerVisitor* visitor) { 479 ObjectPointerVisitor* visitor) {
506 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 480 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
507 return Library::InstanceSize(); 481 return Library::InstanceSize();
508 } 482 }
509 483
510
511 intptr_t RawLibraryPrefix::VisitLibraryPrefixPointers( 484 intptr_t RawLibraryPrefix::VisitLibraryPrefixPointers(
512 RawLibraryPrefix* raw_obj, 485 RawLibraryPrefix* raw_obj,
513 ObjectPointerVisitor* visitor) { 486 ObjectPointerVisitor* visitor) {
514 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 487 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
515 return LibraryPrefix::InstanceSize(); 488 return LibraryPrefix::InstanceSize();
516 } 489 }
517 490
518
519 intptr_t RawNamespace::VisitNamespacePointers(RawNamespace* raw_obj, 491 intptr_t RawNamespace::VisitNamespacePointers(RawNamespace* raw_obj,
520 ObjectPointerVisitor* visitor) { 492 ObjectPointerVisitor* visitor) {
521 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 493 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
522 return Namespace::InstanceSize(); 494 return Namespace::InstanceSize();
523 } 495 }
524 496
525
526 bool RawCode::ContainsPC(RawObject* raw_obj, uword pc) { 497 bool RawCode::ContainsPC(RawObject* raw_obj, uword pc) {
527 uint32_t tags = raw_obj->ptr()->tags_; 498 uint32_t tags = raw_obj->ptr()->tags_;
528 if (RawObject::ClassIdTag::decode(tags) == kCodeCid) { 499 if (RawObject::ClassIdTag::decode(tags) == kCodeCid) {
529 RawCode* raw_code = reinterpret_cast<RawCode*>(raw_obj); 500 RawCode* raw_code = reinterpret_cast<RawCode*>(raw_obj);
530 return RawInstructions::ContainsPC(raw_code->ptr()->instructions_, pc); 501 return RawInstructions::ContainsPC(raw_code->ptr()->instructions_, pc);
531 } 502 }
532 return false; 503 return false;
533 } 504 }
534 505
535
536 intptr_t RawCode::VisitCodePointers(RawCode* raw_obj, 506 intptr_t RawCode::VisitCodePointers(RawCode* raw_obj,
537 ObjectPointerVisitor* visitor) { 507 ObjectPointerVisitor* visitor) {
538 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 508 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
539 509
540 RawCode* obj = raw_obj->ptr(); 510 RawCode* obj = raw_obj->ptr();
541 intptr_t length = Code::PtrOffBits::decode(obj->state_bits_); 511 intptr_t length = Code::PtrOffBits::decode(obj->state_bits_);
542 #if defined(TARGET_ARCH_IA32) 512 #if defined(TARGET_ARCH_IA32)
543 // On IA32 only we embed pointers to objects directly in the generated 513 // On IA32 only we embed pointers to objects directly in the generated
544 // instructions. The variable portion of a Code object describes where to 514 // instructions. The variable portion of a Code object describes where to
545 // find those pointers for tracing. 515 // find those pointers for tracing.
546 if (Code::AliveBit::decode(obj->state_bits_)) { 516 if (Code::AliveBit::decode(obj->state_bits_)) {
547 uword entry_point = reinterpret_cast<uword>(obj->instructions_->ptr()) + 517 uword entry_point = reinterpret_cast<uword>(obj->instructions_->ptr()) +
548 Instructions::HeaderSize(); 518 Instructions::HeaderSize();
549 for (intptr_t i = 0; i < length; i++) { 519 for (intptr_t i = 0; i < length; i++) {
550 int32_t offset = obj->data()[i]; 520 int32_t offset = obj->data()[i];
551 visitor->VisitPointer( 521 visitor->VisitPointer(
552 reinterpret_cast<RawObject**>(entry_point + offset)); 522 reinterpret_cast<RawObject**>(entry_point + offset));
553 } 523 }
554 } 524 }
555 return Code::InstanceSize(length); 525 return Code::InstanceSize(length);
556 #else 526 #else
557 // On all other architectures, objects are referenced indirectly through 527 // On all other architectures, objects are referenced indirectly through
558 // either an ObjectPool or Thread. 528 // either an ObjectPool or Thread.
559 ASSERT(length == 0); 529 ASSERT(length == 0);
560 return Code::InstanceSize(0); 530 return Code::InstanceSize(0);
561 #endif 531 #endif
562 } 532 }
563 533
564
565 intptr_t RawObjectPool::VisitObjectPoolPointers(RawObjectPool* raw_obj, 534 intptr_t RawObjectPool::VisitObjectPoolPointers(RawObjectPool* raw_obj,
566 ObjectPointerVisitor* visitor) { 535 ObjectPointerVisitor* visitor) {
567 visitor->VisitPointer( 536 visitor->VisitPointer(
568 reinterpret_cast<RawObject**>(&raw_obj->ptr()->info_array_)); 537 reinterpret_cast<RawObject**>(&raw_obj->ptr()->info_array_));
569 const intptr_t len = raw_obj->ptr()->length_; 538 const intptr_t len = raw_obj->ptr()->length_;
570 RawTypedData* info_array = raw_obj->ptr()->info_array_->ptr(); 539 RawTypedData* info_array = raw_obj->ptr()->info_array_->ptr();
571 Entry* first = raw_obj->first_entry(); 540 Entry* first = raw_obj->first_entry();
572 for (intptr_t i = 0; i < len; ++i) { 541 for (intptr_t i = 0; i < len; ++i) {
573 ObjectPool::EntryType entry_type = 542 ObjectPool::EntryType entry_type =
574 static_cast<ObjectPool::EntryType>(info_array->data()[i]); 543 static_cast<ObjectPool::EntryType>(info_array->data()[i]);
575 if (entry_type == ObjectPool::kTaggedObject) { 544 if (entry_type == ObjectPool::kTaggedObject) {
576 visitor->VisitPointer(&(first + i)->raw_obj_); 545 visitor->VisitPointer(&(first + i)->raw_obj_);
577 } 546 }
578 } 547 }
579 return ObjectPool::InstanceSize(raw_obj->ptr()->length_); 548 return ObjectPool::InstanceSize(raw_obj->ptr()->length_);
580 } 549 }
581 550
582
583 intptr_t RawInstructions::VisitInstructionsPointers( 551 intptr_t RawInstructions::VisitInstructionsPointers(
584 RawInstructions* raw_obj, 552 RawInstructions* raw_obj,
585 ObjectPointerVisitor* visitor) { 553 ObjectPointerVisitor* visitor) {
586 return Instructions::InstanceSize(Instructions::Size(raw_obj)); 554 return Instructions::InstanceSize(Instructions::Size(raw_obj));
587 } 555 }
588 556
589
590 bool RawInstructions::ContainsPC(RawInstructions* raw_instr, uword pc) { 557 bool RawInstructions::ContainsPC(RawInstructions* raw_instr, uword pc) {
591 uword start_pc = 558 uword start_pc =
592 reinterpret_cast<uword>(raw_instr->ptr()) + Instructions::HeaderSize(); 559 reinterpret_cast<uword>(raw_instr->ptr()) + Instructions::HeaderSize();
593 uword end_pc = start_pc + Instructions::Size(raw_instr); 560 uword end_pc = start_pc + Instructions::Size(raw_instr);
594 ASSERT(end_pc > start_pc); 561 ASSERT(end_pc > start_pc);
595 return (pc >= start_pc) && (pc < end_pc); 562 return (pc >= start_pc) && (pc < end_pc);
596 } 563 }
597 564
598
599 intptr_t RawPcDescriptors::VisitPcDescriptorsPointers( 565 intptr_t RawPcDescriptors::VisitPcDescriptorsPointers(
600 RawPcDescriptors* raw_obj, 566 RawPcDescriptors* raw_obj,
601 ObjectPointerVisitor* visitor) { 567 ObjectPointerVisitor* visitor) {
602 return PcDescriptors::InstanceSize(raw_obj->ptr()->length_); 568 return PcDescriptors::InstanceSize(raw_obj->ptr()->length_);
603 } 569 }
604 570
605
606 intptr_t RawCodeSourceMap::VisitCodeSourceMapPointers( 571 intptr_t RawCodeSourceMap::VisitCodeSourceMapPointers(
607 RawCodeSourceMap* raw_obj, 572 RawCodeSourceMap* raw_obj,
608 ObjectPointerVisitor* visitor) { 573 ObjectPointerVisitor* visitor) {
609 return CodeSourceMap::InstanceSize(raw_obj->ptr()->length_); 574 return CodeSourceMap::InstanceSize(raw_obj->ptr()->length_);
610 } 575 }
611 576
612
613 intptr_t RawStackMap::VisitStackMapPointers(RawStackMap* raw_obj, 577 intptr_t RawStackMap::VisitStackMapPointers(RawStackMap* raw_obj,
614 ObjectPointerVisitor* visitor) { 578 ObjectPointerVisitor* visitor) {
615 return StackMap::InstanceSize(raw_obj->ptr()->length_); 579 return StackMap::InstanceSize(raw_obj->ptr()->length_);
616 } 580 }
617 581
618
619 intptr_t RawLocalVarDescriptors::VisitLocalVarDescriptorsPointers( 582 intptr_t RawLocalVarDescriptors::VisitLocalVarDescriptorsPointers(
620 RawLocalVarDescriptors* raw_obj, 583 RawLocalVarDescriptors* raw_obj,
621 ObjectPointerVisitor* visitor) { 584 ObjectPointerVisitor* visitor) {
622 intptr_t num_entries = raw_obj->ptr()->num_entries_; 585 intptr_t num_entries = raw_obj->ptr()->num_entries_;
623 visitor->VisitPointers(raw_obj->from(), raw_obj->to(num_entries)); 586 visitor->VisitPointers(raw_obj->from(), raw_obj->to(num_entries));
624 return LocalVarDescriptors::InstanceSize(num_entries); 587 return LocalVarDescriptors::InstanceSize(num_entries);
625 } 588 }
626 589
627
628 intptr_t RawExceptionHandlers::VisitExceptionHandlersPointers( 590 intptr_t RawExceptionHandlers::VisitExceptionHandlersPointers(
629 RawExceptionHandlers* raw_obj, 591 RawExceptionHandlers* raw_obj,
630 ObjectPointerVisitor* visitor) { 592 ObjectPointerVisitor* visitor) {
631 RawExceptionHandlers* obj = raw_obj->ptr(); 593 RawExceptionHandlers* obj = raw_obj->ptr();
632 intptr_t len = obj->num_entries_; 594 intptr_t len = obj->num_entries_;
633 visitor->VisitPointer( 595 visitor->VisitPointer(
634 reinterpret_cast<RawObject**>(&obj->handled_types_data_)); 596 reinterpret_cast<RawObject**>(&obj->handled_types_data_));
635 return ExceptionHandlers::InstanceSize(len); 597 return ExceptionHandlers::InstanceSize(len);
636 } 598 }
637 599
638
639 intptr_t RawContext::VisitContextPointers(RawContext* raw_obj, 600 intptr_t RawContext::VisitContextPointers(RawContext* raw_obj,
640 ObjectPointerVisitor* visitor) { 601 ObjectPointerVisitor* visitor) {
641 intptr_t num_variables = raw_obj->ptr()->num_variables_; 602 intptr_t num_variables = raw_obj->ptr()->num_variables_;
642 visitor->VisitPointers(raw_obj->from(), raw_obj->to(num_variables)); 603 visitor->VisitPointers(raw_obj->from(), raw_obj->to(num_variables));
643 return Context::InstanceSize(num_variables); 604 return Context::InstanceSize(num_variables);
644 } 605 }
645 606
646
647 intptr_t RawContextScope::VisitContextScopePointers( 607 intptr_t RawContextScope::VisitContextScopePointers(
648 RawContextScope* raw_obj, 608 RawContextScope* raw_obj,
649 ObjectPointerVisitor* visitor) { 609 ObjectPointerVisitor* visitor) {
650 intptr_t num_variables = raw_obj->ptr()->num_variables_; 610 intptr_t num_variables = raw_obj->ptr()->num_variables_;
651 visitor->VisitPointers(raw_obj->from(), raw_obj->to(num_variables)); 611 visitor->VisitPointers(raw_obj->from(), raw_obj->to(num_variables));
652 return ContextScope::InstanceSize(num_variables); 612 return ContextScope::InstanceSize(num_variables);
653 } 613 }
654 614
655
656 intptr_t RawSingleTargetCache::VisitSingleTargetCachePointers( 615 intptr_t RawSingleTargetCache::VisitSingleTargetCachePointers(
657 RawSingleTargetCache* raw_obj, 616 RawSingleTargetCache* raw_obj,
658 ObjectPointerVisitor* visitor) { 617 ObjectPointerVisitor* visitor) {
659 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 618 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
660 return SingleTargetCache::InstanceSize(); 619 return SingleTargetCache::InstanceSize();
661 } 620 }
662 621
663
664 intptr_t RawUnlinkedCall::VisitUnlinkedCallPointers( 622 intptr_t RawUnlinkedCall::VisitUnlinkedCallPointers(
665 RawUnlinkedCall* raw_obj, 623 RawUnlinkedCall* raw_obj,
666 ObjectPointerVisitor* visitor) { 624 ObjectPointerVisitor* visitor) {
667 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 625 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
668 return UnlinkedCall::InstanceSize(); 626 return UnlinkedCall::InstanceSize();
669 } 627 }
670 628
671
672 intptr_t RawICData::VisitICDataPointers(RawICData* raw_obj, 629 intptr_t RawICData::VisitICDataPointers(RawICData* raw_obj,
673 ObjectPointerVisitor* visitor) { 630 ObjectPointerVisitor* visitor) {
674 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 631 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
675 return ICData::InstanceSize(); 632 return ICData::InstanceSize();
676 } 633 }
677 634
678
679 intptr_t RawMegamorphicCache::VisitMegamorphicCachePointers( 635 intptr_t RawMegamorphicCache::VisitMegamorphicCachePointers(
680 RawMegamorphicCache* raw_obj, 636 RawMegamorphicCache* raw_obj,
681 ObjectPointerVisitor* visitor) { 637 ObjectPointerVisitor* visitor) {
682 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 638 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
683 return MegamorphicCache::InstanceSize(); 639 return MegamorphicCache::InstanceSize();
684 } 640 }
685 641
686
687 intptr_t RawSubtypeTestCache::VisitSubtypeTestCachePointers( 642 intptr_t RawSubtypeTestCache::VisitSubtypeTestCachePointers(
688 RawSubtypeTestCache* raw_obj, 643 RawSubtypeTestCache* raw_obj,
689 ObjectPointerVisitor* visitor) { 644 ObjectPointerVisitor* visitor) {
690 // Make sure that we got here with the tagged pointer as this. 645 // Make sure that we got here with the tagged pointer as this.
691 RawSubtypeTestCache* obj = raw_obj->ptr(); 646 RawSubtypeTestCache* obj = raw_obj->ptr();
692 visitor->VisitPointer(reinterpret_cast<RawObject**>(&obj->cache_)); 647 visitor->VisitPointer(reinterpret_cast<RawObject**>(&obj->cache_));
693 return SubtypeTestCache::InstanceSize(); 648 return SubtypeTestCache::InstanceSize();
694 } 649 }
695 650
696
697 intptr_t RawError::VisitErrorPointers(RawError* raw_obj, 651 intptr_t RawError::VisitErrorPointers(RawError* raw_obj,
698 ObjectPointerVisitor* visitor) { 652 ObjectPointerVisitor* visitor) {
699 // Error is an abstract class. 653 // Error is an abstract class.
700 UNREACHABLE(); 654 UNREACHABLE();
701 return 0; 655 return 0;
702 } 656 }
703 657
704
705 intptr_t RawApiError::VisitApiErrorPointers(RawApiError* raw_obj, 658 intptr_t RawApiError::VisitApiErrorPointers(RawApiError* raw_obj,
706 ObjectPointerVisitor* visitor) { 659 ObjectPointerVisitor* visitor) {
707 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 660 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
708 return ApiError::InstanceSize(); 661 return ApiError::InstanceSize();
709 } 662 }
710 663
711
712 intptr_t RawLanguageError::VisitLanguageErrorPointers( 664 intptr_t RawLanguageError::VisitLanguageErrorPointers(
713 RawLanguageError* raw_obj, 665 RawLanguageError* raw_obj,
714 ObjectPointerVisitor* visitor) { 666 ObjectPointerVisitor* visitor) {
715 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 667 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
716 return LanguageError::InstanceSize(); 668 return LanguageError::InstanceSize();
717 } 669 }
718 670
719
720 intptr_t RawUnhandledException::VisitUnhandledExceptionPointers( 671 intptr_t RawUnhandledException::VisitUnhandledExceptionPointers(
721 RawUnhandledException* raw_obj, 672 RawUnhandledException* raw_obj,
722 ObjectPointerVisitor* visitor) { 673 ObjectPointerVisitor* visitor) {
723 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 674 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
724 return UnhandledException::InstanceSize(); 675 return UnhandledException::InstanceSize();
725 } 676 }
726 677
727
728 intptr_t RawUnwindError::VisitUnwindErrorPointers( 678 intptr_t RawUnwindError::VisitUnwindErrorPointers(
729 RawUnwindError* raw_obj, 679 RawUnwindError* raw_obj,
730 ObjectPointerVisitor* visitor) { 680 ObjectPointerVisitor* visitor) {
731 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 681 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
732 return UnwindError::InstanceSize(); 682 return UnwindError::InstanceSize();
733 } 683 }
734 684
735
736 intptr_t RawInstance::VisitInstancePointers(RawInstance* raw_obj, 685 intptr_t RawInstance::VisitInstancePointers(RawInstance* raw_obj,
737 ObjectPointerVisitor* visitor) { 686 ObjectPointerVisitor* visitor) {
738 // Make sure that we got here with the tagged pointer as this. 687 // Make sure that we got here with the tagged pointer as this.
739 ASSERT(raw_obj->IsHeapObject()); 688 ASSERT(raw_obj->IsHeapObject());
740 uint32_t tags = raw_obj->ptr()->tags_; 689 uint32_t tags = raw_obj->ptr()->tags_;
741 intptr_t instance_size = SizeTag::decode(tags); 690 intptr_t instance_size = SizeTag::decode(tags);
742 if (instance_size == 0) { 691 if (instance_size == 0) {
743 RawClass* cls = 692 RawClass* cls =
744 visitor->isolate()->GetClassForHeapWalkAt(raw_obj->GetClassId()); 693 visitor->isolate()->GetClassForHeapWalkAt(raw_obj->GetClassId());
745 instance_size = cls->ptr()->instance_size_in_words_ << kWordSizeLog2; 694 instance_size = cls->ptr()->instance_size_in_words_ << kWordSizeLog2;
746 } 695 }
747 696
748 // Calculate the first and last raw object pointer fields. 697 // Calculate the first and last raw object pointer fields.
749 uword obj_addr = RawObject::ToAddr(raw_obj); 698 uword obj_addr = RawObject::ToAddr(raw_obj);
750 uword from = obj_addr + sizeof(RawObject); 699 uword from = obj_addr + sizeof(RawObject);
751 uword to = obj_addr + instance_size - kWordSize; 700 uword to = obj_addr + instance_size - kWordSize;
752 visitor->VisitPointers(reinterpret_cast<RawObject**>(from), 701 visitor->VisitPointers(reinterpret_cast<RawObject**>(from),
753 reinterpret_cast<RawObject**>(to)); 702 reinterpret_cast<RawObject**>(to));
754 return instance_size; 703 return instance_size;
755 } 704 }
756 705
757
758 intptr_t RawNumber::VisitNumberPointers(RawNumber* raw_obj, 706 intptr_t RawNumber::VisitNumberPointers(RawNumber* raw_obj,
759 ObjectPointerVisitor* visitor) { 707 ObjectPointerVisitor* visitor) {
760 // Number is an abstract class. 708 // Number is an abstract class.
761 UNREACHABLE(); 709 UNREACHABLE();
762 return 0; 710 return 0;
763 } 711 }
764 712
765
766 intptr_t RawInteger::VisitIntegerPointers(RawInteger* raw_obj, 713 intptr_t RawInteger::VisitIntegerPointers(RawInteger* raw_obj,
767 ObjectPointerVisitor* visitor) { 714 ObjectPointerVisitor* visitor) {
768 // Integer is an abstract class. 715 // Integer is an abstract class.
769 UNREACHABLE(); 716 UNREACHABLE();
770 return 0; 717 return 0;
771 } 718 }
772 719
773
774 intptr_t RawSmi::VisitSmiPointers(RawSmi* raw_obj, 720 intptr_t RawSmi::VisitSmiPointers(RawSmi* raw_obj,
775 ObjectPointerVisitor* visitor) { 721 ObjectPointerVisitor* visitor) {
776 // Smi does not have a heap representation. 722 // Smi does not have a heap representation.
777 UNREACHABLE(); 723 UNREACHABLE();
778 return 0; 724 return 0;
779 } 725 }
780 726
781
782 intptr_t RawMint::VisitMintPointers(RawMint* raw_obj, 727 intptr_t RawMint::VisitMintPointers(RawMint* raw_obj,
783 ObjectPointerVisitor* visitor) { 728 ObjectPointerVisitor* visitor) {
784 // Make sure that we got here with the tagged pointer as this. 729 // Make sure that we got here with the tagged pointer as this.
785 ASSERT(raw_obj->IsHeapObject()); 730 ASSERT(raw_obj->IsHeapObject());
786 return Mint::InstanceSize(); 731 return Mint::InstanceSize();
787 } 732 }
788 733
789
790 intptr_t RawBigint::VisitBigintPointers(RawBigint* raw_obj, 734 intptr_t RawBigint::VisitBigintPointers(RawBigint* raw_obj,
791 ObjectPointerVisitor* visitor) { 735 ObjectPointerVisitor* visitor) {
792 // Make sure that we got here with the tagged pointer as this. 736 // Make sure that we got here with the tagged pointer as this.
793 ASSERT(raw_obj->IsHeapObject()); 737 ASSERT(raw_obj->IsHeapObject());
794 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 738 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
795 return Bigint::InstanceSize(); 739 return Bigint::InstanceSize();
796 } 740 }
797 741
798
799 intptr_t RawDouble::VisitDoublePointers(RawDouble* raw_obj, 742 intptr_t RawDouble::VisitDoublePointers(RawDouble* raw_obj,
800 ObjectPointerVisitor* visitor) { 743 ObjectPointerVisitor* visitor) {
801 // Make sure that we got here with the tagged pointer as this. 744 // Make sure that we got here with the tagged pointer as this.
802 ASSERT(raw_obj->IsHeapObject()); 745 ASSERT(raw_obj->IsHeapObject());
803 return Double::InstanceSize(); 746 return Double::InstanceSize();
804 } 747 }
805 748
806
807 intptr_t RawString::VisitStringPointers(RawString* raw_obj, 749 intptr_t RawString::VisitStringPointers(RawString* raw_obj,
808 ObjectPointerVisitor* visitor) { 750 ObjectPointerVisitor* visitor) {
809 // String is an abstract class. 751 // String is an abstract class.
810 UNREACHABLE(); 752 UNREACHABLE();
811 return 0; 753 return 0;
812 } 754 }
813 755
814
815 intptr_t RawOneByteString::VisitOneByteStringPointers( 756 intptr_t RawOneByteString::VisitOneByteStringPointers(
816 RawOneByteString* raw_obj, 757 RawOneByteString* raw_obj,
817 ObjectPointerVisitor* visitor) { 758 ObjectPointerVisitor* visitor) {
818 ASSERT(!raw_obj->ptr()->length_->IsHeapObject()); 759 ASSERT(!raw_obj->ptr()->length_->IsHeapObject());
819 #if !defined(HASH_IN_OBJECT_HEADER) 760 #if !defined(HASH_IN_OBJECT_HEADER)
820 ASSERT(!raw_obj->ptr()->hash_->IsHeapObject()); 761 ASSERT(!raw_obj->ptr()->hash_->IsHeapObject());
821 #endif 762 #endif
822 intptr_t length = Smi::Value(raw_obj->ptr()->length_); 763 intptr_t length = Smi::Value(raw_obj->ptr()->length_);
823 return OneByteString::InstanceSize(length); 764 return OneByteString::InstanceSize(length);
824 } 765 }
825 766
826
827 intptr_t RawTwoByteString::VisitTwoByteStringPointers( 767 intptr_t RawTwoByteString::VisitTwoByteStringPointers(
828 RawTwoByteString* raw_obj, 768 RawTwoByteString* raw_obj,
829 ObjectPointerVisitor* visitor) { 769 ObjectPointerVisitor* visitor) {
830 ASSERT(!raw_obj->ptr()->length_->IsHeapObject()); 770 ASSERT(!raw_obj->ptr()->length_->IsHeapObject());
831 #if !defined(HASH_IN_OBJECT_HEADER) 771 #if !defined(HASH_IN_OBJECT_HEADER)
832 ASSERT(!raw_obj->ptr()->hash_->IsHeapObject()); 772 ASSERT(!raw_obj->ptr()->hash_->IsHeapObject());
833 #endif 773 #endif
834 intptr_t length = Smi::Value(raw_obj->ptr()->length_); 774 intptr_t length = Smi::Value(raw_obj->ptr()->length_);
835 return TwoByteString::InstanceSize(length); 775 return TwoByteString::InstanceSize(length);
836 } 776 }
837 777
838
839 intptr_t RawExternalOneByteString::VisitExternalOneByteStringPointers( 778 intptr_t RawExternalOneByteString::VisitExternalOneByteStringPointers(
840 RawExternalOneByteString* raw_obj, 779 RawExternalOneByteString* raw_obj,
841 ObjectPointerVisitor* visitor) { 780 ObjectPointerVisitor* visitor) {
842 // Make sure that we got here with the tagged pointer as this. 781 // Make sure that we got here with the tagged pointer as this.
843 ASSERT(raw_obj->IsHeapObject()); 782 ASSERT(raw_obj->IsHeapObject());
844 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 783 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
845 return ExternalOneByteString::InstanceSize(); 784 return ExternalOneByteString::InstanceSize();
846 } 785 }
847 786
848
849 intptr_t RawExternalTwoByteString::VisitExternalTwoByteStringPointers( 787 intptr_t RawExternalTwoByteString::VisitExternalTwoByteStringPointers(
850 RawExternalTwoByteString* raw_obj, 788 RawExternalTwoByteString* raw_obj,
851 ObjectPointerVisitor* visitor) { 789 ObjectPointerVisitor* visitor) {
852 // Make sure that we got here with the tagged pointer as this. 790 // Make sure that we got here with the tagged pointer as this.
853 ASSERT(raw_obj->IsHeapObject()); 791 ASSERT(raw_obj->IsHeapObject());
854 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 792 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
855 return ExternalTwoByteString::InstanceSize(); 793 return ExternalTwoByteString::InstanceSize();
856 } 794 }
857 795
858
859 intptr_t RawBool::VisitBoolPointers(RawBool* raw_obj, 796 intptr_t RawBool::VisitBoolPointers(RawBool* raw_obj,
860 ObjectPointerVisitor* visitor) { 797 ObjectPointerVisitor* visitor) {
861 // Make sure that we got here with the tagged pointer as this. 798 // Make sure that we got here with the tagged pointer as this.
862 ASSERT(raw_obj->IsHeapObject()); 799 ASSERT(raw_obj->IsHeapObject());
863 return Bool::InstanceSize(); 800 return Bool::InstanceSize();
864 } 801 }
865 802
866
867 intptr_t RawArray::VisitArrayPointers(RawArray* raw_obj, 803 intptr_t RawArray::VisitArrayPointers(RawArray* raw_obj,
868 ObjectPointerVisitor* visitor) { 804 ObjectPointerVisitor* visitor) {
869 intptr_t length = Smi::Value(raw_obj->ptr()->length_); 805 intptr_t length = Smi::Value(raw_obj->ptr()->length_);
870 visitor->VisitPointers(raw_obj->from(), raw_obj->to(length)); 806 visitor->VisitPointers(raw_obj->from(), raw_obj->to(length));
871 return Array::InstanceSize(length); 807 return Array::InstanceSize(length);
872 } 808 }
873 809
874
875 intptr_t RawImmutableArray::VisitImmutableArrayPointers( 810 intptr_t RawImmutableArray::VisitImmutableArrayPointers(
876 RawImmutableArray* raw_obj, 811 RawImmutableArray* raw_obj,
877 ObjectPointerVisitor* visitor) { 812 ObjectPointerVisitor* visitor) {
878 return RawArray::VisitArrayPointers(raw_obj, visitor); 813 return RawArray::VisitArrayPointers(raw_obj, visitor);
879 } 814 }
880 815
881
882 intptr_t RawGrowableObjectArray::VisitGrowableObjectArrayPointers( 816 intptr_t RawGrowableObjectArray::VisitGrowableObjectArrayPointers(
883 RawGrowableObjectArray* raw_obj, 817 RawGrowableObjectArray* raw_obj,
884 ObjectPointerVisitor* visitor) { 818 ObjectPointerVisitor* visitor) {
885 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 819 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
886 return GrowableObjectArray::InstanceSize(); 820 return GrowableObjectArray::InstanceSize();
887 } 821 }
888 822
889
890 intptr_t RawLinkedHashMap::VisitLinkedHashMapPointers( 823 intptr_t RawLinkedHashMap::VisitLinkedHashMapPointers(
891 RawLinkedHashMap* raw_obj, 824 RawLinkedHashMap* raw_obj,
892 ObjectPointerVisitor* visitor) { 825 ObjectPointerVisitor* visitor) {
893 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 826 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
894 return LinkedHashMap::InstanceSize(); 827 return LinkedHashMap::InstanceSize();
895 } 828 }
896 829
897
898 intptr_t RawFloat32x4::VisitFloat32x4Pointers(RawFloat32x4* raw_obj, 830 intptr_t RawFloat32x4::VisitFloat32x4Pointers(RawFloat32x4* raw_obj,
899 ObjectPointerVisitor* visitor) { 831 ObjectPointerVisitor* visitor) {
900 ASSERT(raw_obj->IsHeapObject()); 832 ASSERT(raw_obj->IsHeapObject());
901 return Float32x4::InstanceSize(); 833 return Float32x4::InstanceSize();
902 } 834 }
903 835
904
905 intptr_t RawInt32x4::VisitInt32x4Pointers(RawInt32x4* raw_obj, 836 intptr_t RawInt32x4::VisitInt32x4Pointers(RawInt32x4* raw_obj,
906 ObjectPointerVisitor* visitor) { 837 ObjectPointerVisitor* visitor) {
907 ASSERT(raw_obj->IsHeapObject()); 838 ASSERT(raw_obj->IsHeapObject());
908 return Int32x4::InstanceSize(); 839 return Int32x4::InstanceSize();
909 } 840 }
910 841
911
912 intptr_t RawFloat64x2::VisitFloat64x2Pointers(RawFloat64x2* raw_obj, 842 intptr_t RawFloat64x2::VisitFloat64x2Pointers(RawFloat64x2* raw_obj,
913 ObjectPointerVisitor* visitor) { 843 ObjectPointerVisitor* visitor) {
914 ASSERT(raw_obj->IsHeapObject()); 844 ASSERT(raw_obj->IsHeapObject());
915 return Float64x2::InstanceSize(); 845 return Float64x2::InstanceSize();
916 } 846 }
917 847
918 intptr_t RawTypedData::VisitTypedDataPointers(RawTypedData* raw_obj, 848 intptr_t RawTypedData::VisitTypedDataPointers(RawTypedData* raw_obj,
919 ObjectPointerVisitor* visitor) { 849 ObjectPointerVisitor* visitor) {
920 // Make sure that we got here with the tagged pointer as this. 850 // Make sure that we got here with the tagged pointer as this.
921 ASSERT(raw_obj->IsHeapObject()); 851 ASSERT(raw_obj->IsHeapObject());
922 intptr_t cid = raw_obj->GetClassId(); 852 intptr_t cid = raw_obj->GetClassId();
923 intptr_t array_len = Smi::Value(raw_obj->ptr()->length_); 853 intptr_t array_len = Smi::Value(raw_obj->ptr()->length_);
924 intptr_t lengthInBytes = array_len * TypedData::ElementSizeInBytes(cid); 854 intptr_t lengthInBytes = array_len * TypedData::ElementSizeInBytes(cid);
925 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 855 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
926 return TypedData::InstanceSize(lengthInBytes); 856 return TypedData::InstanceSize(lengthInBytes);
927 } 857 }
928 858
929
930 intptr_t RawExternalTypedData::VisitExternalTypedDataPointers( 859 intptr_t RawExternalTypedData::VisitExternalTypedDataPointers(
931 RawExternalTypedData* raw_obj, 860 RawExternalTypedData* raw_obj,
932 ObjectPointerVisitor* visitor) { 861 ObjectPointerVisitor* visitor) {
933 // Make sure that we got here with the tagged pointer as this. 862 // Make sure that we got here with the tagged pointer as this.
934 ASSERT(raw_obj->IsHeapObject()); 863 ASSERT(raw_obj->IsHeapObject());
935 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 864 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
936 return ExternalTypedData::InstanceSize(); 865 return ExternalTypedData::InstanceSize();
937 } 866 }
938 867
939 intptr_t RawCapability::VisitCapabilityPointers(RawCapability* raw_obj, 868 intptr_t RawCapability::VisitCapabilityPointers(RawCapability* raw_obj,
940 ObjectPointerVisitor* visitor) { 869 ObjectPointerVisitor* visitor) {
941 // Make sure that we got here with the tagged pointer as this. 870 // Make sure that we got here with the tagged pointer as this.
942 ASSERT(raw_obj->IsHeapObject()); 871 ASSERT(raw_obj->IsHeapObject());
943 return Capability::InstanceSize(); 872 return Capability::InstanceSize();
944 } 873 }
945 874
946
947 intptr_t RawReceivePort::VisitReceivePortPointers( 875 intptr_t RawReceivePort::VisitReceivePortPointers(
948 RawReceivePort* raw_obj, 876 RawReceivePort* raw_obj,
949 ObjectPointerVisitor* visitor) { 877 ObjectPointerVisitor* visitor) {
950 // Make sure that we got here with the tagged pointer as this. 878 // Make sure that we got here with the tagged pointer as this.
951 ASSERT(raw_obj->IsHeapObject()); 879 ASSERT(raw_obj->IsHeapObject());
952 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 880 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
953 return ReceivePort::InstanceSize(); 881 return ReceivePort::InstanceSize();
954 } 882 }
955 883
956
957 intptr_t RawSendPort::VisitSendPortPointers(RawSendPort* raw_obj, 884 intptr_t RawSendPort::VisitSendPortPointers(RawSendPort* raw_obj,
958 ObjectPointerVisitor* visitor) { 885 ObjectPointerVisitor* visitor) {
959 // Make sure that we got here with the tagged pointer as this. 886 // Make sure that we got here with the tagged pointer as this.
960 ASSERT(raw_obj->IsHeapObject()); 887 ASSERT(raw_obj->IsHeapObject());
961 return SendPort::InstanceSize(); 888 return SendPort::InstanceSize();
962 } 889 }
963 890
964
965 intptr_t RawStackTrace::VisitStackTracePointers(RawStackTrace* raw_obj, 891 intptr_t RawStackTrace::VisitStackTracePointers(RawStackTrace* raw_obj,
966 ObjectPointerVisitor* visitor) { 892 ObjectPointerVisitor* visitor) {
967 // Make sure that we got here with the tagged pointer as this. 893 // Make sure that we got here with the tagged pointer as this.
968 ASSERT(raw_obj->IsHeapObject()); 894 ASSERT(raw_obj->IsHeapObject());
969 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 895 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
970 return StackTrace::InstanceSize(); 896 return StackTrace::InstanceSize();
971 } 897 }
972 898
973
974 intptr_t RawRegExp::VisitRegExpPointers(RawRegExp* raw_obj, 899 intptr_t RawRegExp::VisitRegExpPointers(RawRegExp* raw_obj,
975 ObjectPointerVisitor* visitor) { 900 ObjectPointerVisitor* visitor) {
976 // Make sure that we got here with the tagged pointer as this. 901 // Make sure that we got here with the tagged pointer as this.
977 ASSERT(raw_obj->IsHeapObject()); 902 ASSERT(raw_obj->IsHeapObject());
978 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 903 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
979 return RegExp::InstanceSize(); 904 return RegExp::InstanceSize();
980 } 905 }
981 906
982
983 intptr_t RawWeakProperty::VisitWeakPropertyPointers( 907 intptr_t RawWeakProperty::VisitWeakPropertyPointers(
984 RawWeakProperty* raw_obj, 908 RawWeakProperty* raw_obj,
985 ObjectPointerVisitor* visitor) { 909 ObjectPointerVisitor* visitor) {
986 // Make sure that we got here with the tagged pointer as this. 910 // Make sure that we got here with the tagged pointer as this.
987 ASSERT(raw_obj->IsHeapObject()); 911 ASSERT(raw_obj->IsHeapObject());
988 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 912 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
989 return WeakProperty::InstanceSize(); 913 return WeakProperty::InstanceSize();
990 } 914 }
991 915
992
993 intptr_t RawMirrorReference::VisitMirrorReferencePointers( 916 intptr_t RawMirrorReference::VisitMirrorReferencePointers(
994 RawMirrorReference* raw_obj, 917 RawMirrorReference* raw_obj,
995 ObjectPointerVisitor* visitor) { 918 ObjectPointerVisitor* visitor) {
996 // Make sure that we got here with the tagged pointer as this. 919 // Make sure that we got here with the tagged pointer as this.
997 ASSERT(raw_obj->IsHeapObject()); 920 ASSERT(raw_obj->IsHeapObject());
998 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 921 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
999 return MirrorReference::InstanceSize(); 922 return MirrorReference::InstanceSize();
1000 } 923 }
1001 924
1002
1003 intptr_t RawUserTag::VisitUserTagPointers(RawUserTag* raw_obj, 925 intptr_t RawUserTag::VisitUserTagPointers(RawUserTag* raw_obj,
1004 ObjectPointerVisitor* visitor) { 926 ObjectPointerVisitor* visitor) {
1005 // Make sure that we got here with the tagged pointer as this. 927 // Make sure that we got here with the tagged pointer as this.
1006 ASSERT(raw_obj->IsHeapObject()); 928 ASSERT(raw_obj->IsHeapObject());
1007 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); 929 visitor->VisitPointers(raw_obj->from(), raw_obj->to());
1008 return UserTag::InstanceSize(); 930 return UserTag::InstanceSize();
1009 } 931 }
1010 932
1011
1012 } // namespace dart 933 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/raw_object_snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698