1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "src/type-hints.h" 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace v8 { 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace internal { 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 10f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochstd::ostream& operator<<(std::ostream& os, BinaryOperationHint hint) { 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (hint) { 12f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case BinaryOperationHint::kNone: 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "None"; 14f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case BinaryOperationHint::kSignedSmall: 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "SignedSmall"; 16f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case BinaryOperationHint::kSigned32: 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Signed32"; 18f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case BinaryOperationHint::kNumberOrOddball: 19f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch return os << "NumberOrOddball"; 20f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch case BinaryOperationHint::kString: 21f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch return os << "String"; 22f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case BinaryOperationHint::kAny: 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Any"; 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch UNREACHABLE(); 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os; 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 29f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochstd::ostream& operator<<(std::ostream& os, CompareOperationHint hint) { 3013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch switch (hint) { 31f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CompareOperationHint::kNone: 3213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch return os << "None"; 33f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CompareOperationHint::kSignedSmall: 3413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch return os << "SignedSmall"; 35f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CompareOperationHint::kNumber: 3613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch return os << "Number"; 37f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CompareOperationHint::kNumberOrOddball: 38f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch return os << "NumberOrOddball"; 3962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CompareOperationHint::kInternalizedString: 4062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return os << "InternalizedString"; 4162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CompareOperationHint::kString: 4262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return os << "String"; 4362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case CompareOperationHint::kReceiver: 4462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return os << "Receiver"; 45f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch case CompareOperationHint::kAny: 4613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch return os << "Any"; 4713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch } 4813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch UNREACHABLE(); 4913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch return os; 5013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch} 5113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, ToBooleanHint hint) { 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch switch (hint) { 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kNone: 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "None"; 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kUndefined: 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Undefined"; 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kBoolean: 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Boolean"; 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kNull: 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Null"; 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kSmallInteger: 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "SmallInteger"; 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kReceiver: 65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Receiver"; 66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kString: 67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "String"; 68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kSymbol: 69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Symbol"; 70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kHeapNumber: 71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "HeapNumber"; 72014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch case ToBooleanHint::kAny: 73014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os << "Any"; 74c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case ToBooleanHint::kNeedsMap: 75c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os << "NeedsMap"; 76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch UNREACHABLE(); 78014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os; 79014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 80014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 8162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochstd::string ToString(ToBooleanHint hint) { 8262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch switch (hint) { 8362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kNone: 8462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "None"; 8562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kUndefined: 8662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "Undefined"; 8762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kBoolean: 8862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "Boolean"; 8962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kNull: 9062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "Null"; 9162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kSmallInteger: 9262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "SmallInteger"; 9362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kReceiver: 9462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "Receiver"; 9562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kString: 9662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "String"; 9762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kSymbol: 9862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "Symbol"; 9962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kHeapNumber: 10062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "HeapNumber"; 10162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kAny: 10262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "Any"; 10362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch case ToBooleanHint::kNeedsMap: 10462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return "NeedsMap"; 10562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch } 10662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch UNREACHABLE(); 10762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return ""; 10862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch} 10962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 110014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochstd::ostream& operator<<(std::ostream& os, ToBooleanHints hints) { 111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (hints == ToBooleanHint::kAny) return os << "Any"; 112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (hints == ToBooleanHint::kNone) return os << "None"; 113014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool first = true; 114f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch for (ToBooleanHints::mask_type i = 0; i < sizeof(i) * 8; ++i) { 115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ToBooleanHint const hint = static_cast<ToBooleanHint>(1u << i); 116014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (hints & hint) { 117014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (!first) os << "|"; 118014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch first = false; 119014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch os << hint; 120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return os; 123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 124014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 12562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochstd::string ToString(ToBooleanHints hints) { 12662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch if (hints == ToBooleanHint::kAny) return "Any"; 12762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch if (hints == ToBooleanHint::kNone) return "None"; 12862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch std::string ret; 12962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch bool first = true; 13062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch for (ToBooleanHints::mask_type i = 0; i < sizeof(i) * 8; ++i) { 13162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch ToBooleanHint const hint = static_cast<ToBooleanHint>(1u << i); 13262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch if (hints & hint) { 13362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch if (!first) ret += "|"; 13462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch first = false; 13562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch ret += ToString(hint); 13662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch } 13762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch } 13862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return ret; 13962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch} 14062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 141c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdochstd::ostream& operator<<(std::ostream& os, const StringAddFlags& flags) { 142c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch switch (flags) { 143c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case STRING_ADD_CHECK_NONE: 144c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os << "CheckNone"; 145c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case STRING_ADD_CHECK_LEFT: 146c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os << "CheckLeft"; 147c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case STRING_ADD_CHECK_RIGHT: 148c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os << "CheckRight"; 149c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case STRING_ADD_CHECK_BOTH: 150c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os << "CheckBoth"; 151c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case STRING_ADD_CONVERT_LEFT: 152c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os << "ConvertLeft"; 153c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case STRING_ADD_CONVERT_RIGHT: 154c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os << "ConvertRight"; 155c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch case STRING_ADD_CONVERT: 156c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch break; 157c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch } 158c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch UNREACHABLE(); 159c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch return os; 160c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch} 161c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch 162014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 163014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 164