objects-debug.cc revision 958fae7ec3f466955f8e5b50fa5b8d38b9e91675
13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/v8.h" 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/disasm.h" 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/disassembler.h" 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/heap/objects-visiting.h" 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/jsregexp.h" 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/macro-assembler.h" 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/ostreams.h" 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 { 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal { 16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifdef VERIFY_HEAP 189fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid Object::ObjectVerify() { 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (IsSmi()) { 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Smi::cast(this)->SmiVerify(); 22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HeapObject::cast(this)->HeapObjectVerify(); 24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Object::VerifyPointer(Object* p) { 29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (p->IsHeapObject()) { 30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block HeapObject::VerifyHeapPointer(p); 31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(p->IsSmi()); 33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Smi::SmiVerify() { 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsSmi()); 39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 41a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid HeapObject::HeapObjectVerify() { 43a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block InstanceType instance_type = map()->instance_type(); 44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 45a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (instance_type < FIRST_NONSTRING_TYPE) { 46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block String::cast(this)->StringVerify(); 47a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return; 48a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 49a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 50958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // TODO(yangguo): Use this check once crbug/436911 has been fixed. 51958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // DCHECK(!NeedsToEnsureDoubleAlignment() || 52958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // IsAligned(OffsetFrom(address()), kDoubleAlignment)); 53958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 54a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (instance_type) { 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case SYMBOL_TYPE: 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Symbol::cast(this)->SymbolVerify(); 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case MAP_TYPE: 59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Map::cast(this)->MapVerify(); 60a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case HEAP_NUMBER_TYPE: 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case MUTABLE_HEAP_NUMBER_TYPE: 63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block HeapNumber::cast(this)->HeapNumberVerify(); 64a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case FIXED_ARRAY_TYPE: 66a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray::cast(this)->FixedArrayVerify(); 67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch case FIXED_DOUBLE_ARRAY_TYPE: 693fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch FixedDoubleArray::cast(this)->FixedDoubleArrayVerify(); 703fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch break; 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case CONSTANT_POOL_ARRAY_TYPE: 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConstantPoolArray::cast(this)->ConstantPoolArrayVerify(); 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 74a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case BYTE_ARRAY_TYPE: 75a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ByteArray::cast(this)->ByteArrayVerify(); 76a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case FREE_SPACE_TYPE: 783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch FreeSpace::cast(this)->FreeSpaceVerify(); 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define VERIFY_TYPED_ARRAY(Type, type, TYPE, ctype, size) \ 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case EXTERNAL_##TYPE##_ARRAY_TYPE: \ 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch External##Type##Array::cast(this)->External##Type##ArrayVerify(); \ 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; \ 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case FIXED_##TYPE##_ARRAY_TYPE: \ 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Fixed##Type##Array::cast(this)->FixedTypedArrayVerify(); \ 87257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch break; 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch TYPED_ARRAYS(VERIFY_TYPED_ARRAY) 90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#undef VERIFY_TYPED_ARRAY 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 92a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case CODE_TYPE: 93a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Code::cast(this)->CodeVerify(); 94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case ODDBALL_TYPE: 96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Oddball::cast(this)->OddballVerify(); 97a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 98a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_OBJECT_TYPE: 99a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_CONTEXT_EXTENSION_OBJECT_TYPE: 100a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObject::cast(this)->JSObjectVerify(); 101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_GENERATOR_OBJECT_TYPE: 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSGeneratorObject::cast(this)->JSGeneratorObjectVerify(); 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_MODULE_TYPE: 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSModule::cast(this)->JSModuleVerify(); 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 108a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_VALUE_TYPE: 109a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSValue::cast(this)->JSValueVerify(); 110a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case JS_DATE_TYPE: 1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSDate::cast(this)->JSDateVerify(); 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 114a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_FUNCTION_TYPE: 115a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSFunction::cast(this)->JSFunctionVerify(); 116a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 117a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_GLOBAL_PROXY_TYPE: 118a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSGlobalProxy::cast(this)->JSGlobalProxyVerify(); 119a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 120a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_GLOBAL_OBJECT_TYPE: 121a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSGlobalObject::cast(this)->JSGlobalObjectVerify(); 122a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 123a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_BUILTINS_OBJECT_TYPE: 124a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSBuiltinsObject::cast(this)->JSBuiltinsObjectVerify(); 125a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 126b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case CELL_TYPE: 127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Cell::cast(this)->CellVerify(); 128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case PROPERTY_CELL_TYPE: 130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PropertyCell::cast(this)->PropertyCellVerify(); 131a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 132958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier case WEAK_CELL_TYPE: 133958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier WeakCell::cast(this)->WeakCellVerify(); 134958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier break; 135a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_ARRAY_TYPE: 136a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSArray::cast(this)->JSArrayVerify(); 137a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case JS_SET_TYPE: 1393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSSet::cast(this)->JSSetVerify(); 1403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 1413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case JS_MAP_TYPE: 1423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSMap::cast(this)->JSMapVerify(); 1433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_SET_ITERATOR_TYPE: 145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSSetIterator::cast(this)->JSSetIteratorVerify(); 146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_MAP_ITERATOR_TYPE: 148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSMapIterator::cast(this)->JSMapIteratorVerify(); 149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 15069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch case JS_WEAK_MAP_TYPE: 15169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch JSWeakMap::cast(this)->JSWeakMapVerify(); 15269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch break; 153b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_WEAK_SET_TYPE: 154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSWeakSet::cast(this)->JSWeakSetVerify(); 155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 156a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_REGEXP_TYPE: 157a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSRegExp::cast(this)->JSRegExpVerify(); 158a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 159a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case FILLER_TYPE: 160a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 161257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch case JS_PROXY_TYPE: 162257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch JSProxy::cast(this)->JSProxyVerify(); 163257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch break; 164589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch case JS_FUNCTION_PROXY_TYPE: 165589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch JSFunctionProxy::cast(this)->JSFunctionProxyVerify(); 166589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch break; 167257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch case FOREIGN_TYPE: 168257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch Foreign::cast(this)->ForeignVerify(); 169a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 170a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case SHARED_FUNCTION_INFO_TYPE: 171a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block SharedFunctionInfo::cast(this)->SharedFunctionInfoVerify(); 172a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1731e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block case JS_MESSAGE_OBJECT_TYPE: 1741e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block JSMessageObject::cast(this)->JSMessageObjectVerify(); 1751e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block break; 176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_ARRAY_BUFFER_TYPE: 177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSArrayBuffer::cast(this)->JSArrayBufferVerify(); 178b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_TYPED_ARRAY_TYPE: 180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSTypedArray::cast(this)->JSTypedArrayVerify(); 181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case JS_DATA_VIEW_TYPE: 183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSDataView::cast(this)->JSDataViewVerify(); 184b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch break; 185a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 186a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define MAKE_STRUCT_CASE(NAME, Name, name) \ 187a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case NAME##_TYPE: \ 188a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Name::cast(this)->Name##Verify(); \ 189a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 190a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block STRUCT_LIST(MAKE_STRUCT_CASE) 191a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#undef MAKE_STRUCT_CASE 192a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 193a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 194a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block UNREACHABLE(); 195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 196a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 197a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 198a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 199a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 200a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid HeapObject::VerifyHeapPointer(Object* p) { 201b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(p->IsHeapObject()); 202b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HeapObject* ho = HeapObject::cast(p); 203b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(ho->GetHeap()->Contains(ho)); 204a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 205a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 206a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid Symbol::SymbolVerify() { 208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsSymbol()); 209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(HasHashCode()); 210b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_GT(Hash(), 0); 211b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(name()->IsUndefined() || name()->IsString()); 212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(flags()->IsSmi()); 213a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 2143ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2153ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid HeapNumber::HeapNumberVerify() { 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsHeapNumber() || IsMutableHeapNumber()); 2183ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2193ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2203ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid ByteArray::ByteArrayVerify() { 222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsByteArray()); 2233ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2243ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2253ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 226b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid FreeSpace::FreeSpaceVerify() { 227b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsFreeSpace()); 2283ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2293ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2303ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 231b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define EXTERNAL_ARRAY_VERIFY(Type, type, TYPE, ctype, size) \ 232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void External##Type##Array::External##Type##ArrayVerify() { \ 233b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsExternal##Type##Array()); \ 234b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 2353ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 236b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochTYPED_ARRAYS(EXTERNAL_ARRAY_VERIFY) 237b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#undef EXTERNAL_ARRAY_VERIFY 2383ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2393ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 240b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochtemplate <class Traits> 241b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid FixedTypedArray<Traits>::FixedTypedArrayVerify() { 242b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsHeapObject() && 243b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HeapObject::cast(this)->map()->instance_type() == 244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Traits::kInstanceType); 2453ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2463ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2473ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochbool JSObject::ElementsAreSafeToExamine() { 249b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // If a GC was caused while constructing this object, the elements 250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // pointer may point to a one pointer filler map. 251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return reinterpret_cast<Map*>(elements()) != 252b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch GetHeap()->one_pointer_filler_map(); 253257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 254257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 255257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 256a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::JSObjectVerify() { 257a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(properties()); 258a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(elements()); 2593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 260b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (GetElementsKind() == SLOPPY_ARGUMENTS_ELEMENTS) { 261b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this->elements()->IsFixedArray()); 262b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_GE(this->elements()->length(), 2); 2633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 2643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 265a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (HasFastProperties()) { 266958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier int actual_unused_property_fields = map()->inobject_properties() + 267958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier properties()->length() - 268958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier map()->NextFreePropertyIndex(); 269958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (map()->unused_property_fields() != actual_unused_property_fields) { 270958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // This could actually happen in the middle of StoreTransitionStub 271958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // when the new extended backing store is already set into the object and 272958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // the allocation of the MutableHeapNumber triggers GC (in this case map 273958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // is not updated yet). 274958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CHECK_EQ(map()->unused_property_fields(), 275958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier actual_unused_property_fields - JSObject::kFieldsAdded); 276958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 277b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DescriptorArray* descriptors = map()->instance_descriptors(); 278b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) { 279b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (descriptors->GetDetails(i).type() == FIELD) { 280b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Representation r = descriptors->GetDetails(i).representation(); 281b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FieldIndex index = FieldIndex::ForDescriptor(map(), i); 282958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (IsUnboxedDoubleField(index)) { 283958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier DCHECK(r.IsDouble()); 284958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier continue; 285958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 286b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* value = RawFastPropertyAt(index); 287b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (r.IsDouble()) DCHECK(value->IsMutableHeapNumber()); 288b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (value->IsUninitialized()) continue; 289b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (r.IsSmi()) DCHECK(value->IsSmi()); 290b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (r.IsHeapObject()) DCHECK(value->IsHeapObject()); 291b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HeapType* field_type = descriptors->GetFieldType(i); 292b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (r.IsNone()) { 293b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(field_type->Is(HeapType::None())); 294b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (!HeapType::Any()->Is(field_type)) { 295b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!field_type->NowStable() || field_type->NowContains(value)); 296b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 297b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 298b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 299b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 300b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 301b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // If a GC was caused while constructing this object, the elements 302b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // pointer may point to a one pointer filler map. 303b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (ElementsAreSafeToExamine()) { 304b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ((map()->has_fast_smi_or_object_elements() || 305b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (elements() == GetHeap()->empty_fixed_array())), 306b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (elements()->map() == GetHeap()->fixed_array_map() || 307b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch elements()->map() == GetHeap()->fixed_cow_array_map())); 308b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(map()->has_fast_object_elements() == HasFastObjectElements()); 309a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 310a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 311a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 312a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 313a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Map::MapVerify() { 314b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Heap* heap = GetHeap(); 315b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!heap->InNewSpace(this)); 316b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE); 317b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(instance_size() == kVariableSizeSentinel || 318791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block (kPointerSize <= instance_size() && 319b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch instance_size() < heap->Capacity())); 320a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(prototype()); 321a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(instance_descriptors()); 322b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SLOW_DCHECK(instance_descriptors()->IsSortedNoDuplicates()); 323b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (HasTransitionArray()) { 324b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SLOW_DCHECK(transitions()->IsSortedNoDuplicates()); 325b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SLOW_DCHECK(transitions()->IsConsistentWithBackPointers(this)); 326b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 327958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier SLOW_DCHECK(!FLAG_unbox_double_fields || 328958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier layout_descriptor()->IsConsistentWithMap(this)); 329a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 330a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 331a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 332b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid Map::DictionaryMapVerify() { 33380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen MapVerify(); 334b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(is_dictionary_map()); 335b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(instance_descriptors()->IsEmpty()); 336b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, pre_allocated_property_fields()); 337b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, unused_property_fields()); 338958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CHECK_EQ(StaticVisitorBase::GetVisitorId(this), visitor_id()); 33980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 34080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 34180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 342b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid Map::VerifyOmittedMapChecks() { 343b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (!FLAG_omit_map_checks_for_leaf_maps) return; 344b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (!is_stable() || 345b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch is_deprecated() || 346b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HasTransitionArray() || 347b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch is_dictionary_map()) { 348b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, dependent_code()->number_of_entries( 349b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DependentCode::kPrototypeCheckGroup)); 350b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 351b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 352b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 353b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 3546ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockvoid CodeCache::CodeCacheVerify() { 3556ded16be15dd865a9b21ea304d5273c8be299c87Steve Block VerifyHeapPointer(default_cache()); 3566ded16be15dd865a9b21ea304d5273c8be299c87Steve Block VerifyHeapPointer(normal_type_cache()); 357b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(default_cache()->IsFixedArray()); 358b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(normal_type_cache()->IsUndefined() 3596ded16be15dd865a9b21ea304d5273c8be299c87Steve Block || normal_type_cache()->IsCodeCacheHashTable()); 3606ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 361a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 362a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 3633fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvoid PolymorphicCodeCache::PolymorphicCodeCacheVerify() { 3643fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch VerifyHeapPointer(cache()); 365b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable()); 3663fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch} 3673fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 3683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 3693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid TypeFeedbackInfo::TypeFeedbackInfoVerify() { 370b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kStorage1Offset); 371b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kStorage2Offset); 372b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kStorage3Offset); 3733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 3743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid AliasedArgumentsEntry::AliasedArgumentsEntryVerify() { 3773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifySmiField(kAliasedContextSlot); 3783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 3793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 381a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid FixedArray::FixedArrayVerify() { 382a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = 0; i < length(); i++) { 383a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* e = get(i); 384b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(e); 385a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 386a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 387a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 388a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 3893fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvoid FixedDoubleArray::FixedDoubleArrayVerify() { 3903fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch for (int i = 0; i < length(); i++) { 3913fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch if (!is_the_hole(i)) { 39269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch double value = get_scalar(i); 393b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!std::isnan(value) || 394b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (bit_cast<uint64_t>(value) == 395b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch bit_cast<uint64_t>(canonical_not_the_hole_nan_as_double())) || 396b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ((bit_cast<uint64_t>(value) & Double::kSignMask) != 0)); 3973fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 3983fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 3993fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch} 4003fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 4013fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 402b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid ConstantPoolArray::ConstantPoolArrayVerify() { 403b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsConstantPoolArray()); 404b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConstantPoolArray::Iterator code_iter(this, ConstantPoolArray::CODE_PTR); 405b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch while (!code_iter.is_finished()) { 406b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Address code_entry = get_code_ptr_entry(code_iter.next_index()); 407b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(Code::GetCodeFromTargetAddress(code_entry)); 408b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 409b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConstantPoolArray::Iterator heap_iter(this, ConstantPoolArray::HEAP_PTR); 410b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch while (!heap_iter.is_finished()) { 411b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(OffsetOfElementAt(heap_iter.next_index())); 412b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 413b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 414b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 415b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 416b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSGeneratorObject::JSGeneratorObjectVerify() { 417b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // In an expression like "new g()", there can be a point where a generator 418b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // object is allocated but its fields are all undefined, as it hasn't yet been 419b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // initialized by the generator. Hence these weak checks. 420b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kFunctionOffset); 421b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kContextOffset); 422b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kReceiverOffset); 423b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kOperandStackOffset); 424b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kContinuationOffset); 425b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kStackHandlerIndexOffset); 426b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 427b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 428b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 429b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSModule::JSModuleVerify() { 430b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kContextOffset); 431b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kScopeInfoOffset); 432b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(context()->IsUndefined() || 433b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Context::cast(context())->IsModuleContext()); 434b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 435b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 436b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 437a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSValue::JSValueVerify() { 438a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* v = value(); 439a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (v->IsHeapObject()) { 440a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(v); 441a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 442a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 443a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 444a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 4453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid JSDate::JSDateVerify() { 4463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (value()->IsHeapObject()) { 4473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyHeapPointer(value()); 4483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(value()->IsUndefined() || value()->IsSmi() || value()->IsHeapNumber()); 4503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(year()->IsUndefined() || year()->IsSmi() || year()->IsNaN()); 4513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(month()->IsUndefined() || month()->IsSmi() || month()->IsNaN()); 4523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(day()->IsUndefined() || day()->IsSmi() || day()->IsNaN()); 4533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(weekday()->IsUndefined() || weekday()->IsSmi() || weekday()->IsNaN()); 4543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(hour()->IsUndefined() || hour()->IsSmi() || hour()->IsNaN()); 4553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(min()->IsUndefined() || min()->IsSmi() || min()->IsNaN()); 4563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(sec()->IsUndefined() || sec()->IsSmi() || sec()->IsNaN()); 4573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(cache_stamp()->IsUndefined() || 4583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch cache_stamp()->IsSmi() || 4593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch cache_stamp()->IsNaN()); 4603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (month()->IsSmi()) { 4623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int month = Smi::cast(this->month())->value(); 4633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= month && month <= 11); 4643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (day()->IsSmi()) { 4663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int day = Smi::cast(this->day())->value(); 4673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(1 <= day && day <= 31); 4683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (hour()->IsSmi()) { 4703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int hour = Smi::cast(this->hour())->value(); 4713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= hour && hour <= 23); 4723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (min()->IsSmi()) { 4743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int min = Smi::cast(this->min())->value(); 4753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= min && min <= 59); 4763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (sec()->IsSmi()) { 4783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int sec = Smi::cast(this->sec())->value(); 4793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= sec && sec <= 59); 4803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (weekday()->IsSmi()) { 4823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int weekday = Smi::cast(this->weekday())->value(); 4833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= weekday && weekday <= 6); 4843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (cache_stamp()->IsSmi()) { 4863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(Smi::cast(cache_stamp())->value() <= 487b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Smi::cast(GetIsolate()->date_cache()->stamp())->value()); 4883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 4903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4921e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockvoid JSMessageObject::JSMessageObjectVerify() { 4931e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block CHECK(IsJSMessageObject()); 4941e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block CHECK(type()->IsString()); 4951e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block CHECK(arguments()->IsJSArray()); 4961e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kStartPositionOffset); 4971e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kEndPositionOffset); 4981e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kArgumentsOffset); 4991e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kScriptOffset); 5001e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kStackFramesOffset); 5011e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block} 5021e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 5031e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 504a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid String::StringVerify() { 505a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsString()); 506a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(length() >= 0 && length() <= Smi::kMaxValue); 507b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (IsInternalizedString()) { 508b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!GetHeap()->InNewSpace(this)); 509a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 51069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch if (IsConsString()) { 51169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ConsString::cast(this)->ConsStringVerify(); 51269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } else if (IsSlicedString()) { 51369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch SlicedString::cast(this)->SlicedStringVerify(); 51469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 51569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 51669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 51769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 51869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid ConsString::ConsStringVerify() { 51969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->first()->IsString()); 52069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->second() == GetHeap()->empty_string() || 52169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch this->second()->IsString()); 5223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(this->length() >= ConsString::kMinLength); 523b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this->length() == this->first()->length() + this->second()->length()); 52469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch if (this->IsFlat()) { 52569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // A flat cons can only be created by String::SlowTryFlatten. 52669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Afterwards, the first part may be externalized. 52769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->first()->IsSeqString() || this->first()->IsExternalString()); 52869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 52969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 53069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 53169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 53269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid SlicedString::SlicedStringVerify() { 53369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(!this->parent()->IsConsString()); 53469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(!this->parent()->IsSlicedString()); 53569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->length() >= SlicedString::kMinLength); 536a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 537a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 538a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 539a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSFunction::JSFunctionVerify() { 540a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSFunction()); 541a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kPrototypeOrInitialMapOffset); 542b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch VerifyObjectField(kNextFunctionLinkOffset); 5433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(code()->IsCode()); 544b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(next_function_link() == NULL || 545b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch next_function_link()->IsUndefined() || 546b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch next_function_link()->IsJSFunction()); 547b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 548b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 549a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 550a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid SharedFunctionInfo::SharedFunctionInfoVerify() { 551a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsSharedFunctionInfo()); 552a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kNameOffset); 553a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kCodeOffset); 554b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kOptimizedCodeMapOffset); 555b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kFeedbackVectorOffset); 5563bec4d28b1f388dbc06a9c4276e1a03e86c52b04Ben Murdoch VerifyObjectField(kScopeInfoOffset); 557a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kInstanceClassNameOffset); 5586ded16be15dd865a9b21ea304d5273c8be299c87Steve Block VerifyObjectField(kFunctionDataOffset); 559a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kScriptOffset); 560a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kDebugInfoOffset); 561a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 562a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 563a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 564a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSGlobalProxy::JSGlobalProxyVerify() { 565a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSGlobalProxy()); 566a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 567b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(JSGlobalProxy::kNativeContextOffset); 568a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Make sure that this object has no properties, elements. 569a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK_EQ(0, properties()->length()); 570958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CHECK_EQ(FAST_HOLEY_SMI_ELEMENTS, GetElementsKind()); 5717f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch CHECK_EQ(0, FixedArray::cast(elements())->length()); 572a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 573a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 574a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 575a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSGlobalObject::JSGlobalObjectVerify() { 576a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSGlobalObject()); 577a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 578a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = GlobalObject::kBuiltinsOffset; 579a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i < JSGlobalObject::kSize; 580a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i += kPointerSize) { 581a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(i); 582a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 583a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 584a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 585a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 586a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSBuiltinsObject::JSBuiltinsObjectVerify() { 587a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSBuiltinsObject()); 588a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 589a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = GlobalObject::kBuiltinsOffset; 590a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i < JSBuiltinsObject::kSize; 591a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i += kPointerSize) { 592a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(i); 593a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 594a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 595a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 596a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 597a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Oddball::OddballVerify() { 598a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsOddball()); 599b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Heap* heap = GetHeap(); 600a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(to_string()); 601a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* number = to_number(); 602a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (number->IsHeapObject()) { 603b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(number == heap->nan_value()); 604a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 605b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(number->IsSmi()); 606a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block int value = Smi::cast(number)->value(); 607592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch // Hidden oddballs have negative smis. 608b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const int kLeastHiddenOddballNumber = -5; 609b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_LE(value, 1); 610b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(value >= kLeastHiddenOddballNumber); 611a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 612b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (map() == heap->undefined_map()) { 613b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->undefined_value()); 614b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->the_hole_map()) { 615b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->the_hole_value()); 616b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->null_map()) { 617b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->null_value()); 618b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->boolean_map()) { 619b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->true_value() || 620b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch this == heap->false_value()); 621b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->uninitialized_map()) { 622b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->uninitialized_value()); 623b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->no_interceptor_result_sentinel_map()) { 624b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->no_interceptor_result_sentinel()); 625b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->arguments_marker_map()) { 626b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->arguments_marker()); 627b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->termination_exception_map()) { 628b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->termination_exception()); 629b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (map() == heap->exception_map()) { 630b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(this == heap->exception()); 631b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else { 632b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UNREACHABLE(); 633b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 634b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 635b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 636b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 637b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid Cell::CellVerify() { 638b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsCell()); 639b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kValueOffset); 640a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 641a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 642a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 643b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid PropertyCell::PropertyCellVerify() { 644b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsPropertyCell()); 645a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kValueOffset); 646b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyObjectField(kTypeOffset); 647a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 648a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 649a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 650958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniervoid WeakCell::WeakCellVerify() { 651958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CHECK(IsWeakCell()); 652958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier VerifyObjectField(kValueOffset); 653958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier VerifyObjectField(kNextOffset); 654958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 655958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 656958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 657a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Code::CodeVerify() { 658a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsAligned(reinterpret_cast<intptr_t>(instruction_start()), 6590d5e116f6aee03185f237311a943491bb079a768Kristian Monsen kCodeAlignment)); 660b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch relocation_info()->ObjectVerify(); 661a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Address last_gc_pc = NULL; 662b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Isolate* isolate = GetIsolate(); 663a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (RelocIterator it(this); !it.done(); it.next()) { 664b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch it.rinfo()->Verify(isolate); 665a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Ensure that GC will not iterate twice over the same pointer. 666a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (RelocInfo::IsGCRelocMode(it.rinfo()->rmode())) { 667a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(it.rinfo()->pc() != last_gc_pc); 668a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block last_gc_pc = it.rinfo()->pc(); 669a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 670a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 671b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(raw_type_feedback_info() == Smi::FromInt(0) || 672b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch raw_type_feedback_info()->IsSmi() == IsCodeStubOrIC()); 673b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 674b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 675b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 676b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid Code::VerifyEmbeddedObjectsDependency() { 677b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (!CanContainWeakObjects()) return; 678b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DisallowHeapAllocation no_gc; 679b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Isolate* isolate = GetIsolate(); 680b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HandleScope scope(isolate); 681b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT); 682b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (RelocIterator it(this, mode_mask); !it.done(); it.next()) { 683b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* obj = it.rinfo()->target_object(); 684b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (IsWeakObject(obj)) { 685b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (obj->IsMap()) { 686b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Map* map = Map::cast(obj); 687958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CHECK(map->dependent_code()->Contains(DependentCode::kWeakCodeGroup, 688958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier this)); 689b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else if (obj->IsJSObject()) { 690b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* raw_table = GetIsolate()->heap()->weak_object_to_code_table(); 691b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch WeakHashTable* table = WeakHashTable::cast(raw_table); 692b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Handle<Object> key_obj(obj, isolate); 693b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(DependentCode::cast(table->Lookup(key_obj))->Contains( 694b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DependentCode::kWeakCodeGroup, this)); 695b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 696b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 697b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 698a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 699a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 700a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 701a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSArray::JSArrayVerify() { 702a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 703b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(length()->IsNumber() || length()->IsUndefined()); 704b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // If a GC was caused while constructing this array, the elements 705b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // pointer may point to a one pointer filler map. 706b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (ElementsAreSafeToExamine()) { 707b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(elements()->IsUndefined() || 708b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch elements()->IsFixedArray() || 709b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch elements()->IsFixedDoubleArray()); 710b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 711a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 712a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 713a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 7143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid JSSet::JSSetVerify() { 7153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSSet()); 7163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSObjectVerify(); 7173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyHeapPointer(table()); 718b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); 719b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // TODO(arv): Verify OrderedHashTable too. 7203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 7213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid JSMap::JSMapVerify() { 7243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSMap()); 7253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSObjectVerify(); 7263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyHeapPointer(table()); 727b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); 728b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // TODO(arv): Verify OrderedHashTable too. 729b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 730b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 731b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 732b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSSetIterator::JSSetIteratorVerify() { 733b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsJSSetIterator()); 734b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSObjectVerify(); 735b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyHeapPointer(table()); 736b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); 737b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(index()->IsSmi() || index()->IsUndefined()); 738b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(kind()->IsSmi() || kind()->IsUndefined()); 739b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 740b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 741b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 742b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSMapIterator::JSMapIteratorVerify() { 743b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsJSMapIterator()); 744b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSObjectVerify(); 745b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyHeapPointer(table()); 746b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(table()->IsOrderedHashTable() || table()->IsUndefined()); 747b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(index()->IsSmi() || index()->IsUndefined()); 748b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(kind()->IsSmi() || kind()->IsUndefined()); 7493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 7503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 7513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 75269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid JSWeakMap::JSWeakMapVerify() { 75369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(IsJSWeakMap()); 75469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch JSObjectVerify(); 75569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch VerifyHeapPointer(table()); 756b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(table()->IsHashTable() || table()->IsUndefined()); 757b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 758b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 759b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 760b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSWeakSet::JSWeakSetVerify() { 761b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsJSWeakSet()); 762b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSObjectVerify(); 763b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyHeapPointer(table()); 764b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(table()->IsHashTable() || table()->IsUndefined()); 76569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 76669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 76769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 768a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSRegExp::JSRegExpVerify() { 769a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 770b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(data()->IsUndefined() || data()->IsFixedArray()); 771a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (TypeTag()) { 772a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JSRegExp::ATOM: { 773a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray* arr = FixedArray::cast(data()); 774b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(arr->get(JSRegExp::kAtomPatternIndex)->IsString()); 775a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 776a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 777a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JSRegExp::IRREGEXP: { 778a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block bool is_native = RegExpImpl::UsesNativeRegExp(); 779a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 780a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray* arr = FixedArray::cast(data()); 781b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* one_byte_data = arr->get(JSRegExp::kIrregexpLatin1CodeIndex); 782257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Smi : Not compiled yet (-1) or code prepared for flushing. 783a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // JSObject: Compilation error. 784a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Code/ByteArray: Compiled code. 785b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK( 786b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch one_byte_data->IsSmi() || 787b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (is_native ? one_byte_data->IsCode() : one_byte_data->IsByteArray())); 788a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* uc16_data = arr->get(JSRegExp::kIrregexpUC16CodeIndex); 789b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(uc16_data->IsSmi() || 790257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch (is_native ? uc16_data->IsCode() : uc16_data->IsByteArray())); 791257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 792b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* one_byte_saved = 793b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch arr->get(JSRegExp::kIrregexpLatin1CodeSavedIndex); 794b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(one_byte_saved->IsSmi() || one_byte_saved->IsString() || 795b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch one_byte_saved->IsCode()); 796257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch Object* uc16_saved = arr->get(JSRegExp::kIrregexpUC16CodeSavedIndex); 797b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(uc16_saved->IsSmi() || uc16_saved->IsString() || 798257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch uc16_saved->IsCode()); 799257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 800b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(arr->get(JSRegExp::kIrregexpCaptureCountIndex)->IsSmi()); 801b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(arr->get(JSRegExp::kIrregexpMaxRegisterCountIndex)->IsSmi()); 802a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 803a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 804a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 805b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(JSRegExp::NOT_COMPILED, TypeTag()); 806b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(data()->IsUndefined()); 807a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 808a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 809a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 810a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 811a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 812257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid JSProxy::JSProxyVerify() { 8133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSProxy()); 814257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch VerifyPointer(handler()); 815b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(hash()->IsSmi() || hash()->IsUndefined()); 816257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 817257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 818589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 819589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdochvoid JSFunctionProxy::JSFunctionProxyVerify() { 8203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSFunctionProxy()); 821589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch JSProxyVerify(); 822589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch VerifyPointer(call_trap()); 823589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch VerifyPointer(construct_trap()); 824589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch} 825589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 826589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 827b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSArrayBuffer::JSArrayBufferVerify() { 828b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsJSArrayBuffer()); 829b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSObjectVerify(); 830b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(byte_length()); 831b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber() 832b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch || byte_length()->IsUndefined()); 833b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 834b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 835b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 836b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSArrayBufferView::JSArrayBufferViewVerify() { 837b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsJSArrayBufferView()); 838b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSObjectVerify(); 839b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(buffer()); 840b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(buffer()->IsJSArrayBuffer() || buffer()->IsUndefined() 841b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch || buffer() == Smi::FromInt(0)); 842b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 843b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(byte_offset()); 844b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(byte_offset()->IsSmi() || byte_offset()->IsHeapNumber() 845b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch || byte_offset()->IsUndefined()); 846b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 847b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(byte_length()); 848b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber() 849b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch || byte_length()->IsUndefined()); 850b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 851b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 852b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 853b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSTypedArray::JSTypedArrayVerify() { 854b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsJSTypedArray()); 855b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSArrayBufferViewVerify(); 856b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(length()); 857b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(length()->IsSmi() || length()->IsHeapNumber() 858b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch || length()->IsUndefined()); 859b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 860b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(elements()); 861b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 862b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 863b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 864b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSDataView::JSDataViewVerify() { 865b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsJSDataView()); 866b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSArrayBufferViewVerify(); 867b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 868b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 869b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 870257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid Foreign::ForeignVerify() { 871b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsForeign()); 872b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 873b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 874b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 875b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid Box::BoxVerify() { 876b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsBox()); 877b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch value()->ObjectVerify(); 878a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 879a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 880a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 881a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid AccessorInfo::AccessorInfoVerify() { 882b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(name()); 883b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(flag()); 884b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(expected_receiver_type()); 885b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 886b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 887b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 888b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid ExecutableAccessorInfo::ExecutableAccessorInfoVerify() { 889b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsExecutableAccessorInfo()); 890b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AccessorInfoVerify(); 891a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(getter()); 892a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(setter()); 893a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 894b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 895b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 896b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 897b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid DeclaredAccessorDescriptor::DeclaredAccessorDescriptorVerify() { 898b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsDeclaredAccessorDescriptor()); 899b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(serialized_data()); 900b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 901b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 902b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 903b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid DeclaredAccessorInfo::DeclaredAccessorInfoVerify() { 904b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsDeclaredAccessorInfo()); 905b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AccessorInfoVerify(); 906b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(descriptor()); 907a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 908b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 909a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 9103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid AccessorPair::AccessorPairVerify() { 9113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsAccessorPair()); 9123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyPointer(getter()); 9133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyPointer(setter()); 9143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 9153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 9163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 917a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid AccessCheckInfo::AccessCheckInfoVerify() { 918a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsAccessCheckInfo()); 919a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(named_callback()); 920a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(indexed_callback()); 921a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 922a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 923a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 924b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 925a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid InterceptorInfo::InterceptorInfoVerify() { 926a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsInterceptorInfo()); 927a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(getter()); 928a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(setter()); 929a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(query()); 930a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(deleter()); 931a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(enumerator()); 932a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 933958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier VerifySmiField(kFlagsOffset); 934a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 935b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 936a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 937a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid CallHandlerInfo::CallHandlerInfoVerify() { 938a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsCallHandlerInfo()); 939a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(callback()); 940a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 941a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 942a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 943b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 944a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid TemplateInfo::TemplateInfoVerify() { 945a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(tag()); 946a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(property_list()); 947b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyPointer(property_accessors()); 948a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 949a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 950b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 951a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid FunctionTemplateInfo::FunctionTemplateInfoVerify() { 952a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsFunctionTemplateInfo()); 953a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block TemplateInfoVerify(); 954a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(serial_number()); 955a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(call_code()); 956a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(prototype_template()); 957a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(parent_template()); 958a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(named_property_handler()); 959a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(indexed_property_handler()); 960a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(instance_template()); 961a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(signature()); 962a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(access_check_info()); 963a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 964a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 965a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 966a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid ObjectTemplateInfo::ObjectTemplateInfoVerify() { 967a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsObjectTemplateInfo()); 968a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block TemplateInfoVerify(); 969a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(constructor()); 970a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(internal_field_count()); 971a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 972a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 973b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 974a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid SignatureInfo::SignatureInfoVerify() { 975a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsSignatureInfo()); 976a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(receiver()); 977a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(args()); 978a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 979a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 980b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 981a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid TypeSwitchInfo::TypeSwitchInfoVerify() { 982a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsTypeSwitchInfo()); 983a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(types()); 984a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 985a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 986a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 987b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid AllocationSite::AllocationSiteVerify() { 988b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsAllocationSite()); 989b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 990b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 991b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 992b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid AllocationMemento::AllocationMementoVerify() { 993b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(IsAllocationMemento()); 994b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VerifyHeapPointer(allocation_site()); 995b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!IsValid() || GetAllocationSite()->IsAllocationSite()); 996b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 997b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 998b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 999a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Script::ScriptVerify() { 1000a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsScript()); 1001a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(source()); 1002a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(name()); 1003a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block line_offset()->SmiVerify(); 1004a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block column_offset()->SmiVerify(); 1005a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(wrapper()); 1006a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block type()->SmiVerify(); 1007a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(line_ends()); 1008a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(id()); 1009a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 1010a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1011a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1012b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid JSFunctionResultCache::JSFunctionResultCacheVerify() { 1013b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch JSFunction::cast(get(kFactoryIndex))->ObjectVerify(); 1014b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1015b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int size = Smi::cast(get(kCacheSizeIndex))->value(); 1016b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(kEntriesIndex <= size); 1017b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(size <= length()); 1018b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, size % kEntrySize); 1019b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1020b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int finger = Smi::cast(get(kFingerIndex))->value(); 1021b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(kEntriesIndex <= finger); 1022b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK((finger < size) || (finger == kEntriesIndex && finger == size)); 1023b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK_EQ(0, finger % kEntrySize); 1024b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1025b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (FLAG_enable_slow_asserts) { 1026b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = kEntriesIndex; i < size; i++) { 1027b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(!get(i)->IsTheHole()); 1028b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch get(i)->ObjectVerify(); 1029b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1030b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = size; i < length(); i++) { 1031b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(get(i)->IsTheHole()); 1032b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch get(i)->ObjectVerify(); 1033b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1034b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1035b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 1036b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1037b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1038b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid NormalizedMapCache::NormalizedMapCacheVerify() { 1039b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FixedArray::cast(this)->FixedArrayVerify(); 1040b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (FLAG_enable_slow_asserts) { 1041b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = 0; i < length(); i++) { 1042b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* e = FixedArray::get(i); 1043b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (e->IsMap()) { 1044b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Map::cast(e)->DictionaryMapVerify(); 1045b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else { 1046b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CHECK(e->IsUndefined()); 1047b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1048b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1049b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 1050b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 1051b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1052b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1053a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid DebugInfo::DebugInfoVerify() { 1054a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsDebugInfo()); 1055a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(shared()); 1056a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(original_code()); 1057a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(code()); 1058a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(break_points()); 1059a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 1060a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1061a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1062a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid BreakPointInfo::BreakPointInfoVerify() { 1063a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsBreakPointInfo()); 1064a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block code_position()->SmiVerify(); 1065a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block source_position()->SmiVerify(); 1066a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block statement_position()->SmiVerify(); 1067a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(break_point_objects()); 1068a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 1069b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif // VERIFY_HEAP 1070a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1071b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifdef DEBUG 1072a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1073a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::IncrementSpillStatistics(SpillInformation* info) { 1074a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_objects_++; 1075a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Named properties 1076a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (HasFastProperties()) { 1077a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_objects_with_fast_properties_++; 1078a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_used_fields_ += map()->NextFreePropertyIndex(); 1079a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_unused_fields_ += map()->unused_property_fields(); 1080a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 1081b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NameDictionary* dict = property_dictionary(); 1082a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_used_properties_ += dict->NumberOfElements(); 1083a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_unused_properties_ += 1084a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block dict->Capacity() - dict->NumberOfElements(); 1085a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1086a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Indexed properties 1087a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (GetElementsKind()) { 1088b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case FAST_HOLEY_SMI_ELEMENTS: 1089b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case FAST_SMI_ELEMENTS: 1090b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case FAST_HOLEY_DOUBLE_ELEMENTS: 1091b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case FAST_DOUBLE_ELEMENTS: 1092b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case FAST_HOLEY_ELEMENTS: 1093a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case FAST_ELEMENTS: { 1094a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_objects_with_fast_elements_++; 1095a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block int holes = 0; 1096a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray* e = FixedArray::cast(elements()); 1097a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block int len = e->length(); 1098b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Heap* heap = GetHeap(); 1099a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = 0; i < len; i++) { 110044f0eee88ff00398ff7f715fab053374d808c90dSteve Block if (e->get(i) == heap->the_hole_value()) holes++; 1101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1102a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_used_elements_ += len - holes; 1103a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_unused_elements_ += holes; 1104a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1105a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 1108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case EXTERNAL_##TYPE##_ELEMENTS: \ 1109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case TYPE##_ELEMENTS: 1110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch TYPED_ARRAYS(TYPED_ARRAY_CASE) 1112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#undef TYPED_ARRAY_CASE 1113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch { info->number_of_objects_with_fast_elements_++; 1114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FixedArrayBase* e = FixedArrayBase::cast(elements()); 1115a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_used_elements_ += e->length(); 1116a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1117a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1118a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case DICTIONARY_ELEMENTS: { 1119c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdoch SeededNumberDictionary* dict = element_dictionary(); 1120a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_used_elements_ += dict->NumberOfElements(); 1121a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_unused_elements_ += 1122a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block dict->Capacity() - dict->NumberOfElements(); 1123a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1124a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1125b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case SLOPPY_ARGUMENTS_ELEMENTS: 1126a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1127a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1128a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 1129a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1130a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1131a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::SpillInformation::Clear() { 1132a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_ = 0; 1133a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_properties_ = 0; 1134a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_elements_ = 0; 1135a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_fields_ = 0; 1136a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_unused_fields_ = 0; 1137a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_properties_ = 0; 1138a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_unused_properties_ = 0; 1139a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_elements_ = 0; 1140a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_unused_elements_ = 0; 1141a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_elements_ = 0; 1142a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_unused_elements_ = 0; 1143a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 1144a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1146a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::SpillInformation::Print() { 1147a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF("\n JSObject Spill Statistics (#%d):\n", number_of_objects_); 1148a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1149a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - fast properties (#%d): %d (used) %d (unused)\n", 1150a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_properties_, 1151a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_fields_, number_of_fast_unused_fields_); 1152a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1153a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - slow properties (#%d): %d (used) %d (unused)\n", 1154a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_ - number_of_objects_with_fast_properties_, 1155a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_properties_, number_of_slow_unused_properties_); 1156a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1157a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - fast elements (#%d): %d (used) %d (unused)\n", 1158a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_elements_, 1159a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_elements_, number_of_fast_unused_elements_); 1160a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1161a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - slow elements (#%d): %d (used) %d (unused)\n", 1162a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_ - number_of_objects_with_fast_elements_, 1163a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_elements_, number_of_slow_unused_elements_); 1164a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1165a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF("\n"); 1166a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 1167a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1168a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochbool DescriptorArray::IsSortedNoDuplicates(int valid_entries) { 1170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (valid_entries == -1) valid_entries = number_of_descriptors(); 1171b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Name* current_key = NULL; 1172a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block uint32_t current = 0; 1173a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = 0; i < number_of_descriptors(); i++) { 1174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Name* key = GetSortedKey(i); 1175a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (key == current_key) { 1176958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Print(); 1177a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return false; 1178a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1179a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block current_key = key; 1180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch uint32_t hash = GetSortedKey(i)->Hash(); 1181a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (hash < current) { 1182958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Print(); 1183a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return false; 1184a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1185a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block current = hash; 1186a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 1187a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return true; 1188a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 1189a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1190a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1191958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernierbool LayoutDescriptor::IsConsistentWithMap(Map* map) { 1192958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (FLAG_unbox_double_fields) { 1193958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier DescriptorArray* descriptors = map->instance_descriptors(); 1194958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier int nof_descriptors = map->NumberOfOwnDescriptors(); 1195958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier for (int i = 0; i < nof_descriptors; i++) { 1196958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier PropertyDetails details = descriptors->GetDetails(i); 1197958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (details.type() != FIELD) continue; 1198958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier FieldIndex field_index = FieldIndex::ForDescriptor(map, i); 1199958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier bool tagged_expected = 1200958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier !field_index.is_inobject() || !details.representation().IsDouble(); 1201958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier for (int bit = 0; bit < details.field_width_in_words(); bit++) { 1202958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier bool tagged_actual = IsTagged(details.field_index() + bit); 1203958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier DCHECK_EQ(tagged_expected, tagged_actual); 1204958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (tagged_actual != tagged_expected) return false; 1205958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 1206958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 1207958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 1208958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier return true; 1209958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 1210958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 1211958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 1212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochbool TransitionArray::IsSortedNoDuplicates(int valid_entries) { 1213b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK(valid_entries == -1); 1214958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Name* prev_key = NULL; 1215958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier PropertyKind prev_kind = DATA; 1216958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier PropertyAttributes prev_attributes = NONE; 1217958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier uint32_t prev_hash = 0; 1218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = 0; i < number_of_transitions(); i++) { 1219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Name* key = GetSortedKey(i); 1220958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier uint32_t hash = key->Hash(); 1221958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier PropertyKind kind = DATA; 1222958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier PropertyAttributes attributes = NONE; 1223958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (!IsSpecialTransition(key)) { 1224958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Map* target = GetTarget(i); 1225958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier PropertyDetails details = GetTargetDetails(key, target); 1226958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier kind = details.kind(); 1227958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier attributes = details.attributes(); 1228958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } else { 1229958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // Duplicate entries are not allowed for non-property transitions. 1230958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CHECK_NE(prev_key, key); 12316ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 1232958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 1233958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier int cmp = CompareKeys(prev_key, prev_hash, prev_kind, prev_attributes, key, 1234958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier hash, kind, attributes); 1235958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (cmp >= 0) { 1236958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Print(); 1237b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return false; 12386ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 1239958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier prev_key = key; 1240958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier prev_hash = hash; 1241958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier prev_attributes = attributes; 1242958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier prev_kind = kind; 12436ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 1244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return true; 12456ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 12466ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 12476ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 1248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochstatic bool CheckOneBackPointer(Map* current_map, Object* target) { 1249b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return !target->IsMap() || Map::cast(target)->GetBackPointer() == current_map; 1250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 1251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1252b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1253b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochbool TransitionArray::IsConsistentWithBackPointers(Map* current_map) { 1254b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = 0; i < number_of_transitions(); ++i) { 1255b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (!CheckOneBackPointer(current_map, GetTarget(i))) return false; 125680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 1257b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return true; 125880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 125980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 126080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 1261958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Berniervoid Code::VerifyEmbeddedObjectsInFullCode() { 1262958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier // Check that no context-specific object has been embedded. 1263958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Heap* heap = GetIsolate()->heap(); 1264958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier int mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT); 1265958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier for (RelocIterator it(this, mask); !it.done(); it.next()) { 1266958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Object* obj = it.rinfo()->target_object(); 1267958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (obj->IsCell()) obj = Cell::cast(obj)->value(); 1268958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (obj->IsPropertyCell()) obj = PropertyCell::cast(obj)->value(); 1269958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier if (!obj->IsHeapObject()) continue; 1270958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Map* map = obj->IsMap() ? Map::cast(obj) : HeapObject::cast(obj)->map(); 1271958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier int i = 0; 1272958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier while (map != heap->roots_array_start()[i++]) { 1273958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier CHECK_LT(i, Heap::kStrongRootListLength); 1274958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 1275958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier } 1276958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier} 1277958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 1278958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 1279a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif // DEBUG 1280a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1281a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} } // namespace v8::internal 1282