/ bytecode / ExitKind.cpp
ExitKind.cpp
  1  /*
  2   * Copyright (C) 2012-2016 Apple Inc. All rights reserved.
  3   *
  4   * Redistribution and use in source and binary forms, with or without
  5   * modification, are permitted provided that the following conditions
  6   * are met:
  7   * 1. Redistributions of source code must retain the above copyright
  8   *    notice, this list of conditions and the following disclaimer.
  9   * 2. Redistributions in binary form must reproduce the above copyright
 10   *    notice, this list of conditions and the following disclaimer in the
 11   *    documentation and/or other materials provided with the distribution.
 12   *
 13   * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 14   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 17   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 18   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 19   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 20   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 21   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 22   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 23   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 24   */
 25  
 26  #include "config.h"
 27  #include "ExitKind.h"
 28  
 29  #include <wtf/Assertions.h>
 30  #include <wtf/PrintStream.h>
 31  
 32  namespace JSC {
 33  
 34  const char* exitKindToString(ExitKind kind)
 35  {
 36      switch (kind) {
 37      case ExitKindUnset:
 38          return "Unset";
 39      case BadType:
 40          return "BadType";
 41      case BadConstantValue:
 42          return "BadConstantValue";
 43      case BadIdent:
 44          return "BadIdent";
 45      case BadExecutable:
 46          return "BadExecutable";
 47      case BadCache:
 48          return "BadCache";
 49      case BadConstantCache:
 50          return "BadConstantCache";
 51      case BadIndexingType:
 52          return "BadIndexingType";
 53      case BadTypeInfoFlags:
 54          return "BadTypeInfoFlags";
 55      case Overflow:
 56          return "Overflow";
 57      case NegativeZero:
 58          return "NegativeZero";
 59      case NegativeIndex:
 60          return "NegativeIndex";
 61      case Int52Overflow:
 62          return "Int52Overflow";
 63      case StoreToHole:
 64          return "StoreToHole";
 65      case LoadFromHole:
 66          return "LoadFromHole";
 67      case OutOfBounds:
 68          return "OutOfBounds";
 69      case InadequateCoverage:
 70          return "InadequateCoverage";
 71      case ArgumentsEscaped:
 72          return "ArgumentsEscaped";
 73      case ExoticObjectMode:
 74          return "ExoticObjectMode";
 75      case VarargsOverflow:
 76          return "VarargsOverflow";
 77      case TDZFailure:
 78          return "TDZFailure";
 79      case HoistingFailed:
 80          return "HoistingFailed";
 81      case Uncountable:
 82          return "Uncountable";
 83      case UncountableInvalidation:
 84          return "UncountableInvalidation";
 85      case WatchdogTimerFired:
 86          return "WatchdogTimerFired";
 87      case DebuggerEvent:
 88          return "DebuggerEvent";
 89      case ExceptionCheck:
 90          return "ExceptionCheck";
 91      case GenericUnwind:
 92          return "GenericUnwind";
 93      case BigInt32Overflow:
 94          return "BigInt32Overflow";
 95      }
 96      RELEASE_ASSERT_NOT_REACHED();
 97      return "Unknown";
 98  }
 99  
100  bool exitKindMayJettison(ExitKind kind)
101  {
102      switch (kind) {
103      case ExceptionCheck:
104      case GenericUnwind:
105          return false;
106      default:
107          return true;
108      }
109  }
110  
111  } // namespace JSC
112  
113  namespace WTF {
114  
115  void printInternal(PrintStream& out, JSC::ExitKind kind)
116  {
117      out.print(exitKindToString(kind));
118  }
119  
120  } // namespace WTF
121