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

Side by Side Diff: runtime/platform/json.cc

Issue 10392017: Support more debugger commands in the wire protocol (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 7 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 | « runtime/platform/json.h ('k') | runtime/vm/os_win.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/json.h" 5 #include "platform/json.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "platform/utils.h" 8 #include "platform/utils.h"
9 #include "vm/os.h" 9 #include "vm/os.h"
10 10
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 case JSONScanner::TokenTrue: 305 case JSONScanner::TokenTrue:
306 case JSONScanner::TokenFalse: 306 case JSONScanner::TokenFalse:
307 case JSONScanner::TokenNull: 307 case JSONScanner::TokenNull:
308 return kLiteral; 308 return kLiteral;
309 default: 309 default:
310 return kNone; 310 return kNone;
311 } 311 }
312 } 312 }
313 313
314 314
315 void JSONReader::GetValueChars(char* buf, intptr_t buflen) const {
316 if (Type() == kNone) {
317 return;
318 }
319 intptr_t max = buflen - 1;
320 if (ValueLen() < max) {
321 max = ValueLen();
322 }
323 const char* val = ValueChars();
324 intptr_t i = 0;
325 for (; i < max; i++) {
326 buf[i] = val[i];
327 }
328 buf[i] = '\0';
329 }
330
331
315 TextBuffer::TextBuffer(intptr_t buf_size) { 332 TextBuffer::TextBuffer(intptr_t buf_size) {
316 ASSERT(buf_size > 0); 333 ASSERT(buf_size > 0);
317 buf_ = reinterpret_cast<char*>(malloc(buf_size)); 334 buf_ = reinterpret_cast<char*>(malloc(buf_size));
318 buf_size_ = buf_size; 335 buf_size_ = buf_size;
319 Clear(); 336 Clear();
320 } 337 }
321 338
322 339
323 TextBuffer::~TextBuffer() { 340 TextBuffer::~TextBuffer() {
324 free(buf_); 341 free(buf_);
325 buf_ = NULL; 342 buf_ = NULL;
326 } 343 }
327 344
328 345
329 void TextBuffer::Clear() { 346 void TextBuffer::Clear() {
330 msg_len_ = 0; 347 msg_len_ = 0;
331 buf_[0] = '\0'; 348 buf_[0] = '\0';
332 } 349 }
333 350
334 351
335 intptr_t TextBuffer::Printf(const char* format, ...) { 352 intptr_t TextBuffer::Printf(const char* format, va_list args) {
336 va_list args; 353 va_list args1;
337 va_start(args, format); 354 va_copy(args1, args);
338 intptr_t remaining = buf_size_ - msg_len_; 355 intptr_t remaining = buf_size_ - msg_len_;
339 ASSERT(remaining >= 0); 356 ASSERT(remaining >= 0);
340 intptr_t len = OS::VSNPrint(buf_ + msg_len_, remaining, format, args); 357 intptr_t len = OS::VSNPrint(buf_ + msg_len_, remaining, format, args1);
341 va_end(args); 358 va_end(args1);
342 if (len >= remaining) { 359 if (len >= remaining) {
343 const int kBufferSpareCapacity = 64; // Somewhat arbitrary. 360 const int kBufferSpareCapacity = 64; // Somewhat arbitrary.
344 GrowBuffer(len + kBufferSpareCapacity); 361 GrowBuffer(len + kBufferSpareCapacity);
345 remaining = buf_size_ - msg_len_; 362 remaining = buf_size_ - msg_len_;
346 ASSERT(remaining > len); 363 ASSERT(remaining > len);
347 va_list args2; 364 va_list args2;
348 va_start(args2, format); 365 va_copy(args2, args);
349 intptr_t len2 = OS::VSNPrint(buf_ + msg_len_, remaining, format, args2); 366 intptr_t len2 = OS::VSNPrint(buf_ + msg_len_, remaining, format, args2);
350 va_end(args2); 367 va_end(args2);
351 ASSERT(len == len2); 368 ASSERT(len == len2);
352 } 369 }
353 msg_len_ += len; 370 msg_len_ += len;
354 buf_[msg_len_] = '\0'; 371 buf_[msg_len_] = '\0';
355 return len; 372 return len;
356 } 373 }
357 374
358 375
376 intptr_t TextBuffer::Printf(const char* format, ...) {
377 va_list args;
378 va_start(args, format);
379 intptr_t len = this->Printf(format, args);
380 va_end(args);
381 return len;
382 }
383
384
359 void TextBuffer::GrowBuffer(intptr_t len) { 385 void TextBuffer::GrowBuffer(intptr_t len) {
360 intptr_t new_size = buf_size_ + len; 386 intptr_t new_size = buf_size_ + len;
361 char* new_buf = reinterpret_cast<char*>(realloc(buf_, new_size)); 387 char* new_buf = reinterpret_cast<char*>(realloc(buf_, new_size));
362 ASSERT(new_buf != NULL); 388 ASSERT(new_buf != NULL);
363 buf_ = new_buf; 389 buf_ = new_buf;
364 buf_size_ = new_size; 390 buf_size_ = new_size;
365 } 391 }
366 392
367 } // namespace dart 393 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/platform/json.h ('k') | runtime/vm/os_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698