| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/string-stream.h" | 5 #include "src/string-stream.h" |
| 6 | 6 |
| 7 #include "src/handles-inl.h" | 7 #include "src/handles-inl.h" |
| 8 #include "src/prototype.h" | 8 #include "src/prototype.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| 11 namespace internal { | 11 namespace internal { |
| 12 | 12 |
| 13 static const int kMentionedObjectCacheMaxSize = 256; | 13 static const int kMentionedObjectCacheMaxSize = 256; |
| 14 | 14 |
| 15 char* HeapStringAllocator::allocate(unsigned bytes) { | 15 char* HeapStringAllocator::allocate(unsigned bytes) { |
| 16 space_ = NewArray<char>(bytes); | 16 space_ = NewArray<char>(bytes); |
| 17 return space_; | 17 return space_; |
| 18 } | 18 } |
| 19 | 19 |
| 20 | 20 |
| 21 char* FixedStringAllocator::allocate(unsigned bytes) { |
| 22 CHECK_LE(bytes, length_); |
| 23 return buffer_; |
| 24 } |
| 25 |
| 26 |
| 27 char* FixedStringAllocator::grow(unsigned* old) { |
| 28 *old = length_; |
| 29 return buffer_; |
| 30 } |
| 31 |
| 32 |
| 21 bool StringStream::Put(char c) { | 33 bool StringStream::Put(char c) { |
| 22 if (full()) return false; | 34 if (full()) return false; |
| 23 DCHECK(length_ < capacity_); | 35 DCHECK(length_ < capacity_); |
| 24 // Since the trailing '\0' is not accounted for in length_ fullness is | 36 // Since the trailing '\0' is not accounted for in length_ fullness is |
| 25 // indicated by a difference of 1 between length_ and capacity_. Thus when | 37 // indicated by a difference of 1 between length_ and capacity_. Thus when |
| 26 // reaching a difference of 2 we need to grow the buffer. | 38 // reaching a difference of 2 we need to grow the buffer. |
| 27 if (length_ == capacity_ - 2) { | 39 if (length_ == capacity_ - 2) { |
| 28 unsigned new_capacity = capacity_; | 40 unsigned new_capacity = capacity_; |
| 29 char* new_buffer = allocator_->grow(&new_capacity); | 41 char* new_buffer = allocator_->grow(&new_capacity); |
| 30 if (new_capacity > capacity_) { | 42 if (new_capacity > capacity_) { |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 | 175 |
| 164 void StringStream::PrintObject(Object* o) { | 176 void StringStream::PrintObject(Object* o) { |
| 165 o->ShortPrint(this); | 177 o->ShortPrint(this); |
| 166 if (o->IsString()) { | 178 if (o->IsString()) { |
| 167 if (String::cast(o)->length() <= String::kMaxShortPrintLength) { | 179 if (String::cast(o)->length() <= String::kMaxShortPrintLength) { |
| 168 return; | 180 return; |
| 169 } | 181 } |
| 170 } else if (o->IsNumber() || o->IsOddball()) { | 182 } else if (o->IsNumber() || o->IsOddball()) { |
| 171 return; | 183 return; |
| 172 } | 184 } |
| 173 if (o->IsHeapObject()) { | 185 if (o->IsHeapObject() && object_print_mode_ == kPrintObjectVerbose) { |
| 174 HeapObject* ho = HeapObject::cast(o); | 186 HeapObject* ho = HeapObject::cast(o); |
| 175 DebugObjectCache* debug_object_cache = ho->GetIsolate()-> | 187 DebugObjectCache* debug_object_cache = ho->GetIsolate()-> |
| 176 string_stream_debug_object_cache(); | 188 string_stream_debug_object_cache(); |
| 177 for (int i = 0; i < debug_object_cache->length(); i++) { | 189 for (int i = 0; i < debug_object_cache->length(); i++) { |
| 178 if ((*debug_object_cache)[i] == o) { | 190 if ((*debug_object_cache)[i] == o) { |
| 179 Add("#%d#", i); | 191 Add("#%d#", i); |
| 180 return; | 192 return; |
| 181 } | 193 } |
| 182 } | 194 } |
| 183 if (debug_object_cache->length() < kMentionedObjectCacheMaxSize) { | 195 if (debug_object_cache->length() < kMentionedObjectCacheMaxSize) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 isolate->set_string_stream_current_security_token(NULL); | 289 isolate->set_string_stream_current_security_token(NULL); |
| 278 if (isolate->string_stream_debug_object_cache() == NULL) { | 290 if (isolate->string_stream_debug_object_cache() == NULL) { |
| 279 isolate->set_string_stream_debug_object_cache(new DebugObjectCache(0)); | 291 isolate->set_string_stream_debug_object_cache(new DebugObjectCache(0)); |
| 280 } | 292 } |
| 281 isolate->string_stream_debug_object_cache()->Clear(); | 293 isolate->string_stream_debug_object_cache()->Clear(); |
| 282 } | 294 } |
| 283 | 295 |
| 284 | 296 |
| 285 #ifdef DEBUG | 297 #ifdef DEBUG |
| 286 bool StringStream::IsMentionedObjectCacheClear(Isolate* isolate) { | 298 bool StringStream::IsMentionedObjectCacheClear(Isolate* isolate) { |
| 287 return isolate->string_stream_debug_object_cache()->length() == 0; | 299 return object_print_mode_ == kPrintObjectConcise || |
| 300 isolate->string_stream_debug_object_cache()->length() == 0; |
| 288 } | 301 } |
| 289 #endif | 302 #endif |
| 290 | 303 |
| 291 | 304 |
| 292 bool StringStream::Put(String* str) { | 305 bool StringStream::Put(String* str) { |
| 293 return Put(str, 0, str->length()); | 306 return Put(str, 0, str->length()); |
| 294 } | 307 } |
| 295 | 308 |
| 296 | 309 |
| 297 bool StringStream::Put(String* str, int start, int end) { | 310 bool StringStream::Put(String* str, int start, int end) { |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 } | 409 } |
| 397 Add("\n"); | 410 Add("\n"); |
| 398 } | 411 } |
| 399 if (limit >= 10) { | 412 if (limit >= 10) { |
| 400 Add(" ...\n"); | 413 Add(" ...\n"); |
| 401 } | 414 } |
| 402 } | 415 } |
| 403 | 416 |
| 404 | 417 |
| 405 void StringStream::PrintMentionedObjectCache(Isolate* isolate) { | 418 void StringStream::PrintMentionedObjectCache(Isolate* isolate) { |
| 419 if (object_print_mode_ == kPrintObjectConcise) return; |
| 406 DebugObjectCache* debug_object_cache = | 420 DebugObjectCache* debug_object_cache = |
| 407 isolate->string_stream_debug_object_cache(); | 421 isolate->string_stream_debug_object_cache(); |
| 408 Add("==== Key ============================================\n\n"); | 422 Add("==== Key ============================================\n\n"); |
| 409 for (int i = 0; i < debug_object_cache->length(); i++) { | 423 for (int i = 0; i < debug_object_cache->length(); i++) { |
| 410 HeapObject* printee = (*debug_object_cache)[i]; | 424 HeapObject* printee = (*debug_object_cache)[i]; |
| 411 Add(" #%d# %p: ", i, printee); | 425 Add(" #%d# %p: ", i, printee); |
| 412 printee->ShortPrint(this); | 426 printee->ShortPrint(this); |
| 413 Add("\n"); | 427 Add("\n"); |
| 414 if (printee->IsJSObject()) { | 428 if (printee->IsJSObject()) { |
| 415 if (printee->IsJSValue()) { | 429 if (printee->IsJSValue()) { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 MemCopy(new_space, space_, *bytes); | 571 MemCopy(new_space, space_, *bytes); |
| 558 *bytes = new_bytes; | 572 *bytes = new_bytes; |
| 559 DeleteArray(space_); | 573 DeleteArray(space_); |
| 560 space_ = new_space; | 574 space_ = new_space; |
| 561 return new_space; | 575 return new_space; |
| 562 } | 576 } |
| 563 | 577 |
| 564 | 578 |
| 565 } // namespace internal | 579 } // namespace internal |
| 566 } // namespace v8 | 580 } // namespace v8 |
| OLD | NEW |