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

Side by Side Diff: runtime/vm/json_stream.cc

Issue 1653183002: getObject now supports specifying offset,count for strings. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « runtime/vm/json_stream.h ('k') | runtime/vm/json_test.cc » ('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 (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 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 389
390 390
391 void JSONStream::PrintValue(const char* s) { 391 void JSONStream::PrintValue(const char* s) {
392 PrintCommaIfNeeded(); 392 PrintCommaIfNeeded();
393 buffer_.AddChar('"'); 393 buffer_.AddChar('"');
394 AddEscapedUTF8String(s); 394 AddEscapedUTF8String(s);
395 buffer_.AddChar('"'); 395 buffer_.AddChar('"');
396 } 396 }
397 397
398 398
399 bool JSONStream::PrintValueStr(const String& s, intptr_t limit) { 399 bool JSONStream::PrintValueStr(const String& s,
400 intptr_t offset,
401 intptr_t count) {
400 PrintCommaIfNeeded(); 402 PrintCommaIfNeeded();
401 buffer_.AddChar('"'); 403 buffer_.AddChar('"');
402 bool did_truncate = AddDartString(s, limit); 404 bool did_truncate = AddDartString(s, offset, count);
403 buffer_.AddChar('"'); 405 buffer_.AddChar('"');
404 return did_truncate; 406 return did_truncate;
405 } 407 }
406 408
407 409
408 void JSONStream::PrintValueNoEscape(const char* s) { 410 void JSONStream::PrintValueNoEscape(const char* s) {
409 PrintCommaIfNeeded(); 411 PrintCommaIfNeeded();
410 buffer_.Printf("%s", s); 412 buffer_.Printf("%s", s);
411 } 413 }
412 414
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 void JSONStream::PrintPropertyBase64(const char* name, 529 void JSONStream::PrintPropertyBase64(const char* name,
528 const uint8_t* b, 530 const uint8_t* b,
529 intptr_t len) { 531 intptr_t len) {
530 PrintPropertyName(name); 532 PrintPropertyName(name);
531 PrintValueBase64(b, len); 533 PrintValueBase64(b, len);
532 } 534 }
533 535
534 536
535 bool JSONStream::PrintPropertyStr(const char* name, 537 bool JSONStream::PrintPropertyStr(const char* name,
536 const String& s, 538 const String& s,
537 intptr_t limit) { 539 intptr_t offset,
540 intptr_t count) {
538 PrintPropertyName(name); 541 PrintPropertyName(name);
539 return PrintValueStr(s, limit); 542 return PrintValueStr(s, offset, count);
540 } 543 }
541 544
542 545
543 void JSONStream::PrintPropertyNoEscape(const char* name, const char* s) { 546 void JSONStream::PrintPropertyNoEscape(const char* name, const char* s) {
544 PrintPropertyName(name); 547 PrintPropertyName(name);
545 PrintValueNoEscape(s); 548 PrintValueNoEscape(s);
546 } 549 }
547 550
548 551
549 void JSONStream::PrintProperty(const char* name, const ServiceEvent* event) { 552 void JSONStream::PrintProperty(const char* name, const ServiceEvent* event) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 int32_t ch_len = Utf8::Decode(&s8[i], len - i, &ch); 698 int32_t ch_len = Utf8::Decode(&s8[i], len - i, &ch);
696 ASSERT(ch_len != 0); 699 ASSERT(ch_len != 0);
697 buffer_.EscapeAndAddCodeUnit(ch); 700 buffer_.EscapeAndAddCodeUnit(ch);
698 // Move i forward. 701 // Move i forward.
699 i += ch_len; 702 i += ch_len;
700 } 703 }
701 ASSERT(i == len); 704 ASSERT(i == len);
702 } 705 }
703 706
704 707
705 bool JSONStream::AddDartString(const String& s, intptr_t limit) { 708 bool JSONStream::AddDartString(const String& s,
706 bool did_truncate = false; 709 intptr_t offset,
710 intptr_t count) {
707 intptr_t length = s.Length(); 711 intptr_t length = s.Length();
708 if (limit == -1) { 712 ASSERT(offset >= 0);
709 limit = length; 713 if (offset > length) {
714 offset = length;
710 } 715 }
711 if (length <= limit) { 716 if (!Utils::RangeCheck(offset, count, length)) {
712 limit = length; 717 count = length - offset;
713 } else {
714 did_truncate = true;
715 } 718 }
716 719 intptr_t limit = offset + count;
717 for (intptr_t i = 0; i < limit; i++) { 720 for (intptr_t i = offset; i < limit; i++) {
718 intptr_t code_unit = s.CharAt(i); 721 intptr_t code_unit = s.CharAt(i);
719 buffer_.EscapeAndAddCodeUnit(code_unit); 722 buffer_.EscapeAndAddCodeUnit(code_unit);
720 } 723 }
721 return did_truncate; 724 // Return value indicates whether the string is truncated.
725 return (offset > 0) || (limit < length);
722 } 726 }
723 727
724 728
725 JSONObject::JSONObject(const JSONArray* arr) : stream_(arr->stream_) { 729 JSONObject::JSONObject(const JSONArray* arr) : stream_(arr->stream_) {
726 stream_->OpenObject(); 730 stream_->OpenObject();
727 } 731 }
728 732
729 733
730 void JSONObject::AddFixedServiceId(const char* format, ...) const { 734 void JSONObject::AddFixedServiceId(const char* format, ...) const {
731 // Mark that this id is fixed. 735 // Mark that this id is fixed.
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 intptr_t len2 = OS::VSNPrint(p, len+1, format, args); 839 intptr_t len2 = OS::VSNPrint(p, len+1, format, args);
836 va_end(args); 840 va_end(args);
837 ASSERT(len == len2); 841 ASSERT(len == len2);
838 stream_->buffer_.AddChar('"'); 842 stream_->buffer_.AddChar('"');
839 stream_->AddEscapedUTF8String(p); 843 stream_->AddEscapedUTF8String(p);
840 stream_->buffer_.AddChar('"'); 844 stream_->buffer_.AddChar('"');
841 free(p); 845 free(p);
842 } 846 }
843 847
844 } // namespace dart 848 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/json_stream.h ('k') | runtime/vm/json_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698