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