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