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