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