| // Copyright 2016 the V8 project authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "src/deoptimize-reason.h" | 
 |  | 
 | namespace v8 { | 
 | namespace internal { | 
 |  | 
 | std::ostream& operator<<(std::ostream& os, DeoptimizeReason reason) { | 
 |   switch (reason) { | 
 | #define DEOPTIMIZE_REASON(Name, message) \ | 
 |   case DeoptimizeReason::k##Name:        \ | 
 |     return os << #Name; | 
 |     DEOPTIMIZE_REASON_LIST(DEOPTIMIZE_REASON) | 
 | #undef DEOPTIMIZE_REASON | 
 |   } | 
 |   UNREACHABLE(); | 
 | } | 
 |  | 
 | size_t hash_value(DeoptimizeReason reason) { | 
 |   return static_cast<uint8_t>(reason); | 
 | } | 
 |  | 
 | char const* DeoptimizeReasonToString(DeoptimizeReason reason) { | 
 |   static char const* kDeoptimizeReasonStrings[] = { | 
 | #define DEOPTIMIZE_REASON(Name, message) message, | 
 |       DEOPTIMIZE_REASON_LIST(DEOPTIMIZE_REASON) | 
 | #undef DEOPTIMIZE_REASON | 
 |   }; | 
 |   size_t const index = static_cast<size_t>(reason); | 
 |   DCHECK_LT(index, arraysize(kDeoptimizeReasonStrings)); | 
 |   return kDeoptimizeReasonStrings[index]; | 
 | } | 
 |  | 
 | }  // namespace internal | 
 | }  // namespace v8 |