1994edf6a113fb3651536b60073df05a72a95f77erossberg@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
3071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
3171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
34394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid LookupResult::Iterate(ObjectVisitor* visitor) {
35394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  LookupResult* current = this;  // Could be NULL.
36394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  while (current != NULL) {
37394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    visitor->VisitPointer(BitCast<Object**>(&current->holder_));
38394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com    current = current->next_;
39394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com  }
40394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
41394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
42394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
43023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org#ifdef OBJECT_PRINT
44023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.orgvoid LookupResult::Print(FILE* out) {
455c838251403b0be9a882540f1922577abba4c872ager@chromium.org  if (!IsFound()) {
46023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org    PrintF(out, "Not Found\n");
4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return;
4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
50023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  PrintF(out, "LookupResult:\n");
51023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  PrintF(out, " -cacheable = %s\n", IsCacheable() ? "true" : "false");
52023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  PrintF(out, " -attributes = %x\n", GetAttributes());
5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  switch (type()) {
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case NORMAL:
55023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, " -type = normal\n");
56023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, " -entry = %d", GetDictionaryEntry());
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
58fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    case CONSTANT:
59fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org      PrintF(out, " -type = constant\n");
60fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org      PrintF(out, " -value:\n");
61fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org      GetConstant()->Print(out);
62023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, "\n");
6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case FIELD:
65023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, " -type = field\n");
66eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org      PrintF(out, " -index = %d", GetFieldIndex().field_index());
67023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, "\n");
6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case CALLBACKS:
70023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, " -type = call backs\n");
71023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, " -callback object:\n");
72023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      GetCallbackObject()->Print(out);
7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
74c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org    case HANDLER:
75c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org      PrintF(out, " -type = lookup proxy\n");
76c53e10d01c5495df3896b9d318910b58688c6929kmillikin@chromium.org      break;
7743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case INTERCEPTOR:
78023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org      PrintF(out, " -type = lookup interceptor\n");
7943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      break;
8099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org    case TRANSITION:
8199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      switch (GetTransitionDetails().type()) {
8299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org        case FIELD:
8399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, " -type = map transition\n");
8499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, " -map:\n");
8599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          GetTransitionMap()->Print(out);
8699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, "\n");
8799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          return;
88fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        case CONSTANT:
8999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, " -type = constant property transition\n");
9099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, " -map:\n");
9199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          GetTransitionMap()->Print(out);
9299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, "\n");
9399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          return;
9499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org        case CALLBACKS:
9599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, " -type = callbacks transition\n");
9699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          PrintF(out, " -callback object:\n");
9799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          GetCallbackObject()->Print(out);
9899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          return;
9999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org        default:
10099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          UNREACHABLE();
10199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org          return;
10299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org      }
1037a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org    case NONEXISTENT:
1047a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org      UNREACHABLE();
1059a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com      break;
10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
10743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
10843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
10943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
110023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.orgvoid Descriptor::Print(FILE* out) {
111023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  PrintF(out, "Descriptor ");
112023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  GetKey()->ShortPrint(out);
113023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  PrintF(out, " @ ");
114023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org  GetValue()->ShortPrint(out);
11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif
11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
122