13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without 3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met: 5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions of source code must retain the above copyright 7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// notice, this list of conditions and the following disclaimer. 8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions in binary form must reproduce the above 9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// copyright notice, this list of conditions and the following 10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// disclaimer in the documentation and/or other materials provided 11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// with the distribution. 12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Neither the name of Google Inc. nor the names of its 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// contributors may be used to endorse or promote products derived 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// from this software without specific prior written permission. 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#include "v8.h" 29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#include "disassembler.h" 31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#include "disasm.h" 32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#include "jsregexp.h" 3380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen#include "objects-visiting.h" 34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 { 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal { 37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 38b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifdef DEBUG 399fac840a46e8b7e26894f4792ba26dde14c56b04Steve Block 405913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reckvoid MaybeObject::Verify() { 415913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck Object* this_as_object; 425913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck if (ToObject(&this_as_object)) { 435913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck if (this_as_object->IsSmi()) { 445913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck Smi::cast(this_as_object)->SmiVerify(); 455913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck } else { 465913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck HeapObject::cast(this_as_object)->HeapObjectVerify(); 475913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck } 48a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 495913587db4c6bab03d97bfe44b06289fd6d7270dJohn Reck Failure::cast(this)->FailureVerify(); 50a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 51a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 52a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 54a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Object::VerifyPointer(Object* p) { 55a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (p->IsHeapObject()) { 56a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block HeapObject::VerifyHeapPointer(p); 57a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(p->IsSmi()); 59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 60a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 62a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Smi::SmiVerify() { 64a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(IsSmi()); 65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 66a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Failure::FailureVerify() { 69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(IsFailure()); 70a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 71a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 72a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 73a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid HeapObject::HeapObjectVerify() { 74a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block InstanceType instance_type = map()->instance_type(); 75a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 76a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (instance_type < FIRST_NONSTRING_TYPE) { 77a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block String::cast(this)->StringVerify(); 78a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return; 79a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 80a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 81a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (instance_type) { 82a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case MAP_TYPE: 83a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Map::cast(this)->MapVerify(); 84a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 85a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case HEAP_NUMBER_TYPE: 86a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block HeapNumber::cast(this)->HeapNumberVerify(); 87a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 88a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case FIXED_ARRAY_TYPE: 89a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray::cast(this)->FixedArrayVerify(); 90a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 913fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch case FIXED_DOUBLE_ARRAY_TYPE: 923fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch FixedDoubleArray::cast(this)->FixedDoubleArrayVerify(); 933fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch break; 94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case BYTE_ARRAY_TYPE: 95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ByteArray::cast(this)->ByteArrayVerify(); 96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case FREE_SPACE_TYPE: 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch FreeSpace::cast(this)->FreeSpaceVerify(); 993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 10044f0eee88ff00398ff7f715fab053374d808c90dSteve Block case EXTERNAL_PIXEL_ARRAY_TYPE: 10144f0eee88ff00398ff7f715fab053374d808c90dSteve Block ExternalPixelArray::cast(this)->ExternalPixelArrayVerify(); 102a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1033ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block case EXTERNAL_BYTE_ARRAY_TYPE: 1043ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalByteArray::cast(this)->ExternalByteArrayVerify(); 1053ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block break; 1063ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE: 1073ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalUnsignedByteArray::cast(this)->ExternalUnsignedByteArrayVerify(); 1083ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block break; 1093ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block case EXTERNAL_SHORT_ARRAY_TYPE: 1103ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalShortArray::cast(this)->ExternalShortArrayVerify(); 1113ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block break; 1123ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE: 1133ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalUnsignedShortArray::cast(this)-> 1143ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalUnsignedShortArrayVerify(); 1153ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block break; 1163ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block case EXTERNAL_INT_ARRAY_TYPE: 1173ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalIntArray::cast(this)->ExternalIntArrayVerify(); 1183ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block break; 1193ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: 1203ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalUnsignedIntArray::cast(this)->ExternalUnsignedIntArrayVerify(); 1213ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block break; 1223ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block case EXTERNAL_FLOAT_ARRAY_TYPE: 1233ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ExternalFloatArray::cast(this)->ExternalFloatArrayVerify(); 1243ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block break; 125257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch case EXTERNAL_DOUBLE_ARRAY_TYPE: 126257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ExternalDoubleArray::cast(this)->ExternalDoubleArrayVerify(); 127257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch break; 128a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case CODE_TYPE: 129a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Code::cast(this)->CodeVerify(); 130a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 131a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case ODDBALL_TYPE: 132a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Oddball::cast(this)->OddballVerify(); 133a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 134a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_OBJECT_TYPE: 135a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_CONTEXT_EXTENSION_OBJECT_TYPE: 136a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObject::cast(this)->JSObjectVerify(); 137a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 138a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_VALUE_TYPE: 139a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSValue::cast(this)->JSValueVerify(); 140a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case JS_DATE_TYPE: 1423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSDate::cast(this)->JSDateVerify(); 1433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 144a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_FUNCTION_TYPE: 145a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSFunction::cast(this)->JSFunctionVerify(); 146a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 147a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_GLOBAL_PROXY_TYPE: 148a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSGlobalProxy::cast(this)->JSGlobalProxyVerify(); 149a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 150a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_GLOBAL_OBJECT_TYPE: 151a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSGlobalObject::cast(this)->JSGlobalObjectVerify(); 152a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 153a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_BUILTINS_OBJECT_TYPE: 154a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSBuiltinsObject::cast(this)->JSBuiltinsObjectVerify(); 155a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 156a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_GLOBAL_PROPERTY_CELL_TYPE: 157a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSGlobalPropertyCell::cast(this)->JSGlobalPropertyCellVerify(); 158a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 159a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_ARRAY_TYPE: 160a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSArray::cast(this)->JSArrayVerify(); 161a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case JS_SET_TYPE: 1633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSSet::cast(this)->JSSetVerify(); 1643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 1653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case JS_MAP_TYPE: 1663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSMap::cast(this)->JSMapVerify(); 1673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 16869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch case JS_WEAK_MAP_TYPE: 16969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch JSWeakMap::cast(this)->JSWeakMapVerify(); 17069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch break; 171a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JS_REGEXP_TYPE: 172a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSRegExp::cast(this)->JSRegExpVerify(); 173a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 174a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case FILLER_TYPE: 175a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 176257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch case JS_PROXY_TYPE: 177257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch JSProxy::cast(this)->JSProxyVerify(); 178257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch break; 179589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch case JS_FUNCTION_PROXY_TYPE: 180589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch JSFunctionProxy::cast(this)->JSFunctionProxyVerify(); 181589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch break; 182257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch case FOREIGN_TYPE: 183257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch Foreign::cast(this)->ForeignVerify(); 184a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 185a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case SHARED_FUNCTION_INFO_TYPE: 186a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block SharedFunctionInfo::cast(this)->SharedFunctionInfoVerify(); 187a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 1881e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block case JS_MESSAGE_OBJECT_TYPE: 1891e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block JSMessageObject::cast(this)->JSMessageObjectVerify(); 1901e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block break; 191a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 192a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define MAKE_STRUCT_CASE(NAME, Name, name) \ 193a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case NAME##_TYPE: \ 194a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Name::cast(this)->Name##Verify(); \ 195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 196a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block STRUCT_LIST(MAKE_STRUCT_CASE) 197a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#undef MAKE_STRUCT_CASE 198a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 199a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 200a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block UNREACHABLE(); 201a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 202a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 203a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 204a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 205a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 206a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid HeapObject::VerifyHeapPointer(Object* p) { 207a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(p->IsHeapObject()); 20844f0eee88ff00398ff7f715fab053374d808c90dSteve Block ASSERT(HEAP->Contains(HeapObject::cast(p))); 209a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 210a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 211a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 212a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid HeapNumber::HeapNumberVerify() { 213a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(IsHeapNumber()); 214a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 2153ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2163ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 217a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid ByteArray::ByteArrayVerify() { 218a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(IsByteArray()); 219a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 220a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 221a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 2223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid FreeSpace::FreeSpaceVerify() { 2233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT(IsFreeSpace()); 2243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 2253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 22744f0eee88ff00398ff7f715fab053374d808c90dSteve Blockvoid ExternalPixelArray::ExternalPixelArrayVerify() { 22844f0eee88ff00398ff7f715fab053374d808c90dSteve Block ASSERT(IsExternalPixelArray()); 229a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 230a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 231a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 2323ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvoid ExternalByteArray::ExternalByteArrayVerify() { 2333ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ASSERT(IsExternalByteArray()); 2343ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2353ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2363ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2373ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvoid ExternalUnsignedByteArray::ExternalUnsignedByteArrayVerify() { 2383ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ASSERT(IsExternalUnsignedByteArray()); 2393ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2403ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2413ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2423ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvoid ExternalShortArray::ExternalShortArrayVerify() { 2433ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ASSERT(IsExternalShortArray()); 2443ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2453ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2463ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2473ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvoid ExternalUnsignedShortArray::ExternalUnsignedShortArrayVerify() { 2483ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ASSERT(IsExternalUnsignedShortArray()); 2493ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2503ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2513ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2523ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvoid ExternalIntArray::ExternalIntArrayVerify() { 2533ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ASSERT(IsExternalIntArray()); 2543ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2553ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2563ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2573ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvoid ExternalUnsignedIntArray::ExternalUnsignedIntArrayVerify() { 2583ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ASSERT(IsExternalUnsignedIntArray()); 2593ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2603ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2613ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2623ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Blockvoid ExternalFloatArray::ExternalFloatArrayVerify() { 2633ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block ASSERT(IsExternalFloatArray()); 2643ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block} 2653ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 2663ce2e2076e8e3e60cf1810eec160ea2d8557e9e7Steve Block 267257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid ExternalDoubleArray::ExternalDoubleArrayVerify() { 268257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(IsExternalDoubleArray()); 269257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 270257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 271257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 272a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::JSObjectVerify() { 273a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(properties()); 274a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(elements()); 2753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 2763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (GetElementsKind() == NON_STRICT_ARGUMENTS_ELEMENTS) { 2773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT(this->elements()->IsFixedArray()); 2783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT(this->elements()->length() >= 2); 2793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 2803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 281a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (HasFastProperties()) { 282a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK_EQ(map()->unused_property_fields(), 283a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block (map()->inobject_properties() + properties()->length() - 284a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block map()->NextFreePropertyIndex())); 285a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 2863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT_EQ((map()->has_fast_elements() || 2873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch map()->has_fast_smi_only_elements() || 2883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch (elements() == GetHeap()->empty_fixed_array())), 289589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch (elements()->map() == GetHeap()->fixed_array_map() || 290589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch elements()->map() == GetHeap()->fixed_cow_array_map())); 2918defd9ff6930b4e24729971a61cf7469daf119beSteve Block ASSERT(map()->has_fast_elements() == HasFastElements()); 292a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 293a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 294a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 295a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Map::MapVerify() { 29644f0eee88ff00398ff7f715fab053374d808c90dSteve Block ASSERT(!HEAP->InNewSpace(this)); 297a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE); 298791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block ASSERT(instance_size() == kVariableSizeSentinel || 299791712a13f1814dd3ab5d1a5ab8ff5dbc476f6d6Steve Block (kPointerSize <= instance_size() && 30044f0eee88ff00398ff7f715fab053374d808c90dSteve Block instance_size() < HEAP->Capacity())); 301a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(prototype()); 302a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(instance_descriptors()); 303a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 304a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 305a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 3060d5e116f6aee03185f237311a943491bb079a768Kristian Monsenvoid Map::SharedMapVerify() { 30780d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen MapVerify(); 3080d5e116f6aee03185f237311a943491bb079a768Kristian Monsen ASSERT(is_shared()); 309257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(instance_descriptors()->IsEmpty()); 31080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_EQ(0, pre_allocated_property_fields()); 31180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_EQ(0, unused_property_fields()); 31280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT_EQ(StaticVisitorBase::GetVisitorId(instance_type(), instance_size()), 31380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen visitor_id()); 31480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 31580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 31680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 3176ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockvoid CodeCache::CodeCacheVerify() { 3186ded16be15dd865a9b21ea304d5273c8be299c87Steve Block VerifyHeapPointer(default_cache()); 3196ded16be15dd865a9b21ea304d5273c8be299c87Steve Block VerifyHeapPointer(normal_type_cache()); 3206ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT(default_cache()->IsFixedArray()); 3216ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT(normal_type_cache()->IsUndefined() 3226ded16be15dd865a9b21ea304d5273c8be299c87Steve Block || normal_type_cache()->IsCodeCacheHashTable()); 3236ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 324a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 325a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 3263fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvoid PolymorphicCodeCache::PolymorphicCodeCacheVerify() { 3273fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch VerifyHeapPointer(cache()); 3283fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch ASSERT(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable()); 3293fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch} 3303fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 3313fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 3323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid TypeFeedbackInfo::TypeFeedbackInfoVerify() { 3333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyObjectField(kIcTotalCountOffset); 3343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyObjectField(kIcWithTypeinfoCountOffset); 3353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyHeapPointer(type_feedback_cells()); 3363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 3373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid AliasedArgumentsEntry::AliasedArgumentsEntryVerify() { 3403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifySmiField(kAliasedContextSlot); 3413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 3423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 344a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid FixedArray::FixedArrayVerify() { 345a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = 0; i < length(); i++) { 346a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* e = get(i); 347a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (e->IsHeapObject()) { 348a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(e); 349a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 350a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block e->Verify(); 351a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 352a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 353a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 354a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 355a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 3563fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvoid FixedDoubleArray::FixedDoubleArrayVerify() { 3573fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch for (int i = 0; i < length(); i++) { 3583fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch if (!is_the_hole(i)) { 35969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch double value = get_scalar(i); 3603fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch ASSERT(!isnan(value) || 3613fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch (BitCast<uint64_t>(value) == 3623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitCast<uint64_t>(canonical_not_the_hole_nan_as_double())) || 3633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ((BitCast<uint64_t>(value) & Double::kSignMask) != 0)); 3643fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 3653fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch } 3663fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch} 3673fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 3683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch 369a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSValue::JSValueVerify() { 370a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* v = value(); 371a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (v->IsHeapObject()) { 372a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(v); 373a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 374a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 375a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 376a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 3773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid JSDate::JSDateVerify() { 3783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (value()->IsHeapObject()) { 3793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyHeapPointer(value()); 3803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 3813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(value()->IsUndefined() || value()->IsSmi() || value()->IsHeapNumber()); 3823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(year()->IsUndefined() || year()->IsSmi() || year()->IsNaN()); 3833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(month()->IsUndefined() || month()->IsSmi() || month()->IsNaN()); 3843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(day()->IsUndefined() || day()->IsSmi() || day()->IsNaN()); 3853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(weekday()->IsUndefined() || weekday()->IsSmi() || weekday()->IsNaN()); 3863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(hour()->IsUndefined() || hour()->IsSmi() || hour()->IsNaN()); 3873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(min()->IsUndefined() || min()->IsSmi() || min()->IsNaN()); 3883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(sec()->IsUndefined() || sec()->IsSmi() || sec()->IsNaN()); 3893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(cache_stamp()->IsUndefined() || 3903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch cache_stamp()->IsSmi() || 3913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch cache_stamp()->IsNaN()); 3923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 3933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (month()->IsSmi()) { 3943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int month = Smi::cast(this->month())->value(); 3953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= month && month <= 11); 3963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 3973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (day()->IsSmi()) { 3983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int day = Smi::cast(this->day())->value(); 3993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(1 <= day && day <= 31); 4003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (hour()->IsSmi()) { 4023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int hour = Smi::cast(this->hour())->value(); 4033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= hour && hour <= 23); 4043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (min()->IsSmi()) { 4063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int min = Smi::cast(this->min())->value(); 4073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= min && min <= 59); 4083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (sec()->IsSmi()) { 4103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int sec = Smi::cast(this->sec())->value(); 4113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= sec && sec <= 59); 4123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (weekday()->IsSmi()) { 4143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch int weekday = Smi::cast(this->weekday())->value(); 4153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(0 <= weekday && weekday <= 6); 4163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (cache_stamp()->IsSmi()) { 4183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(Smi::cast(cache_stamp())->value() <= 4193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Smi::cast(Isolate::Current()->date_cache()->stamp())->value()); 4203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 4213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 4223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 4241e0659c275bb392c045087af4f6b0d7565cb3d77Steve Blockvoid JSMessageObject::JSMessageObjectVerify() { 4251e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block CHECK(IsJSMessageObject()); 4261e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block CHECK(type()->IsString()); 4271e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block CHECK(arguments()->IsJSArray()); 4281e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kStartPositionOffset); 4291e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kEndPositionOffset); 4301e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kArgumentsOffset); 4311e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kScriptOffset); 4321e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kStackTraceOffset); 4331e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block VerifyObjectField(kStackFramesOffset); 4341e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block} 4351e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 4361e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 437a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid String::StringVerify() { 438a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsString()); 439a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(length() >= 0 && length() <= Smi::kMaxValue); 440a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (IsSymbol()) { 44144f0eee88ff00398ff7f715fab053374d808c90dSteve Block CHECK(!HEAP->InNewSpace(this)); 442a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 44369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch if (IsConsString()) { 44469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch ConsString::cast(this)->ConsStringVerify(); 44569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } else if (IsSlicedString()) { 44669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch SlicedString::cast(this)->SlicedStringVerify(); 44769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 44869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 44969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 45069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 45169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid ConsString::ConsStringVerify() { 45269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->first()->IsString()); 45369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->second() == GetHeap()->empty_string() || 45469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch this->second()->IsString()); 4553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(this->length() >= ConsString::kMinLength); 45669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch if (this->IsFlat()) { 45769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // A flat cons can only be created by String::SlowTryFlatten. 45869a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch // Afterwards, the first part may be externalized. 45969a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->first()->IsSeqString() || this->first()->IsExternalString()); 46069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch } 46169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 46269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 46369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 46469a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid SlicedString::SlicedStringVerify() { 46569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(!this->parent()->IsConsString()); 46669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(!this->parent()->IsSlicedString()); 46769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(this->length() >= SlicedString::kMinLength); 468a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 469a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 470a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 471a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSFunction::JSFunctionVerify() { 472a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSFunction()); 473a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kPrototypeOrInitialMapOffset); 474b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch VerifyObjectField(kNextFunctionLinkOffset); 4753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(code()->IsCode()); 476b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CHECK(next_function_link()->IsUndefined() || 477b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch next_function_link()->IsJSFunction()); 478b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch} 479b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 480a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 481a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid SharedFunctionInfo::SharedFunctionInfoVerify() { 482a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsSharedFunctionInfo()); 483a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kNameOffset); 484a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kCodeOffset); 4853bec4d28b1f388dbc06a9c4276e1a03e86c52b04Ben Murdoch VerifyObjectField(kScopeInfoOffset); 486a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kInstanceClassNameOffset); 4876ded16be15dd865a9b21ea304d5273c8be299c87Steve Block VerifyObjectField(kFunctionDataOffset); 488a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kScriptOffset); 489a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kDebugInfoOffset); 490a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 491a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 492a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 493a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSGlobalProxy::JSGlobalProxyVerify() { 494a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSGlobalProxy()); 495a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 496a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(JSGlobalProxy::kContextOffset); 497a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Make sure that this object has no properties, elements. 498a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK_EQ(0, properties()->length()); 4997f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch CHECK(HasFastElements()); 5007f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch CHECK_EQ(0, FixedArray::cast(elements())->length()); 501a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 502a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 503a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 504a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSGlobalObject::JSGlobalObjectVerify() { 505a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSGlobalObject()); 506a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 507a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = GlobalObject::kBuiltinsOffset; 508a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i < JSGlobalObject::kSize; 509a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i += kPointerSize) { 510a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(i); 511a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 512a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 513a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 514a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 515a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSBuiltinsObject::JSBuiltinsObjectVerify() { 516a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSBuiltinsObject()); 517a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 518a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = GlobalObject::kBuiltinsOffset; 519a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i < JSBuiltinsObject::kSize; 520a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block i += kPointerSize) { 521a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(i); 522a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 523a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 524a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 525a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 526a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Oddball::OddballVerify() { 527a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsOddball()); 528a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyHeapPointer(to_string()); 529a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* number = to_number(); 530a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (number->IsHeapObject()) { 53144f0eee88ff00398ff7f715fab053374d808c90dSteve Block ASSERT(number == HEAP->nan_value()); 532a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 533a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(number->IsSmi()); 534a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block int value = Smi::cast(number)->value(); 535592a9fc1d8ea420377a2e7efd0600e20b058be2bBen Murdoch // Hidden oddballs have negative smis. 5365d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch const int kLeastHiddenOddballNumber = -4; 5375d4cdbf7a67d3662fa0bee4efdb7edd8daec9b0bBen Murdoch ASSERT(value <= 1); 538086aeeaae12517475c22695a200be45495516549Ben Murdoch ASSERT(value >= kLeastHiddenOddballNumber); 539a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 540a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 541a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 542a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 543a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSGlobalPropertyCell::JSGlobalPropertyCellVerify() { 544a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsJSGlobalPropertyCell()); 545a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyObjectField(kValueOffset); 546a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 547a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 548a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 549a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Code::CodeVerify() { 550a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsAligned(reinterpret_cast<intptr_t>(instruction_start()), 5510d5e116f6aee03185f237311a943491bb079a768Kristian Monsen kCodeAlignment)); 5523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch relocation_info()->Verify(); 553a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Address last_gc_pc = NULL; 554a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (RelocIterator it(this); !it.done(); it.next()) { 555a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block it.rinfo()->Verify(); 556a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Ensure that GC will not iterate twice over the same pointer. 557a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (RelocInfo::IsGCRelocMode(it.rinfo()->rmode())) { 558a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(it.rinfo()->pc() != last_gc_pc); 559a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block last_gc_pc = it.rinfo()->pc(); 560a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 561a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 562a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 563a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 564a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 565a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSArray::JSArrayVerify() { 566a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 567a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(length()->IsNumber() || length()->IsUndefined()); 5683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch ASSERT(elements()->IsUndefined() || 5693fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch elements()->IsFixedArray() || 5703fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch elements()->IsFixedDoubleArray()); 571a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 572a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 573a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 5743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid JSSet::JSSetVerify() { 5753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSSet()); 5763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSObjectVerify(); 5773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyHeapPointer(table()); 5783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT(table()->IsHashTable() || table()->IsUndefined()); 5793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 5803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid JSMap::JSMapVerify() { 5833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSMap()); 5843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch JSObjectVerify(); 5853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyHeapPointer(table()); 5863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT(table()->IsHashTable() || table()->IsUndefined()); 5873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 5883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 5893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 59069a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdochvoid JSWeakMap::JSWeakMapVerify() { 59169a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch CHECK(IsJSWeakMap()); 59269a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch JSObjectVerify(); 59369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch VerifyHeapPointer(table()); 5943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT(table()->IsHashTable() || table()->IsUndefined()); 59569a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch} 59669a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 59769a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch 598a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSRegExp::JSRegExpVerify() { 599a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block JSObjectVerify(); 600a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(data()->IsUndefined() || data()->IsFixedArray()); 601a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (TypeTag()) { 602a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JSRegExp::ATOM: { 603a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray* arr = FixedArray::cast(data()); 604a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(arr->get(JSRegExp::kAtomPatternIndex)->IsString()); 605a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 606a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 607a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case JSRegExp::IRREGEXP: { 608a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block bool is_native = RegExpImpl::UsesNativeRegExp(); 609a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 610a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray* arr = FixedArray::cast(data()); 611a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* ascii_data = arr->get(JSRegExp::kIrregexpASCIICodeIndex); 612257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch // Smi : Not compiled yet (-1) or code prepared for flushing. 613a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // JSObject: Compilation error. 614a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Code/ByteArray: Compiled code. 615257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(ascii_data->IsSmi() || 616257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch (is_native ? ascii_data->IsCode() : ascii_data->IsByteArray())); 617a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block Object* uc16_data = arr->get(JSRegExp::kIrregexpUC16CodeIndex); 618257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(uc16_data->IsSmi() || 619257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch (is_native ? uc16_data->IsCode() : uc16_data->IsByteArray())); 620257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 621257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch Object* ascii_saved = arr->get(JSRegExp::kIrregexpASCIICodeSavedIndex); 622257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(ascii_saved->IsSmi() || ascii_saved->IsString() || 623257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ascii_saved->IsCode()); 624257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch Object* uc16_saved = arr->get(JSRegExp::kIrregexpUC16CodeSavedIndex); 625257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(uc16_saved->IsSmi() || uc16_saved->IsString() || 626257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch uc16_saved->IsCode()); 627257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 628a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(arr->get(JSRegExp::kIrregexpCaptureCountIndex)->IsSmi()); 629a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(arr->get(JSRegExp::kIrregexpMaxRegisterCountIndex)->IsSmi()); 630a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 631a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 632a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 633a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT_EQ(JSRegExp::NOT_COMPILED, TypeTag()); 634a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block ASSERT(data()->IsUndefined()); 635a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 636a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 637a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 638a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 639a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 640257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid JSProxy::JSProxyVerify() { 6413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSProxy()); 642257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch VerifyPointer(handler()); 6433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ASSERT(hash()->IsSmi() || hash()->IsUndefined()); 644257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch} 645257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch 646589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 647589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdochvoid JSFunctionProxy::JSFunctionProxyVerify() { 6483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsJSFunctionProxy()); 649589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch JSProxyVerify(); 650589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch VerifyPointer(call_trap()); 651589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch VerifyPointer(construct_trap()); 652589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch} 653589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 654589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch 655257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdochvoid Foreign::ForeignVerify() { 656257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch ASSERT(IsForeign()); 657a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 658a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 659a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 660a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid AccessorInfo::AccessorInfoVerify() { 661a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsAccessorInfo()); 662a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(getter()); 663a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(setter()); 664a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(name()); 665a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 666a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(flag()); 667a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 668b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 669a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 6703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvoid AccessorPair::AccessorPairVerify() { 6713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch CHECK(IsAccessorPair()); 6723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyPointer(getter()); 6733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch VerifyPointer(setter()); 6743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 6753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 6763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 677a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid AccessCheckInfo::AccessCheckInfoVerify() { 678a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsAccessCheckInfo()); 679a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(named_callback()); 680a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(indexed_callback()); 681a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 682a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 683a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 684b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 685a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid InterceptorInfo::InterceptorInfoVerify() { 686a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsInterceptorInfo()); 687a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(getter()); 688a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(setter()); 689a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(query()); 690a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(deleter()); 691a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(enumerator()); 692a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 693a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 694b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 695a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 696a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid CallHandlerInfo::CallHandlerInfoVerify() { 697a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsCallHandlerInfo()); 698a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(callback()); 699a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 700a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 701a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 702b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 703a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid TemplateInfo::TemplateInfoVerify() { 704a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(tag()); 705a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(property_list()); 706a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 707a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 708a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid FunctionTemplateInfo::FunctionTemplateInfoVerify() { 709a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsFunctionTemplateInfo()); 710a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block TemplateInfoVerify(); 711a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(serial_number()); 712a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(call_code()); 713a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(property_accessors()); 714a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(prototype_template()); 715a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(parent_template()); 716a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(named_property_handler()); 717a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(indexed_property_handler()); 718a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(instance_template()); 719a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(signature()); 720a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(access_check_info()); 721a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 722a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 723a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 724a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid ObjectTemplateInfo::ObjectTemplateInfoVerify() { 725a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsObjectTemplateInfo()); 726a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block TemplateInfoVerify(); 727a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(constructor()); 728a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(internal_field_count()); 729a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 730a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 731b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 732a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid SignatureInfo::SignatureInfoVerify() { 733a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsSignatureInfo()); 734a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(receiver()); 735a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(args()); 736a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 737a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 738b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 739a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid TypeSwitchInfo::TypeSwitchInfoVerify() { 740a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsTypeSwitchInfo()); 741a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(types()); 742a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 743a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 744a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 745a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Script::ScriptVerify() { 746a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsScript()); 747a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(source()); 748a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(name()); 749a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block line_offset()->SmiVerify(); 750a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block column_offset()->SmiVerify(); 751a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(data()); 752a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(wrapper()); 753a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block type()->SmiVerify(); 754a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(line_ends()); 755a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(id()); 756a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 757a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 758a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 759a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifdef ENABLE_DEBUGGER_SUPPORT 760a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid DebugInfo::DebugInfoVerify() { 761a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsDebugInfo()); 762a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(shared()); 763a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(original_code()); 764a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(code()); 765a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(break_points()); 766a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 767a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 768a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 769a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid BreakPointInfo::BreakPointInfoVerify() { 770a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block CHECK(IsBreakPointInfo()); 771a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block code_position()->SmiVerify(); 772a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block source_position()->SmiVerify(); 773a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block statement_position()->SmiVerify(); 774a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block VerifyPointer(break_point_objects()); 775a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 776b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif // ENABLE_DEBUGGER_SUPPORT 777a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 778a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 779a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::IncrementSpillStatistics(SpillInformation* info) { 780a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_objects_++; 781a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Named properties 782a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (HasFastProperties()) { 783a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_objects_with_fast_properties_++; 784a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_used_fields_ += map()->NextFreePropertyIndex(); 785a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_unused_fields_ += map()->unused_property_fields(); 786a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 787a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block StringDictionary* dict = property_dictionary(); 788a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_used_properties_ += dict->NumberOfElements(); 789a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_unused_properties_ += 790a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block dict->Capacity() - dict->NumberOfElements(); 791a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 792a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Indexed properties 793a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block switch (GetElementsKind()) { 794a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case FAST_ELEMENTS: { 795a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_objects_with_fast_elements_++; 796a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block int holes = 0; 797a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block FixedArray* e = FixedArray::cast(elements()); 798a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block int len = e->length(); 79944f0eee88ff00398ff7f715fab053374d808c90dSteve Block Heap* heap = HEAP; 800a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = 0; i < len; i++) { 80144f0eee88ff00398ff7f715fab053374d808c90dSteve Block if (e->get(i) == heap->the_hole_value()) holes++; 802a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 803a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_used_elements_ += len - holes; 804a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_unused_elements_ += holes; 805a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 806a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 80744f0eee88ff00398ff7f715fab053374d808c90dSteve Block case EXTERNAL_PIXEL_ELEMENTS: { 808a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_objects_with_fast_elements_++; 80944f0eee88ff00398ff7f715fab053374d808c90dSteve Block ExternalPixelArray* e = ExternalPixelArray::cast(elements()); 810a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_fast_used_elements_ += e->length(); 811a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 812a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 813a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block case DICTIONARY_ELEMENTS: { 814c7cc028aaeedbbfa11c11d0b7b243b3d9e837ed9Ben Murdoch SeededNumberDictionary* dict = element_dictionary(); 815a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_used_elements_ += dict->NumberOfElements(); 816a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block info->number_of_slow_unused_elements_ += 817a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block dict->Capacity() - dict->NumberOfElements(); 818a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 819a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 820a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block default: 821a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block UNREACHABLE(); 822a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block break; 823a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 824a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 825a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 826a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 827a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::SpillInformation::Clear() { 828a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_ = 0; 829a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_properties_ = 0; 830a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_elements_ = 0; 831a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_fields_ = 0; 832a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_unused_fields_ = 0; 833a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_properties_ = 0; 834a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_unused_properties_ = 0; 835a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_elements_ = 0; 836a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_unused_elements_ = 0; 837a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_elements_ = 0; 838a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_unused_elements_ = 0; 839a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 840a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 841a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid JSObject::SpillInformation::Print() { 842a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF("\n JSObject Spill Statistics (#%d):\n", number_of_objects_); 843a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 844a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - fast properties (#%d): %d (used) %d (unused)\n", 845a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_properties_, 846a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_fields_, number_of_fast_unused_fields_); 847a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 848a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - slow properties (#%d): %d (used) %d (unused)\n", 849a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_ - number_of_objects_with_fast_properties_, 850a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_properties_, number_of_slow_unused_properties_); 851a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 852a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - fast elements (#%d): %d (used) %d (unused)\n", 853a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_with_fast_elements_, 854a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_fast_used_elements_, number_of_fast_unused_elements_); 855a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 856a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF(" - slow elements (#%d): %d (used) %d (unused)\n", 857a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_objects_ - number_of_objects_with_fast_elements_, 858a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block number_of_slow_used_elements_, number_of_slow_unused_elements_); 859a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 860a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintF("\n"); 861a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 862a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 863a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 864a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockbool DescriptorArray::IsSortedNoDuplicates() { 865a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block String* current_key = NULL; 866a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block uint32_t current = 0; 867a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block for (int i = 0; i < number_of_descriptors(); i++) { 868a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block String* key = GetKey(i); 869a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (key == current_key) { 870a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintDescriptors(); 871a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return false; 872a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 873a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block current_key = key; 874a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block uint32_t hash = GetKey(i)->Hash(); 875a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (hash < current) { 876a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block PrintDescriptors(); 877a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return false; 878a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 879a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block current = hash; 880a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 881a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return true; 882a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 883a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 884a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 8856ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockvoid JSFunctionResultCache::JSFunctionResultCacheVerify() { 8866ded16be15dd865a9b21ea304d5273c8be299c87Steve Block JSFunction::cast(get(kFactoryIndex))->Verify(); 8876ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 8886ded16be15dd865a9b21ea304d5273c8be299c87Steve Block int size = Smi::cast(get(kCacheSizeIndex))->value(); 8896ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT(kEntriesIndex <= size); 8906ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT(size <= length()); 8916ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT_EQ(0, size % kEntrySize); 8926ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 8936ded16be15dd865a9b21ea304d5273c8be299c87Steve Block int finger = Smi::cast(get(kFingerIndex))->value(); 8946ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT(kEntriesIndex <= finger); 895b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch ASSERT((finger < size) || (finger == kEntriesIndex && finger == size)); 8966ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT_EQ(0, finger % kEntrySize); 8976ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 8986ded16be15dd865a9b21ea304d5273c8be299c87Steve Block if (FLAG_enable_slow_asserts) { 8996ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (int i = kEntriesIndex; i < size; i++) { 9006ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT(!get(i)->IsTheHole()); 9016ded16be15dd865a9b21ea304d5273c8be299c87Steve Block get(i)->Verify(); 9026ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 9036ded16be15dd865a9b21ea304d5273c8be299c87Steve Block for (int i = size; i < length(); i++) { 9046ded16be15dd865a9b21ea304d5273c8be299c87Steve Block ASSERT(get(i)->IsTheHole()); 9056ded16be15dd865a9b21ea304d5273c8be299c87Steve Block get(i)->Verify(); 9066ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 9076ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 9086ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 9096ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 9106ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 91180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsenvoid NormalizedMapCache::NormalizedMapCacheVerify() { 91280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen FixedArray::cast(this)->Verify(); 91380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen if (FLAG_enable_slow_asserts) { 91480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen for (int i = 0; i < length(); i++) { 91580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen Object* e = get(i); 91680d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen if (e->IsMap()) { 9170d5e116f6aee03185f237311a943491bb079a768Kristian Monsen Map::cast(e)->SharedMapVerify(); 91880d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } else { 91980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen ASSERT(e->IsUndefined()); 92080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 92180d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 92280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen } 92380d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen} 92480d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 92580d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen 926a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif // DEBUG 927a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 928a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} } // namespace v8::internal 929