Index: runtime/vm/object.cc |
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
index d65e3629bb6d676f2f1c10b935ad7abffab0113c..f2bd64958bd796ec1c1b267aa3aab7f5bd973233 100644 |
--- a/runtime/vm/object.cc |
+++ b/runtime/vm/object.cc |
@@ -4238,16 +4238,12 @@ RawLibraryPrefix* Class::LookupLibraryPrefix(const String& name) const { |
const char* Class::ToCString() const { |
- const char* format = "%s %sClass: %s"; |
const Library& lib = Library::Handle(library()); |
const char* library_name = lib.IsNull() ? "" : lib.ToCString(); |
const char* patch_prefix = is_patch() ? "Patch " : ""; |
const char* class_name = String::Handle(Name()).ToCString(); |
- intptr_t len = |
- OS::SNPrint(NULL, 0, format, library_name, patch_prefix, class_name) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, library_name, patch_prefix, class_name); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "%s %sClass: %s", library_name, patch_prefix, class_name); |
} |
@@ -4415,12 +4411,9 @@ RawString* UnresolvedClass::Name() const { |
const char* UnresolvedClass::ToCString() const { |
- const char* format = "unresolved class '%s'"; |
const char* cname = String::Handle(Name()).ToCString(); |
- intptr_t len = OS::SNPrint(NULL, 0, format, cname) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, cname); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "unresolved class '%s'", cname); |
} |
@@ -5167,14 +5160,12 @@ const char* TypeArguments::ToCString() const { |
if (IsNull()) { |
return "NULL TypeArguments"; |
} |
- const char* format = "%s [%s]"; |
const char* prev_cstr = "TypeArguments:"; |
for (int i = 0; i < Length(); i++) { |
const AbstractType& type_at = AbstractType::Handle(TypeAt(i)); |
const char* type_cstr = type_at.IsNull() ? "null" : type_at.ToCString(); |
- intptr_t len = OS::SNPrint(NULL, 0, format, prev_cstr, type_cstr) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, prev_cstr, type_cstr); |
+ char* chars = OS::SCreate(Thread::Current()->zone(), |
+ "%s [%s]", prev_cstr, type_cstr); |
prev_cstr = chars; |
} |
return prev_cstr; |
@@ -5182,13 +5173,10 @@ const char* TypeArguments::ToCString() const { |
const char* PatchClass::ToCString() const { |
- const char* kFormat = "PatchClass for %s"; |
const Class& cls = Class::Handle(patched_class()); |
const char* cls_name = cls.ToCString(); |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, cls_name) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, cls_name); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "PatchClass for %s", cls_name); |
} |
@@ -7022,14 +7010,10 @@ const char* Function::ToCString() const { |
default: |
UNREACHABLE(); |
} |
- const char* kFormat = "Function '%s':%s%s%s%s."; |
const char* function_name = String::Handle(name()).ToCString(); |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, |
- static_str, abstract_str, kind_str, const_str) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, function_name, |
- static_str, abstract_str, kind_str, const_str); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Function '%s':%s%s%s%s.", |
+ function_name, static_str, abstract_str, kind_str, const_str); |
} |
@@ -7409,15 +7393,11 @@ const char* Field::ToCString() const { |
const char* kF0 = is_static() ? " static" : ""; |
const char* kF1 = is_final() ? " final" : ""; |
const char* kF2 = is_const() ? " const" : ""; |
- const char* kFormat = "Field <%s.%s>:%s%s%s"; |
const char* field_name = String::Handle(name()).ToCString(); |
const Class& cls = Class::Handle(owner()); |
const char* cls_name = String::Handle(cls.Name()).ToCString(); |
- intptr_t len = |
- OS::SNPrint(NULL, 0, kFormat, cls_name, field_name, kF0, kF1, kF2) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, cls_name, field_name, kF0, kF1, kF2); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Field <%s.%s>:%s%s%s", cls_name, field_name, kF0, kF1, kF2); |
} |
void Field::PrintJSONImpl(JSONStream* stream, bool ref) const { |
@@ -10206,12 +10186,9 @@ RawLibrary* Library::TypedDataLibrary() { |
const char* Library::ToCString() const { |
- const char* kFormat = "Library:'%s'"; |
const String& name = String::Handle(url()); |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, name.ToCString()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Library:'%s'", name.ToCString()); |
} |
@@ -10622,12 +10599,9 @@ void LibraryPrefix::set_importer(const Library& value) const { |
const char* LibraryPrefix::ToCString() const { |
- const char* kFormat = "LibraryPrefix:'%s'"; |
const String& prefix = String::Handle(name()); |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, prefix.ToCString()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, prefix.ToCString()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "LibraryPrefix:'%s'", prefix.ToCString()); |
} |
@@ -10678,12 +10652,9 @@ RawObject* Namespace::GetMetadata() const { |
const char* Namespace::ToCString() const { |
- const char* kFormat = "Namespace for library '%s'"; |
const Library& lib = Library::Handle(library()); |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, lib.ToCString()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, lib.ToCString()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Namespace for library '%s'", lib.ToCString()); |
} |
@@ -11197,21 +11168,20 @@ void PcDescriptors::PrintHeaderString() { |
const char* PcDescriptors::ToCString() const { |
+ // "*" in a printf format specifier tells it to read the field width from |
+ // the printf argument list. |
+#define FORMAT "%#-*" Px "\t%s\t%" Pd "\t\t%" Pd "\t%" Pd "\n" |
if (Length() == 0) { |
return "empty PcDescriptors\n"; |
} |
// 4 bits per hex digit. |
const int addr_width = kBitsPerWord / 4; |
- // "*" in a printf format specifier tells it to read the field width from |
- // the printf argument list. |
- const char* kFormat = |
- "%#-*" Px "\t%s\t%" Pd "\t\t%" Pd "\t%" Pd "\n"; |
// First compute the buffer size required. |
intptr_t len = 1; // Trailing '\0'. |
{ |
Iterator iter(*this, RawPcDescriptors::kAnyKind); |
while (iter.MoveNext()) { |
- len += OS::SNPrint(NULL, 0, kFormat, addr_width, |
+ len += OS::SNPrint(NULL, 0, FORMAT, addr_width, |
iter.PcOffset(), |
KindAsStr(iter.Kind()), |
iter.DeoptId(), |
@@ -11225,7 +11195,7 @@ const char* PcDescriptors::ToCString() const { |
intptr_t index = 0; |
Iterator iter(*this, RawPcDescriptors::kAnyKind); |
while (iter.MoveNext()) { |
- index += OS::SNPrint((buffer + index), (len - index), kFormat, addr_width, |
+ index += OS::SNPrint((buffer + index), (len - index), FORMAT, addr_width, |
iter.PcOffset(), |
KindAsStr(iter.Kind()), |
iter.DeoptId(), |
@@ -11233,6 +11203,7 @@ const char* PcDescriptors::ToCString() const { |
iter.TryIndex()); |
} |
return buffer; |
+#undef FORMAT |
} |
@@ -11403,11 +11374,11 @@ RawStackmap* Stackmap::New(intptr_t length, |
const char* Stackmap::ToCString() const { |
+#define FORMAT "%#x: " |
if (IsNull()) { |
return "{null}"; |
} else { |
- const char* kFormat = "%#" Px ": "; |
- intptr_t fixed_length = OS::SNPrint(NULL, 0, kFormat, PcOffset()) + 1; |
+ intptr_t fixed_length = OS::SNPrint(NULL, 0, FORMAT, PcOffset()) + 1; |
Thread* thread = Thread::Current(); |
// Guard against integer overflow in the computation of alloc_size. |
// |
@@ -11418,13 +11389,14 @@ const char* Stackmap::ToCString() const { |
} |
intptr_t alloc_size = fixed_length + Length(); |
char* chars = thread->zone()->Alloc<char>(alloc_size); |
- intptr_t index = OS::SNPrint(chars, alloc_size, kFormat, PcOffset()); |
+ intptr_t index = OS::SNPrint(chars, alloc_size, FORMAT, PcOffset()); |
for (intptr_t i = 0; i < Length(); i++) { |
chars[index++] = IsObject(i) ? '1' : '0'; |
} |
chars[index] = '\0'; |
return chars; |
} |
+#undef FORMAT |
} |
@@ -11755,6 +11727,8 @@ RawExceptionHandlers* ExceptionHandlers::New(const Array& handled_types_data) { |
const char* ExceptionHandlers::ToCString() const { |
+#define FORMAT1 "%" Pd " => %#x (%" Pd " types) (outer %d)\n" |
+#define FORMAT2 " %d. %s\n" |
if (num_entries() == 0) { |
return "empty ExceptionHandlers\n"; |
} |
@@ -11762,16 +11736,13 @@ const char* ExceptionHandlers::ToCString() const { |
Type& type = Type::Handle(); |
RawExceptionHandlers::HandlerInfo info; |
// First compute the buffer size required. |
- const char* kFormat = "%" Pd " => %#" Px " (%" Pd |
- " types) (outer %" Pd ")\n"; |
- const char* kFormat2 = " %d. %s\n"; |
intptr_t len = 1; // Trailing '\0'. |
for (intptr_t i = 0; i < num_entries(); i++) { |
GetHandlerInfo(i, &info); |
handled_types = GetHandledTypes(i); |
const intptr_t num_types = |
handled_types.IsNull() ? 0 : handled_types.Length(); |
- len += OS::SNPrint(NULL, 0, kFormat, |
+ len += OS::SNPrint(NULL, 0, FORMAT1, |
i, |
info.handler_pc_offset, |
num_types, |
@@ -11779,7 +11750,7 @@ const char* ExceptionHandlers::ToCString() const { |
for (int k = 0; k < num_types; k++) { |
type ^= handled_types.At(k); |
ASSERT(!type.IsNull()); |
- len += OS::SNPrint(NULL, 0, kFormat2, k, type.ToCString()); |
+ len += OS::SNPrint(NULL, 0, FORMAT2, k, type.ToCString()); |
} |
} |
// Allocate the buffer. |
@@ -11793,7 +11764,7 @@ const char* ExceptionHandlers::ToCString() const { |
handled_types.IsNull() ? 0 : handled_types.Length(); |
num_chars += OS::SNPrint((buffer + num_chars), |
(len - num_chars), |
- kFormat, |
+ FORMAT1, |
i, |
info.handler_pc_offset, |
num_types, |
@@ -11802,10 +11773,12 @@ const char* ExceptionHandlers::ToCString() const { |
type ^= handled_types.At(k); |
num_chars += OS::SNPrint((buffer + num_chars), |
(len - num_chars), |
- kFormat2, k, type.ToCString()); |
+ FORMAT2, k, type.ToCString()); |
} |
} |
return buffer; |
+#undef FORMAT1 |
+#undef FORMAT2 |
} |
@@ -11882,13 +11855,14 @@ void DeoptInfo::Unpack(const Array& table, |
const char* DeoptInfo::ToCString(const Array& deopt_table, |
const TypedData& packed) { |
+#define FORMAT "[%s]" |
GrowableArray<DeoptInstr*> deopt_instrs; |
Unpack(deopt_table, packed, &deopt_instrs); |
// Compute the buffer size required. |
intptr_t len = 1; // Trailing '\0'. |
for (intptr_t i = 0; i < deopt_instrs.length(); i++) { |
- len += OS::SNPrint(NULL, 0, "[%s]", deopt_instrs[i]->ToCString()); |
+ len += OS::SNPrint(NULL, 0, FORMAT, deopt_instrs[i]->ToCString()); |
} |
// Allocate the buffer. |
@@ -11899,11 +11873,12 @@ const char* DeoptInfo::ToCString(const Array& deopt_table, |
for (intptr_t i = 0; i < deopt_instrs.length(); i++) { |
index += OS::SNPrint((buffer + index), |
(len - index), |
- "[%s]", |
+ FORMAT, |
deopt_instrs[i]->ToCString()); |
} |
return buffer; |
+#undef FORMAT |
} |
@@ -11922,16 +11897,12 @@ bool DeoptInfo::VerifyDecompression(const GrowableArray<DeoptInstr*>& original, |
const char* ICData::ToCString() const { |
- const char* kFormat = "ICData target:'%s' num-args: %" Pd |
- " num-checks: %" Pd ""; |
const String& name = String::Handle(target_name()); |
const intptr_t num_args = NumArgsTested(); |
const intptr_t num_checks = NumberOfChecks(); |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString(), |
- num_args, num_checks) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, name.ToCString(), num_args, num_checks); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "ICData target:'%s' num-args: %" Pd " num-checks: %" Pd "", |
+ name.ToCString(), num_args, num_checks); |
} |
@@ -13764,8 +13735,6 @@ void ContextScope::SetContextLevelAt(intptr_t scope_index, |
const char* ContextScope::ToCString() const { |
- const char* format = |
- "%s\nvar %s token-pos %" Pd " ctx lvl %" Pd " index %" Pd ""; |
const char* prev_cstr = "ContextScope:"; |
String& name = String::Handle(); |
for (int i = 0; i < num_variables(); i++) { |
@@ -13774,10 +13743,9 @@ const char* ContextScope::ToCString() const { |
intptr_t pos = TokenIndexAt(i); |
intptr_t idx = ContextIndexAt(i); |
intptr_t lvl = ContextLevelAt(i); |
- intptr_t len = |
- OS::SNPrint(NULL, 0, format, prev_cstr, cname, pos, lvl, idx) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, prev_cstr, cname, pos, lvl, idx); |
+ char* chars = OS::SCreate(Thread::Current()->zone(), |
+ "%s\nvar %s token-pos %" Pd " ctx lvl %" Pd " index %" Pd "", |
+ prev_cstr, cname, pos, lvl, idx); |
prev_cstr = chars; |
} |
return prev_cstr; |
@@ -14259,11 +14227,8 @@ const char* UnhandledException::ToErrorCString() const { |
if (!strtmp.IsError()) { |
stack_str = strtmp.ToCString(); |
} |
- const char* format = "Unhandled exception:\n%s\n%s"; |
- intptr_t len = OS::SNPrint(NULL, 0, format, exc_str, stack_str); |
- char* chars = thread->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, exc_str, stack_str); |
- return chars; |
+ return OS::SCreate(thread->zone(), |
+ "Unhandled exception:\n%s\n%s", exc_str, stack_str); |
} |
@@ -14424,11 +14389,8 @@ bool Instance::CheckAndCanonicalizeFields(const char** error_str) const { |
this->SetFieldAtOffset(field_offset, obj); |
} else { |
ASSERT(error_str != NULL); |
- const char* kFormat = "field: %s\n"; |
- const intptr_t len = |
- OS::SNPrint(NULL, 0, kFormat, obj.ToCString()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, obj.ToCString()); |
+ char* chars = OS::SCreate(Thread::Current()->zone(), |
+ "field: %s\n", obj.ToCString()); |
*error_str = chars; |
return false; |
} |
@@ -14752,7 +14714,6 @@ const char* Instance::ToCString() const { |
if (IsClosure()) { |
return Closure::ToCString(*this); |
} |
- const char* kFormat = "Instance of '%s'"; |
const Class& cls = Class::Handle(clazz()); |
TypeArguments& type_arguments = TypeArguments::Handle(); |
const intptr_t num_type_arguments = cls.NumTypeArguments(); |
@@ -14762,11 +14723,8 @@ const char* Instance::ToCString() const { |
const Type& type = |
Type::Handle(Type::New(cls, type_arguments, Scanner::kNoSourcePos)); |
const String& type_name = String::Handle(type.UserVisibleName()); |
- // Calculate the size of the string. |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, type_name.ToCString()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Instance of '%s'", type_name.ToCString()); |
} |
} |
@@ -15938,29 +15896,18 @@ const char* Type::ToCString() const { |
class_name = UnresolvedClass::Handle(unresolved_class()).ToCString(); |
} |
if (type_arguments.IsNull()) { |
- const char* format = "%sType: class '%s'"; |
- const intptr_t len = |
- OS::SNPrint(NULL, 0, format, unresolved, class_name) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, unresolved, class_name); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "%sType: class '%s'", unresolved, class_name); |
} else if (IsResolved() && IsFinalized() && IsRecursive()) { |
- const char* format = "Type: (@%" Px " H%" Px ") class '%s', args:[%s]"; |
const intptr_t hash = Hash(); |
const char* args_cstr = TypeArguments::Handle(arguments()).ToCString(); |
- const intptr_t len = |
- OS::SNPrint(NULL, 0, format, raw(), hash, class_name, args_cstr) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, raw(), hash, class_name, args_cstr); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Type: (@%p H%" Px ") class '%s', args:[%s]", |
+ raw(), hash, class_name, args_cstr); |
} else { |
- const char* format = "%sType: class '%s', args:[%s]"; |
const char* args_cstr = TypeArguments::Handle(arguments()).ToCString(); |
- const intptr_t len = |
- OS::SNPrint(NULL, 0, format, unresolved, class_name, args_cstr) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, unresolved, class_name, args_cstr); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "%sType: class '%s', args:[%s]", unresolved, class_name, args_cstr); |
} |
} |
@@ -16142,19 +16089,12 @@ const char* TypeRef::ToCString() const { |
type_class()).Name()).ToCString(); |
AbstractType& ref_type = AbstractType::Handle(type()); |
if (ref_type.IsFinalized()) { |
- const char* format = "TypeRef: %s<...> (@%" Px " H%" Px ")"; |
const intptr_t hash = ref_type.Hash(); |
- const intptr_t len = |
- OS::SNPrint(NULL, 0, format, type_cstr, ref_type.raw(), hash) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, type_cstr, ref_type.raw(), hash); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "TypeRef: %s<...> (@%p H%" Px ")", type_cstr, ref_type.raw(), hash); |
} else { |
- const char* format = "TypeRef: %s<...>"; |
- const intptr_t len = OS::SNPrint(NULL, 0, format, type_cstr) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, type_cstr); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "TypeRef: %s<...>", type_cstr); |
} |
} |
@@ -17144,12 +17084,7 @@ int Smi::CompareWith(const Integer& other) const { |
const char* Smi::ToCString() const { |
- const char* kFormat = "%ld"; |
- // Calculate the size of the string. |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, Value()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, Value()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), "%" Pd "", Value()); |
} |
@@ -17275,12 +17210,7 @@ int Mint::CompareWith(const Integer& other) const { |
const char* Mint::ToCString() const { |
- const char* kFormat = "%lld"; |
- // Calculate the size of the string. |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, value()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, value()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), "%" Pd64 "", value()); |
} |
@@ -20128,11 +20058,8 @@ bool Array::CheckAndCanonicalizeFields(const char** error_str) const { |
this->SetAt(i, obj); |
} else { |
ASSERT(error_str != NULL); |
- const char* kFormat = "element at index %" Pd ": %s\n"; |
- const intptr_t len = |
- OS::SNPrint(NULL, 0, kFormat, i, obj.ToCString()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, i, obj.ToCString()); |
+ char* chars = OS::SCreate(Thread::Current()->zone(), |
+ "element at index %" Pd ": %s\n", i, obj.ToCString()); |
*error_str = chars; |
return false; |
} |
@@ -20256,11 +20183,8 @@ const char* GrowableObjectArray::ToCString() const { |
if (IsNull()) { |
return "_GrowableList NULL"; |
} |
- const char* format = "Instance(length:%" Pd ") of '_GrowableList'"; |
- intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, Length()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Instance(length:%" Pd ") of '_GrowableList'", Length()); |
} |
@@ -20482,16 +20406,12 @@ float Float32x4::w() const { |
const char* Float32x4::ToCString() const { |
- const char* kFormat = "[%f, %f, %f, %f]"; |
float _x = x(); |
float _y = y(); |
float _z = z(); |
float _w = w(); |
- // Calculate the size of the string. |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, _x, _y, _z, _w); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "[%f, %f, %f, %f]", _x, _y, _z, _w); |
} |
@@ -20591,16 +20511,12 @@ void Int32x4::set_value(simd128_value_t value) const { |
const char* Int32x4::ToCString() const { |
- const char* kFormat = "[%08x, %08x, %08x, %08x]"; |
int32_t _x = x(); |
int32_t _y = y(); |
int32_t _z = z(); |
int32_t _w = w(); |
- // Calculate the size of the string. |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, _x, _y, _z, _w); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "[%08x, %08x, %08x, %08x]", _x, _y, _z, _w); |
} |
@@ -20677,14 +20593,9 @@ void Float64x2::set_value(simd128_value_t value) const { |
const char* Float64x2::ToCString() const { |
- const char* kFormat = "[%f, %f]"; |
double _x = x(); |
double _y = y(); |
- // Calculate the size of the string. |
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, kFormat, _x, _y); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), "[%f, %f]", _x, _y); |
} |
@@ -20954,11 +20865,8 @@ const char* Closure::ToCString(const Instance& closure) { |
const char* fun_sig = String::Handle(fun.UserVisibleSignature()).ToCString(); |
const char* from = is_implicit_closure ? " from " : ""; |
const char* fun_desc = is_implicit_closure ? fun.ToCString() : ""; |
- const char* format = "Closure: %s%s%s"; |
- intptr_t len = OS::SNPrint(NULL, 0, format, fun_sig, from, fun_desc) + 1; |
- char* chars = Thread::Current()->zone()->Alloc<char>(len); |
- OS::SNPrint(chars, len, format, fun_sig, from, fun_desc); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "Closure: %s%s%s", fun_sig, from, fun_desc); |
} |
@@ -21077,9 +20985,6 @@ static intptr_t PrintOneStacktrace(Zone* zone, |
const Function& function, |
const Code& code, |
intptr_t frame_index) { |
- const char* kFormatWithCol = "#%-6d %s (%s:%d:%d)\n"; |
- const char* kFormatNoCol = "#%-6d %s (%s:%d)\n"; |
- const char* kFormatNoLine = "#%-6d %s (%s)\n"; |
const intptr_t token_pos = code.GetTokenIndexOfPC(pc); |
const Script& script = Script::Handle(zone, function.script()); |
const String& function_name = |
@@ -21094,36 +20999,22 @@ static intptr_t PrintOneStacktrace(Zone* zone, |
script.GetTokenLocation(token_pos, &line, NULL); |
} |
} |
- intptr_t len = 0; |
char* chars = NULL; |
if (column >= 0) { |
- len = OS::SNPrint(NULL, 0, kFormatWithCol, |
- frame_index, function_name.ToCString(), |
- url.ToCString(), line, column); |
- chars = zone->Alloc<char>(len + 1); |
- OS::SNPrint(chars, (len + 1), kFormatWithCol, |
- frame_index, |
- function_name.ToCString(), |
- url.ToCString(), line, column); |
+ chars = OS::SCreate(zone, |
+ "#%-6" Pd " %s (%s:%" Pd ":%" Pd ")\n", |
+ frame_index, function_name.ToCString(), url.ToCString(), line, column); |
} else if (line >= 0) { |
- len = OS::SNPrint(NULL, 0, kFormatNoCol, |
- frame_index, function_name.ToCString(), |
- url.ToCString(), line); |
- chars = zone->Alloc<char>(len + 1); |
- OS::SNPrint(chars, (len + 1), kFormatNoCol, |
- frame_index, function_name.ToCString(), |
- url.ToCString(), line); |
+ chars = OS::SCreate(zone, |
+ "#%-6" Pd " %s (%s:%" Pd ")\n", |
+ frame_index, function_name.ToCString(), url.ToCString(), line); |
} else { |
- len = OS::SNPrint(NULL, 0, kFormatNoLine, |
- frame_index, function_name.ToCString(), |
- url.ToCString()); |
- chars = zone->Alloc<char>(len + 1); |
- OS::SNPrint(chars, (len + 1), kFormatNoLine, |
- frame_index, function_name.ToCString(), |
- url.ToCString()); |
+ chars = OS::SCreate(zone, |
+ "#%-6" Pd " %s (%s)\n", |
+ frame_index, function_name.ToCString(), url.ToCString()); |
} |
frame_strings->Add(chars); |
- return len; |
+ return strlen(chars); |
} |
@@ -21290,11 +21181,8 @@ bool JSRegExp::CanonicalizeEquals(const Instance& other) const { |
const char* JSRegExp::ToCString() const { |
const String& str = String::Handle(pattern()); |
- const char* format = "JSRegExp: pattern=%s flags=%s"; |
- intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
- char* chars = Thread::Current()->zone()->Alloc<char>(len + 1); |
- OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
- return chars; |
+ return OS::SCreate(Thread::Current()->zone(), |
+ "JSRegExp: pattern=%s flags=%s", str.ToCString(), Flags()); |
} |