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

Unified Diff: runtime/vm/object.cc

Issue 558853004: Preserve the contents of Dart strings with unmatched surrogate halfs by avoiding a UTF16 -> UTF8 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: sync and build Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.cc
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 7d9c8090e57e5f3314d9a6e819546e76f5f5d949..99955ec64f587355a93ca5ef9ee016db777d1b32 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -8553,14 +8553,14 @@ void Script::PrintJSONImpl(JSONStream* stream, bool ref) const {
intptr_t lib_index = (lib.IsNull()) ? -1 : lib.index();
jsobj.AddPropertyF("id", "libraries/%" Pd "/scripts/%s",
lib_index, encoded_url.ToCString());
- jsobj.AddProperty("name", name.ToCString());
+ jsobj.AddPropertyStr("name", name);
jsobj.AddProperty("kind", GetKindAsCString());
if (ref) {
return;
}
jsobj.AddProperty("owningLibrary", lib);
const String& source = String::Handle(Source());
- jsobj.AddProperty("source", source.ToCString());
+ jsobj.AddPropertyStr("source", source);
// Print the line number table
{
@@ -9840,8 +9840,8 @@ void Library::PrintJSONImpl(JSONStream* stream, bool ref) const {
AddTypeProperties(&jsobj, "Library", JSONType(), ref);
jsobj.AddPropertyF("id", "libraries/%" Pd "", id);
jsobj.AddProperty("name", library_name);
- const char* library_url = String::Handle(url()).ToCString();
- jsobj.AddProperty("url", library_url);
+ const String& library_url = String::Handle(url());
+ jsobj.AddPropertyStr("url", library_url);
if (ref) {
return;
}
@@ -17760,17 +17760,10 @@ RawString* String::SubString(const String& str,
const char* String::ToCString() const {
- intptr_t length;
- return ToCString(&length);
-}
-
-
-const char* String::ToCString(intptr_t* length) const {
if (IsOneByteString()) {
// Quick conversion if OneByteString contains only ASCII characters.
intptr_t len = Length();
if (len == 0) {
- *length = 0;
return "";
}
Zone* zone = Isolate::Current()->current_zone();
@@ -17787,7 +17780,6 @@ const char* String::ToCString(intptr_t* length) const {
}
if (len > 0) {
result[len] = 0;
- *length = len;
return reinterpret_cast<const char*>(result);
}
}
@@ -17796,33 +17788,10 @@ const char* String::ToCString(intptr_t* length) const {
uint8_t* result = zone->Alloc<uint8_t>(len + 1);
ToUTF8(result, len);
result[len] = 0;
- *length = len;
return reinterpret_cast<const char*>(result);
}
-const char* String::ToCStringTruncated(intptr_t max_len,
- bool* did_truncate,
- intptr_t* length) const {
- if (Length() <= max_len) {
- *did_truncate = false;
- return ToCString(length);
- }
-
- intptr_t aligned_limit = max_len;
- if (Utf16::IsLeadSurrogate(CharAt(max_len - 1))) {
- // Don't let truncation split a surrogate pair.
- aligned_limit--;
- }
- ASSERT(!Utf16::IsLeadSurrogate(CharAt(aligned_limit - 1)));
-
- *did_truncate = true;
- const String& truncated =
- String::Handle(String::SubString(*this, 0, aligned_limit));
- return truncated.ToCString(length);
-}
-
-
void String::PrintJSONImpl(JSONStream* stream, bool ref) const {
JSONObject jsobj(stream);
if (raw() == Symbols::OptimizedOut().raw()) {
@@ -17840,17 +17809,13 @@ void String::PrintJSONImpl(JSONStream* stream, bool ref) const {
const intptr_t id = ring->GetIdForObject(raw());
jsobj.AddPropertyF("id", "objects/%" Pd "", id);
if (ref) {
- bool did_truncate = false;
- intptr_t length = 0;
- const char* cstr = ToCStringTruncated(128, &did_truncate, &length);
- jsobj.AddProperty("valueAsString", cstr, length);
+ bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this, 128);
if (did_truncate) {
jsobj.AddProperty("valueAsStringIsTruncated", did_truncate);
}
} else {
- intptr_t length = 0;
- const char* cstr = ToCString(&length);
- jsobj.AddProperty("valueAsString", cstr, length);
+ bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this);
+ ASSERT(!did_truncate);
}
}
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698