Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Side by Side Diff: src/objects-printer.cc

Issue 363323003: More OStreamsUse OStreams more often. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased and polished. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects-inl.h ('k') | src/ostreams.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/disasm.h" 7 #include "src/disasm.h"
8 #include "src/disassembler.h" 8 #include "src/disassembler.h"
9 #include "src/jsregexp.h" 9 #include "src/jsregexp.h"
10 #include "src/objects-visiting.h" 10 #include "src/objects-visiting.h"
11 11
12 namespace v8 { 12 namespace v8 {
13 namespace internal { 13 namespace internal {
14 14
15 #ifdef OBJECT_PRINT 15 #ifdef OBJECT_PRINT
16 16
17 void Object::Print() { 17 void Object::Print() {
18 Print(stdout); 18 OFStream os(stdout);
19 this->Print(os);
20 os << flush;
19 } 21 }
20 22
21 23
22 void Object::Print(FILE* out) { 24 void Object::Print(OStream& os) { // NOLINT
23 if (IsSmi()) { 25 if (IsSmi()) {
24 Smi::cast(this)->SmiPrint(out); 26 Smi::cast(this)->SmiPrint(os);
25 } else { 27 } else {
26 HeapObject::cast(this)->HeapObjectPrint(out); 28 HeapObject::cast(this)->HeapObjectPrint(os);
27 } 29 }
28 Flush(out);
29 } 30 }
30 31
31 32
32 void Object::PrintLn() { 33 void HeapObject::PrintHeader(OStream& os, const char* id) { // NOLINT
33 PrintLn(stdout); 34 os << "" << reinterpret_cast<void*>(this) << ": [" << id << "]\n";
34 } 35 }
35 36
36 37
37 void Object::PrintLn(FILE* out) { 38 void HeapObject::HeapObjectPrint(OStream& os) { // NOLINT
38 Print(out);
39 PrintF(out, "\n");
40 }
41
42
43 void HeapObject::PrintHeader(FILE* out, const char* id) {
44 PrintF(out, "%p: [%s]\n", reinterpret_cast<void*>(this), id);
45 }
46
47
48 void HeapObject::HeapObjectPrint(FILE* out) {
49 InstanceType instance_type = map()->instance_type(); 39 InstanceType instance_type = map()->instance_type();
50 40
51 HandleScope scope(GetIsolate()); 41 HandleScope scope(GetIsolate());
52 if (instance_type < FIRST_NONSTRING_TYPE) { 42 if (instance_type < FIRST_NONSTRING_TYPE) {
53 String::cast(this)->StringPrint(out); 43 String::cast(this)->StringPrint(os);
54 return; 44 return;
55 } 45 }
56 46
57 switch (instance_type) { 47 switch (instance_type) {
58 case SYMBOL_TYPE: 48 case SYMBOL_TYPE:
59 Symbol::cast(this)->SymbolPrint(out); 49 Symbol::cast(this)->SymbolPrint(os);
60 break; 50 break;
61 case MAP_TYPE: 51 case MAP_TYPE:
62 Map::cast(this)->MapPrint(out); 52 Map::cast(this)->MapPrint(os);
63 break; 53 break;
64 case HEAP_NUMBER_TYPE: 54 case HEAP_NUMBER_TYPE:
65 HeapNumber::cast(this)->HeapNumberPrint(out); 55 HeapNumber::cast(this)->HeapNumberPrint(os);
66 break; 56 break;
67 case MUTABLE_HEAP_NUMBER_TYPE: 57 case MUTABLE_HEAP_NUMBER_TYPE:
68 PrintF(out, "<mutable "); 58 os << "<mutable ";
69 HeapNumber::cast(this)->HeapNumberPrint(out); 59 HeapNumber::cast(this)->HeapNumberPrint(os);
70 PrintF(out, ">"); 60 os << ">";
71 break; 61 break;
72 case FIXED_DOUBLE_ARRAY_TYPE: 62 case FIXED_DOUBLE_ARRAY_TYPE:
73 FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(out); 63 FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(os);
74 break; 64 break;
75 case CONSTANT_POOL_ARRAY_TYPE: 65 case CONSTANT_POOL_ARRAY_TYPE:
76 ConstantPoolArray::cast(this)->ConstantPoolArrayPrint(out); 66 ConstantPoolArray::cast(this)->ConstantPoolArrayPrint(os);
77 break; 67 break;
78 case FIXED_ARRAY_TYPE: 68 case FIXED_ARRAY_TYPE:
79 FixedArray::cast(this)->FixedArrayPrint(out); 69 FixedArray::cast(this)->FixedArrayPrint(os);
80 break; 70 break;
81 case BYTE_ARRAY_TYPE: 71 case BYTE_ARRAY_TYPE:
82 ByteArray::cast(this)->ByteArrayPrint(out); 72 ByteArray::cast(this)->ByteArrayPrint(os);
83 break; 73 break;
84 case FREE_SPACE_TYPE: 74 case FREE_SPACE_TYPE:
85 FreeSpace::cast(this)->FreeSpacePrint(out); 75 FreeSpace::cast(this)->FreeSpacePrint(os);
86 break; 76 break;
87 77
88 #define PRINT_EXTERNAL_ARRAY(Type, type, TYPE, ctype, size) \ 78 #define PRINT_EXTERNAL_ARRAY(Type, type, TYPE, ctype, size) \
89 case EXTERNAL_##TYPE##_ARRAY_TYPE: \ 79 case EXTERNAL_##TYPE##_ARRAY_TYPE: \
90 External##Type##Array::cast(this)->External##Type##ArrayPrint(out); \ 80 External##Type##Array::cast(this)->External##Type##ArrayPrint(os); \
91 break; 81 break;
92 82
93 TYPED_ARRAYS(PRINT_EXTERNAL_ARRAY) 83 TYPED_ARRAYS(PRINT_EXTERNAL_ARRAY)
94 #undef PRINT_EXTERNAL_ARRAY 84 #undef PRINT_EXTERNAL_ARRAY
95 85
96 #define PRINT_FIXED_TYPED_ARRAY(Type, type, TYPE, ctype, size) \ 86 #define PRINT_FIXED_TYPED_ARRAY(Type, type, TYPE, ctype, size) \
97 case Fixed##Type##Array::kInstanceType: \ 87 case Fixed##Type##Array::kInstanceType: \
98 Fixed##Type##Array::cast(this)->FixedTypedArrayPrint(out); \ 88 Fixed##Type##Array::cast(this)->FixedTypedArrayPrint(os); \
99 break; 89 break;
100 90
101 TYPED_ARRAYS(PRINT_FIXED_TYPED_ARRAY) 91 TYPED_ARRAYS(PRINT_FIXED_TYPED_ARRAY)
102 #undef PRINT_FIXED_TYPED_ARRAY 92 #undef PRINT_FIXED_TYPED_ARRAY
103 93
104 case FILLER_TYPE: 94 case FILLER_TYPE:
105 PrintF(out, "filler"); 95 os << "filler";
106 break; 96 break;
107 case JS_OBJECT_TYPE: // fall through 97 case JS_OBJECT_TYPE: // fall through
108 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: 98 case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
109 case JS_ARRAY_TYPE: 99 case JS_ARRAY_TYPE:
110 case JS_GENERATOR_OBJECT_TYPE: 100 case JS_GENERATOR_OBJECT_TYPE:
111 case JS_REGEXP_TYPE: 101 case JS_REGEXP_TYPE:
112 JSObject::cast(this)->JSObjectPrint(out); 102 JSObject::cast(this)->JSObjectPrint(os);
113 break; 103 break;
114 case ODDBALL_TYPE: 104 case ODDBALL_TYPE:
115 Oddball::cast(this)->to_string()->Print(out); 105 Oddball::cast(this)->to_string()->Print(os);
116 break; 106 break;
117 case JS_MODULE_TYPE: 107 case JS_MODULE_TYPE:
118 JSModule::cast(this)->JSModulePrint(out); 108 JSModule::cast(this)->JSModulePrint(os);
119 break; 109 break;
120 case JS_FUNCTION_TYPE: 110 case JS_FUNCTION_TYPE:
121 JSFunction::cast(this)->JSFunctionPrint(out); 111 JSFunction::cast(this)->JSFunctionPrint(os);
122 break; 112 break;
123 case JS_GLOBAL_PROXY_TYPE: 113 case JS_GLOBAL_PROXY_TYPE:
124 JSGlobalProxy::cast(this)->JSGlobalProxyPrint(out); 114 JSGlobalProxy::cast(this)->JSGlobalProxyPrint(os);
125 break; 115 break;
126 case JS_GLOBAL_OBJECT_TYPE: 116 case JS_GLOBAL_OBJECT_TYPE:
127 JSGlobalObject::cast(this)->JSGlobalObjectPrint(out); 117 JSGlobalObject::cast(this)->JSGlobalObjectPrint(os);
128 break; 118 break;
129 case JS_BUILTINS_OBJECT_TYPE: 119 case JS_BUILTINS_OBJECT_TYPE:
130 JSBuiltinsObject::cast(this)->JSBuiltinsObjectPrint(out); 120 JSBuiltinsObject::cast(this)->JSBuiltinsObjectPrint(os);
131 break; 121 break;
132 case JS_VALUE_TYPE: 122 case JS_VALUE_TYPE:
133 PrintF(out, "Value wrapper around:"); 123 os << "Value wrapper around:";
134 JSValue::cast(this)->value()->Print(out); 124 JSValue::cast(this)->value()->Print(os);
135 break; 125 break;
136 case JS_DATE_TYPE: 126 case JS_DATE_TYPE:
137 JSDate::cast(this)->JSDatePrint(out); 127 JSDate::cast(this)->JSDatePrint(os);
138 break; 128 break;
139 case CODE_TYPE: 129 case CODE_TYPE:
140 Code::cast(this)->CodePrint(out); 130 Code::cast(this)->CodePrint(os);
141 break; 131 break;
142 case JS_PROXY_TYPE: 132 case JS_PROXY_TYPE:
143 JSProxy::cast(this)->JSProxyPrint(out); 133 JSProxy::cast(this)->JSProxyPrint(os);
144 break; 134 break;
145 case JS_FUNCTION_PROXY_TYPE: 135 case JS_FUNCTION_PROXY_TYPE:
146 JSFunctionProxy::cast(this)->JSFunctionProxyPrint(out); 136 JSFunctionProxy::cast(this)->JSFunctionProxyPrint(os);
147 break; 137 break;
148 case JS_SET_TYPE: 138 case JS_SET_TYPE:
149 JSSet::cast(this)->JSSetPrint(out); 139 JSSet::cast(this)->JSSetPrint(os);
150 break; 140 break;
151 case JS_MAP_TYPE: 141 case JS_MAP_TYPE:
152 JSMap::cast(this)->JSMapPrint(out); 142 JSMap::cast(this)->JSMapPrint(os);
153 break; 143 break;
154 case JS_SET_ITERATOR_TYPE: 144 case JS_SET_ITERATOR_TYPE:
155 JSSetIterator::cast(this)->JSSetIteratorPrint(out); 145 JSSetIterator::cast(this)->JSSetIteratorPrint(os);
156 break; 146 break;
157 case JS_MAP_ITERATOR_TYPE: 147 case JS_MAP_ITERATOR_TYPE:
158 JSMapIterator::cast(this)->JSMapIteratorPrint(out); 148 JSMapIterator::cast(this)->JSMapIteratorPrint(os);
159 break; 149 break;
160 case JS_WEAK_MAP_TYPE: 150 case JS_WEAK_MAP_TYPE:
161 JSWeakMap::cast(this)->JSWeakMapPrint(out); 151 JSWeakMap::cast(this)->JSWeakMapPrint(os);
162 break; 152 break;
163 case JS_WEAK_SET_TYPE: 153 case JS_WEAK_SET_TYPE:
164 JSWeakSet::cast(this)->JSWeakSetPrint(out); 154 JSWeakSet::cast(this)->JSWeakSetPrint(os);
165 break; 155 break;
166 case FOREIGN_TYPE: 156 case FOREIGN_TYPE:
167 Foreign::cast(this)->ForeignPrint(out); 157 Foreign::cast(this)->ForeignPrint(os);
168 break; 158 break;
169 case SHARED_FUNCTION_INFO_TYPE: 159 case SHARED_FUNCTION_INFO_TYPE:
170 SharedFunctionInfo::cast(this)->SharedFunctionInfoPrint(out); 160 SharedFunctionInfo::cast(this)->SharedFunctionInfoPrint(os);
171 break; 161 break;
172 case JS_MESSAGE_OBJECT_TYPE: 162 case JS_MESSAGE_OBJECT_TYPE:
173 JSMessageObject::cast(this)->JSMessageObjectPrint(out); 163 JSMessageObject::cast(this)->JSMessageObjectPrint(os);
174 break; 164 break;
175 case CELL_TYPE: 165 case CELL_TYPE:
176 Cell::cast(this)->CellPrint(out); 166 Cell::cast(this)->CellPrint(os);
177 break; 167 break;
178 case PROPERTY_CELL_TYPE: 168 case PROPERTY_CELL_TYPE:
179 PropertyCell::cast(this)->PropertyCellPrint(out); 169 PropertyCell::cast(this)->PropertyCellPrint(os);
180 break; 170 break;
181 case JS_ARRAY_BUFFER_TYPE: 171 case JS_ARRAY_BUFFER_TYPE:
182 JSArrayBuffer::cast(this)->JSArrayBufferPrint(out); 172 JSArrayBuffer::cast(this)->JSArrayBufferPrint(os);
183 break; 173 break;
184 case JS_TYPED_ARRAY_TYPE: 174 case JS_TYPED_ARRAY_TYPE:
185 JSTypedArray::cast(this)->JSTypedArrayPrint(out); 175 JSTypedArray::cast(this)->JSTypedArrayPrint(os);
186 break; 176 break;
187 case JS_DATA_VIEW_TYPE: 177 case JS_DATA_VIEW_TYPE:
188 JSDataView::cast(this)->JSDataViewPrint(out); 178 JSDataView::cast(this)->JSDataViewPrint(os);
189 break; 179 break;
190 #define MAKE_STRUCT_CASE(NAME, Name, name) \ 180 #define MAKE_STRUCT_CASE(NAME, Name, name) \
191 case NAME##_TYPE: \ 181 case NAME##_TYPE: \
192 Name::cast(this)->Name##Print(out); \ 182 Name::cast(this)->Name##Print(os); \
193 break; 183 break;
194 STRUCT_LIST(MAKE_STRUCT_CASE) 184 STRUCT_LIST(MAKE_STRUCT_CASE)
195 #undef MAKE_STRUCT_CASE 185 #undef MAKE_STRUCT_CASE
196 186
197 default: 187 default:
198 PrintF(out, "UNKNOWN TYPE %d", map()->instance_type()); 188 os << "UNKNOWN TYPE " << map()->instance_type();
199 UNREACHABLE(); 189 UNREACHABLE();
200 break; 190 break;
201 } 191 }
202 } 192 }
203 193
204 194
205 void ByteArray::ByteArrayPrint(FILE* out) { 195 void ByteArray::ByteArrayPrint(OStream& os) { // NOLINT
206 PrintF(out, "byte array, data starts at %p", GetDataStartAddress()); 196 os << "byte array, data starts at " << GetDataStartAddress();
207 } 197 }
208 198
209 199
210 void FreeSpace::FreeSpacePrint(FILE* out) { 200 void FreeSpace::FreeSpacePrint(OStream& os) { // NOLINT
211 PrintF(out, "free space, size %d", Size()); 201 os << "free space, size " << Size();
212 } 202 }
213 203
214 204
215 #define EXTERNAL_ARRAY_PRINTER(Type, type, TYPE, ctype, size) \ 205 #define EXTERNAL_ARRAY_PRINTER(Type, type, TYPE, ctype, size) \
216 void External##Type##Array::External##Type##ArrayPrint(FILE* out) { \ 206 void External##Type##Array::External##Type##ArrayPrint(OStream& os) { \
217 PrintF(out, "external " #type " array"); \ 207 os << "external " #type " array"; \
218 } 208 }
219 209
220 TYPED_ARRAYS(EXTERNAL_ARRAY_PRINTER) 210 TYPED_ARRAYS(EXTERNAL_ARRAY_PRINTER)
221 211
222 #undef EXTERNAL_ARRAY_PRINTER 212 #undef EXTERNAL_ARRAY_PRINTER
223 213
224 214
225 template <class Traits> 215 template <class Traits>
226 void FixedTypedArray<Traits>::FixedTypedArrayPrint(FILE* out) { 216 void FixedTypedArray<Traits>::FixedTypedArrayPrint(OStream& os) { // NOLINT
227 PrintF(out, "fixed %s", Traits::Designator()); 217 os << "fixed " << Traits::Designator();
228 } 218 }
229 219
230 220
231 void JSObject::PrintProperties(FILE* out) { 221 void JSObject::PrintProperties(OStream& os) { // NOLINT
232 if (HasFastProperties()) { 222 if (HasFastProperties()) {
233 DescriptorArray* descs = map()->instance_descriptors(); 223 DescriptorArray* descs = map()->instance_descriptors();
234 for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) { 224 for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) {
235 PrintF(out, " "); 225 os << " ";
236 descs->GetKey(i)->NamePrint(out); 226 descs->GetKey(i)->NamePrint(os);
237 PrintF(out, ": "); 227 os << ": ";
238 switch (descs->GetType(i)) { 228 switch (descs->GetType(i)) {
239 case FIELD: { 229 case FIELD: {
240 FieldIndex index = FieldIndex::ForDescriptor(map(), i); 230 FieldIndex index = FieldIndex::ForDescriptor(map(), i);
241 RawFastPropertyAt(index)->ShortPrint(out); 231 os << Brief(RawFastPropertyAt(index)) << " (field at offset "
242 PrintF(out, " (field at offset %d)\n", index.property_index()); 232 << index.property_index() << ")\n";
243 break; 233 break;
244 } 234 }
245 case CONSTANT: 235 case CONSTANT:
246 descs->GetConstant(i)->ShortPrint(out); 236 os << Brief(descs->GetConstant(i)) << " (constant)\n";
247 PrintF(out, " (constant)\n");
248 break; 237 break;
249 case CALLBACKS: 238 case CALLBACKS:
250 descs->GetCallbacksObject(i)->ShortPrint(out); 239 os << Brief(descs->GetCallbacksObject(i)) << " (callback)\n";
251 PrintF(out, " (callback)\n");
252 break; 240 break;
253 case NORMAL: // only in slow mode 241 case NORMAL: // only in slow mode
254 case HANDLER: // only in lookup results, not in descriptors 242 case HANDLER: // only in lookup results, not in descriptors
255 case INTERCEPTOR: // only in lookup results, not in descriptors 243 case INTERCEPTOR: // only in lookup results, not in descriptors
256 // There are no transitions in the descriptor array. 244 // There are no transitions in the descriptor array.
257 case NONEXISTENT: 245 case NONEXISTENT:
258 UNREACHABLE(); 246 UNREACHABLE();
259 break; 247 break;
260 } 248 }
261 } 249 }
262 } else { 250 } else {
263 property_dictionary()->Print(out); 251 property_dictionary()->Print(os);
264 } 252 }
265 } 253 }
266 254
267 255
268 template<class T> 256 template <class T>
269 static void DoPrintElements(FILE *out, Object* object) { 257 static void DoPrintElements(OStream& os, Object* object) { // NOLINT
270 T* p = T::cast(object); 258 T* p = T::cast(object);
271 for (int i = 0; i < p->length(); i++) { 259 for (int i = 0; i < p->length(); i++) {
272 PrintF(out, " %d: %d\n", i, p->get_scalar(i)); 260 os << " " << i << ": " << p->get_scalar(i) << "\n";
273 } 261 }
274 } 262 }
275 263
276 264
277 template<class T> 265 void JSObject::PrintElements(OStream& os) { // NOLINT
278 static void DoPrintDoubleElements(FILE* out, Object* object) {
279 T* p = T::cast(object);
280 for (int i = 0; i < p->length(); i++) {
281 PrintF(out, " %d: %f\n", i, p->get_scalar(i));
282 }
283 }
284
285
286 void JSObject::PrintElements(FILE* out) {
287 // Don't call GetElementsKind, its validation code can cause the printer to 266 // Don't call GetElementsKind, its validation code can cause the printer to
288 // fail when debugging. 267 // fail when debugging.
289 switch (map()->elements_kind()) { 268 switch (map()->elements_kind()) {
290 case FAST_HOLEY_SMI_ELEMENTS: 269 case FAST_HOLEY_SMI_ELEMENTS:
291 case FAST_SMI_ELEMENTS: 270 case FAST_SMI_ELEMENTS:
292 case FAST_HOLEY_ELEMENTS: 271 case FAST_HOLEY_ELEMENTS:
293 case FAST_ELEMENTS: { 272 case FAST_ELEMENTS: {
294 // Print in array notation for non-sparse arrays. 273 // Print in array notation for non-sparse arrays.
295 FixedArray* p = FixedArray::cast(elements()); 274 FixedArray* p = FixedArray::cast(elements());
296 for (int i = 0; i < p->length(); i++) { 275 for (int i = 0; i < p->length(); i++) {
297 PrintF(out, " %d: ", i); 276 os << " " << i << ": " << Brief(p->get(i)) << "\n";
298 p->get(i)->ShortPrint(out);
299 PrintF(out, "\n");
300 } 277 }
301 break; 278 break;
302 } 279 }
303 case FAST_HOLEY_DOUBLE_ELEMENTS: 280 case FAST_HOLEY_DOUBLE_ELEMENTS:
304 case FAST_DOUBLE_ELEMENTS: { 281 case FAST_DOUBLE_ELEMENTS: {
305 // Print in array notation for non-sparse arrays. 282 // Print in array notation for non-sparse arrays.
306 if (elements()->length() > 0) { 283 if (elements()->length() > 0) {
307 FixedDoubleArray* p = FixedDoubleArray::cast(elements()); 284 FixedDoubleArray* p = FixedDoubleArray::cast(elements());
308 for (int i = 0; i < p->length(); i++) { 285 for (int i = 0; i < p->length(); i++) {
286 os << " " << i << ": ";
309 if (p->is_the_hole(i)) { 287 if (p->is_the_hole(i)) {
310 PrintF(out, " %d: <the hole>", i); 288 os << "<the hole>";
311 } else { 289 } else {
312 PrintF(out, " %d: %g", i, p->get_scalar(i)); 290 os << p->get_scalar(i);
313 } 291 }
314 PrintF(out, "\n"); 292 os << "\n";
315 } 293 }
316 } 294 }
317 break; 295 break;
318 } 296 }
319 297
320 298
321 #define PRINT_ELEMENTS(Kind, Type) \ 299 #define PRINT_ELEMENTS(Kind, Type) \
322 case Kind: { \ 300 case Kind: { \
323 DoPrintElements<Type>(out, elements()); \ 301 DoPrintElements<Type>(os, elements()); \
324 break; \ 302 break; \
325 } 303 }
326
327 #define PRINT_DOUBLE_ELEMENTS(Kind, Type) \
328 case Kind: { \
329 DoPrintDoubleElements<Type>(out, elements()); \
330 break; \
331 }
332 304
333 PRINT_ELEMENTS(EXTERNAL_UINT8_CLAMPED_ELEMENTS, ExternalUint8ClampedArray) 305 PRINT_ELEMENTS(EXTERNAL_UINT8_CLAMPED_ELEMENTS, ExternalUint8ClampedArray)
334 PRINT_ELEMENTS(EXTERNAL_INT8_ELEMENTS, ExternalInt8Array) 306 PRINT_ELEMENTS(EXTERNAL_INT8_ELEMENTS, ExternalInt8Array)
335 PRINT_ELEMENTS(EXTERNAL_UINT8_ELEMENTS, 307 PRINT_ELEMENTS(EXTERNAL_UINT8_ELEMENTS,
336 ExternalUint8Array) 308 ExternalUint8Array)
337 PRINT_ELEMENTS(EXTERNAL_INT16_ELEMENTS, ExternalInt16Array) 309 PRINT_ELEMENTS(EXTERNAL_INT16_ELEMENTS, ExternalInt16Array)
338 PRINT_ELEMENTS(EXTERNAL_UINT16_ELEMENTS, 310 PRINT_ELEMENTS(EXTERNAL_UINT16_ELEMENTS,
339 ExternalUint16Array) 311 ExternalUint16Array)
340 PRINT_ELEMENTS(EXTERNAL_INT32_ELEMENTS, ExternalInt32Array) 312 PRINT_ELEMENTS(EXTERNAL_INT32_ELEMENTS, ExternalInt32Array)
341 PRINT_ELEMENTS(EXTERNAL_UINT32_ELEMENTS, 313 PRINT_ELEMENTS(EXTERNAL_UINT32_ELEMENTS,
342 ExternalUint32Array) 314 ExternalUint32Array)
343 PRINT_DOUBLE_ELEMENTS(EXTERNAL_FLOAT32_ELEMENTS, ExternalFloat32Array) 315 PRINT_ELEMENTS(EXTERNAL_FLOAT32_ELEMENTS, ExternalFloat32Array)
344 PRINT_DOUBLE_ELEMENTS(EXTERNAL_FLOAT64_ELEMENTS, ExternalFloat64Array) 316 PRINT_ELEMENTS(EXTERNAL_FLOAT64_ELEMENTS, ExternalFloat64Array)
345
346 317
347 PRINT_ELEMENTS(UINT8_ELEMENTS, FixedUint8Array) 318 PRINT_ELEMENTS(UINT8_ELEMENTS, FixedUint8Array)
348 PRINT_ELEMENTS(UINT8_CLAMPED_ELEMENTS, FixedUint8ClampedArray) 319 PRINT_ELEMENTS(UINT8_CLAMPED_ELEMENTS, FixedUint8ClampedArray)
349 PRINT_ELEMENTS(INT8_ELEMENTS, FixedInt8Array) 320 PRINT_ELEMENTS(INT8_ELEMENTS, FixedInt8Array)
350 PRINT_ELEMENTS(UINT16_ELEMENTS, FixedUint16Array) 321 PRINT_ELEMENTS(UINT16_ELEMENTS, FixedUint16Array)
351 PRINT_ELEMENTS(INT16_ELEMENTS, FixedInt16Array) 322 PRINT_ELEMENTS(INT16_ELEMENTS, FixedInt16Array)
352 PRINT_ELEMENTS(UINT32_ELEMENTS, FixedUint32Array) 323 PRINT_ELEMENTS(UINT32_ELEMENTS, FixedUint32Array)
353 PRINT_ELEMENTS(INT32_ELEMENTS, FixedInt32Array) 324 PRINT_ELEMENTS(INT32_ELEMENTS, FixedInt32Array)
354 PRINT_DOUBLE_ELEMENTS(FLOAT32_ELEMENTS, FixedFloat32Array) 325 PRINT_ELEMENTS(FLOAT32_ELEMENTS, FixedFloat32Array)
355 PRINT_DOUBLE_ELEMENTS(FLOAT64_ELEMENTS, FixedFloat64Array) 326 PRINT_ELEMENTS(FLOAT64_ELEMENTS, FixedFloat64Array)
356 327
357 #undef PRINT_DOUBLE_ELEMENTS
358 #undef PRINT_ELEMENTS 328 #undef PRINT_ELEMENTS
359 329
360 case DICTIONARY_ELEMENTS: 330 case DICTIONARY_ELEMENTS:
361 elements()->Print(out); 331 elements()->Print(os);
362 break; 332 break;
363 case SLOPPY_ARGUMENTS_ELEMENTS: { 333 case SLOPPY_ARGUMENTS_ELEMENTS: {
364 FixedArray* p = FixedArray::cast(elements()); 334 FixedArray* p = FixedArray::cast(elements());
365 PrintF(out, " parameter map:"); 335 os << " parameter map:";
366 for (int i = 2; i < p->length(); i++) { 336 for (int i = 2; i < p->length(); i++) {
367 PrintF(out, " %d:", i - 2); 337 os << " " << (i - 2) << ":" << Brief(p->get(i));
368 p->get(i)->ShortPrint(out);
369 } 338 }
370 PrintF(out, "\n context: "); 339 os << "\n context: " << Brief(p->get(0))
371 p->get(0)->ShortPrint(out); 340 << "\n arguments: " << Brief(p->get(1)) << "\n";
372 PrintF(out, "\n arguments: ");
373 p->get(1)->ShortPrint(out);
374 PrintF(out, "\n");
375 break; 341 break;
376 } 342 }
377 } 343 }
378 } 344 }
379 345
380 346
381 void JSObject::PrintTransitions(FILE* out) { 347 void JSObject::PrintTransitions(OStream& os) { // NOLINT
382 if (!map()->HasTransitionArray()) return; 348 if (!map()->HasTransitionArray()) return;
383 TransitionArray* transitions = map()->transitions(); 349 TransitionArray* transitions = map()->transitions();
384 for (int i = 0; i < transitions->number_of_transitions(); i++) { 350 for (int i = 0; i < transitions->number_of_transitions(); i++) {
385 Name* key = transitions->GetKey(i); 351 Name* key = transitions->GetKey(i);
386 PrintF(out, " "); 352 os << " ";
387 key->NamePrint(out); 353 key->NamePrint(os);
388 PrintF(out, ": "); 354 os << ": ";
389 if (key == GetHeap()->frozen_symbol()) { 355 if (key == GetHeap()->frozen_symbol()) {
390 PrintF(out, " (transition to frozen)\n"); 356 os << " (transition to frozen)\n";
391 } else if (key == GetHeap()->elements_transition_symbol()) { 357 } else if (key == GetHeap()->elements_transition_symbol()) {
392 PrintF(out, " (transition to "); 358 os << " (transition to "
393 PrintElementsKind(out, transitions->GetTarget(i)->elements_kind()); 359 << ElementsKindToString(transitions->GetTarget(i)->elements_kind())
394 PrintF(out, ")\n"); 360 << ")\n";
395 } else if (key == GetHeap()->observed_symbol()) { 361 } else if (key == GetHeap()->observed_symbol()) {
396 PrintF(out, " (transition to Object.observe)\n"); 362 os << " (transition to Object.observe)\n";
397 } else { 363 } else {
398 switch (transitions->GetTargetDetails(i).type()) { 364 switch (transitions->GetTargetDetails(i).type()) {
399 case FIELD: { 365 case FIELD: {
400 PrintF(out, " (transition to field)\n"); 366 os << " (transition to field)\n";
401 break; 367 break;
402 } 368 }
403 case CONSTANT: 369 case CONSTANT:
404 PrintF(out, " (transition to constant)\n"); 370 os << " (transition to constant)\n";
405 break; 371 break;
406 case CALLBACKS: 372 case CALLBACKS:
407 PrintF(out, " (transition to callback)\n"); 373 os << " (transition to callback)\n";
408 break; 374 break;
409 // Values below are never in the target descriptor array. 375 // Values below are never in the target descriptor array.
410 case NORMAL: 376 case NORMAL:
411 case HANDLER: 377 case HANDLER:
412 case INTERCEPTOR: 378 case INTERCEPTOR:
413 case NONEXISTENT: 379 case NONEXISTENT:
414 UNREACHABLE(); 380 UNREACHABLE();
415 break; 381 break;
416 } 382 }
417 } 383 }
418 } 384 }
419 } 385 }
420 386
421 387
422 void JSObject::JSObjectPrint(FILE* out) { 388 void JSObject::JSObjectPrint(OStream& os) { // NOLINT
423 HeapObject::PrintHeader(out, "JSObject"); 389 HeapObject::PrintHeader(os, "JSObject");
424 PrintF(out, " - map = %p [", reinterpret_cast<void*>(map()));
425 // Don't call GetElementsKind, its validation code can cause the printer to 390 // Don't call GetElementsKind, its validation code can cause the printer to
426 // fail when debugging. 391 // fail when debugging.
427 PrintElementsKind(out, this->map()->elements_kind()); 392 os << " - map = " << reinterpret_cast<void*>(map()) << " ["
428 PrintF(out, 393 << ElementsKindToString(this->map()->elements_kind())
429 "]\n - prototype = %p\n", 394 << "]\n - prototype = " << reinterpret_cast<void*>(GetPrototype()) << "\n"
430 reinterpret_cast<void*>(GetPrototype())); 395 << " {\n";
431 PrintF(out, " {\n"); 396 PrintProperties(os);
432 PrintProperties(out); 397 PrintTransitions(os);
433 PrintTransitions(out); 398 PrintElements(os);
434 PrintElements(out); 399 os << " }\n";
435 PrintF(out, " }\n");
436 } 400 }
437 401
438 402
439 void JSModule::JSModulePrint(FILE* out) { 403 void JSModule::JSModulePrint(OStream& os) { // NOLINT
440 HeapObject::PrintHeader(out, "JSModule"); 404 HeapObject::PrintHeader(os, "JSModule");
441 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 405 os << " - map = " << reinterpret_cast<void*>(map()) << "\n"
442 PrintF(out, " - context = "); 406 << " - context = ";
443 context()->Print(out); 407 context()->Print(os);
444 PrintF(out, " - scope_info = "); 408 os << " - scope_info = " << Brief(scope_info())
445 scope_info()->ShortPrint(out); 409 << ElementsKindToString(this->map()->elements_kind()) << " {\n";
446 PrintElementsKind(out, this->map()->elements_kind()); 410 PrintProperties(os);
447 PrintF(out, " {\n"); 411 PrintElements(os);
448 PrintProperties(out); 412 os << " }\n";
449 PrintElements(out);
450 PrintF(out, " }\n");
451 } 413 }
452 414
453 415
454 static const char* TypeToString(InstanceType type) { 416 static const char* TypeToString(InstanceType type) {
455 switch (type) { 417 switch (type) {
456 #define TYPE_TO_STRING(TYPE) case TYPE: return #TYPE; 418 #define TYPE_TO_STRING(TYPE) case TYPE: return #TYPE;
457 INSTANCE_TYPE_LIST(TYPE_TO_STRING) 419 INSTANCE_TYPE_LIST(TYPE_TO_STRING)
458 #undef TYPE_TO_STRING 420 #undef TYPE_TO_STRING
459 } 421 }
460 UNREACHABLE(); 422 UNREACHABLE();
461 return "UNKNOWN"; // Keep the compiler happy. 423 return "UNKNOWN"; // Keep the compiler happy.
462 } 424 }
463 425
464 426
465 void Symbol::SymbolPrint(FILE* out) { 427 void Symbol::SymbolPrint(OStream& os) { // NOLINT
466 HeapObject::PrintHeader(out, "Symbol"); 428 HeapObject::PrintHeader(os, "Symbol");
467 PrintF(out, " - hash: %d\n", Hash()); 429 os << " - hash: " << Hash();
468 PrintF(out, " - name: "); 430 os << "\n - name: " << Brief(name());
469 name()->ShortPrint(); 431 os << " - private: " << is_private();
470 PrintF(out, " - private: %d\n", is_private()); 432 os << "\n";
471 PrintF(out, "\n");
472 } 433 }
473 434
474 435
475 void Map::MapPrint(FILE* out) { 436 void Map::MapPrint(OStream& os) { // NOLINT
476 HeapObject::PrintHeader(out, "Map"); 437 HeapObject::PrintHeader(os, "Map");
477 PrintF(out, " - type: %s\n", TypeToString(instance_type())); 438 os << " - type: " << TypeToString(instance_type()) << "\n";
478 PrintF(out, " - instance size: %d\n", instance_size()); 439 os << " - instance size: " << instance_size() << "\n";
479 PrintF(out, " - inobject properties: %d\n", inobject_properties()); 440 os << " - inobject properties: " << inobject_properties() << "\n";
480 PrintF(out, " - elements kind: "); 441 os << " - elements kind: " << ElementsKindToString(elements_kind());
481 PrintElementsKind(out, elements_kind()); 442 os << "\n - pre-allocated property fields: "
482 PrintF(out, "\n - pre-allocated property fields: %d\n", 443 << pre_allocated_property_fields() << "\n";
483 pre_allocated_property_fields()); 444 os << " - unused property fields: " << unused_property_fields() << "\n";
484 PrintF(out, " - unused property fields: %d\n", unused_property_fields()); 445 if (is_hidden_prototype()) os << " - hidden_prototype\n";
485 if (is_hidden_prototype()) { 446 if (has_named_interceptor()) os << " - named_interceptor\n";
486 PrintF(out, " - hidden_prototype\n"); 447 if (has_indexed_interceptor()) os << " - indexed_interceptor\n";
448 if (is_undetectable()) os << " - undetectable\n";
449 if (has_instance_call_handler()) os << " - instance_call_handler\n";
450 if (is_access_check_needed()) os << " - access_check_needed\n";
451 if (is_frozen()) {
452 os << " - frozen\n";
453 } else if (!is_extensible()) {
454 os << " - sealed\n";
487 } 455 }
488 if (has_named_interceptor()) { 456 os << " - back pointer: " << Brief(GetBackPointer());
489 PrintF(out, " - named_interceptor\n"); 457 os << "\n - instance descriptors " << (owns_descriptors() ? "(own) " : "")
458 << "#" << NumberOfOwnDescriptors() << ": "
459 << Brief(instance_descriptors());
460 if (HasTransitionArray()) {
461 os << "\n - transitions: " << Brief(transitions());
490 } 462 }
491 if (has_indexed_interceptor()) { 463 os << "\n - prototype: " << Brief(prototype());
492 PrintF(out, " - indexed_interceptor\n"); 464 os << "\n - constructor: " << Brief(constructor());
493 } 465 os << "\n - code cache: " << Brief(code_cache());
494 if (is_undetectable()) { 466 os << "\n - dependent code: " << Brief(dependent_code());
495 PrintF(out, " - undetectable\n"); 467 os << "\n";
496 }
497 if (has_instance_call_handler()) {
498 PrintF(out, " - instance_call_handler\n");
499 }
500 if (is_access_check_needed()) {
501 PrintF(out, " - access_check_needed\n");
502 }
503 if (is_frozen()) {
504 PrintF(out, " - frozen\n");
505 } else if (!is_extensible()) {
506 PrintF(out, " - sealed\n");
507 }
508 PrintF(out, " - back pointer: ");
509 GetBackPointer()->ShortPrint(out);
510 PrintF(out, "\n - instance descriptors %s#%i: ",
511 owns_descriptors() ? "(own) " : "",
512 NumberOfOwnDescriptors());
513 instance_descriptors()->ShortPrint(out);
514 if (HasTransitionArray()) {
515 PrintF(out, "\n - transitions: ");
516 transitions()->ShortPrint(out);
517 }
518 PrintF(out, "\n - prototype: ");
519 prototype()->ShortPrint(out);
520 PrintF(out, "\n - constructor: ");
521 constructor()->ShortPrint(out);
522 PrintF(out, "\n - code cache: ");
523 code_cache()->ShortPrint(out);
524 PrintF(out, "\n - dependent code: ");
525 dependent_code()->ShortPrint(out);
526 PrintF(out, "\n");
527 } 468 }
528 469
529 470
530 void CodeCache::CodeCachePrint(FILE* out) { 471 void CodeCache::CodeCachePrint(OStream& os) { // NOLINT
531 HeapObject::PrintHeader(out, "CodeCache"); 472 HeapObject::PrintHeader(os, "CodeCache");
532 PrintF(out, "\n - default_cache: "); 473 os << "\n - default_cache: " << Brief(default_cache());
533 default_cache()->ShortPrint(out); 474 os << "\n - normal_type_cache: " << Brief(normal_type_cache());
534 PrintF(out, "\n - normal_type_cache: ");
535 normal_type_cache()->ShortPrint(out);
536 } 475 }
537 476
538 477
539 void PolymorphicCodeCache::PolymorphicCodeCachePrint(FILE* out) { 478 void PolymorphicCodeCache::PolymorphicCodeCachePrint(OStream& os) { // NOLINT
540 HeapObject::PrintHeader(out, "PolymorphicCodeCache"); 479 HeapObject::PrintHeader(os, "PolymorphicCodeCache");
541 PrintF(out, "\n - cache: "); 480 os << "\n - cache: " << Brief(cache());
542 cache()->ShortPrint(out);
543 } 481 }
544 482
545 483
546 void TypeFeedbackInfo::TypeFeedbackInfoPrint(FILE* out) { 484 void TypeFeedbackInfo::TypeFeedbackInfoPrint(OStream& os) { // NOLINT
547 HeapObject::PrintHeader(out, "TypeFeedbackInfo"); 485 HeapObject::PrintHeader(os, "TypeFeedbackInfo");
548 PrintF(out, " - ic_total_count: %d, ic_with_type_info_count: %d\n", 486 os << " - ic_total_count: " << ic_total_count()
549 ic_total_count(), ic_with_type_info_count()); 487 << ", ic_with_type_info_count: " << ic_with_type_info_count() << "\n";
550 } 488 }
551 489
552 490
553 void AliasedArgumentsEntry::AliasedArgumentsEntryPrint(FILE* out) { 491 void AliasedArgumentsEntry::AliasedArgumentsEntryPrint(OStream& os) { // NOLINT
554 HeapObject::PrintHeader(out, "AliasedArgumentsEntry"); 492 HeapObject::PrintHeader(os, "AliasedArgumentsEntry");
555 PrintF(out, "\n - aliased_context_slot: %d", aliased_context_slot()); 493 os << "\n - aliased_context_slot: " << aliased_context_slot();
556 } 494 }
557 495
558 496
559 void FixedArray::FixedArrayPrint(FILE* out) { 497 void FixedArray::FixedArrayPrint(OStream& os) { // NOLINT
560 HeapObject::PrintHeader(out, "FixedArray"); 498 HeapObject::PrintHeader(os, "FixedArray");
561 PrintF(out, " - length: %d", length()); 499 os << " - length: " << length();
562 for (int i = 0; i < length(); i++) { 500 for (int i = 0; i < length(); i++) {
563 PrintF(out, "\n [%d]: ", i); 501 os << "\n [" << i << "]: " << Brief(get(i));
564 get(i)->ShortPrint(out);
565 } 502 }
566 PrintF(out, "\n"); 503 os << "\n";
567 } 504 }
568 505
569 506
570 void FixedDoubleArray::FixedDoubleArrayPrint(FILE* out) { 507 void FixedDoubleArray::FixedDoubleArrayPrint(OStream& os) { // NOLINT
571 HeapObject::PrintHeader(out, "FixedDoubleArray"); 508 HeapObject::PrintHeader(os, "FixedDoubleArray");
572 PrintF(out, " - length: %d", length()); 509 os << " - length: " << length();
573 for (int i = 0; i < length(); i++) { 510 for (int i = 0; i < length(); i++) {
511 os << "\n [" << i << "]: ";
574 if (is_the_hole(i)) { 512 if (is_the_hole(i)) {
575 PrintF(out, "\n [%d]: <the hole>", i); 513 os << "<the hole>";
576 } else { 514 } else {
577 PrintF(out, "\n [%d]: %g", i, get_scalar(i)); 515 os << get_scalar(i);
578 } 516 }
579 } 517 }
580 PrintF(out, "\n"); 518 os << "\n";
581 } 519 }
582 520
583 521
584 void ConstantPoolArray::ConstantPoolArrayPrint(FILE* out) { 522 void ConstantPoolArray::ConstantPoolArrayPrint(OStream& os) { // NOLINT
585 HeapObject::PrintHeader(out, "ConstantPoolArray"); 523 HeapObject::PrintHeader(os, "ConstantPoolArray");
586 PrintF(out, " - length: %d", length()); 524 os << " - length: " << length();
587 for (int i = 0; i <= last_index(INT32, SMALL_SECTION); i++) { 525 for (int i = 0; i <= last_index(INT32, SMALL_SECTION); i++) {
588 if (i < last_index(INT64, SMALL_SECTION)) { 526 if (i < last_index(INT64, SMALL_SECTION)) {
589 PrintF(out, "\n [%d]: double: %g", i, get_int64_entry_as_double(i)); 527 os << "\n [" << i << "]: double: " << get_int64_entry_as_double(i);
590 } else if (i <= last_index(CODE_PTR, SMALL_SECTION)) { 528 } else if (i <= last_index(CODE_PTR, SMALL_SECTION)) {
591 PrintF(out, "\n [%d]: code target pointer: %p", i, 529 os << "\n [" << i << "]: code target pointer: "
592 reinterpret_cast<void*>(get_code_ptr_entry(i))); 530 << reinterpret_cast<void*>(get_code_ptr_entry(i));
593 } else if (i <= last_index(HEAP_PTR, SMALL_SECTION)) { 531 } else if (i <= last_index(HEAP_PTR, SMALL_SECTION)) {
594 PrintF(out, "\n [%d]: heap pointer: %p", i, 532 os << "\n [" << i << "]: heap pointer: "
595 reinterpret_cast<void*>(get_heap_ptr_entry(i))); 533 << reinterpret_cast<void*>(get_heap_ptr_entry(i));
596 } else if (i <= last_index(INT32, SMALL_SECTION)) { 534 } else if (i <= last_index(INT32, SMALL_SECTION)) {
597 PrintF(out, "\n [%d]: int32: %d", i, get_int32_entry(i)); 535 os << "\n [" << i << "]: int32: " << get_int32_entry(i);
598 } 536 }
599 } 537 }
600 if (is_extended_layout()) { 538 if (is_extended_layout()) {
601 PrintF(out, "\n Extended section:"); 539 os << "\n Extended section:";
602 for (int i = first_extended_section_index(); 540 for (int i = first_extended_section_index();
603 i <= last_index(INT32, EXTENDED_SECTION); i++) { 541 i <= last_index(INT32, EXTENDED_SECTION); i++) {
604 if (i < last_index(INT64, EXTENDED_SECTION)) { 542 if (i < last_index(INT64, EXTENDED_SECTION)) {
605 PrintF(out, "\n [%d]: double: %g", i, get_int64_entry_as_double(i)); 543 os << "\n [" << i << "]: double: " << get_int64_entry_as_double(i);
606 } else if (i <= last_index(CODE_PTR, EXTENDED_SECTION)) { 544 } else if (i <= last_index(CODE_PTR, EXTENDED_SECTION)) {
607 PrintF(out, "\n [%d]: code target pointer: %p", i, 545 os << "\n [" << i << "]: code target pointer: "
608 reinterpret_cast<void*>(get_code_ptr_entry(i))); 546 << reinterpret_cast<void*>(get_code_ptr_entry(i));
609 } else if (i <= last_index(HEAP_PTR, EXTENDED_SECTION)) { 547 } else if (i <= last_index(HEAP_PTR, EXTENDED_SECTION)) {
610 PrintF(out, "\n [%d]: heap pointer: %p", i, 548 os << "\n [" << i << "]: heap pointer: "
611 reinterpret_cast<void*>(get_heap_ptr_entry(i))); 549 << reinterpret_cast<void*>(get_heap_ptr_entry(i));
612 } else if (i <= last_index(INT32, EXTENDED_SECTION)) { 550 } else if (i <= last_index(INT32, EXTENDED_SECTION)) {
613 PrintF(out, "\n [%d]: int32: %d", i, get_int32_entry(i)); 551 os << "\n [" << i << "]: int32: " << get_int32_entry(i);
552 }
614 } 553 }
615 } 554 }
616 } 555 os << "\n";
617 PrintF(out, "\n");
618 } 556 }
619 557
620 558
621 void JSValue::JSValuePrint(FILE* out) { 559 void JSValue::JSValuePrint(OStream& os) { // NOLINT
622 HeapObject::PrintHeader(out, "ValueObject"); 560 HeapObject::PrintHeader(os, "ValueObject");
623 value()->Print(out); 561 value()->Print(os);
624 } 562 }
625 563
626 564
627 void JSMessageObject::JSMessageObjectPrint(FILE* out) { 565 void JSMessageObject::JSMessageObjectPrint(OStream& os) { // NOLINT
628 HeapObject::PrintHeader(out, "JSMessageObject"); 566 HeapObject::PrintHeader(os, "JSMessageObject");
629 PrintF(out, " - type: "); 567 os << " - type: " << Brief(type());
630 type()->ShortPrint(out); 568 os << "\n - arguments: " << Brief(arguments());
631 PrintF(out, "\n - arguments: "); 569 os << "\n - start_position: " << start_position();
632 arguments()->ShortPrint(out); 570 os << "\n - end_position: " << end_position();
633 PrintF(out, "\n - start_position: %d", start_position()); 571 os << "\n - script: " << Brief(script());
634 PrintF(out, "\n - end_position: %d", end_position()); 572 os << "\n - stack_frames: " << Brief(stack_frames());
635 PrintF(out, "\n - script: "); 573 os << "\n";
636 script()->ShortPrint(out);
637 PrintF(out, "\n - stack_frames: ");
638 stack_frames()->ShortPrint(out);
639 PrintF(out, "\n");
640 } 574 }
641 575
642 576
643 void String::StringPrint(FILE* out) { 577 void String::StringPrint(OStream& os) { // NOLINT
644 if (StringShape(this).IsInternalized()) { 578 if (StringShape(this).IsInternalized()) {
645 PrintF(out, "#"); 579 os << "#";
646 } else if (StringShape(this).IsCons()) { 580 } else if (StringShape(this).IsCons()) {
647 PrintF(out, "c\""); 581 os << "c\"";
648 } else { 582 } else {
649 PrintF(out, "\""); 583 os << "\"";
650 } 584 }
651 585
652 const char truncated_epilogue[] = "...<truncated>"; 586 const char truncated_epilogue[] = "...<truncated>";
653 int len = length(); 587 int len = length();
654 if (!FLAG_use_verbose_printer) { 588 if (!FLAG_use_verbose_printer) {
655 if (len > 100) { 589 if (len > 100) {
656 len = 100 - sizeof(truncated_epilogue); 590 len = 100 - sizeof(truncated_epilogue);
657 } 591 }
658 } 592 }
659 for (int i = 0; i < len; i++) { 593 for (int i = 0; i < len; i++) {
660 PrintF(out, "%c", Get(i)); 594 os.put(Get(i));
661 } 595 }
662 if (len != length()) { 596 if (len != length()) {
663 PrintF(out, "%s", truncated_epilogue); 597 os << truncated_epilogue;
664 } 598 }
665 599
666 if (!StringShape(this).IsInternalized()) PrintF(out, "\""); 600 if (!StringShape(this).IsInternalized()) os << "\"";
667 } 601 }
668 602
669 603
670 void Name::NamePrint(FILE* out) { 604 void Name::NamePrint(OStream& os) { // NOLINT
671 if (IsString()) 605 if (IsString())
672 String::cast(this)->StringPrint(out); 606 String::cast(this)->StringPrint(os);
673 else 607 else
674 ShortPrint(); 608 os << Brief(this);
675 } 609 }
676 610
677 611
678 // This method is only meant to be called from gdb for debugging purposes. 612 // This method is only meant to be called from gdb for debugging purposes.
679 // Since the string can also be in two-byte encoding, non-ASCII characters 613 // Since the string can also be in two-byte encoding, non-ASCII characters
680 // will be ignored in the output. 614 // will be ignored in the output.
681 char* String::ToAsciiArray() { 615 char* String::ToAsciiArray() {
682 // Static so that subsequent calls frees previously allocated space. 616 // Static so that subsequent calls frees previously allocated space.
683 // This also means that previous results will be overwritten. 617 // This also means that previous results will be overwritten.
684 static char* buffer = NULL; 618 static char* buffer = NULL;
685 if (buffer != NULL) free(buffer); 619 if (buffer != NULL) free(buffer);
686 buffer = new char[length()+1]; 620 buffer = new char[length()+1];
687 WriteToFlat(this, reinterpret_cast<uint8_t*>(buffer), 0, length()); 621 WriteToFlat(this, reinterpret_cast<uint8_t*>(buffer), 0, length());
688 buffer[length()] = 0; 622 buffer[length()] = 0;
689 return buffer; 623 return buffer;
690 } 624 }
691 625
692 626
693 static const char* const weekdays[] = { 627 static const char* const weekdays[] = {
694 "???", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" 628 "???", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
695 }; 629 };
696 630
697 631
698 void JSDate::JSDatePrint(FILE* out) { 632 void JSDate::JSDatePrint(OStream& os) { // NOLINT
699 HeapObject::PrintHeader(out, "JSDate"); 633 HeapObject::PrintHeader(os, "JSDate");
700 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 634 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
701 PrintF(out, " - value = "); 635 os << " - value = ";
702 value()->Print(out); 636 value()->Print(os);
703 if (!year()->IsSmi()) { 637 if (!year()->IsSmi()) {
704 PrintF(out, " - time = NaN\n"); 638 os << " - time = NaN\n";
705 } else { 639 } else {
706 PrintF(out, " - time = %s %04d/%02d/%02d %02d:%02d:%02d\n", 640 // TODO(svenpanne) Add some basic formatting to our streams.
707 weekdays[weekday()->IsSmi() ? Smi::cast(weekday())->value() + 1 : 0], 641 Vector<char> buf = Vector<char>::New(100);
708 year()->IsSmi() ? Smi::cast(year())->value() : -1, 642 SNPrintF(
709 month()->IsSmi() ? Smi::cast(month())->value() : -1, 643 buf, " - time = %s %04d/%02d/%02d %02d:%02d:%02d\n",
710 day()->IsSmi() ? Smi::cast(day())->value() : -1, 644 weekdays[weekday()->IsSmi() ? Smi::cast(weekday())->value() + 1 : 0],
711 hour()->IsSmi() ? Smi::cast(hour())->value() : -1, 645 year()->IsSmi() ? Smi::cast(year())->value() : -1,
712 min()->IsSmi() ? Smi::cast(min())->value() : -1, 646 month()->IsSmi() ? Smi::cast(month())->value() : -1,
713 sec()->IsSmi() ? Smi::cast(sec())->value() : -1); 647 day()->IsSmi() ? Smi::cast(day())->value() : -1,
648 hour()->IsSmi() ? Smi::cast(hour())->value() : -1,
649 min()->IsSmi() ? Smi::cast(min())->value() : -1,
650 sec()->IsSmi() ? Smi::cast(sec())->value() : -1);
651 os << buf.start();
714 } 652 }
715 } 653 }
716 654
717 655
718 void JSProxy::JSProxyPrint(FILE* out) { 656 void JSProxy::JSProxyPrint(OStream& os) { // NOLINT
719 HeapObject::PrintHeader(out, "JSProxy"); 657 HeapObject::PrintHeader(os, "JSProxy");
720 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 658 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
721 PrintF(out, " - handler = "); 659 os << " - handler = ";
722 handler()->Print(out); 660 handler()->Print(os);
723 PrintF(out, "\n - hash = "); 661 os << "\n - hash = ";
724 hash()->Print(out); 662 hash()->Print(os);
725 PrintF(out, "\n"); 663 os << "\n";
726 } 664 }
727 665
728 666
729 void JSFunctionProxy::JSFunctionProxyPrint(FILE* out) { 667 void JSFunctionProxy::JSFunctionProxyPrint(OStream& os) { // NOLINT
730 HeapObject::PrintHeader(out, "JSFunctionProxy"); 668 HeapObject::PrintHeader(os, "JSFunctionProxy");
731 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 669 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
732 PrintF(out, " - handler = "); 670 os << " - handler = ";
733 handler()->Print(out); 671 handler()->Print(os);
734 PrintF(out, "\n - call_trap = "); 672 os << "\n - call_trap = ";
735 call_trap()->Print(out); 673 call_trap()->Print(os);
736 PrintF(out, "\n - construct_trap = "); 674 os << "\n - construct_trap = ";
737 construct_trap()->Print(out); 675 construct_trap()->Print(os);
738 PrintF(out, "\n"); 676 os << "\n";
739 } 677 }
740 678
741 679
742 void JSSet::JSSetPrint(FILE* out) { 680 void JSSet::JSSetPrint(OStream& os) { // NOLINT
743 HeapObject::PrintHeader(out, "JSSet"); 681 HeapObject::PrintHeader(os, "JSSet");
744 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 682 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
745 PrintF(out, " - table = "); 683 os << " - table = " << Brief(table());
746 table()->ShortPrint(out); 684 os << "\n";
747 PrintF(out, "\n");
748 } 685 }
749 686
750 687
751 void JSMap::JSMapPrint(FILE* out) { 688 void JSMap::JSMapPrint(OStream& os) { // NOLINT
752 HeapObject::PrintHeader(out, "JSMap"); 689 HeapObject::PrintHeader(os, "JSMap");
753 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 690 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
754 PrintF(out, " - table = "); 691 os << " - table = " << Brief(table());
755 table()->ShortPrint(out); 692 os << "\n";
756 PrintF(out, "\n");
757 } 693 }
758 694
759 695
760 template<class Derived, class TableType> 696 template <class Derived, class TableType>
761 void OrderedHashTableIterator<Derived, TableType>:: 697 void OrderedHashTableIterator<
762 OrderedHashTableIteratorPrint(FILE* out) { 698 Derived, TableType>::OrderedHashTableIteratorPrint(OStream& os) { // NOLINT
763 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 699 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
764 PrintF(out, " - table = "); 700 os << " - table = " << Brief(table());
765 table()->ShortPrint(out); 701 os << "\n - index = " << Brief(index());
766 PrintF(out, "\n - index = "); 702 os << "\n - kind = " << Brief(kind());
767 index()->ShortPrint(out); 703 os << "\n";
768 PrintF(out, "\n - kind = ");
769 kind()->ShortPrint(out);
770 PrintF(out, "\n");
771 } 704 }
772 705
773 706
774 template void 707 template void OrderedHashTableIterator<
775 OrderedHashTableIterator<JSSetIterator, 708 JSSetIterator,
776 OrderedHashSet>::OrderedHashTableIteratorPrint(FILE* out); 709 OrderedHashSet>::OrderedHashTableIteratorPrint(OStream& os); // NOLINT
777 710
778 711
779 template void 712 template void OrderedHashTableIterator<
780 OrderedHashTableIterator<JSMapIterator, 713 JSMapIterator,
781 OrderedHashMap>::OrderedHashTableIteratorPrint(FILE* out); 714 OrderedHashMap>::OrderedHashTableIteratorPrint(OStream& os); // NOLINT
782 715
783 716
784 void JSSetIterator::JSSetIteratorPrint(FILE* out) { 717 void JSSetIterator::JSSetIteratorPrint(OStream& os) { // NOLINT
785 HeapObject::PrintHeader(out, "JSSetIterator"); 718 HeapObject::PrintHeader(os, "JSSetIterator");
786 OrderedHashTableIteratorPrint(out); 719 OrderedHashTableIteratorPrint(os);
787 } 720 }
788 721
789 722
790 void JSMapIterator::JSMapIteratorPrint(FILE* out) { 723 void JSMapIterator::JSMapIteratorPrint(OStream& os) { // NOLINT
791 HeapObject::PrintHeader(out, "JSMapIterator"); 724 HeapObject::PrintHeader(os, "JSMapIterator");
792 OrderedHashTableIteratorPrint(out); 725 OrderedHashTableIteratorPrint(os);
793 } 726 }
794 727
795 728
796 void JSWeakMap::JSWeakMapPrint(FILE* out) { 729 void JSWeakMap::JSWeakMapPrint(OStream& os) { // NOLINT
797 HeapObject::PrintHeader(out, "JSWeakMap"); 730 HeapObject::PrintHeader(os, "JSWeakMap");
798 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 731 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
799 PrintF(out, " - table = "); 732 os << " - table = " << Brief(table());
800 table()->ShortPrint(out); 733 os << "\n";
801 PrintF(out, "\n");
802 } 734 }
803 735
804 736
805 void JSWeakSet::JSWeakSetPrint(FILE* out) { 737 void JSWeakSet::JSWeakSetPrint(OStream& os) { // NOLINT
806 HeapObject::PrintHeader(out, "JSWeakSet"); 738 HeapObject::PrintHeader(os, "JSWeakSet");
807 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 739 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
808 PrintF(out, " - table = "); 740 os << " - table = " << Brief(table());
809 table()->ShortPrint(out); 741 os << "\n";
810 PrintF(out, "\n");
811 } 742 }
812 743
813 744
814 void JSArrayBuffer::JSArrayBufferPrint(FILE* out) { 745 void JSArrayBuffer::JSArrayBufferPrint(OStream& os) { // NOLINT
815 HeapObject::PrintHeader(out, "JSArrayBuffer"); 746 HeapObject::PrintHeader(os, "JSArrayBuffer");
816 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 747 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
817 PrintF(out, " - backing_store = %p\n", backing_store()); 748 os << " - backing_store = " << backing_store() << "\n";
818 PrintF(out, " - byte_length = "); 749 os << " - byte_length = " << Brief(byte_length());
819 byte_length()->ShortPrint(out); 750 os << "\n";
820 PrintF(out, "\n");
821 } 751 }
822 752
823 753
824 void JSTypedArray::JSTypedArrayPrint(FILE* out) { 754 void JSTypedArray::JSTypedArrayPrint(OStream& os) { // NOLINT
825 HeapObject::PrintHeader(out, "JSTypedArray"); 755 HeapObject::PrintHeader(os, "JSTypedArray");
826 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 756 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
827 PrintF(out, " - buffer ="); 757 os << " - buffer =" << Brief(buffer());
828 buffer()->ShortPrint(out); 758 os << "\n - byte_offset = " << Brief(byte_offset());
829 PrintF(out, "\n - byte_offset = "); 759 os << "\n - byte_length = " << Brief(byte_length());
830 byte_offset()->ShortPrint(out); 760 os << "\n - length = " << Brief(length());
831 PrintF(out, "\n - byte_length = "); 761 os << "\n";
832 byte_length()->ShortPrint(out); 762 PrintElements(os);
833 PrintF(out, "\n - length = ");
834 length()->ShortPrint(out);
835 PrintF(out, "\n");
836 PrintElements(out);
837 } 763 }
838 764
839 765
840 void JSDataView::JSDataViewPrint(FILE* out) { 766 void JSDataView::JSDataViewPrint(OStream& os) { // NOLINT
841 HeapObject::PrintHeader(out, "JSDataView"); 767 HeapObject::PrintHeader(os, "JSDataView");
842 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 768 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
843 PrintF(out, " - buffer ="); 769 os << " - buffer =" << Brief(buffer());
844 buffer()->ShortPrint(out); 770 os << "\n - byte_offset = " << Brief(byte_offset());
845 PrintF(out, "\n - byte_offset = "); 771 os << "\n - byte_length = " << Brief(byte_length());
846 byte_offset()->ShortPrint(out); 772 os << "\n";
847 PrintF(out, "\n - byte_length = ");
848 byte_length()->ShortPrint(out);
849 PrintF(out, "\n");
850 } 773 }
851 774
852 775
853 void JSFunction::JSFunctionPrint(FILE* out) { 776 void JSFunction::JSFunctionPrint(OStream& os) { // NOLINT
854 HeapObject::PrintHeader(out, "Function"); 777 HeapObject::PrintHeader(os, "Function");
855 PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map())); 778 os << " - map = " << reinterpret_cast<void*>(map()) << "\n";
856 PrintF(out, " - initial_map = "); 779 os << " - initial_map = ";
857 if (has_initial_map()) { 780 if (has_initial_map()) os << Brief(initial_map());
858 initial_map()->ShortPrint(out); 781 os << "\n - shared_info = " << Brief(shared());
782 os << "\n - name = " << Brief(shared()->name());
783 os << "\n - context = " << Brief(context());
784 if (shared()->bound()) {
785 os << "\n - bindings = " << Brief(function_bindings());
786 } else {
787 os << "\n - literals = " << Brief(literals());
859 } 788 }
860 PrintF(out, "\n - shared_info = "); 789 os << "\n - code = " << Brief(code());
861 shared()->ShortPrint(out); 790 os << "\n";
862 PrintF(out, "\n - name = "); 791 PrintProperties(os);
863 shared()->name()->Print(out); 792 PrintElements(os);
864 PrintF(out, "\n - context = "); 793 os << "\n";
865 context()->ShortPrint(out);
866 if (shared()->bound()) {
867 PrintF(out, "\n - bindings = ");
868 function_bindings()->ShortPrint(out);
869 } else {
870 PrintF(out, "\n - literals = ");
871 literals()->ShortPrint(out);
872 }
873 PrintF(out, "\n - code = ");
874 code()->ShortPrint(out);
875 PrintF(out, "\n");
876
877 PrintProperties(out);
878 PrintElements(out);
879
880 PrintF(out, "\n");
881 } 794 }
882 795
883 796
884 void SharedFunctionInfo::SharedFunctionInfoPrint(FILE* out) { 797 void SharedFunctionInfo::SharedFunctionInfoPrint(OStream& os) { // NOLINT
885 HeapObject::PrintHeader(out, "SharedFunctionInfo"); 798 HeapObject::PrintHeader(os, "SharedFunctionInfo");
886 PrintF(out, " - name: "); 799 os << " - name: " << Brief(name());
887 name()->ShortPrint(out); 800 os << "\n - expected_nof_properties: " << expected_nof_properties();
888 PrintF(out, "\n - expected_nof_properties: %d", expected_nof_properties()); 801 os << "\n - ast_node_count: " << ast_node_count();
889 PrintF(out, "\n - ast_node_count: %d", ast_node_count()); 802 os << "\n - instance class name = ";
890 PrintF(out, "\n - instance class name = "); 803 instance_class_name()->Print(os);
891 instance_class_name()->Print(out); 804 os << "\n - code = " << Brief(code());
892 PrintF(out, "\n - code = ");
893 code()->ShortPrint(out);
894 if (HasSourceCode()) { 805 if (HasSourceCode()) {
895 PrintF(out, "\n - source code = "); 806 os << "\n - source code = ";
896 String* source = String::cast(Script::cast(script())->source()); 807 String* source = String::cast(Script::cast(script())->source());
897 int start = start_position(); 808 int start = start_position();
898 int length = end_position() - start; 809 int length = end_position() - start;
899 SmartArrayPointer<char> source_string = 810 SmartArrayPointer<char> source_string =
900 source->ToCString(DISALLOW_NULLS, 811 source->ToCString(DISALLOW_NULLS,
901 FAST_STRING_TRAVERSAL, 812 FAST_STRING_TRAVERSAL,
902 start, length, NULL); 813 start, length, NULL);
903 PrintF(out, "%s", source_string.get()); 814 os << source_string.get();
904 } 815 }
905 // Script files are often large, hard to read. 816 // Script files are often large, hard to read.
906 // PrintF(out, "\n - script ="); 817 // os << "\n - script =";
907 // script()->Print(out); 818 // script()->Print(os);
908 PrintF(out, "\n - function token position = %d", function_token_position()); 819 os << "\n - function token position = " << function_token_position();
909 PrintF(out, "\n - start position = %d", start_position()); 820 os << "\n - start position = " << start_position();
910 PrintF(out, "\n - end position = %d", end_position()); 821 os << "\n - end position = " << end_position();
911 PrintF(out, "\n - is expression = %d", is_expression()); 822 os << "\n - is expression = " << is_expression();
912 PrintF(out, "\n - debug info = "); 823 os << "\n - debug info = " << Brief(debug_info());
913 debug_info()->ShortPrint(out); 824 os << "\n - length = " << length();
914 PrintF(out, "\n - length = %d", length()); 825 os << "\n - optimized_code_map = " << Brief(optimized_code_map());
915 PrintF(out, "\n - optimized_code_map = "); 826 os << "\n - feedback_vector = ";
916 optimized_code_map()->ShortPrint(out); 827 feedback_vector()->FixedArrayPrint(os);
917 PrintF(out, "\n - feedback_vector = "); 828 os << "\n";
918 feedback_vector()->FixedArrayPrint(out); 829 }
919 PrintF(out, "\n"); 830
920 } 831
921 832 void JSGlobalProxy::JSGlobalProxyPrint(OStream& os) { // NOLINT
922 833 os << "global_proxy ";
923 void JSGlobalProxy::JSGlobalProxyPrint(FILE* out) { 834 JSObjectPrint(os);
924 PrintF(out, "global_proxy "); 835 os << "native context : " << Brief(native_context());
925 JSObjectPrint(out); 836 os << "\n";
926 PrintF(out, "native context : "); 837 }
927 native_context()->ShortPrint(out); 838
928 PrintF(out, "\n"); 839
929 } 840 void JSGlobalObject::JSGlobalObjectPrint(OStream& os) { // NOLINT
930 841 os << "global ";
931 842 JSObjectPrint(os);
932 void JSGlobalObject::JSGlobalObjectPrint(FILE* out) { 843 os << "native context : " << Brief(native_context());
933 PrintF(out, "global "); 844 os << "\n";
934 JSObjectPrint(out); 845 }
935 PrintF(out, "native context : "); 846
936 native_context()->ShortPrint(out); 847
937 PrintF(out, "\n"); 848 void JSBuiltinsObject::JSBuiltinsObjectPrint(OStream& os) { // NOLINT
938 } 849 os << "builtins ";
939 850 JSObjectPrint(os);
940 851 }
941 void JSBuiltinsObject::JSBuiltinsObjectPrint(FILE* out) { 852
942 PrintF(out, "builtins "); 853
943 JSObjectPrint(out); 854 void Cell::CellPrint(OStream& os) { // NOLINT
944 } 855 HeapObject::PrintHeader(os, "Cell");
945 856 }
946 857
947 void Cell::CellPrint(FILE* out) { 858
948 HeapObject::PrintHeader(out, "Cell"); 859 void PropertyCell::PropertyCellPrint(OStream& os) { // NOLINT
949 } 860 HeapObject::PrintHeader(os, "PropertyCell");
950 861 }
951 862
952 void PropertyCell::PropertyCellPrint(FILE* out) { 863
953 HeapObject::PrintHeader(out, "PropertyCell"); 864 void Code::CodePrint(OStream& os) { // NOLINT
954 } 865 HeapObject::PrintHeader(os, "Code");
955
956
957 void Code::CodePrint(FILE* out) {
958 HeapObject::PrintHeader(out, "Code");
959 #ifdef ENABLE_DISASSEMBLER 866 #ifdef ENABLE_DISASSEMBLER
960 if (FLAG_use_verbose_printer) { 867 if (FLAG_use_verbose_printer) {
961 Disassemble(NULL, out); 868 Disassemble(NULL, os);
962 } 869 }
963 #endif 870 #endif
964 } 871 }
965 872
966 873
967 void Foreign::ForeignPrint(FILE* out) { 874 void Foreign::ForeignPrint(OStream& os) { // NOLINT
968 PrintF(out, "foreign address : %p", foreign_address()); 875 os << "foreign address : " << foreign_address();
969 } 876 }
970 877
971 878
972 void ExecutableAccessorInfo::ExecutableAccessorInfoPrint(FILE* out) { 879 void ExecutableAccessorInfo::ExecutableAccessorInfoPrint(
973 HeapObject::PrintHeader(out, "ExecutableAccessorInfo"); 880 OStream& os) { // NOLINT
974 PrintF(out, "\n - name: "); 881 HeapObject::PrintHeader(os, "ExecutableAccessorInfo");
975 name()->ShortPrint(out); 882 os << "\n - name: " << Brief(name());
976 PrintF(out, "\n - flag: "); 883 os << "\n - flag: " << Brief(flag());
977 flag()->ShortPrint(out); 884 os << "\n - getter: " << Brief(getter());
978 PrintF(out, "\n - getter: "); 885 os << "\n - setter: " << Brief(setter());
979 getter()->ShortPrint(out); 886 os << "\n - data: " << Brief(data());
980 PrintF(out, "\n - setter: "); 887 os << "\n";
981 setter()->ShortPrint(out); 888 }
982 PrintF(out, "\n - data: "); 889
983 data()->ShortPrint(out); 890
984 } 891 void DeclaredAccessorInfo::DeclaredAccessorInfoPrint(OStream& os) { // NOLINT
985 892 HeapObject::PrintHeader(os, "DeclaredAccessorInfo");
986 893 os << "\n - name: " << Brief(name());
987 void DeclaredAccessorInfo::DeclaredAccessorInfoPrint(FILE* out) { 894 os << "\n - flag: " << Brief(flag());
988 HeapObject::PrintHeader(out, "DeclaredAccessorInfo"); 895 os << "\n - descriptor: " << Brief(descriptor());
989 PrintF(out, "\n - name: "); 896 os << "\n";
990 name()->ShortPrint(out); 897 }
991 PrintF(out, "\n - flag: "); 898
992 flag()->ShortPrint(out); 899
993 PrintF(out, "\n - descriptor: "); 900 void DeclaredAccessorDescriptor::DeclaredAccessorDescriptorPrint(
994 descriptor()->ShortPrint(out); 901 OStream& os) { // NOLINT
995 } 902 HeapObject::PrintHeader(os, "DeclaredAccessorDescriptor");
996 903 os << "\n - internal field: " << Brief(serialized_data());
997 904 os << "\n";
998 void DeclaredAccessorDescriptor::DeclaredAccessorDescriptorPrint(FILE* out) { 905 }
999 HeapObject::PrintHeader(out, "DeclaredAccessorDescriptor"); 906
1000 PrintF(out, "\n - internal field: "); 907
1001 serialized_data()->ShortPrint(out); 908 void Box::BoxPrint(OStream& os) { // NOLINT
1002 } 909 HeapObject::PrintHeader(os, "Box");
1003 910 os << "\n - value: " << Brief(value());
1004 911 os << "\n";
1005 void Box::BoxPrint(FILE* out) { 912 }
1006 HeapObject::PrintHeader(out, "Box"); 913
1007 PrintF(out, "\n - value: "); 914
1008 value()->ShortPrint(out); 915 void AccessorPair::AccessorPairPrint(OStream& os) { // NOLINT
1009 } 916 HeapObject::PrintHeader(os, "AccessorPair");
1010 917 os << "\n - getter: " << Brief(getter());
1011 918 os << "\n - setter: " << Brief(setter());
1012 void AccessorPair::AccessorPairPrint(FILE* out) { 919 os << "\n";
1013 HeapObject::PrintHeader(out, "AccessorPair"); 920 }
1014 PrintF(out, "\n - getter: "); 921
1015 getter()->ShortPrint(out); 922
1016 PrintF(out, "\n - setter: "); 923 void AccessCheckInfo::AccessCheckInfoPrint(OStream& os) { // NOLINT
1017 setter()->ShortPrint(out); 924 HeapObject::PrintHeader(os, "AccessCheckInfo");
1018 } 925 os << "\n - named_callback: " << Brief(named_callback());
1019 926 os << "\n - indexed_callback: " << Brief(indexed_callback());
1020 927 os << "\n - data: " << Brief(data());
1021 void AccessCheckInfo::AccessCheckInfoPrint(FILE* out) { 928 os << "\n";
1022 HeapObject::PrintHeader(out, "AccessCheckInfo"); 929 }
1023 PrintF(out, "\n - named_callback: "); 930
1024 named_callback()->ShortPrint(out); 931
1025 PrintF(out, "\n - indexed_callback: "); 932 void InterceptorInfo::InterceptorInfoPrint(OStream& os) { // NOLINT
1026 indexed_callback()->ShortPrint(out); 933 HeapObject::PrintHeader(os, "InterceptorInfo");
1027 PrintF(out, "\n - data: "); 934 os << "\n - getter: " << Brief(getter());
1028 data()->ShortPrint(out); 935 os << "\n - setter: " << Brief(setter());
1029 } 936 os << "\n - query: " << Brief(query());
1030 937 os << "\n - deleter: " << Brief(deleter());
1031 938 os << "\n - enumerator: " << Brief(enumerator());
1032 void InterceptorInfo::InterceptorInfoPrint(FILE* out) { 939 os << "\n - data: " << Brief(data());
1033 HeapObject::PrintHeader(out, "InterceptorInfo"); 940 os << "\n";
1034 PrintF(out, "\n - getter: "); 941 }
1035 getter()->ShortPrint(out); 942
1036 PrintF(out, "\n - setter: "); 943
1037 setter()->ShortPrint(out); 944 void CallHandlerInfo::CallHandlerInfoPrint(OStream& os) { // NOLINT
1038 PrintF(out, "\n - query: "); 945 HeapObject::PrintHeader(os, "CallHandlerInfo");
1039 query()->ShortPrint(out); 946 os << "\n - callback: " << Brief(callback());
1040 PrintF(out, "\n - deleter: "); 947 os << "\n - data: " << Brief(data());
1041 deleter()->ShortPrint(out); 948 os << "\n";
1042 PrintF(out, "\n - enumerator: "); 949 }
1043 enumerator()->ShortPrint(out); 950
1044 PrintF(out, "\n - data: "); 951
1045 data()->ShortPrint(out); 952 void FunctionTemplateInfo::FunctionTemplateInfoPrint(OStream& os) { // NOLINT
1046 } 953 HeapObject::PrintHeader(os, "FunctionTemplateInfo");
1047 954 os << "\n - class name: " << Brief(class_name());
1048 955 os << "\n - tag: " << Brief(tag());
1049 void CallHandlerInfo::CallHandlerInfoPrint(FILE* out) { 956 os << "\n - property_list: " << Brief(property_list());
1050 HeapObject::PrintHeader(out, "CallHandlerInfo"); 957 os << "\n - serial_number: " << Brief(serial_number());
1051 PrintF(out, "\n - callback: "); 958 os << "\n - call_code: " << Brief(call_code());
1052 callback()->ShortPrint(out); 959 os << "\n - property_accessors: " << Brief(property_accessors());
1053 PrintF(out, "\n - data: "); 960 os << "\n - prototype_template: " << Brief(prototype_template());
1054 data()->ShortPrint(out); 961 os << "\n - parent_template: " << Brief(parent_template());
1055 PrintF(out, "\n - call_stub_cache: "); 962 os << "\n - named_property_handler: " << Brief(named_property_handler());
1056 } 963 os << "\n - indexed_property_handler: " << Brief(indexed_property_handler());
1057 964 os << "\n - instance_template: " << Brief(instance_template());
1058 965 os << "\n - signature: " << Brief(signature());
1059 void FunctionTemplateInfo::FunctionTemplateInfoPrint(FILE* out) { 966 os << "\n - access_check_info: " << Brief(access_check_info());
1060 HeapObject::PrintHeader(out, "FunctionTemplateInfo"); 967 os << "\n - hidden_prototype: " << (hidden_prototype() ? "true" : "false");
1061 PrintF(out, "\n - class name: "); 968 os << "\n - undetectable: " << (undetectable() ? "true" : "false");
1062 class_name()->ShortPrint(out); 969 os << "\n - need_access_check: " << (needs_access_check() ? "true" : "false");
1063 PrintF(out, "\n - tag: "); 970 os << "\n";
1064 tag()->ShortPrint(out); 971 }
1065 PrintF(out, "\n - property_list: "); 972
1066 property_list()->ShortPrint(out); 973
1067 PrintF(out, "\n - serial_number: "); 974 void ObjectTemplateInfo::ObjectTemplateInfoPrint(OStream& os) { // NOLINT
1068 serial_number()->ShortPrint(out); 975 HeapObject::PrintHeader(os, "ObjectTemplateInfo");
1069 PrintF(out, "\n - call_code: "); 976 os << " - tag: " << Brief(tag());
1070 call_code()->ShortPrint(out); 977 os << "\n - property_list: " << Brief(property_list());
1071 PrintF(out, "\n - property_accessors: "); 978 os << "\n - property_accessors: " << Brief(property_accessors());
1072 property_accessors()->ShortPrint(out); 979 os << "\n - constructor: " << Brief(constructor());
1073 PrintF(out, "\n - prototype_template: "); 980 os << "\n - internal_field_count: " << Brief(internal_field_count());
1074 prototype_template()->ShortPrint(out); 981 os << "\n";
1075 PrintF(out, "\n - parent_template: "); 982 }
1076 parent_template()->ShortPrint(out); 983
1077 PrintF(out, "\n - named_property_handler: "); 984
1078 named_property_handler()->ShortPrint(out); 985 void SignatureInfo::SignatureInfoPrint(OStream& os) { // NOLINT
1079 PrintF(out, "\n - indexed_property_handler: "); 986 HeapObject::PrintHeader(os, "SignatureInfo");
1080 indexed_property_handler()->ShortPrint(out); 987 os << "\n - receiver: " << Brief(receiver());
1081 PrintF(out, "\n - instance_template: "); 988 os << "\n - args: " << Brief(args());
1082 instance_template()->ShortPrint(out); 989 os << "\n";
1083 PrintF(out, "\n - signature: "); 990 }
1084 signature()->ShortPrint(out); 991
1085 PrintF(out, "\n - access_check_info: "); 992
1086 access_check_info()->ShortPrint(out); 993 void TypeSwitchInfo::TypeSwitchInfoPrint(OStream& os) { // NOLINT
1087 PrintF(out, "\n - hidden_prototype: %s", 994 HeapObject::PrintHeader(os, "TypeSwitchInfo");
1088 hidden_prototype() ? "true" : "false"); 995 os << "\n - types: " << Brief(types());
1089 PrintF(out, "\n - undetectable: %s", undetectable() ? "true" : "false"); 996 os << "\n";
1090 PrintF(out, "\n - need_access_check: %s", 997 }
1091 needs_access_check() ? "true" : "false"); 998
1092 } 999
1093 1000 void AllocationSite::AllocationSitePrint(OStream& os) { // NOLINT
1094 1001 HeapObject::PrintHeader(os, "AllocationSite");
1095 void ObjectTemplateInfo::ObjectTemplateInfoPrint(FILE* out) { 1002 os << " - weak_next: " << Brief(weak_next());
1096 HeapObject::PrintHeader(out, "ObjectTemplateInfo"); 1003 os << "\n - dependent code: " << Brief(dependent_code());
1097 PrintF(out, " - tag: "); 1004 os << "\n - nested site: " << Brief(nested_site());
1098 tag()->ShortPrint(out); 1005 os << "\n - memento found count: "
1099 PrintF(out, "\n - property_list: "); 1006 << Brief(Smi::FromInt(memento_found_count()));
1100 property_list()->ShortPrint(out); 1007 os << "\n - memento create count: "
1101 PrintF(out, "\n - property_accessors: "); 1008 << Brief(Smi::FromInt(memento_create_count()));
1102 property_accessors()->ShortPrint(out); 1009 os << "\n - pretenure decision: "
1103 PrintF(out, "\n - constructor: "); 1010 << Brief(Smi::FromInt(pretenure_decision()));
1104 constructor()->ShortPrint(out); 1011 os << "\n - transition_info: ";
1105 PrintF(out, "\n - internal_field_count: ");
1106 internal_field_count()->ShortPrint(out);
1107 PrintF(out, "\n");
1108 }
1109
1110
1111 void SignatureInfo::SignatureInfoPrint(FILE* out) {
1112 HeapObject::PrintHeader(out, "SignatureInfo");
1113 PrintF(out, "\n - receiver: ");
1114 receiver()->ShortPrint(out);
1115 PrintF(out, "\n - args: ");
1116 args()->ShortPrint(out);
1117 }
1118
1119
1120 void TypeSwitchInfo::TypeSwitchInfoPrint(FILE* out) {
1121 HeapObject::PrintHeader(out, "TypeSwitchInfo");
1122 PrintF(out, "\n - types: ");
1123 types()->ShortPrint(out);
1124 }
1125
1126
1127 void AllocationSite::AllocationSitePrint(FILE* out) {
1128 HeapObject::PrintHeader(out, "AllocationSite");
1129 PrintF(out, " - weak_next: ");
1130 weak_next()->ShortPrint(out);
1131 PrintF(out, "\n - dependent code: ");
1132 dependent_code()->ShortPrint(out);
1133 PrintF(out, "\n - nested site: ");
1134 nested_site()->ShortPrint(out);
1135 PrintF(out, "\n - memento found count: ");
1136 Smi::FromInt(memento_found_count())->ShortPrint(out);
1137 PrintF(out, "\n - memento create count: ");
1138 Smi::FromInt(memento_create_count())->ShortPrint(out);
1139 PrintF(out, "\n - pretenure decision: ");
1140 Smi::FromInt(pretenure_decision())->ShortPrint(out);
1141 PrintF(out, "\n - transition_info: ");
1142 if (transition_info()->IsSmi()) { 1012 if (transition_info()->IsSmi()) {
1143 ElementsKind kind = GetElementsKind(); 1013 ElementsKind kind = GetElementsKind();
1144 PrintF(out, "Array allocation with ElementsKind "); 1014 os << "Array allocation with ElementsKind " << ElementsKindToString(kind);
1145 PrintElementsKind(out, kind);
1146 PrintF(out, "\n");
1147 return;
1148 } else if (transition_info()->IsJSArray()) { 1015 } else if (transition_info()->IsJSArray()) {
1149 PrintF(out, "Array literal "); 1016 os << "Array literal " << Brief(transition_info());
1150 transition_info()->ShortPrint(out); 1017 } else {
1151 PrintF(out, "\n"); 1018 os << "unknown transition_info" << Brief(transition_info());
1152 return; 1019 }
1153 } 1020 os << "\n";
1154 1021 }
1155 PrintF(out, "unknown transition_info"); 1022
1156 transition_info()->ShortPrint(out); 1023
1157 PrintF(out, "\n"); 1024 void AllocationMemento::AllocationMementoPrint(OStream& os) { // NOLINT
1158 } 1025 HeapObject::PrintHeader(os, "AllocationMemento");
1159 1026 os << " - allocation site: ";
1160
1161 void AllocationMemento::AllocationMementoPrint(FILE* out) {
1162 HeapObject::PrintHeader(out, "AllocationMemento");
1163 PrintF(out, " - allocation site: ");
1164 if (IsValid()) { 1027 if (IsValid()) {
1165 GetAllocationSite()->Print(); 1028 GetAllocationSite()->Print(os);
1166 } else { 1029 } else {
1167 PrintF(out, "<invalid>\n"); 1030 os << "<invalid>\n";
1168 } 1031 }
1169 } 1032 }
1170 1033
1171 1034
1172 void Script::ScriptPrint(FILE* out) { 1035 void Script::ScriptPrint(OStream& os) { // NOLINT
1173 HeapObject::PrintHeader(out, "Script"); 1036 HeapObject::PrintHeader(os, "Script");
1174 PrintF(out, "\n - source: "); 1037 os << "\n - source: " << Brief(source());
1175 source()->ShortPrint(out); 1038 os << "\n - name: " << Brief(name());
1176 PrintF(out, "\n - name: "); 1039 os << "\n - line_offset: " << Brief(line_offset());
1177 name()->ShortPrint(out); 1040 os << "\n - column_offset: " << Brief(column_offset());
1178 PrintF(out, "\n - line_offset: "); 1041 os << "\n - type: " << Brief(type());
1179 line_offset()->ShortPrint(out); 1042 os << "\n - id: " << Brief(id());
1180 PrintF(out, "\n - column_offset: "); 1043 os << "\n - context data: " << Brief(context_data());
1181 column_offset()->ShortPrint(out); 1044 os << "\n - wrapper: " << Brief(wrapper());
1182 PrintF(out, "\n - type: "); 1045 os << "\n - compilation type: " << compilation_type();
1183 type()->ShortPrint(out); 1046 os << "\n - line ends: " << Brief(line_ends());
1184 PrintF(out, "\n - id: "); 1047 os << "\n - eval from shared: " << Brief(eval_from_shared());
1185 id()->ShortPrint(out); 1048 os << "\n - eval from instructions offset: "
1186 PrintF(out, "\n - context data: "); 1049 << Brief(eval_from_instructions_offset());
1187 context_data()->ShortPrint(out); 1050 os << "\n";
1188 PrintF(out, "\n - wrapper: "); 1051 }
1189 wrapper()->ShortPrint(out); 1052
1190 PrintF(out, "\n - compilation type: %d", compilation_type()); 1053
1191 PrintF(out, "\n - line ends: "); 1054 void DebugInfo::DebugInfoPrint(OStream& os) { // NOLINT
1192 line_ends()->ShortPrint(out); 1055 HeapObject::PrintHeader(os, "DebugInfo");
1193 PrintF(out, "\n - eval from shared: "); 1056 os << "\n - shared: " << Brief(shared());
1194 eval_from_shared()->ShortPrint(out); 1057 os << "\n - original_code: " << Brief(original_code());
1195 PrintF(out, "\n - eval from instructions offset: "); 1058 os << "\n - code: " << Brief(code());
1196 eval_from_instructions_offset()->ShortPrint(out); 1059 os << "\n - break_points: ";
1197 PrintF(out, "\n"); 1060 break_points()->Print(os);
1198 } 1061 }
1199 1062
1200 1063
1201 void DebugInfo::DebugInfoPrint(FILE* out) { 1064 void BreakPointInfo::BreakPointInfoPrint(OStream& os) { // NOLINT
1202 HeapObject::PrintHeader(out, "DebugInfo"); 1065 HeapObject::PrintHeader(os, "BreakPointInfo");
1203 PrintF(out, "\n - shared: "); 1066 os << "\n - code_position: " << code_position()->value();
1204 shared()->ShortPrint(out); 1067 os << "\n - source_position: " << source_position()->value();
1205 PrintF(out, "\n - original_code: "); 1068 os << "\n - statement_position: " << statement_position()->value();
1206 original_code()->ShortPrint(out); 1069 os << "\n - break_point_objects: " << Brief(break_point_objects());
1207 PrintF(out, "\n - code: "); 1070 os << "\n";
1208 code()->ShortPrint(out); 1071 }
1209 PrintF(out, "\n - break_points: "); 1072
1210 break_points()->Print(out); 1073
1211 } 1074 void DescriptorArray::PrintDescriptors(OStream& os) { // NOLINT
1212 1075 os << "Descriptor array " << number_of_descriptors() << "\n";
1213
1214 void BreakPointInfo::BreakPointInfoPrint(FILE* out) {
1215 HeapObject::PrintHeader(out, "BreakPointInfo");
1216 PrintF(out, "\n - code_position: %d", code_position()->value());
1217 PrintF(out, "\n - source_position: %d", source_position()->value());
1218 PrintF(out, "\n - statement_position: %d", statement_position()->value());
1219 PrintF(out, "\n - break_point_objects: ");
1220 break_point_objects()->ShortPrint(out);
1221 }
1222
1223
1224 void DescriptorArray::PrintDescriptors(FILE* out) {
1225 PrintF(out, "Descriptor array %d\n", number_of_descriptors());
1226 for (int i = 0; i < number_of_descriptors(); i++) { 1076 for (int i = 0; i < number_of_descriptors(); i++) {
1227 PrintF(out, " %d: ", i);
1228 Descriptor desc; 1077 Descriptor desc;
1229 Get(i, &desc); 1078 Get(i, &desc);
1230 desc.Print(out); 1079 os << " " << i << ": " << desc;
1231 } 1080 }
1232 PrintF(out, "\n"); 1081 os << "\n";
1233 } 1082 }
1234 1083
1235 1084
1236 void TransitionArray::PrintTransitions(FILE* out) { 1085 void TransitionArray::PrintTransitions(OStream& os) { // NOLINT
1237 PrintF(out, "Transition array %d\n", number_of_transitions()); 1086 os << "Transition array %d\n", number_of_transitions();
1238 for (int i = 0; i < number_of_transitions(); i++) { 1087 for (int i = 0; i < number_of_transitions(); i++) {
1239 PrintF(out, " %d: ", i); 1088 os << " " << i << ": ";
1240 GetKey(i)->NamePrint(out); 1089 GetKey(i)->NamePrint(os);
1241 PrintF(out, ": "); 1090 os << ": ";
1242 switch (GetTargetDetails(i).type()) { 1091 switch (GetTargetDetails(i).type()) {
1243 case FIELD: { 1092 case FIELD: {
1244 PrintF(out, " (transition to field)\n"); 1093 os << " (transition to field)\n";
1245 break; 1094 break;
1246 } 1095 }
1247 case CONSTANT: 1096 case CONSTANT:
1248 PrintF(out, " (transition to constant)\n"); 1097 os << " (transition to constant)\n";
1249 break; 1098 break;
1250 case CALLBACKS: 1099 case CALLBACKS:
1251 PrintF(out, " (transition to callback)\n"); 1100 os << " (transition to callback)\n";
1252 break; 1101 break;
1253 // Values below are never in the target descriptor array. 1102 // Values below are never in the target descriptor array.
1254 case NORMAL: 1103 case NORMAL:
1255 case HANDLER: 1104 case HANDLER:
1256 case INTERCEPTOR: 1105 case INTERCEPTOR:
1257 case NONEXISTENT: 1106 case NONEXISTENT:
1258 UNREACHABLE(); 1107 UNREACHABLE();
1259 break; 1108 break;
1260 } 1109 }
1261 } 1110 }
1262 PrintF(out, "\n"); 1111 os << "\n";
1263 } 1112 }
1264 1113
1265 1114
1266 #endif // OBJECT_PRINT 1115 #endif // OBJECT_PRINT
1267 1116
1268 1117
1269 } } // namespace v8::internal 1118 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | src/ostreams.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698