165a89c29ac6da09f5726f48f68eae9587b0e562aulan@chromium.org// Copyright 2012 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/disasm.h"
84b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org#include "src/disassembler.h"
98640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org#include "src/heap/objects-visiting.h"
10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/jsregexp.h"
11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/macro-assembler.h"
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/ostreams.h"
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
1571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
17c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef VERIFY_HEAP
189e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
19ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.orgvoid Object::ObjectVerify() {
20ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org  if (IsSmi()) {
21ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org    Smi::cast(this)->SmiVerify();
22ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org  } else {
23ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org    HeapObject::cast(this)->HeapObjectVerify();
24ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org  }
25ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org}
26ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org
27ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Object::VerifyPointer(Object* p) {
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (p->IsHeapObject()) {
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    HeapObject::VerifyHeapPointer(p);
3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
32c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(p->IsSmi());
3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Smi::SmiVerify() {
38c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsSmi());
3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::HeapObjectVerify() {
4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  InstanceType instance_type = map()->instance_type();
4443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (instance_type < FIRST_NONSTRING_TYPE) {
4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    String::cast(this)->StringVerify();
4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return;
4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  switch (instance_type) {
514a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org    case SYMBOL_TYPE:
524a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org      Symbol::cast(this)->SymbolVerify();
534a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org      break;
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case MAP_TYPE:
5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      Map::cast(this)->MapVerify();
5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case HEAP_NUMBER_TYPE:
5858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org    case MUTABLE_HEAP_NUMBER_TYPE:
5943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      HeapNumber::cast(this)->HeapNumberVerify();
6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case FIXED_ARRAY_TYPE:
6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      FixedArray::cast(this)->FixedArrayVerify();
6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
646d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org    case FIXED_DOUBLE_ARRAY_TYPE:
656d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org      FixedDoubleArray::cast(this)->FixedDoubleArrayVerify();
666d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org      break;
67a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org    case CONSTANT_POOL_ARRAY_TYPE:
68a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org      ConstantPoolArray::cast(this)->ConstantPoolArrayVerify();
69a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org      break;
7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case BYTE_ARRAY_TYPE:
7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      ByteArray::cast(this)->ByteArrayVerify();
7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
73c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com    case FREE_SPACE_TYPE:
74c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com      FreeSpace::cast(this)->FreeSpaceVerify();
75c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com      break;
76af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org
77af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#define VERIFY_TYPED_ARRAY(Type, type, TYPE, ctype, size)                      \
78af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    case EXTERNAL_##TYPE##_ARRAY_TYPE:                                         \
79af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org      External##Type##Array::cast(this)->External##Type##ArrayVerify();        \
80af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org      break;                                                                   \
81af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    case FIXED_##TYPE##_ARRAY_TYPE:                                            \
82af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org      Fixed##Type##Array::cast(this)->FixedTypedArrayVerify();                 \
835c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org      break;
84af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org
85af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    TYPED_ARRAYS(VERIFY_TYPED_ARRAY)
86af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#undef VERIFY_TYPED_ARRAY
87af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org
8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case CODE_TYPE:
8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      Code::cast(this)->CodeVerify();
9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case ODDBALL_TYPE:
9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      Oddball::cast(this)->OddballVerify();
9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_OBJECT_TYPE:
953291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org    case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
9643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSObject::cast(this)->JSObjectVerify();
9743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
98e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    case JS_GENERATOR_OBJECT_TYPE:
99e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      JSGeneratorObject::cast(this)->JSGeneratorObjectVerify();
100e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      break;
101ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com    case JS_MODULE_TYPE:
102ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com      JSModule::cast(this)->JSModuleVerify();
103ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com      break;
10443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_VALUE_TYPE:
10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSValue::cast(this)->JSValueVerify();
10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
1074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    case JS_DATE_TYPE:
1084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      JSDate::cast(this)->JSDateVerify();
1094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      break;
11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_FUNCTION_TYPE:
11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSFunction::cast(this)->JSFunctionVerify();
11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
1135a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org    case JS_GLOBAL_PROXY_TYPE:
1145a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org      JSGlobalProxy::cast(this)->JSGlobalProxyVerify();
1155a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org      break;
11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_GLOBAL_OBJECT_TYPE:
11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSGlobalObject::cast(this)->JSGlobalObjectVerify();
11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_BUILTINS_OBJECT_TYPE:
12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSBuiltinsObject::cast(this)->JSBuiltinsObjectVerify();
12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
12241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org    case CELL_TYPE:
12341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org      Cell::cast(this)->CellVerify();
12441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org      break;
12541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org    case PROPERTY_CELL_TYPE:
126b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org      PropertyCell::cast(this)->PropertyCellVerify();
1272abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org      break;
12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_ARRAY_TYPE:
12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSArray::cast(this)->JSArrayVerify();
13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
131394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    case JS_SET_TYPE:
132394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      JSSet::cast(this)->JSSetVerify();
133394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      break;
134394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    case JS_MAP_TYPE:
135394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      JSMap::cast(this)->JSMapVerify();
136394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      break;
1374ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org    case JS_SET_ITERATOR_TYPE:
1384ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org      JSSetIterator::cast(this)->JSSetIteratorVerify();
1394ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org      break;
1404ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org    case JS_MAP_ITERATOR_TYPE:
1414ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org      JSMapIterator::cast(this)->JSMapIteratorVerify();
1424ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org      break;
1437c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org    case JS_WEAK_MAP_TYPE:
1447c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org      JSWeakMap::cast(this)->JSWeakMapVerify();
1457c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org      break;
146ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org    case JS_WEAK_SET_TYPE:
147ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org      JSWeakSet::cast(this)->JSWeakSetVerify();
148ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org      break;
149236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org    case JS_REGEXP_TYPE:
150236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org      JSRegExp::cast(this)->JSRegExpVerify();
151236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org      break;
15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case FILLER_TYPE:
15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
1547304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org    case JS_PROXY_TYPE:
1557304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org      JSProxy::cast(this)->JSProxyVerify();
1567304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org      break;
15734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org    case JS_FUNCTION_PROXY_TYPE:
15834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org      JSFunctionProxy::cast(this)->JSFunctionProxyVerify();
15934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org      break;
160ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org    case FOREIGN_TYPE:
161ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org      Foreign::cast(this)->ForeignVerify();
16243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case SHARED_FUNCTION_INFO_TYPE:
16443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      SharedFunctionInfo::cast(this)->SharedFunctionInfoVerify();
16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
16631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org    case JS_MESSAGE_OBJECT_TYPE:
16731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org      JSMessageObject::cast(this)->JSMessageObjectVerify();
16831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org      break;
169f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org    case JS_ARRAY_BUFFER_TYPE:
170f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org      JSArrayBuffer::cast(this)->JSArrayBufferVerify();
171f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org      break;
172e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    case JS_TYPED_ARRAY_TYPE:
173e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      JSTypedArray::cast(this)->JSTypedArrayVerify();
174e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      break;
1751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case JS_DATA_VIEW_TYPE:
1761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      JSDataView::cast(this)->JSDataViewVerify();
1771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      break;
17843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
17943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define MAKE_STRUCT_CASE(NAME, Name, name) \
18043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  case NAME##_TYPE:                        \
18143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    Name::cast(this)->Name##Verify();      \
18243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    break;
18343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    STRUCT_LIST(MAKE_STRUCT_CASE)
18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef MAKE_STRUCT_CASE
18543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
18643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    default:
18743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      UNREACHABLE();
18843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
18943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
19043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
19243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
19343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::VerifyHeapPointer(Object* p) {
194c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(p->IsHeapObject());
195c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  HeapObject* ho = HeapObject::cast(p);
196c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  CHECK(ho->GetHeap()->Contains(ho));
19743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
19843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
19943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2004a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgvoid Symbol::SymbolVerify() {
2014a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  CHECK(IsSymbol());
2024a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  CHECK(HasHashCode());
2034a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  CHECK_GT(Hash(), 0);
204f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org  CHECK(name()->IsUndefined() || name()->IsString());
2050cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  CHECK(flags()->IsSmi());
2064a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org}
2074a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org
2084a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org
20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapNumber::HeapNumberVerify() {
21058a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org  CHECK(IsHeapNumber() || IsMutableHeapNumber());
21143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
2123811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2133811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
21443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid ByteArray::ByteArrayVerify() {
215c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsByteArray());
21643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
21743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
21843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
219c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comvoid FreeSpace::FreeSpaceVerify() {
220c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsFreeSpace());
221c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com}
222c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
223c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
224af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#define EXTERNAL_ARRAY_VERIFY(Type, type, TYPE, ctype, size)                  \
225af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org  void External##Type##Array::External##Type##ArrayVerify() {                 \
226af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    CHECK(IsExternal##Type##Array());                                         \
227af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org  }
2283811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
229af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgTYPED_ARRAYS(EXTERNAL_ARRAY_VERIFY)
230af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#undef EXTERNAL_ARRAY_VERIFY
2313847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com
2323847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com
2335c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgtemplate <class Traits>
2345c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgvoid FixedTypedArray<Traits>::FixedTypedArrayVerify() {
2355c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org  CHECK(IsHeapObject() &&
2365c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org        HeapObject::cast(this)->map()->instance_type() ==
2375c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org            Traits::kInstanceType);
2385c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org}
2395c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org
2405c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org
241a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.orgbool JSObject::ElementsAreSafeToExamine() {
242f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  // If a GC was caused while constructing this object, the elements
243f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  // pointer may point to a one pointer filler map.
244f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org  return reinterpret_cast<Map*>(elements()) !=
245a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org      GetHeap()->one_pointer_filler_map();
246a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org}
247a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org
248a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org
24943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::JSObjectVerify() {
25043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(properties());
25143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(elements());
252394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
253486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org  if (GetElementsKind() == SLOPPY_ARGUMENTS_ELEMENTS) {
254c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(this->elements()->IsFixedArray());
255c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK_GE(this->elements()->length(), 2);
256394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  }
257394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
25843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (HasFastProperties()) {
259911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org    CHECK_EQ(map()->unused_property_fields(),
260911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org             (map()->inobject_properties() + properties()->length() -
261911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org              map()->NextFreePropertyIndex()));
262bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org    DescriptorArray* descriptors = map()->instance_descriptors();
263bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org    for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) {
264bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org      if (descriptors->GetDetails(i).type() == FIELD) {
265bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org        Representation r = descriptors->GetDetails(i).representation();
266e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org        FieldIndex index = FieldIndex::ForDescriptor(map(), i);
267e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org        Object* value = RawFastPropertyAt(index);
268e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org        if (r.IsDouble()) DCHECK(value->IsMutableHeapNumber());
2691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        if (value->IsUninitialized()) continue;
270e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org        if (r.IsSmi()) DCHECK(value->IsSmi());
271e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org        if (r.IsHeapObject()) DCHECK(value->IsHeapObject());
272e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org        HeapType* field_type = descriptors->GetFieldType(i);
2738496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org        if (r.IsNone()) {
274e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org          CHECK(field_type->Is(HeapType::None()));
2758496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org        } else if (!HeapType::Any()->Is(field_type)) {
2768496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org          CHECK(!field_type->NowStable() || field_type->NowContains(value));
277e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org        }
278bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org      }
279bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org    }
28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
281e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org
282528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // If a GC was caused while constructing this object, the elements
283528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // pointer may point to a one pointer filler map.
284ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org  if (ElementsAreSafeToExamine()) {
285e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org    CHECK_EQ((map()->has_fast_smi_or_object_elements() ||
286e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org              (elements() == GetHeap()->empty_fixed_array())),
287e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org             (elements()->map() == GetHeap()->fixed_array_map() ||
288e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org              elements()->map() == GetHeap()->fixed_cow_array_map()));
289e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org    CHECK(map()->has_fast_object_elements() == HasFastObjectElements());
290e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org  }
29143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
29243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
29343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
29443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Map::MapVerify() {
295c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  Heap* heap = GetHeap();
296c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  CHECK(!heap->InNewSpace(this));
297c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE);
298c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(instance_size() == kVariableSizeSentinel ||
299145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com         (kPointerSize <= instance_size() &&
300c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org          instance_size() < heap->Capacity()));
30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(prototype());
30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(instance_descriptors());
303e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org  SLOW_DCHECK(instance_descriptors()->IsSortedNoDuplicates());
30499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  if (HasTransitionArray()) {
305e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org    SLOW_DCHECK(transitions()->IsSortedNoDuplicates());
306e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org    SLOW_DCHECK(transitions()->IsConsistentWithBackPointers(this));
30799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  }
30843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
30943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
31131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.orgvoid Map::DictionaryMapVerify() {
31265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org  MapVerify();
31331c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org  CHECK(is_dictionary_map());
314c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(instance_descriptors()->IsEmpty());
315c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, pre_allocated_property_fields());
316c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, unused_property_fields());
317c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(StaticVisitorBase::GetVisitorId(instance_type(), instance_size()),
31865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org      visitor_id());
31965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org}
32065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org
32165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org
322594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgvoid Map::VerifyOmittedMapChecks() {
323594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  if (!FLAG_omit_map_checks_for_leaf_maps) return;
324594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  if (!is_stable() ||
325594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org      is_deprecated() ||
326594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org      HasTransitionArray() ||
327594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org      is_dictionary_map()) {
3282e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org    CHECK_EQ(0, dependent_code()->number_of_entries(
3292e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org        DependentCode::kPrototypeCheckGroup));
3302e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org  }
3312e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}
3322e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org
3332e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org
334ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgvoid CodeCache::CodeCacheVerify() {
335ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  VerifyHeapPointer(default_cache());
336ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  VerifyHeapPointer(normal_type_cache());
337c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(default_cache()->IsFixedArray());
338c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(normal_type_cache()->IsUndefined()
339ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org         || normal_type_cache()->IsCodeCacheHashTable());
340ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org}
34143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
34243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
343e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgvoid PolymorphicCodeCache::PolymorphicCodeCacheVerify() {
344e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  VerifyHeapPointer(cache());
345c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable());
346e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}
347e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
348e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
349f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvoid TypeFeedbackInfo::TypeFeedbackInfoVerify() {
35046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  VerifyObjectField(kStorage1Offset);
35146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  VerifyObjectField(kStorage2Offset);
3523e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org  VerifyObjectField(kStorage3Offset);
353f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org}
354f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
355f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
356ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.orgvoid AliasedArgumentsEntry::AliasedArgumentsEntryVerify() {
357ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org  VerifySmiField(kAliasedContextSlot);
358ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org}
359ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org
360ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org
36143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid FixedArray::FixedArrayVerify() {
36243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (int i = 0; i < length(); i++) {
36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    Object* e = get(i);
364ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org    VerifyPointer(e);
36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
36643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
36743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
36843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3696d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgvoid FixedDoubleArray::FixedDoubleArrayVerify() {
3706d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org  for (int i = 0; i < length(); i++) {
3716d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org    if (!is_the_hole(i)) {
3727c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org      double value = get_scalar(i);
37377ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.org      CHECK(!std::isnan(value) ||
374e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org            (bit_cast<uint64_t>(value) ==
375e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org             bit_cast<uint64_t>(canonical_not_the_hole_nan_as_double())) ||
376e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org            ((bit_cast<uint64_t>(value) & Double::kSignMask) != 0));
3776d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org    }
3786d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org  }
3796d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org}
3806d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org
3816d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org
382a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgvoid ConstantPoolArray::ConstantPoolArrayVerify() {
383a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org  CHECK(IsConstantPoolArray());
384196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  ConstantPoolArray::Iterator code_iter(this, ConstantPoolArray::CODE_PTR);
385196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  while (!code_iter.is_finished()) {
386196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org    Address code_entry = get_code_ptr_entry(code_iter.next_index());
387bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org    VerifyPointer(Code::GetCodeFromTargetAddress(code_entry));
388bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  }
389196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  ConstantPoolArray::Iterator heap_iter(this, ConstantPoolArray::HEAP_PTR);
390196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  while (!heap_iter.is_finished()) {
391196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org    VerifyObjectField(OffsetOfElementAt(heap_iter.next_index()));
392bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org  }
393a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org}
394a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org
395a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org
396e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvoid JSGeneratorObject::JSGeneratorObjectVerify() {
397e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  // In an expression like "new g()", there can be a point where a generator
398e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  // object is allocated but its fields are all undefined, as it hasn't yet been
399e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  // initialized by the generator.  Hence these weak checks.
400e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kFunctionOffset);
401e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kContextOffset);
402ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org  VerifyObjectField(kReceiverOffset);
403e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kOperandStackOffset);
404e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kContinuationOffset);
40557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org  VerifyObjectField(kStackHandlerIndexOffset);
406e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
407e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
408e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
409ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comvoid JSModule::JSModuleVerify() {
41081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org  VerifyObjectField(kContextOffset);
41181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org  VerifyObjectField(kScopeInfoOffset);
41246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  CHECK(context()->IsUndefined() ||
41346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org        Context::cast(context())->IsModuleContext());
414ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com}
415ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com
416ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com
41743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSValue::JSValueVerify() {
41843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  Object* v = value();
41943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (v->IsHeapObject()) {
42043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    VerifyHeapPointer(v);
42143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
42243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgvoid JSDate::JSDateVerify() {
4264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (value()->IsHeapObject()) {
4274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    VerifyHeapPointer(value());
4284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4294efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(value()->IsUndefined() || value()->IsSmi() || value()->IsHeapNumber());
4304efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(year()->IsUndefined() || year()->IsSmi() || year()->IsNaN());
4314efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(month()->IsUndefined() || month()->IsSmi() || month()->IsNaN());
4324efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(day()->IsUndefined() || day()->IsSmi() || day()->IsNaN());
4334efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(weekday()->IsUndefined() || weekday()->IsSmi() || weekday()->IsNaN());
4344efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(hour()->IsUndefined() || hour()->IsSmi() || hour()->IsNaN());
4354efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(min()->IsUndefined() || min()->IsSmi() || min()->IsNaN());
4364efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(sec()->IsUndefined() || sec()->IsSmi() || sec()->IsNaN());
4374efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(cache_stamp()->IsUndefined() ||
4384efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org        cache_stamp()->IsSmi() ||
4394efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org        cache_stamp()->IsNaN());
4404efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
4414efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (month()->IsSmi()) {
4424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int month = Smi::cast(this->month())->value();
4434efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= month && month <= 11);
4444efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4454efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (day()->IsSmi()) {
4464efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int day = Smi::cast(this->day())->value();
4474efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(1 <= day && day <= 31);
4484efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4494efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (hour()->IsSmi()) {
4504efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int hour = Smi::cast(this->hour())->value();
4514efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= hour && hour <= 23);
4524efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4534efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (min()->IsSmi()) {
4544efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int min = Smi::cast(this->min())->value();
4554efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= min && min <= 59);
4564efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4574efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (sec()->IsSmi()) {
4584efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int sec = Smi::cast(this->sec())->value();
4594efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= sec && sec <= 59);
4604efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4614efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (weekday()->IsSmi()) {
4624efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int weekday = Smi::cast(this->weekday())->value();
4634efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= weekday && weekday <= 6);
4644efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4654efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (cache_stamp()->IsSmi()) {
4664efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(Smi::cast(cache_stamp())->value() <=
4673d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org          Smi::cast(GetIsolate()->date_cache()->stamp())->value());
4684efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4694efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org}
4704efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
4714efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
47231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgvoid JSMessageObject::JSMessageObjectVerify() {
47331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  CHECK(IsJSMessageObject());
47431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  CHECK(type()->IsString());
47531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  CHECK(arguments()->IsJSArray());
47631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kStartPositionOffset);
47731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kEndPositionOffset);
47831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kArgumentsOffset);
47931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kScriptOffset);
48031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kStackFramesOffset);
48131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org}
48231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org
48331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org
48443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid String::StringVerify() {
48543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsString());
48643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(length() >= 0 && length() <= Smi::kMaxValue);
4874a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  if (IsInternalizedString()) {
488c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org    CHECK(!GetHeap()->InNewSpace(this));
48943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
4904668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  if (IsConsString()) {
4914668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    ConsString::cast(this)->ConsStringVerify();
4924668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  } else if (IsSlicedString()) {
4934668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    SlicedString::cast(this)->SlicedStringVerify();
4944668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  }
4954668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org}
4964668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
4974668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
4984668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgvoid ConsString::ConsStringVerify() {
4994668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(this->first()->IsString());
5004668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(this->second() == GetHeap()->empty_string() ||
5014668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org        this->second()->IsString());
5022efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org  CHECK(this->length() >= ConsString::kMinLength);
5039e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org  CHECK(this->length() == this->first()->length() + this->second()->length());
5044668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  if (this->IsFlat()) {
5054668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    // A flat cons can only be created by String::SlowTryFlatten.
5064668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    // Afterwards, the first part may be externalized.
5074668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    CHECK(this->first()->IsSeqString() || this->first()->IsExternalString());
5084668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  }
5094668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org}
5104668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
5114668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
5124668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgvoid SlicedString::SlicedStringVerify() {
5134668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(!this->parent()->IsConsString());
5144668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(!this->parent()->IsSlicedString());
5154668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(this->length() >= SlicedString::kMinLength);
51643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
51743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
51843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
51943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSFunction::JSFunctionVerify() {
52043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsJSFunction());
52143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kPrototypeOrInitialMapOffset);
522a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  VerifyObjectField(kNextFunctionLinkOffset);
523c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  CHECK(code()->IsCode());
524e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org  CHECK(next_function_link() == NULL ||
525e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org        next_function_link()->IsUndefined() ||
526a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        next_function_link()->IsJSFunction());
52743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
52843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
529023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
53043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid SharedFunctionInfo::SharedFunctionInfoVerify() {
53143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsSharedFunctionInfo());
53243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kNameOffset);
53343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kCodeOffset);
5345a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org  VerifyObjectField(kOptimizedCodeMapOffset);
535a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org  VerifyObjectField(kFeedbackVectorOffset);
5366a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org  VerifyObjectField(kScopeInfoOffset);
53743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kInstanceClassNameOffset);
538f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org  VerifyObjectField(kFunctionDataOffset);
53943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kScriptOffset);
54043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kDebugInfoOffset);
54143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
5425a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org
5435a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org
5445a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgvoid JSGlobalProxy::JSGlobalProxyVerify() {
5455a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  CHECK(IsJSGlobalProxy());
5465a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  JSObjectVerify();
54746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  VerifyObjectField(JSGlobalProxy::kNativeContextOffset);
5485a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  // Make sure that this object has no properties, elements.
5495a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  CHECK_EQ(0, properties()->length());
5503c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org  CHECK(HasFastSmiElements());
55130ce411529579186181838984710b0b0980857aaricow@chromium.org  CHECK_EQ(0, FixedArray::cast(elements())->length());
5525a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org}
55343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
55443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
55543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSGlobalObject::JSGlobalObjectVerify() {
55643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsJSGlobalObject());
55743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  JSObjectVerify();
55843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (int i = GlobalObject::kBuiltinsOffset;
55943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i < JSGlobalObject::kSize;
56043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i += kPointerSize) {
56143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    VerifyObjectField(i);
56243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
56343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
56443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
56543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
56643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSBuiltinsObject::JSBuiltinsObjectVerify() {
56743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsJSBuiltinsObject());
56843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  JSObjectVerify();
56943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (int i = GlobalObject::kBuiltinsOffset;
57043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i < JSBuiltinsObject::kSize;
57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i += kPointerSize) {
57243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    VerifyObjectField(i);
57343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
57543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Oddball::OddballVerify() {
57843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsOddball());
57949ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  Heap* heap = GetHeap();
58043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(to_string());
58143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  Object* number = to_number();
58243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (number->IsHeapObject()) {
58349ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(number == heap->nan_value());
58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
585c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(number->IsSmi());
58643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    int value = Smi::cast(number)->value();
587c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com    // Hidden oddballs have negative smis.
588a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.org    const int kLeastHiddenOddballNumber = -5;
589c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK_LE(value, 1);
590c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(value >= kLeastHiddenOddballNumber);
59143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
59249ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  if (map() == heap->undefined_map()) {
59349ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->undefined_value());
59449ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else if (map() == heap->the_hole_map()) {
59549ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->the_hole_value());
59649ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else if (map() == heap->null_map()) {
59749ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->null_value());
59849ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else if (map() == heap->boolean_map()) {
59949ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->true_value() ||
60049ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org          this == heap->false_value());
60149ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else if (map() == heap->uninitialized_map()) {
60249ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->uninitialized_value());
60349ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else if (map() == heap->no_interceptor_result_sentinel_map()) {
60449ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->no_interceptor_result_sentinel());
60549ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else if (map() == heap->arguments_marker_map()) {
60649ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->arguments_marker());
60749ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else if (map() == heap->termination_exception_map()) {
60849ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    CHECK(this == heap->termination_exception());
609a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.org  } else if (map() == heap->exception_map()) {
610a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.org    CHECK(this == heap->exception());
61149ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  } else {
61249ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org    UNREACHABLE();
61349ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org  }
61443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
61543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
61643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
61741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgvoid Cell::CellVerify() {
61841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org  CHECK(IsCell());
61941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org  VerifyObjectField(kValueOffset);
62041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org}
62141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org
62241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org
623b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.orgvoid PropertyCell::PropertyCellVerify() {
624b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org  CHECK(IsPropertyCell());
6252abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  VerifyObjectField(kValueOffset);
62641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org  VerifyObjectField(kTypeOffset);
6272abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org}
6282abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
6292abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
63043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Code::CodeVerify() {
631061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org  CHECK(IsAligned(reinterpret_cast<intptr_t>(instruction_start()),
6324a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org                  kCodeAlignment));
633ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org  relocation_info()->ObjectVerify();
6347276f14ca716596e0a0d17539516370c1f453847kasper.lund  Address last_gc_pc = NULL;
6355924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  Isolate* isolate = GetIsolate();
63643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (RelocIterator it(this); !it.done(); it.next()) {
6375924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    it.rinfo()->Verify(isolate);
6387276f14ca716596e0a0d17539516370c1f453847kasper.lund    // Ensure that GC will not iterate twice over the same pointer.
639236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org    if (RelocInfo::IsGCRelocMode(it.rinfo()->rmode())) {
6407276f14ca716596e0a0d17539516370c1f453847kasper.lund      CHECK(it.rinfo()->pc() != last_gc_pc);
6417276f14ca716596e0a0d17539516370c1f453847kasper.lund      last_gc_pc = it.rinfo()->pc();
6427276f14ca716596e0a0d17539516370c1f453847kasper.lund    }
64343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
6449d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org  CHECK(raw_type_feedback_info() == Smi::FromInt(0) ||
6459d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org        raw_type_feedback_info()->IsSmi() == IsCodeStubOrIC());
64643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
64743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
64843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
64925b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.orgvoid Code::VerifyEmbeddedObjectsDependency() {
6502ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org  if (!CanContainWeakObjects()) return;
6513484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org  DisallowHeapAllocation no_gc;
6523484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org  Isolate* isolate = GetIsolate();
6533484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org  HandleScope scope(isolate);
65494b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org  int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
65594b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org  for (RelocIterator it(this, mode_mask); !it.done(); it.next()) {
65625b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org    Object* obj = it.rinfo()->target_object();
657f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org    if (IsWeakObject(obj)) {
65825b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org      if (obj->IsMap()) {
65925b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org        Map* map = Map::cast(obj);
6602ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org        DependentCode::DependencyGroup group = is_optimized_code() ?
6612ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org            DependentCode::kWeakCodeGroup : DependentCode::kWeakICGroup;
6622ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org        CHECK(map->dependent_code()->Contains(group, this));
66325b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org      } else if (obj->IsJSObject()) {
66425b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org        Object* raw_table = GetIsolate()->heap()->weak_object_to_code_table();
66525b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org        WeakHashTable* table = WeakHashTable::cast(raw_table);
6663484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org        Handle<Object> key_obj(obj, isolate);
6673484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org        CHECK(DependentCode::cast(table->Lookup(key_obj))->Contains(
6682ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org            DependentCode::kWeakCodeGroup, this));
66994b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org      }
67094b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org    }
67194b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org  }
67294b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org}
67394b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org
67494b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org
67543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSArray::JSArrayVerify() {
67643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  JSObjectVerify();
677c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(length()->IsNumber() || length()->IsUndefined());
678528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // If a GC was caused while constructing this array, the elements
679528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // pointer may point to a one pointer filler map.
680ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org  if (ElementsAreSafeToExamine()) {
681e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org    CHECK(elements()->IsUndefined() ||
682e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org          elements()->IsFixedArray() ||
683e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org          elements()->IsFixedDoubleArray());
684e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org  }
68543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
68643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
68743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
688394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid JSSet::JSSetVerify() {
689394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  CHECK(IsJSSet());
690394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  JSObjectVerify();
691394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  VerifyHeapPointer(table());
6929e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org  CHECK(table()->IsOrderedHashTable() || table()->IsUndefined());
6934ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  // TODO(arv): Verify OrderedHashTable too.
694394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
695394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
696394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
697394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid JSMap::JSMapVerify() {
698394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  CHECK(IsJSMap());
699394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  JSObjectVerify();
700394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  VerifyHeapPointer(table());
7019e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org  CHECK(table()->IsOrderedHashTable() || table()->IsUndefined());
7024ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  // TODO(arv): Verify OrderedHashTable too.
7034ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org}
7044ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org
7054ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org
7064ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgvoid JSSetIterator::JSSetIteratorVerify() {
7074ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  CHECK(IsJSSetIterator());
7084ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  JSObjectVerify();
7094ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  VerifyHeapPointer(table());
7104ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  CHECK(table()->IsOrderedHashTable() || table()->IsUndefined());
711196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  CHECK(index()->IsSmi() || index()->IsUndefined());
712196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  CHECK(kind()->IsSmi() || kind()->IsUndefined());
7134ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org}
7144ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org
7154ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org
7164ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgvoid JSMapIterator::JSMapIteratorVerify() {
7174ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  CHECK(IsJSMapIterator());
7184ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  JSObjectVerify();
7194ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  VerifyHeapPointer(table());
7204ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org  CHECK(table()->IsOrderedHashTable() || table()->IsUndefined());
721196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  CHECK(index()->IsSmi() || index()->IsUndefined());
722196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org  CHECK(kind()->IsSmi() || kind()->IsUndefined());
723394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
724394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
725394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
7267c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgvoid JSWeakMap::JSWeakMapVerify() {
7277c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org  CHECK(IsJSWeakMap());
7287c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org  JSObjectVerify();
7297c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org  VerifyHeapPointer(table());
730c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(table()->IsHashTable() || table()->IsUndefined());
7317c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org}
7327c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org
7337c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org
734ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid JSWeakSet::JSWeakSetVerify() {
735ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  CHECK(IsJSWeakSet());
736ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  JSObjectVerify();
737ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  VerifyHeapPointer(table());
738ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  CHECK(table()->IsHashTable() || table()->IsUndefined());
739ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org}
740ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
741ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
742236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.orgvoid JSRegExp::JSRegExpVerify() {
743236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org  JSObjectVerify();
744c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(data()->IsUndefined() || data()->IsFixedArray());
7459fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org  switch (TypeTag()) {
7469fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org    case JSRegExp::ATOM: {
7479fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org      FixedArray* arr = FixedArray::cast(data());
748c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(arr->get(JSRegExp::kAtomPatternIndex)->IsString());
7499fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org      break;
75041044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    }
751a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    case JSRegExp::IRREGEXP: {
75268ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      bool is_native = RegExpImpl::UsesNativeRegExp();
753bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org
754a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org      FixedArray* arr = FixedArray::cast(data());
7552c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org      Object* one_byte_data = arr->get(JSRegExp::kIrregexpLatin1CodeIndex);
756ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org      // Smi : Not compiled yet (-1) or code prepared for flushing.
757a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org      // JSObject: Compilation error.
758a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org      // Code/ByteArray: Compiled code.
7592c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org      CHECK(
7602c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org          one_byte_data->IsSmi() ||
7612c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org          (is_native ? one_byte_data->IsCode() : one_byte_data->IsByteArray()));
7627be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org      Object* uc16_data = arr->get(JSRegExp::kIrregexpUC16CodeIndex);
763c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(uc16_data->IsSmi() ||
764ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org             (is_native ? uc16_data->IsCode() : uc16_data->IsByteArray()));
765ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
7662c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org      Object* one_byte_saved =
7672c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org          arr->get(JSRegExp::kIrregexpLatin1CodeSavedIndex);
7682c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org      CHECK(one_byte_saved->IsSmi() || one_byte_saved->IsString() ||
7692c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org            one_byte_saved->IsCode());
770ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org      Object* uc16_saved = arr->get(JSRegExp::kIrregexpUC16CodeSavedIndex);
771c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(uc16_saved->IsSmi() || uc16_saved->IsString() ||
772ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org             uc16_saved->IsCode());
773ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
774c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(arr->get(JSRegExp::kIrregexpCaptureCountIndex)->IsSmi());
775c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(arr->get(JSRegExp::kIrregexpMaxRegisterCountIndex)->IsSmi());
7769fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org      break;
7779fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org    }
7789fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org    default:
779c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK_EQ(JSRegExp::NOT_COMPILED, TypeTag());
780c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(data()->IsUndefined());
7819fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org      break;
78241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  }
783236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org}
784236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org
785236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org
7867304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgvoid JSProxy::JSProxyVerify() {
787c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  CHECK(IsJSProxy());
7887304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org  VerifyPointer(handler());
789c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(hash()->IsSmi() || hash()->IsUndefined());
7907304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org}
7917304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org
79234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org
79334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgvoid JSFunctionProxy::JSFunctionProxyVerify() {
794c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  CHECK(IsJSFunctionProxy());
79534e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org  JSProxyVerify();
79634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org  VerifyPointer(call_trap());
79734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org  VerifyPointer(construct_trap());
79834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org}
79934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org
800e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
801f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgvoid JSArrayBuffer::JSArrayBufferVerify() {
802f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org  CHECK(IsJSArrayBuffer());
803f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org  JSObjectVerify();
804f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org  VerifyPointer(byte_length());
805f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org  CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber()
806f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org        || byte_length()->IsUndefined());
807f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org}
808f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org
80934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org
8101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid JSArrayBufferView::JSArrayBufferViewVerify() {
8111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CHECK(IsJSArrayBufferView());
812e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  JSObjectVerify();
813e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(buffer());
814895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org  CHECK(buffer()->IsJSArrayBuffer() || buffer()->IsUndefined()
815895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org        || buffer() == Smi::FromInt(0));
816e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
817e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(byte_offset());
818e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  CHECK(byte_offset()->IsSmi() || byte_offset()->IsHeapNumber()
819e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        || byte_offset()->IsUndefined());
820e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
821e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(byte_length());
822e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber()
823e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        || byte_length()->IsUndefined());
8241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
8251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
826e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
8271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid JSTypedArray::JSTypedArrayVerify() {
8281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CHECK(IsJSTypedArray());
8291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  JSArrayBufferViewVerify();
830e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(length());
831e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  CHECK(length()->IsSmi() || length()->IsHeapNumber()
832e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        || length()->IsUndefined());
833e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
834e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(elements());
835e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
836e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
837e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
8381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid JSDataView::JSDataViewVerify() {
8391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CHECK(IsJSDataView());
8401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  JSArrayBufferViewVerify();
8411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
8421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
8431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
844ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgvoid Foreign::ForeignVerify() {
845c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsForeign());
84643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
84743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
84843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgvoid Box::BoxVerify() {
8501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  CHECK(IsBox());
851ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org  value()->ObjectVerify();
8521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
8531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
8541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
85543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AccessorInfo::AccessorInfoVerify() {
85643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(name());
85743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(flag());
8587028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org  VerifyPointer(expected_receiver_type());
85943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
860023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
86143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8627c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgvoid ExecutableAccessorInfo::ExecutableAccessorInfoVerify() {
8637c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  CHECK(IsExecutableAccessorInfo());
8647c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  AccessorInfoVerify();
8657c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(getter());
8667c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(setter());
8677c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(data());
8687c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}
8697c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8707c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8717c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgvoid DeclaredAccessorDescriptor::DeclaredAccessorDescriptorVerify() {
8727c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  CHECK(IsDeclaredAccessorDescriptor());
873750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  VerifyPointer(serialized_data());
8747c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}
8757c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8767c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8777c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgvoid DeclaredAccessorInfo::DeclaredAccessorInfoVerify() {
8787c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  CHECK(IsDeclaredAccessorInfo());
8797c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  AccessorInfoVerify();
8807c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(descriptor());
8817c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}
8827c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8837c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
884f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comvoid AccessorPair::AccessorPairVerify() {
885f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com  CHECK(IsAccessorPair());
886f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com  VerifyPointer(getter());
887f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com  VerifyPointer(setter());
888f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com}
889f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com
890f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com
89143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AccessCheckInfo::AccessCheckInfoVerify() {
89243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsAccessCheckInfo());
89343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(named_callback());
89443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(indexed_callback());
89543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(data());
89643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
89743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
898023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
89943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid InterceptorInfo::InterceptorInfoVerify() {
90043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsInterceptorInfo());
90143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(getter());
90243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(setter());
90343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(query());
90443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(deleter());
90543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(enumerator());
90643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(data());
90743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
908023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
90943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
91043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid CallHandlerInfo::CallHandlerInfoVerify() {
91143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsCallHandlerInfo());
91243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(callback());
91343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(data());
91443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
91543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
916023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
91743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid TemplateInfo::TemplateInfoVerify() {
91843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(tag());
91943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(property_list());
9203d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org  VerifyPointer(property_accessors());
92143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
92243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
923e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
92443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid FunctionTemplateInfo::FunctionTemplateInfoVerify() {
92543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsFunctionTemplateInfo());
92643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  TemplateInfoVerify();
92743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(serial_number());
92843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(call_code());
92943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(prototype_template());
93043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(parent_template());
93143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(named_property_handler());
93243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(indexed_property_handler());
93343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(instance_template());
93443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(signature());
93543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(access_check_info());
93643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
93743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
93843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
93943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid ObjectTemplateInfo::ObjectTemplateInfoVerify() {
94043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsObjectTemplateInfo());
94143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  TemplateInfoVerify();
94243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(constructor());
943212ac23f8231d169b4aa6737d762099993020826kasper.lund  VerifyPointer(internal_field_count());
94443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
94543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
946023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
94743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid SignatureInfo::SignatureInfoVerify() {
94843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsSignatureInfo());
94943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(receiver());
95043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(args());
95143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
95243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
953023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
95443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid TypeSwitchInfo::TypeSwitchInfoVerify() {
95543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsTypeSwitchInfo());
95643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(types());
95743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
95843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
95943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
960bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvoid AllocationSite::AllocationSiteVerify() {
961bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  CHECK(IsAllocationSite());
962bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org}
963bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
964bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
965ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid AllocationMemento::AllocationMementoVerify() {
966ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  CHECK(IsAllocationMemento());
967bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  VerifyHeapPointer(allocation_site());
968bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  CHECK(!IsValid() || GetAllocationSite()->IsAllocationSite());
96959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org}
97059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
97159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org
97243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Script::ScriptVerify() {
97343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsScript());
97443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(source());
97543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(name());
97643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  line_offset()->SmiVerify();
97743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  column_offset()->SmiVerify();
97865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org  VerifyPointer(wrapper());
97943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  type()->SmiVerify();
980499aaa52a876ef8e8b81ac115cafb969eb585c96sgjesse@chromium.org  VerifyPointer(line_ends());
98165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org  VerifyPointer(id());
98243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
98343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
98443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
985c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.orgvoid JSFunctionResultCache::JSFunctionResultCacheVerify() {
986ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org  JSFunction::cast(get(kFactoryIndex))->ObjectVerify();
987c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
988c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  int size = Smi::cast(get(kCacheSizeIndex))->value();
989c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(kEntriesIndex <= size);
990c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(size <= length());
991c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, size % kEntrySize);
992c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
993c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  int finger = Smi::cast(get(kFingerIndex))->value();
994c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(kEntriesIndex <= finger);
995c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK((finger < size) || (finger == kEntriesIndex && finger == size));
996c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, finger % kEntrySize);
997c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
998c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  if (FLAG_enable_slow_asserts) {
999c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    for (int i = kEntriesIndex; i < size; i++) {
1000c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(!get(i)->IsTheHole());
1001ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org      get(i)->ObjectVerify();
1002c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    }
1003c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    for (int i = size; i < length(); i++) {
1004c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(get(i)->IsTheHole());
1005ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org      get(i)->ObjectVerify();
1006c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    }
1007c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  }
1008c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org}
1009c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1010c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1011c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.orgvoid NormalizedMapCache::NormalizedMapCacheVerify() {
1012ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org  FixedArray::cast(this)->FixedArrayVerify();
1013c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  if (FLAG_enable_slow_asserts) {
1014c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    for (int i = 0; i < length(); i++) {
1015c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org      Object* e = FixedArray::get(i);
1016c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      if (e->IsMap()) {
101731c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org        Map::cast(e)->DictionaryMapVerify();
1018c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      } else {
1019c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org        CHECK(e->IsUndefined());
1020c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      }
1021c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    }
1022c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  }
1023c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org}
1024c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1025c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
102643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid DebugInfo::DebugInfoVerify() {
102743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsDebugInfo());
102843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(shared());
102943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(original_code());
103043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(code());
103143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(break_points());
103243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
103343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
103443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
103543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid BreakPointInfo::BreakPointInfoVerify() {
103643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsBreakPointInfo());
103743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  code_position()->SmiVerify();
103843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  source_position()->SmiVerify();
103943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  statement_position()->SmiVerify();
104043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(break_point_objects());
104143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
1042c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#endif  // VERIFY_HEAP
104343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1044c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef DEBUG
104543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
104643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::IncrementSpillStatistics(SpillInformation* info) {
104743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  info->number_of_objects_++;
104843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Named properties
104943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (HasFastProperties()) {
105043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_objects_with_fast_properties_++;
105143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_fast_used_fields_   += map()->NextFreePropertyIndex();
105243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_fast_unused_fields_ += map()->unused_property_fields();
105343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
1054750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org    NameDictionary* dict = property_dictionary();
105543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_slow_used_properties_ += dict->NumberOfElements();
105643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_slow_unused_properties_ +=
105743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        dict->Capacity() - dict->NumberOfElements();
105843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
105943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Indexed properties
10600b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org  switch (GetElementsKind()) {
1061830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_HOLEY_SMI_ELEMENTS:
1062830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_SMI_ELEMENTS:
1063830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_HOLEY_DOUBLE_ELEMENTS:
1064830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_DOUBLE_ELEMENTS:
1065830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_HOLEY_ELEMENTS:
10660b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    case FAST_ELEMENTS: {
10670b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_objects_with_fast_elements_++;
10680b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      int holes = 0;
10690b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      FixedArray* e = FixedArray::cast(elements());
10700b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      int len = e->length();
1071c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org      Heap* heap = GetHeap();
10720b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      for (int i = 0; i < len; i++) {
1073ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        if (e->get(i) == heap->the_hole_value()) holes++;
10740b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      }
10750b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_fast_used_elements_   += len - holes;
10760b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_fast_unused_elements_ += holes;
10770b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
107843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
1079af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org
1080af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size)                       \
1081af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    case EXTERNAL_##TYPE##_ELEMENTS:                                          \
1082af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    case TYPE##_ELEMENTS:
1083af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org
1084af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    TYPED_ARRAYS(TYPED_ARRAY_CASE)
1085af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#undef TYPED_ARRAY_CASE
1086af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org    { info->number_of_objects_with_fast_elements_++;
10875c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org      FixedArrayBase* e = FixedArrayBase::cast(elements());
10880b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_fast_used_elements_ += e->length();
10890b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
10900b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    }
10910b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    case DICTIONARY_ELEMENTS: {
1092f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com      SeededNumberDictionary* dict = element_dictionary();
10930b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_slow_used_elements_ += dict->NumberOfElements();
10940b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_slow_unused_elements_ +=
10950b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org          dict->Capacity() - dict->NumberOfElements();
10960b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
10970b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    }
1098486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org    case SLOPPY_ARGUMENTS_ELEMENTS:
10990b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
110043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
110143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
110243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
110343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
110443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::SpillInformation::Clear() {
110543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_objects_ = 0;
110643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_objects_with_fast_properties_ = 0;
110743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_objects_with_fast_elements_ = 0;
110843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_used_fields_ = 0;
110943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_unused_fields_ = 0;
111043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_used_properties_ = 0;
111143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_unused_properties_ = 0;
111243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_used_elements_ = 0;
111343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_unused_elements_ = 0;
111443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_used_elements_ = 0;
111543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_unused_elements_ = 0;
111643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
111743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1118e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
111943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::SpillInformation::Print() {
112043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("\n  JSObject Spill Statistics (#%d):\n", number_of_objects_);
112143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
112243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - fast properties (#%d): %d (used) %d (unused)\n",
112343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_with_fast_properties_,
112443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_fast_used_fields_, number_of_fast_unused_fields_);
112543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
112643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - slow properties (#%d): %d (used) %d (unused)\n",
112743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_ - number_of_objects_with_fast_properties_,
112843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_slow_used_properties_, number_of_slow_unused_properties_);
112943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
113043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - fast elements (#%d): %d (used) %d (unused)\n",
113143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_with_fast_elements_,
113243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_fast_used_elements_, number_of_fast_unused_elements_);
113343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
113443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - slow elements (#%d): %d (used) %d (unused)\n",
113543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_ - number_of_objects_with_fast_elements_,
113643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_slow_used_elements_, number_of_slow_unused_elements_);
113743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
113843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("\n");
113943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
114043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
114143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
114206ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgbool DescriptorArray::IsSortedNoDuplicates(int valid_entries) {
114306ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org  if (valid_entries == -1) valid_entries = number_of_descriptors();
1144750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  Name* current_key = NULL;
1145769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com  uint32_t current = 0;
114633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  for (int i = 0; i < number_of_descriptors(); i++) {
1147750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org    Name* key = GetSortedKey(i);
1148769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    if (key == current_key) {
1149f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      OFStream os(stdout);
1150f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      PrintDescriptors(os);
1151769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com      return false;
1152769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    }
1153769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    current_key = key;
115446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org    uint32_t hash = GetSortedKey(i)->Hash();
1155769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    if (hash < current) {
1156f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      OFStream os(stdout);
1157f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      PrintDescriptors(os);
1158769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com      return false;
1159769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    }
1160769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    current = hash;
1161769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com  }
1162769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com  return true;
1163769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com}
1164769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com
1165769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com
116606ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgbool TransitionArray::IsSortedNoDuplicates(int valid_entries) {
1167e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org  DCHECK(valid_entries == -1);
1168750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  Name* current_key = NULL;
116999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  uint32_t current = 0;
117099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  for (int i = 0; i < number_of_transitions(); i++) {
1171750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org    Name* key = GetSortedKey(i);
117299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    if (key == current_key) {
1173f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      OFStream os(stdout);
1174f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      PrintTransitions(os);
117599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      return false;
117699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    }
117799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    current_key = key;
117846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org    uint32_t hash = GetSortedKey(i)->Hash();
117999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    if (hash < current) {
1180f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      OFStream os(stdout);
1181f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org      PrintTransitions(os);
118299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      return false;
118399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    }
118499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    current = hash;
118599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  }
118699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  return true;
118799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org}
118899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org
118999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org
1190212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.orgstatic bool CheckOneBackPointer(Map* current_map, Object* target) {
1191212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org  return !target->IsMap() || Map::cast(target)->GetBackPointer() == current_map;
1192212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org}
1193212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
1194212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
119599aa490225c81012235659d9a183226b286178c8yangguo@chromium.orgbool TransitionArray::IsConsistentWithBackPointers(Map* current_map) {
119699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  for (int i = 0; i < number_of_transitions(); ++i) {
1197753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org    if (!CheckOneBackPointer(current_map, GetTarget(i))) return false;
1198212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org  }
1199212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org  return true;
1200212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org}
1201212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
1202212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
120343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif  // DEBUG
120443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
120543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
1206