OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 | 6 |
7 #include "vm/dart_entry.h" | 7 #include "vm/dart_entry.h" |
8 #include "vm/debugger.h" | 8 #include "vm/debugger.h" |
9 #include "vm/json_stream.h" | 9 #include "vm/json_stream.h" |
10 #include "vm/message.h" | 10 #include "vm/message.h" |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 | 210 |
211 | 211 |
212 void JSONStream::PrintValue(const char* s) { | 212 void JSONStream::PrintValue(const char* s) { |
213 PrintCommaIfNeeded(); | 213 PrintCommaIfNeeded(); |
214 buffer_.AddChar('"'); | 214 buffer_.AddChar('"'); |
215 AddEscapedUTF8String(s); | 215 AddEscapedUTF8String(s); |
216 buffer_.AddChar('"'); | 216 buffer_.AddChar('"'); |
217 } | 217 } |
218 | 218 |
219 | 219 |
220 void JSONStream::PrintValue(const char* s, intptr_t len) { | 220 bool JSONStream::PrintValueStr(const String& s, intptr_t limit) { |
221 PrintCommaIfNeeded(); | 221 PrintCommaIfNeeded(); |
222 buffer_.AddChar('"'); | 222 buffer_.AddChar('"'); |
223 AddEscapedUTF8String(s, len); | 223 bool did_truncate = AddDartString(s, limit); |
224 buffer_.AddChar('"'); | 224 buffer_.AddChar('"'); |
| 225 return did_truncate; |
225 } | 226 } |
226 | 227 |
227 | 228 |
228 void JSONStream::PrintValueNoEscape(const char* s) { | 229 void JSONStream::PrintValueNoEscape(const char* s) { |
229 PrintCommaIfNeeded(); | 230 PrintCommaIfNeeded(); |
230 buffer_.Printf("%s", s); | 231 buffer_.Printf("%s", s); |
231 } | 232 } |
232 | 233 |
233 | 234 |
234 void JSONStream::PrintfValue(const char* format, ...) { | 235 void JSONStream::PrintfValue(const char* format, ...) { |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 PrintValue(d); | 304 PrintValue(d); |
304 } | 305 } |
305 | 306 |
306 | 307 |
307 void JSONStream::PrintProperty(const char* name, const char* s) { | 308 void JSONStream::PrintProperty(const char* name, const char* s) { |
308 PrintPropertyName(name); | 309 PrintPropertyName(name); |
309 PrintValue(s); | 310 PrintValue(s); |
310 } | 311 } |
311 | 312 |
312 | 313 |
313 void JSONStream::PrintProperty(const char* name, const char* s, intptr_t len) { | 314 bool JSONStream::PrintPropertyStr(const char* name, |
| 315 const String& s, |
| 316 intptr_t limit) { |
314 PrintPropertyName(name); | 317 PrintPropertyName(name); |
315 PrintValue(s, len); | 318 return PrintValueStr(s, limit); |
316 } | 319 } |
317 | 320 |
318 | 321 |
319 void JSONStream::PrintPropertyNoEscape(const char* name, const char* s) { | 322 void JSONStream::PrintPropertyNoEscape(const char* name, const char* s) { |
320 PrintPropertyName(name); | 323 PrintPropertyName(name); |
321 PrintValueNoEscape(s); | 324 PrintValueNoEscape(s); |
322 } | 325 } |
323 | 326 |
324 | 327 |
325 void JSONStream::PrintProperty(const char* name, const DebuggerEvent* event) { | 328 void JSONStream::PrintProperty(const char* name, const DebuggerEvent* event) { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 if (s == NULL) { | 437 if (s == NULL) { |
435 return; | 438 return; |
436 } | 439 } |
437 const uint8_t* s8 = reinterpret_cast<const uint8_t*>(s); | 440 const uint8_t* s8 = reinterpret_cast<const uint8_t*>(s); |
438 intptr_t i = 0; | 441 intptr_t i = 0; |
439 for (; i < len; ) { | 442 for (; i < len; ) { |
440 // Extract next UTF8 character. | 443 // Extract next UTF8 character. |
441 int32_t ch = 0; | 444 int32_t ch = 0; |
442 int32_t ch_len = Utf8::Decode(&s8[i], len - i, &ch); | 445 int32_t ch_len = Utf8::Decode(&s8[i], len - i, &ch); |
443 ASSERT(ch_len != 0); | 446 ASSERT(ch_len != 0); |
444 buffer_.AddEscapedChar(ch); | 447 buffer_.EscapeAndAddCodeUnit(ch); |
445 // Move i forward. | 448 // Move i forward. |
446 i += ch_len; | 449 i += ch_len; |
447 } | 450 } |
448 ASSERT(i == len); | 451 ASSERT(i == len); |
449 } | 452 } |
450 | 453 |
451 | 454 |
| 455 bool JSONStream::AddDartString(const String& s, intptr_t limit) { |
| 456 bool did_truncate = false; |
| 457 intptr_t length = s.Length(); |
| 458 if (limit == -1) { |
| 459 limit = length; |
| 460 } |
| 461 if (length <= limit) { |
| 462 limit = length; |
| 463 } else { |
| 464 did_truncate = true; |
| 465 } |
| 466 |
| 467 for (intptr_t i = 0; i < limit; i++) { |
| 468 intptr_t code_unit = s.CharAt(i); |
| 469 buffer_.EscapeAndAddCodeUnit(code_unit); |
| 470 } |
| 471 return did_truncate; |
| 472 } |
| 473 |
| 474 |
452 JSONObject::JSONObject(const JSONArray* arr) : stream_(arr->stream_) { | 475 JSONObject::JSONObject(const JSONArray* arr) : stream_(arr->stream_) { |
453 stream_->OpenObject(); | 476 stream_->OpenObject(); |
454 } | 477 } |
455 | 478 |
456 | 479 |
457 void JSONObject::AddPropertyF(const char* name, | 480 void JSONObject::AddPropertyF(const char* name, |
458 const char* format, ...) const { | 481 const char* format, ...) const { |
459 stream_->PrintPropertyName(name); | 482 stream_->PrintPropertyName(name); |
460 va_list args; | 483 va_list args; |
461 va_start(args, format); | 484 va_start(args, format); |
(...skipping 22 matching lines...) Expand all Loading... |
484 intptr_t len2 = OS::VSNPrint(p, len+1, format, args); | 507 intptr_t len2 = OS::VSNPrint(p, len+1, format, args); |
485 va_end(args); | 508 va_end(args); |
486 ASSERT(len == len2); | 509 ASSERT(len == len2); |
487 stream_->buffer_.AddChar('"'); | 510 stream_->buffer_.AddChar('"'); |
488 stream_->AddEscapedUTF8String(p); | 511 stream_->AddEscapedUTF8String(p); |
489 stream_->buffer_.AddChar('"'); | 512 stream_->buffer_.AddChar('"'); |
490 free(p); | 513 free(p); |
491 } | 514 } |
492 | 515 |
493 } // namespace dart | 516 } // namespace dart |
OLD | NEW |