165a89c29ac6da09f5726f48f68eae9587b0e562aulan@chromium.org// Copyright 2012 the V8 project authors. All rights reserved.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met:
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions of source code must retain the above copyright
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       notice, this list of conditions and the following disclaimer.
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Redistributions in binary form must reproduce the above
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       copyright notice, this list of conditions and the following
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       disclaimer in the documentation and/or other materials provided
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       with the distribution.
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//     * Neither the name of Google Inc. nor the names of its
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       contributors may be used to endorse or promote products derived
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//       from this software without specific prior written permission.
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen//
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "v8.h"
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "disassembler.h"
3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "disasm.h"
32bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org#include "jsregexp.h"
3394b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org#include "macro-assembler.h"
3465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org#include "objects-visiting.h"
3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
3771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
39c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef VERIFY_HEAP
409e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
41303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.orgvoid MaybeObject::Verify() {
42303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org  Object* this_as_object;
43303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org  if (ToObject(&this_as_object)) {
44303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    if (this_as_object->IsSmi()) {
45303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org      Smi::cast(this_as_object)->SmiVerify();
46303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    } else {
47303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org      HeapObject::cast(this_as_object)->HeapObjectVerify();
48303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    }
4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
50303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org    Failure::cast(this)->FailureVerify();
5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Object::VerifyPointer(Object* p) {
5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (p->IsHeapObject()) {
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    HeapObject::VerifyHeapPointer(p);
5843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
59c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(p->IsSmi());
6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Smi::SmiVerify() {
65c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsSmi());
6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Failure::FailureVerify() {
70c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsFailure());
7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::HeapObjectVerify() {
7543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  InstanceType instance_type = map()->instance_type();
7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (instance_type < FIRST_NONSTRING_TYPE) {
7843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    String::cast(this)->StringVerify();
7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return;
8043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
8143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  switch (instance_type) {
834a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org    case SYMBOL_TYPE:
844a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org      Symbol::cast(this)->SymbolVerify();
854a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org      break;
8643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case MAP_TYPE:
8743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      Map::cast(this)->MapVerify();
8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case HEAP_NUMBER_TYPE:
9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      HeapNumber::cast(this)->HeapNumberVerify();
9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case FIXED_ARRAY_TYPE:
9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      FixedArray::cast(this)->FixedArrayVerify();
9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
956d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org    case FIXED_DOUBLE_ARRAY_TYPE:
966d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org      FixedDoubleArray::cast(this)->FixedDoubleArrayVerify();
976d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org      break;
98a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org    case CONSTANT_POOL_ARRAY_TYPE:
99a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org      ConstantPoolArray::cast(this)->ConstantPoolArrayVerify();
100a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org      break;
10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case BYTE_ARRAY_TYPE:
10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      ByteArray::cast(this)->ByteArrayVerify();
10343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
104c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com    case FREE_SPACE_TYPE:
105c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com      FreeSpace::cast(this)->FreeSpaceVerify();
106c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com      break;
1074d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org    case EXTERNAL_PIXEL_ARRAY_TYPE:
1084d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org      ExternalPixelArray::cast(this)->ExternalPixelArrayVerify();
1090b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
1103811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org    case EXTERNAL_BYTE_ARRAY_TYPE:
1113811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      ExternalByteArray::cast(this)->ExternalByteArrayVerify();
1123811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      break;
1133811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org    case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE:
1143811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      ExternalUnsignedByteArray::cast(this)->ExternalUnsignedByteArrayVerify();
1153811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      break;
1163811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org    case EXTERNAL_SHORT_ARRAY_TYPE:
1173811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      ExternalShortArray::cast(this)->ExternalShortArrayVerify();
1183811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      break;
1193811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org    case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE:
1203811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      ExternalUnsignedShortArray::cast(this)->
1213811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org          ExternalUnsignedShortArrayVerify();
1223811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      break;
1233811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org    case EXTERNAL_INT_ARRAY_TYPE:
1243811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      ExternalIntArray::cast(this)->ExternalIntArrayVerify();
1253811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      break;
1263811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org    case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE:
1273811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      ExternalUnsignedIntArray::cast(this)->ExternalUnsignedIntArrayVerify();
1283811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      break;
1293811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org    case EXTERNAL_FLOAT_ARRAY_TYPE:
1303811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      ExternalFloatArray::cast(this)->ExternalFloatArrayVerify();
1313811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org      break;
1323847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com    case EXTERNAL_DOUBLE_ARRAY_TYPE:
1333847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com      ExternalDoubleArray::cast(this)->ExternalDoubleArrayVerify();
1343847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com      break;
13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case CODE_TYPE:
13643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      Code::cast(this)->CodeVerify();
13743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case ODDBALL_TYPE:
13943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      Oddball::cast(this)->OddballVerify();
14043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
14143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_OBJECT_TYPE:
1423291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org    case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
14343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSObject::cast(this)->JSObjectVerify();
14443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
145e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    case JS_GENERATOR_OBJECT_TYPE:
146e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      JSGeneratorObject::cast(this)->JSGeneratorObjectVerify();
147e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      break;
148ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com    case JS_MODULE_TYPE:
149ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com      JSModule::cast(this)->JSModuleVerify();
150ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com      break;
15143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_VALUE_TYPE:
15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSValue::cast(this)->JSValueVerify();
15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
1544efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    case JS_DATE_TYPE:
1554efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      JSDate::cast(this)->JSDateVerify();
1564efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org      break;
15743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_FUNCTION_TYPE:
15843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSFunction::cast(this)->JSFunctionVerify();
15943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
1605a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org    case JS_GLOBAL_PROXY_TYPE:
1615a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org      JSGlobalProxy::cast(this)->JSGlobalProxyVerify();
1625a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org      break;
16343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_GLOBAL_OBJECT_TYPE:
16443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSGlobalObject::cast(this)->JSGlobalObjectVerify();
16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_BUILTINS_OBJECT_TYPE:
16743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSBuiltinsObject::cast(this)->JSBuiltinsObjectVerify();
16843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
16941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org    case CELL_TYPE:
17041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org      Cell::cast(this)->CellVerify();
17141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org      break;
17241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org    case PROPERTY_CELL_TYPE:
173b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org      PropertyCell::cast(this)->PropertyCellVerify();
1742abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org      break;
17543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case JS_ARRAY_TYPE:
17643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      JSArray::cast(this)->JSArrayVerify();
17743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
178394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    case JS_SET_TYPE:
179394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      JSSet::cast(this)->JSSetVerify();
180394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      break;
181394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    case JS_MAP_TYPE:
182394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      JSMap::cast(this)->JSMapVerify();
183394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com      break;
1847c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org    case JS_WEAK_MAP_TYPE:
1857c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org      JSWeakMap::cast(this)->JSWeakMapVerify();
1867c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org      break;
187ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org    case JS_WEAK_SET_TYPE:
188ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org      JSWeakSet::cast(this)->JSWeakSetVerify();
189ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org      break;
190236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org    case JS_REGEXP_TYPE:
191236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org      JSRegExp::cast(this)->JSRegExpVerify();
192236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org      break;
19343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case FILLER_TYPE:
19443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
1957304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org    case JS_PROXY_TYPE:
1967304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org      JSProxy::cast(this)->JSProxyVerify();
1977304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org      break;
19834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org    case JS_FUNCTION_PROXY_TYPE:
19934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org      JSFunctionProxy::cast(this)->JSFunctionProxyVerify();
20034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org      break;
201ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org    case FOREIGN_TYPE:
202ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org      Foreign::cast(this)->ForeignVerify();
20343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
20443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case SHARED_FUNCTION_INFO_TYPE:
20543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      SharedFunctionInfo::cast(this)->SharedFunctionInfoVerify();
20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
20731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org    case JS_MESSAGE_OBJECT_TYPE:
20831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org      JSMessageObject::cast(this)->JSMessageObjectVerify();
20931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org      break;
210f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org    case JS_ARRAY_BUFFER_TYPE:
211f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org      JSArrayBuffer::cast(this)->JSArrayBufferVerify();
212f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org      break;
213e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    case JS_TYPED_ARRAY_TYPE:
214e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      JSTypedArray::cast(this)->JSTypedArrayVerify();
215e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      break;
2161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case JS_DATA_VIEW_TYPE:
2171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      JSDataView::cast(this)->JSDataViewVerify();
2181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      break;
21943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
22043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define MAKE_STRUCT_CASE(NAME, Name, name) \
22143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  case NAME##_TYPE:                        \
22243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    Name::cast(this)->Name##Verify();      \
22343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    break;
22443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    STRUCT_LIST(MAKE_STRUCT_CASE)
22543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef MAKE_STRUCT_CASE
22643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
22743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    default:
22843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      UNREACHABLE();
22943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
23043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
23143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
23243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
23343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
23443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::VerifyHeapPointer(Object* p) {
235c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(p->IsHeapObject());
236c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  HeapObject* ho = HeapObject::cast(p);
237c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  CHECK(ho->GetHeap()->Contains(ho));
23843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
23943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
24043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2414a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgvoid Symbol::SymbolVerify() {
2424a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  CHECK(IsSymbol());
2434a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  CHECK(HasHashCode());
2444a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  CHECK_GT(Hash(), 0);
245f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org  CHECK(name()->IsUndefined() || name()->IsString());
2460cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org  CHECK(flags()->IsSmi());
2474a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org}
2484a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org
2494a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org
25043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapNumber::HeapNumberVerify() {
251c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsHeapNumber());
25243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
2533811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2543811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
25543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid ByteArray::ByteArrayVerify() {
256c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsByteArray());
25743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
25843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
25943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
260c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comvoid FreeSpace::FreeSpaceVerify() {
261c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsFreeSpace());
262c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com}
263c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
264c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
2654d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.orgvoid ExternalPixelArray::ExternalPixelArrayVerify() {
266c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalPixelArray());
2670b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org}
2680b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org
2690b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org
2703811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalByteArray::ExternalByteArrayVerify() {
271c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalByteArray());
2723811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}
2733811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2743811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2753811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalUnsignedByteArray::ExternalUnsignedByteArrayVerify() {
276c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalUnsignedByteArray());
2773811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}
2783811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2793811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2803811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalShortArray::ExternalShortArrayVerify() {
281c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalShortArray());
2823811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}
2833811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2843811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2853811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalUnsignedShortArray::ExternalUnsignedShortArrayVerify() {
286c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalUnsignedShortArray());
2873811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}
2883811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2893811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2903811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalIntArray::ExternalIntArrayVerify() {
291c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalIntArray());
2923811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}
2933811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2943811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2953811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalUnsignedIntArray::ExternalUnsignedIntArrayVerify() {
296c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalUnsignedIntArray());
2973811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}
2983811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
2993811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
3003811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalFloatArray::ExternalFloatArrayVerify() {
301c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalFloatArray());
3023811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org}
3033811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
3043811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org
3053847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.comvoid ExternalDoubleArray::ExternalDoubleArrayVerify() {
306c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsExternalDoubleArray());
3073847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com}
3083847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com
3093847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com
310a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.orgbool JSObject::ElementsAreSafeToExamine() {
311a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org  return (FLAG_use_gvn && FLAG_use_allocation_folding) ||
312a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org      reinterpret_cast<Map*>(elements()) !=
313a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org      GetHeap()->one_pointer_filler_map();
314a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org}
315a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org
316a6516eb7a6c347f1146a0c823994a333468d818amvstanton@chromium.org
31743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::JSObjectVerify() {
31843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(properties());
31943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(elements());
320394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
321394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  if (GetElementsKind() == NON_STRICT_ARGUMENTS_ELEMENTS) {
322c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(this->elements()->IsFixedArray());
323c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK_GE(this->elements()->length(), 2);
324394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  }
325394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
32643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (HasFastProperties()) {
327911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org    CHECK_EQ(map()->unused_property_fields(),
328911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org             (map()->inobject_properties() + properties()->length() -
329911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org              map()->NextFreePropertyIndex()));
330bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org    DescriptorArray* descriptors = map()->instance_descriptors();
331bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org    for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) {
332bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org      if (descriptors->GetDetails(i).type() == FIELD) {
333bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org        Representation r = descriptors->GetDetails(i).representation();
334bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org        int field = descriptors->GetFieldIndex(i);
335bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org        Object* value = RawFastPropertyAt(field);
336bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org        if (r.IsDouble()) ASSERT(value->IsHeapNumber());
3371fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        if (value->IsUninitialized()) continue;
3381fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org        if (r.IsSmi()) ASSERT(value->IsSmi());
339bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org        if (r.IsHeapObject()) ASSERT(value->IsHeapObject());
340bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org      }
341bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org    }
34243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
343e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org
344528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // If a GC was caused while constructing this object, the elements
345528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // pointer may point to a one pointer filler map.
346ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org  if (ElementsAreSafeToExamine()) {
347e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org    CHECK_EQ((map()->has_fast_smi_or_object_elements() ||
348e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org              (elements() == GetHeap()->empty_fixed_array())),
349e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org             (elements()->map() == GetHeap()->fixed_array_map() ||
350e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org              elements()->map() == GetHeap()->fixed_cow_array_map()));
351e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org    CHECK(map()->has_fast_object_elements() == HasFastObjectElements());
352e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org  }
35343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
35443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
35643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Map::MapVerify() {
357c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  Heap* heap = GetHeap();
358c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org  CHECK(!heap->InNewSpace(this));
359c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE);
360c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(instance_size() == kVariableSizeSentinel ||
361145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com         (kPointerSize <= instance_size() &&
362c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org          instance_size() < heap->Capacity()));
36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(prototype());
36443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(instance_descriptors());
365212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org  SLOW_ASSERT(instance_descriptors()->IsSortedNoDuplicates());
36699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  if (HasTransitionArray()) {
36799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    SLOW_ASSERT(transitions()->IsSortedNoDuplicates());
36899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    SLOW_ASSERT(transitions()->IsConsistentWithBackPointers(this));
36999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  }
37043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
37243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3734a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.orgvoid Map::SharedMapVerify() {
37465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org  MapVerify();
375c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(is_shared());
376c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(instance_descriptors()->IsEmpty());
377c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, pre_allocated_property_fields());
378c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, unused_property_fields());
379c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(StaticVisitorBase::GetVisitorId(instance_type(), instance_size()),
38065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org      visitor_id());
38165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org}
38265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org
38365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org
384594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgvoid Map::VerifyOmittedMapChecks() {
385594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  if (!FLAG_omit_map_checks_for_leaf_maps) return;
386594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org  if (!is_stable() ||
387594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org      is_deprecated() ||
388594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org      HasTransitionArray() ||
389594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org      is_dictionary_map()) {
3902e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org    CHECK_EQ(0, dependent_code()->number_of_entries(
3912e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org        DependentCode::kPrototypeCheckGroup));
3922e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org  }
3932e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org}
3942e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org
3952e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org
396ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgvoid CodeCache::CodeCacheVerify() {
397ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  VerifyHeapPointer(default_cache());
398ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  VerifyHeapPointer(normal_type_cache());
399c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(default_cache()->IsFixedArray());
400c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(normal_type_cache()->IsUndefined()
401ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org         || normal_type_cache()->IsCodeCacheHashTable());
402ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org}
40343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
40443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
405e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgvoid PolymorphicCodeCache::PolymorphicCodeCacheVerify() {
406e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  VerifyHeapPointer(cache());
407c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(cache()->IsUndefined() || cache()->IsPolymorphicCodeCacheHashTable());
408e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}
409e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
410e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
411f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgvoid TypeFeedbackInfo::TypeFeedbackInfoVerify() {
41246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  VerifyObjectField(kStorage1Offset);
41346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  VerifyObjectField(kStorage2Offset);
414f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org  VerifyHeapPointer(type_feedback_cells());
415f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org}
416f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
417f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
418ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.orgvoid AliasedArgumentsEntry::AliasedArgumentsEntryVerify() {
419ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org  VerifySmiField(kAliasedContextSlot);
420ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org}
421ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org
422ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org
42343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid FixedArray::FixedArrayVerify() {
42443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (int i = 0; i < length(); i++) {
42543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    Object* e = get(i);
42643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    if (e->IsHeapObject()) {
42743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      VerifyHeapPointer(e);
42843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    } else {
42943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      e->Verify();
43043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
43143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
43243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
43343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
43443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4356d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgvoid FixedDoubleArray::FixedDoubleArrayVerify() {
4366d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org  for (int i = 0; i < length(); i++) {
4376d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org    if (!is_the_hole(i)) {
4387c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org      double value = get_scalar(i);
43977ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.org      CHECK(!std::isnan(value) ||
44084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org             (BitCast<uint64_t>(value) ==
441c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com              BitCast<uint64_t>(canonical_not_the_hole_nan_as_double())) ||
442c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com             ((BitCast<uint64_t>(value) & Double::kSignMask) != 0));
4436d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org    }
4446d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org  }
4456d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org}
4466d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org
4476d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org
448a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgvoid ConstantPoolArray::ConstantPoolArrayVerify() {
449a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org  CHECK(IsConstantPoolArray());
450a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org}
451a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org
452a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org
453e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvoid JSGeneratorObject::JSGeneratorObjectVerify() {
454e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  // In an expression like "new g()", there can be a point where a generator
455e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  // object is allocated but its fields are all undefined, as it hasn't yet been
456e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  // initialized by the generator.  Hence these weak checks.
457e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kFunctionOffset);
458e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kContextOffset);
459ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org  VerifyObjectField(kReceiverOffset);
460e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kOperandStackOffset);
461e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyObjectField(kContinuationOffset);
46257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org  VerifyObjectField(kStackHandlerIndexOffset);
463e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
464e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
465e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
466ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comvoid JSModule::JSModuleVerify() {
46781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org  VerifyObjectField(kContextOffset);
46881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org  VerifyObjectField(kScopeInfoOffset);
46946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  CHECK(context()->IsUndefined() ||
47046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org        Context::cast(context())->IsModuleContext());
471ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com}
472ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com
473ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com
47443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSValue::JSValueVerify() {
47543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  Object* v = value();
47643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (v->IsHeapObject()) {
47743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    VerifyHeapPointer(v);
47843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
47943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
48043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
48143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4824efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgvoid JSDate::JSDateVerify() {
4834efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (value()->IsHeapObject()) {
4844efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    VerifyHeapPointer(value());
4854efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
4864efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(value()->IsUndefined() || value()->IsSmi() || value()->IsHeapNumber());
4874efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(year()->IsUndefined() || year()->IsSmi() || year()->IsNaN());
4884efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(month()->IsUndefined() || month()->IsSmi() || month()->IsNaN());
4894efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(day()->IsUndefined() || day()->IsSmi() || day()->IsNaN());
4904efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(weekday()->IsUndefined() || weekday()->IsSmi() || weekday()->IsNaN());
4914efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(hour()->IsUndefined() || hour()->IsSmi() || hour()->IsNaN());
4924efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(min()->IsUndefined() || min()->IsSmi() || min()->IsNaN());
4934efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(sec()->IsUndefined() || sec()->IsSmi() || sec()->IsNaN());
4944efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  CHECK(cache_stamp()->IsUndefined() ||
4954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org        cache_stamp()->IsSmi() ||
4964efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org        cache_stamp()->IsNaN());
4974efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
4984efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (month()->IsSmi()) {
4994efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int month = Smi::cast(this->month())->value();
5004efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= month && month <= 11);
5014efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
5024efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (day()->IsSmi()) {
5034efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int day = Smi::cast(this->day())->value();
5044efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(1 <= day && day <= 31);
5054efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
5064efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (hour()->IsSmi()) {
5074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int hour = Smi::cast(this->hour())->value();
5084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= hour && hour <= 23);
5094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
5104efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (min()->IsSmi()) {
5114efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int min = Smi::cast(this->min())->value();
5124efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= min && min <= 59);
5134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
5144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (sec()->IsSmi()) {
5154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int sec = Smi::cast(this->sec())->value();
5164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= sec && sec <= 59);
5174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
5184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (weekday()->IsSmi()) {
5194efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    int weekday = Smi::cast(this->weekday())->value();
5204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(0 <= weekday && weekday <= 6);
5214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
5224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  if (cache_stamp()->IsSmi()) {
5234efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org    CHECK(Smi::cast(cache_stamp())->value() <=
5243d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org          Smi::cast(GetIsolate()->date_cache()->stamp())->value());
5254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  }
5264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org}
5274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
5284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org
52931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgvoid JSMessageObject::JSMessageObjectVerify() {
53031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  CHECK(IsJSMessageObject());
53131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  CHECK(type()->IsString());
53231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  CHECK(arguments()->IsJSArray());
53331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kStartPositionOffset);
53431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kEndPositionOffset);
53531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kArgumentsOffset);
53631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kScriptOffset);
53731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kStackTraceOffset);
53831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org  VerifyObjectField(kStackFramesOffset);
53931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org}
54031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org
54131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org
54243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid String::StringVerify() {
54343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsString());
54443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(length() >= 0 && length() <= Smi::kMaxValue);
5454a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  if (IsInternalizedString()) {
546c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org    CHECK(!GetHeap()->InNewSpace(this));
54743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
5484668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  if (IsConsString()) {
5494668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    ConsString::cast(this)->ConsStringVerify();
5504668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  } else if (IsSlicedString()) {
5514668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    SlicedString::cast(this)->SlicedStringVerify();
5524668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  }
5534668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org}
5544668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
5554668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
5564668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgvoid ConsString::ConsStringVerify() {
5574668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(this->first()->IsString());
5584668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(this->second() == GetHeap()->empty_string() ||
5594668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org        this->second()->IsString());
5602efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org  CHECK(this->length() >= ConsString::kMinLength);
5614668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  if (this->IsFlat()) {
5624668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    // A flat cons can only be created by String::SlowTryFlatten.
5634668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    // Afterwards, the first part may be externalized.
5644668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org    CHECK(this->first()->IsSeqString() || this->first()->IsExternalString());
5654668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  }
5664668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org}
5674668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
5684668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org
5694668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgvoid SlicedString::SlicedStringVerify() {
5704668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(!this->parent()->IsConsString());
5714668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(!this->parent()->IsSlicedString());
5724668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org  CHECK(this->length() >= SlicedString::kMinLength);
57343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
57643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSFunction::JSFunctionVerify() {
57743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsJSFunction());
57843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kPrototypeOrInitialMapOffset);
579a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  VerifyObjectField(kNextFunctionLinkOffset);
580c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  CHECK(code()->IsCode());
581e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org  CHECK(next_function_link() == NULL ||
582e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org        next_function_link()->IsUndefined() ||
583a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        next_function_link()->IsJSFunction());
58443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
58543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
586023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
58743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid SharedFunctionInfo::SharedFunctionInfoVerify() {
58843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsSharedFunctionInfo());
58943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kNameOffset);
59043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kCodeOffset);
5915a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org  VerifyObjectField(kOptimizedCodeMapOffset);
5926a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org  VerifyObjectField(kScopeInfoOffset);
59343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kInstanceClassNameOffset);
594f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org  VerifyObjectField(kFunctionDataOffset);
59543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kScriptOffset);
59643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyObjectField(kDebugInfoOffset);
59743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
5985a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org
5995a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org
6005a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgvoid JSGlobalProxy::JSGlobalProxyVerify() {
6015a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  CHECK(IsJSGlobalProxy());
6025a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  JSObjectVerify();
60346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org  VerifyObjectField(JSGlobalProxy::kNativeContextOffset);
6045a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  // Make sure that this object has no properties, elements.
6055a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org  CHECK_EQ(0, properties()->length());
606830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org  CHECK(HasFastObjectElements());
60730ce411529579186181838984710b0b0980857aaricow@chromium.org  CHECK_EQ(0, FixedArray::cast(elements())->length());
6085a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org}
60943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
61043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
61143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSGlobalObject::JSGlobalObjectVerify() {
61243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsJSGlobalObject());
61343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  JSObjectVerify();
61443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (int i = GlobalObject::kBuiltinsOffset;
61543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i < JSGlobalObject::kSize;
61643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i += kPointerSize) {
61743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    VerifyObjectField(i);
61843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
61943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
62043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
62143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
62243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSBuiltinsObject::JSBuiltinsObjectVerify() {
62343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsJSBuiltinsObject());
62443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  JSObjectVerify();
62543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (int i = GlobalObject::kBuiltinsOffset;
62643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i < JSBuiltinsObject::kSize;
62743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       i += kPointerSize) {
62843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    VerifyObjectField(i);
62943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
63043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
63243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
63343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Oddball::OddballVerify() {
63443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsOddball());
63543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyHeapPointer(to_string());
63643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  Object* number = to_number();
63743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (number->IsHeapObject()) {
638c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org    CHECK(number == HeapObject::cast(number)->GetHeap()->nan_value());
63943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
640c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(number->IsSmi());
64143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    int value = Smi::cast(number)->value();
642c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com    // Hidden oddballs have negative smis.
6432c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org    const int kLeastHiddenOddballNumber = -4;
644c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK_LE(value, 1);
645c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    CHECK(value >= kLeastHiddenOddballNumber);
64643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
64743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
64843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
64943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
65041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgvoid Cell::CellVerify() {
65141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org  CHECK(IsCell());
65241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org  VerifyObjectField(kValueOffset);
65341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org}
65441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org
65541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org
656b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.orgvoid PropertyCell::PropertyCellVerify() {
657b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org  CHECK(IsPropertyCell());
6582abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org  VerifyObjectField(kValueOffset);
65941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org  VerifyObjectField(kTypeOffset);
6602abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org}
6612abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
6622abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
66343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Code::CodeVerify() {
664061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org  CHECK(IsAligned(reinterpret_cast<intptr_t>(instruction_start()),
6654a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org                  kCodeAlignment));
666c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  relocation_info()->Verify();
6677276f14ca716596e0a0d17539516370c1f453847kasper.lund  Address last_gc_pc = NULL;
66843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (RelocIterator it(this); !it.done(); it.next()) {
66943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    it.rinfo()->Verify();
6707276f14ca716596e0a0d17539516370c1f453847kasper.lund    // Ensure that GC will not iterate twice over the same pointer.
671236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org    if (RelocInfo::IsGCRelocMode(it.rinfo()->rmode())) {
6727276f14ca716596e0a0d17539516370c1f453847kasper.lund      CHECK(it.rinfo()->pc() != last_gc_pc);
6737276f14ca716596e0a0d17539516370c1f453847kasper.lund      last_gc_pc = it.rinfo()->pc();
6747276f14ca716596e0a0d17539516370c1f453847kasper.lund    }
67543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
67643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
67743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
67843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
67925b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.orgvoid Code::VerifyEmbeddedObjectsDependency() {
68094b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org  int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
68194b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org  for (RelocIterator it(this, mode_mask); !it.done(); it.next()) {
68225b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org    Object* obj = it.rinfo()->target_object();
68325b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org    if (IsWeakEmbeddedObject(kind(), obj)) {
68425b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org      if (obj->IsMap()) {
68525b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org        Map* map = Map::cast(obj);
6862e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org        CHECK(map->dependent_code()->Contains(
6872e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org            DependentCode::kWeaklyEmbeddedGroup, this));
68825b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org      } else if (obj->IsJSObject()) {
68925b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org        Object* raw_table = GetIsolate()->heap()->weak_object_to_code_table();
69025b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org        WeakHashTable* table = WeakHashTable::cast(raw_table);
69125b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org        CHECK(DependentCode::cast(table->Lookup(obj))->Contains(
69225b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org            DependentCode::kWeaklyEmbeddedGroup, this));
69394b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org      }
69494b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org    }
69594b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org  }
69694b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org}
69794b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org
69894b0d6fcb08a2f01ba52c6edb712068f482366f1danno@chromium.org
69943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSArray::JSArrayVerify() {
70043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  JSObjectVerify();
701c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(length()->IsNumber() || length()->IsUndefined());
702528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // If a GC was caused while constructing this array, the elements
703528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org  // pointer may point to a one pointer filler map.
704ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org  if (ElementsAreSafeToExamine()) {
705e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org    CHECK(elements()->IsUndefined() ||
706e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org          elements()->IsFixedArray() ||
707e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org          elements()->IsFixedDoubleArray());
708e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org  }
70943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
71043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
71143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
712394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid JSSet::JSSetVerify() {
713394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  CHECK(IsJSSet());
714394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  JSObjectVerify();
715394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  VerifyHeapPointer(table());
716c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(table()->IsHashTable() || table()->IsUndefined());
717394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
718394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
719394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
720394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid JSMap::JSMapVerify() {
721394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  CHECK(IsJSMap());
722394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  JSObjectVerify();
723394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  VerifyHeapPointer(table());
724c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(table()->IsHashTable() || table()->IsUndefined());
725394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
726394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
727394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
7287c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgvoid JSWeakMap::JSWeakMapVerify() {
7297c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org  CHECK(IsJSWeakMap());
7307c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org  JSObjectVerify();
7317c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org  VerifyHeapPointer(table());
732c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(table()->IsHashTable() || table()->IsUndefined());
7337c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org}
7347c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org
7357c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org
736ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgvoid JSWeakSet::JSWeakSetVerify() {
737ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  CHECK(IsJSWeakSet());
738ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  JSObjectVerify();
739ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  VerifyHeapPointer(table());
740ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  CHECK(table()->IsHashTable() || table()->IsUndefined());
741ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org}
742ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
743ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
744236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.orgvoid JSRegExp::JSRegExpVerify() {
745236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org  JSObjectVerify();
746c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(data()->IsUndefined() || data()->IsFixedArray());
7479fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org  switch (TypeTag()) {
7489fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org    case JSRegExp::ATOM: {
7499fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org      FixedArray* arr = FixedArray::cast(data());
750c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(arr->get(JSRegExp::kAtomPatternIndex)->IsString());
7519fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org      break;
75241044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org    }
753a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org    case JSRegExp::IRREGEXP: {
75468ac009f55a85e6891742d58914eaf717f667b26kasperl@chromium.org      bool is_native = RegExpImpl::UsesNativeRegExp();
755bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org
756a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org      FixedArray* arr = FixedArray::cast(data());
7577be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org      Object* ascii_data = arr->get(JSRegExp::kIrregexpASCIICodeIndex);
758ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org      // Smi : Not compiled yet (-1) or code prepared for flushing.
759a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org      // JSObject: Compilation error.
760a1645e29968e70a41226edda2c49788fcea48b74ager@chromium.org      // Code/ByteArray: Compiled code.
761c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(ascii_data->IsSmi() ||
762ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org             (is_native ? ascii_data->IsCode() : ascii_data->IsByteArray()));
7637be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org      Object* uc16_data = arr->get(JSRegExp::kIrregexpUC16CodeIndex);
764c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(uc16_data->IsSmi() ||
765ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org             (is_native ? uc16_data->IsCode() : uc16_data->IsByteArray()));
766ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
767ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org      Object* ascii_saved = arr->get(JSRegExp::kIrregexpASCIICodeSavedIndex);
768c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(ascii_saved->IsSmi() || ascii_saved->IsString() ||
769ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org             ascii_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());
814e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  CHECK(buffer()->IsJSArrayBuffer() || buffer()->IsUndefined());
815e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
816e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(byte_offset());
817e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  CHECK(byte_offset()->IsSmi() || byte_offset()->IsHeapNumber()
818e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        || byte_offset()->IsUndefined());
819e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
820e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(byte_length());
821e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber()
822e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        || byte_length()->IsUndefined());
8231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
8241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
825e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
8261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid JSTypedArray::JSTypedArrayVerify() {
8271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CHECK(IsJSTypedArray());
8281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  JSArrayBufferViewVerify();
829e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(length());
830e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  CHECK(length()->IsSmi() || length()->IsHeapNumber()
831e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        || length()->IsUndefined());
832e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
833e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  VerifyPointer(elements());
834e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
835e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
836e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
8371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid JSDataView::JSDataViewVerify() {
8381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  CHECK(IsJSDataView());
8391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  JSArrayBufferViewVerify();
8401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
8411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
8421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
843ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgvoid Foreign::ForeignVerify() {
844c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(IsForeign());
84543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
84643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
84743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgvoid Box::BoxVerify() {
8491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  CHECK(IsBox());
8501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org  value()->Verify();
8511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org}
8521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
8531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org
85443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AccessorInfo::AccessorInfoVerify() {
85543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(name());
85643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(flag());
8577028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org  VerifyPointer(expected_receiver_type());
85843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
859023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
86043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
8617c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgvoid ExecutableAccessorInfo::ExecutableAccessorInfoVerify() {
8627c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  CHECK(IsExecutableAccessorInfo());
8637c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  AccessorInfoVerify();
8647c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(getter());
8657c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(setter());
8667c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(data());
8677c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}
8687c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8697c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8707c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgvoid DeclaredAccessorDescriptor::DeclaredAccessorDescriptorVerify() {
8717c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  CHECK(IsDeclaredAccessorDescriptor());
872750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  VerifyPointer(serialized_data());
8737c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}
8747c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8757c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8767c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgvoid DeclaredAccessorInfo::DeclaredAccessorInfoVerify() {
8777c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  CHECK(IsDeclaredAccessorInfo());
8787c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  AccessorInfoVerify();
8797c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org  VerifyPointer(descriptor());
8807c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org}
8817c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
8827c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org
883f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comvoid AccessorPair::AccessorPairVerify() {
884f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com  CHECK(IsAccessorPair());
885f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com  VerifyPointer(getter());
886f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com  VerifyPointer(setter());
8871e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org  VerifySmiField(kAccessFlagsOffset);
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(data());
97965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org  VerifyPointer(wrapper());
98043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  type()->SmiVerify();
981499aaa52a876ef8e8b81ac115cafb969eb585c96sgjesse@chromium.org  VerifyPointer(line_ends());
98265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org  VerifyPointer(id());
98343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
98443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
98543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
986c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.orgvoid JSFunctionResultCache::JSFunctionResultCacheVerify() {
987c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  JSFunction::cast(get(kFactoryIndex))->Verify();
988c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
989c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  int size = Smi::cast(get(kCacheSizeIndex))->value();
990c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(kEntriesIndex <= size);
991c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(size <= length());
992c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, size % kEntrySize);
993c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
994c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  int finger = Smi::cast(get(kFingerIndex))->value();
995c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK(kEntriesIndex <= finger);
996c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK((finger < size) || (finger == kEntriesIndex && finger == size));
997c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  CHECK_EQ(0, finger % kEntrySize);
998c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
999c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  if (FLAG_enable_slow_asserts) {
1000c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    for (int i = kEntriesIndex; i < size; i++) {
1001c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(!get(i)->IsTheHole());
1002c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      get(i)->Verify();
1003c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    }
1004c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    for (int i = size; i < length(); i++) {
1005c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      CHECK(get(i)->IsTheHole());
1006c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      get(i)->Verify();
1007c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    }
1008c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  }
1009c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org}
1010c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1011c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1012c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.orgvoid NormalizedMapCache::NormalizedMapCacheVerify() {
1013c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  FixedArray::cast(this)->Verify();
1014c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  if (FLAG_enable_slow_asserts) {
1015c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    for (int i = 0; i < length(); i++) {
1016c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      Object* e = get(i);
1017c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      if (e->IsMap()) {
1018c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org        Map::cast(e)->SharedMapVerify();
1019c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      } else {
1020c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org        CHECK(e->IsUndefined());
1021c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org      }
1022c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org    }
1023c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org  }
1024c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org}
1025c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1026c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org
1027e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org#ifdef ENABLE_DEBUGGER_SUPPORT
102843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid DebugInfo::DebugInfoVerify() {
102943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsDebugInfo());
103043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(shared());
103143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(original_code());
103243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(code());
103343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(break_points());
103443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
103543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
103643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
103743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid BreakPointInfo::BreakPointInfoVerify() {
103843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  CHECK(IsBreakPointInfo());
103943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  code_position()->SmiVerify();
104043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  source_position()->SmiVerify();
104143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  statement_position()->SmiVerify();
104243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  VerifyPointer(break_point_objects());
104343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
1044023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org#endif  // ENABLE_DEBUGGER_SUPPORT
1045c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#endif  // VERIFY_HEAP
104643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1047c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef DEBUG
104843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
104943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::IncrementSpillStatistics(SpillInformation* info) {
105043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  info->number_of_objects_++;
105143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Named properties
105243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  if (HasFastProperties()) {
105343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_objects_with_fast_properties_++;
105443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_fast_used_fields_   += map()->NextFreePropertyIndex();
105543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_fast_unused_fields_ += map()->unused_property_fields();
105643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  } else {
1057750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org    NameDictionary* dict = property_dictionary();
105843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_slow_used_properties_ += dict->NumberOfElements();
105943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    info->number_of_slow_unused_properties_ +=
106043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        dict->Capacity() - dict->NumberOfElements();
106143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
106243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // Indexed properties
10630b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org  switch (GetElementsKind()) {
1064830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_HOLEY_SMI_ELEMENTS:
1065830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_SMI_ELEMENTS:
1066830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_HOLEY_DOUBLE_ELEMENTS:
1067830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_DOUBLE_ELEMENTS:
1068830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case FAST_HOLEY_ELEMENTS:
10690b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    case FAST_ELEMENTS: {
10700b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_objects_with_fast_elements_++;
10710b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      int holes = 0;
10720b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      FixedArray* e = FixedArray::cast(elements());
10730b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      int len = e->length();
1074c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org      Heap* heap = GetHeap();
10750b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      for (int i = 0; i < len; i++) {
1076ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        if (e->get(i) == heap->the_hole_value()) holes++;
10770b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      }
10780b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_fast_used_elements_   += len - holes;
10790b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_fast_unused_elements_ += holes;
10800b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
108143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    }
1082830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_BYTE_ELEMENTS:
1083830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
1084830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_SHORT_ELEMENTS:
1085830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
1086830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_INT_ELEMENTS:
1087830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_UNSIGNED_INT_ELEMENTS:
1088830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_FLOAT_ELEMENTS:
1089830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case EXTERNAL_DOUBLE_ELEMENTS:
10904d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org    case EXTERNAL_PIXEL_ELEMENTS: {
10910b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_objects_with_fast_elements_++;
10924d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org      ExternalPixelArray* e = ExternalPixelArray::cast(elements());
10930b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_fast_used_elements_ += e->length();
10940b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
10950b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    }
10960b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    case DICTIONARY_ELEMENTS: {
1097f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com      SeededNumberDictionary* dict = element_dictionary();
10980b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_slow_used_elements_ += dict->NumberOfElements();
10990b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      info->number_of_slow_unused_elements_ +=
11000b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org          dict->Capacity() - dict->NumberOfElements();
11010b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
11020b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org    }
1103830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org    case NON_STRICT_ARGUMENTS_ELEMENTS:
11040b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org      break;
110543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
110643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
110743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
110843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
110943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::SpillInformation::Clear() {
111043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_objects_ = 0;
111143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_objects_with_fast_properties_ = 0;
111243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_objects_with_fast_elements_ = 0;
111343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_used_fields_ = 0;
111443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_unused_fields_ = 0;
111543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_used_properties_ = 0;
111643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_unused_properties_ = 0;
111743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_used_elements_ = 0;
111843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_fast_unused_elements_ = 0;
111943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_used_elements_ = 0;
112043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  number_of_slow_unused_elements_ = 0;
112143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
112243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1123e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
112443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::SpillInformation::Print() {
112543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("\n  JSObject Spill Statistics (#%d):\n", number_of_objects_);
112643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
112743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - fast properties (#%d): %d (used) %d (unused)\n",
112843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_with_fast_properties_,
112943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_fast_used_fields_, number_of_fast_unused_fields_);
113043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
113143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - slow properties (#%d): %d (used) %d (unused)\n",
113243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_ - number_of_objects_with_fast_properties_,
113343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_slow_used_properties_, number_of_slow_unused_properties_);
113443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
113543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - fast elements (#%d): %d (used) %d (unused)\n",
113643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_with_fast_elements_,
113743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_fast_used_elements_, number_of_fast_unused_elements_);
113843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
113943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("    - slow elements (#%d): %d (used) %d (unused)\n",
114043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_objects_ - number_of_objects_with_fast_elements_,
114143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen         number_of_slow_used_elements_, number_of_slow_unused_elements_);
114243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
114343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  PrintF("\n");
114443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
114543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
114643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
114706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgbool DescriptorArray::IsSortedNoDuplicates(int valid_entries) {
114806ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org  if (valid_entries == -1) valid_entries = number_of_descriptors();
1149750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  Name* current_key = NULL;
1150769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com  uint32_t current = 0;
115133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  for (int i = 0; i < number_of_descriptors(); i++) {
1152750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org    Name* key = GetSortedKey(i);
1153769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    if (key == current_key) {
1154769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com      PrintDescriptors();
1155769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com      return false;
1156769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    }
1157769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    current_key = key;
115846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org    uint32_t hash = GetSortedKey(i)->Hash();
1159769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    if (hash < current) {
1160769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com      PrintDescriptors();
1161769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com      return false;
1162769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    }
1163769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com    current = hash;
1164769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com  }
1165769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com  return true;
1166769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com}
1167769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com
1168769cc962a043dd8d92cc010dd2c50bc26f652c94mads.s.ager@gmail.com
116906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgbool TransitionArray::IsSortedNoDuplicates(int valid_entries) {
117006ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org  ASSERT(valid_entries == -1);
1171750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org  Name* current_key = NULL;
117299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  uint32_t current = 0;
117399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  for (int i = 0; i < number_of_transitions(); i++) {
1174750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org    Name* key = GetSortedKey(i);
117599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    if (key == current_key) {
117699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      PrintTransitions();
117799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      return false;
117899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    }
117999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    current_key = key;
118046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org    uint32_t hash = GetSortedKey(i)->Hash();
118199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    if (hash < current) {
118299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      PrintTransitions();
118399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      return false;
118499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    }
118599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    current = hash;
118699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  }
118799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  return true;
118899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org}
118999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org
119099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org
1191212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.orgstatic bool CheckOneBackPointer(Map* current_map, Object* target) {
1192212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org  return !target->IsMap() || Map::cast(target)->GetBackPointer() == current_map;
1193212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org}
1194212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
1195212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
119699aa490225c81012235659d9a183226b286178c8yangguo@chromium.orgbool TransitionArray::IsConsistentWithBackPointers(Map* current_map) {
119799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org  for (int i = 0; i < number_of_transitions(); ++i) {
1198753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org    if (!CheckOneBackPointer(current_map, GetTarget(i))) return false;
1199212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org  }
1200212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org  return true;
1201212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org}
1202212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
1203212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org
120443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif  // DEBUG
120543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
120643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
1207