Home | History | Annotate | Download | only in src
      1 // Copyright 2015 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "src/type-hints.h"
      6 
      7 namespace v8 {
      8 namespace internal {
      9 
     10 std::ostream& operator<<(std::ostream& os, BinaryOperationHint hint) {
     11   switch (hint) {
     12     case BinaryOperationHint::kNone:
     13       return os << "None";
     14     case BinaryOperationHint::kSignedSmall:
     15       return os << "SignedSmall";
     16     case BinaryOperationHint::kSigned32:
     17       return os << "Signed32";
     18     case BinaryOperationHint::kNumberOrOddball:
     19       return os << "NumberOrOddball";
     20     case BinaryOperationHint::kString:
     21       return os << "String";
     22     case BinaryOperationHint::kAny:
     23       return os << "Any";
     24   }
     25   UNREACHABLE();
     26   return os;
     27 }
     28 
     29 std::ostream& operator<<(std::ostream& os, CompareOperationHint hint) {
     30   switch (hint) {
     31     case CompareOperationHint::kNone:
     32       return os << "None";
     33     case CompareOperationHint::kSignedSmall:
     34       return os << "SignedSmall";
     35     case CompareOperationHint::kNumber:
     36       return os << "Number";
     37     case CompareOperationHint::kNumberOrOddball:
     38       return os << "NumberOrOddball";
     39     case CompareOperationHint::kInternalizedString:
     40       return os << "InternalizedString";
     41     case CompareOperationHint::kString:
     42       return os << "String";
     43     case CompareOperationHint::kReceiver:
     44       return os << "Receiver";
     45     case CompareOperationHint::kAny:
     46       return os << "Any";
     47   }
     48   UNREACHABLE();
     49   return os;
     50 }
     51 
     52 std::ostream& operator<<(std::ostream& os, ToBooleanHint hint) {
     53   switch (hint) {
     54     case ToBooleanHint::kNone:
     55       return os << "None";
     56     case ToBooleanHint::kUndefined:
     57       return os << "Undefined";
     58     case ToBooleanHint::kBoolean:
     59       return os << "Boolean";
     60     case ToBooleanHint::kNull:
     61       return os << "Null";
     62     case ToBooleanHint::kSmallInteger:
     63       return os << "SmallInteger";
     64     case ToBooleanHint::kReceiver:
     65       return os << "Receiver";
     66     case ToBooleanHint::kString:
     67       return os << "String";
     68     case ToBooleanHint::kSymbol:
     69       return os << "Symbol";
     70     case ToBooleanHint::kHeapNumber:
     71       return os << "HeapNumber";
     72     case ToBooleanHint::kAny:
     73       return os << "Any";
     74     case ToBooleanHint::kNeedsMap:
     75       return os << "NeedsMap";
     76   }
     77   UNREACHABLE();
     78   return os;
     79 }
     80 
     81 std::string ToString(ToBooleanHint hint) {
     82   switch (hint) {
     83     case ToBooleanHint::kNone:
     84       return "None";
     85     case ToBooleanHint::kUndefined:
     86       return "Undefined";
     87     case ToBooleanHint::kBoolean:
     88       return "Boolean";
     89     case ToBooleanHint::kNull:
     90       return "Null";
     91     case ToBooleanHint::kSmallInteger:
     92       return "SmallInteger";
     93     case ToBooleanHint::kReceiver:
     94       return "Receiver";
     95     case ToBooleanHint::kString:
     96       return "String";
     97     case ToBooleanHint::kSymbol:
     98       return "Symbol";
     99     case ToBooleanHint::kHeapNumber:
    100       return "HeapNumber";
    101     case ToBooleanHint::kAny:
    102       return "Any";
    103     case ToBooleanHint::kNeedsMap:
    104       return "NeedsMap";
    105   }
    106   UNREACHABLE();
    107   return "";
    108 }
    109 
    110 std::ostream& operator<<(std::ostream& os, ToBooleanHints hints) {
    111   if (hints == ToBooleanHint::kAny) return os << "Any";
    112   if (hints == ToBooleanHint::kNone) return os << "None";
    113   bool first = true;
    114   for (ToBooleanHints::mask_type i = 0; i < sizeof(i) * 8; ++i) {
    115     ToBooleanHint const hint = static_cast<ToBooleanHint>(1u << i);
    116     if (hints & hint) {
    117       if (!first) os << "|";
    118       first = false;
    119       os << hint;
    120     }
    121   }
    122   return os;
    123 }
    124 
    125 std::string ToString(ToBooleanHints hints) {
    126   if (hints == ToBooleanHint::kAny) return "Any";
    127   if (hints == ToBooleanHint::kNone) return "None";
    128   std::string ret;
    129   bool first = true;
    130   for (ToBooleanHints::mask_type i = 0; i < sizeof(i) * 8; ++i) {
    131     ToBooleanHint const hint = static_cast<ToBooleanHint>(1u << i);
    132     if (hints & hint) {
    133       if (!first) ret += "|";
    134       first = false;
    135       ret += ToString(hint);
    136     }
    137   }
    138   return ret;
    139 }
    140 
    141 std::ostream& operator<<(std::ostream& os, const StringAddFlags& flags) {
    142   switch (flags) {
    143     case STRING_ADD_CHECK_NONE:
    144       return os << "CheckNone";
    145     case STRING_ADD_CHECK_LEFT:
    146       return os << "CheckLeft";
    147     case STRING_ADD_CHECK_RIGHT:
    148       return os << "CheckRight";
    149     case STRING_ADD_CHECK_BOTH:
    150       return os << "CheckBoth";
    151     case STRING_ADD_CONVERT_LEFT:
    152       return os << "ConvertLeft";
    153     case STRING_ADD_CONVERT_RIGHT:
    154       return os << "ConvertRight";
    155     case STRING_ADD_CONVERT:
    156       break;
    157   }
    158   UNREACHABLE();
    159   return os;
    160 }
    161 
    162 }  // namespace internal
    163 }  // namespace v8
    164