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