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

Side by Side Diff: src/runtime.cc

Issue 12310141: Merged r13730 into trunk branch. (Closed) Base URL: https://v8.googlecode.com/svn/trunk
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/version.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 5234 matching lines...) Expand 10 before | Expand all | Expand 10 after
5245 template <typename Char, typename StringType, bool comma> 5245 template <typename Char, typename StringType, bool comma>
5246 static MaybeObject* SlowQuoteJsonString(Isolate* isolate, 5246 static MaybeObject* SlowQuoteJsonString(Isolate* isolate,
5247 Vector<const Char> characters) { 5247 Vector<const Char> characters) {
5248 int length = characters.length(); 5248 int length = characters.length();
5249 const Char* read_cursor = characters.start(); 5249 const Char* read_cursor = characters.start();
5250 const Char* end = read_cursor + length; 5250 const Char* end = read_cursor + length;
5251 const int kSpaceForQuotes = 2 + (comma ? 1 :0); 5251 const int kSpaceForQuotes = 2 + (comma ? 1 :0);
5252 int quoted_length = kSpaceForQuotes; 5252 int quoted_length = kSpaceForQuotes;
5253 while (read_cursor < end) { 5253 while (read_cursor < end) {
5254 Char c = *(read_cursor++); 5254 Char c = *(read_cursor++);
5255 if (sizeof(Char) > 1u && static_cast<unsigned>(c) >= kQuoteTableLength) { 5255 if (static_cast<unsigned>(c) >= kQuoteTableLength) {
5256 quoted_length++; 5256 quoted_length++;
5257 } else { 5257 } else {
5258 quoted_length += JsonQuoteLengths[static_cast<unsigned>(c)]; 5258 quoted_length += JsonQuoteLengths[static_cast<unsigned>(c)];
5259 } 5259 }
5260 } 5260 }
5261 MaybeObject* new_alloc = AllocateRawString<StringType>(isolate, 5261 MaybeObject* new_alloc = AllocateRawString<StringType>(isolate,
5262 quoted_length); 5262 quoted_length);
5263 Object* new_object; 5263 Object* new_object;
5264 if (!new_alloc->ToObject(&new_object)) { 5264 if (!new_alloc->ToObject(&new_object)) {
5265 return new_alloc; 5265 return new_alloc;
5266 } 5266 }
5267 StringType* new_string = StringType::cast(new_object); 5267 StringType* new_string = StringType::cast(new_object);
5268 5268
5269 Char* write_cursor = reinterpret_cast<Char*>( 5269 Char* write_cursor = reinterpret_cast<Char*>(
5270 new_string->address() + SeqString::kHeaderSize); 5270 new_string->address() + SeqString::kHeaderSize);
5271 if (comma) *(write_cursor++) = ','; 5271 if (comma) *(write_cursor++) = ',';
5272 *(write_cursor++) = '"'; 5272 *(write_cursor++) = '"';
5273 5273
5274 read_cursor = characters.start(); 5274 read_cursor = characters.start();
5275 while (read_cursor < end) { 5275 while (read_cursor < end) {
5276 Char c = *(read_cursor++); 5276 Char c = *(read_cursor++);
5277 if (sizeof(Char) > 1u && static_cast<unsigned>(c) >= kQuoteTableLength) { 5277 if (static_cast<unsigned>(c) >= kQuoteTableLength) {
5278 *(write_cursor++) = c; 5278 *(write_cursor++) = c;
5279 } else { 5279 } else {
5280 int len = JsonQuoteLengths[static_cast<unsigned>(c)]; 5280 int len = JsonQuoteLengths[static_cast<unsigned>(c)];
5281 const char* replacement = JsonQuotes + 5281 const char* replacement = JsonQuotes +
5282 static_cast<unsigned>(c) * kJsonQuotesCharactersPerEntry; 5282 static_cast<unsigned>(c) * kJsonQuotesCharactersPerEntry;
5283 for (int i = 0; i < len; i++) { 5283 for (int i = 0; i < len; i++) {
5284 *write_cursor++ = *replacement++; 5284 *write_cursor++ = *replacement++;
5285 } 5285 }
5286 } 5286 }
5287 } 5287 }
5288 *(write_cursor++) = '"'; 5288 *(write_cursor++) = '"';
5289 return new_string; 5289 return new_string;
5290 } 5290 }
5291 5291
5292 5292
5293 template <typename SinkChar, typename SourceChar> 5293 template <typename SinkChar, typename SourceChar>
5294 static inline SinkChar* WriteQuoteJsonString( 5294 static inline SinkChar* WriteQuoteJsonString(
5295 Isolate* isolate, 5295 Isolate* isolate,
5296 SinkChar* write_cursor, 5296 SinkChar* write_cursor,
5297 Vector<const SourceChar> characters) { 5297 Vector<const SourceChar> characters) {
5298 // SinkChar is only char if SourceChar is guaranteed to be char. 5298 // SinkChar is only char if SourceChar is guaranteed to be char.
5299 ASSERT(sizeof(SinkChar) >= sizeof(SourceChar)); 5299 ASSERT(sizeof(SinkChar) >= sizeof(SourceChar));
5300 const SourceChar* read_cursor = characters.start(); 5300 const SourceChar* read_cursor = characters.start();
5301 const SourceChar* end = read_cursor + characters.length(); 5301 const SourceChar* end = read_cursor + characters.length();
5302 *(write_cursor++) = '"'; 5302 *(write_cursor++) = '"';
5303 while (read_cursor < end) { 5303 while (read_cursor < end) {
5304 SourceChar c = *(read_cursor++); 5304 SourceChar c = *(read_cursor++);
5305 if (sizeof(SourceChar) > 1u && 5305 if (static_cast<unsigned>(c) >= kQuoteTableLength) {
5306 static_cast<unsigned>(c) >= kQuoteTableLength) {
5307 *(write_cursor++) = static_cast<SinkChar>(c); 5306 *(write_cursor++) = static_cast<SinkChar>(c);
5308 } else { 5307 } else {
5309 int len = JsonQuoteLengths[static_cast<unsigned>(c)]; 5308 int len = JsonQuoteLengths[static_cast<unsigned>(c)];
5310 const char* replacement = JsonQuotes + 5309 const char* replacement = JsonQuotes +
5311 static_cast<unsigned>(c) * kJsonQuotesCharactersPerEntry; 5310 static_cast<unsigned>(c) * kJsonQuotesCharactersPerEntry;
5312 write_cursor[0] = replacement[0]; 5311 write_cursor[0] = replacement[0];
5313 if (len > 1) { 5312 if (len > 1) {
5314 write_cursor[1] = replacement[1]; 5313 write_cursor[1] = replacement[1];
5315 if (len > 2) { 5314 if (len > 2) {
5316 ASSERT(len == 6); 5315 ASSERT(len == 6);
(...skipping 8051 matching lines...) Expand 10 before | Expand all | Expand 10 after
13368 // Handle last resort GC and make sure to allow future allocations 13367 // Handle last resort GC and make sure to allow future allocations
13369 // to grow the heap without causing GCs (if possible). 13368 // to grow the heap without causing GCs (if possible).
13370 isolate->counters()->gc_last_resort_from_js()->Increment(); 13369 isolate->counters()->gc_last_resort_from_js()->Increment();
13371 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, 13370 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags,
13372 "Runtime::PerformGC"); 13371 "Runtime::PerformGC");
13373 } 13372 }
13374 } 13373 }
13375 13374
13376 13375
13377 } } // namespace v8::internal 13376 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/version.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698