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

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

Issue 1220193009: Migrate most uses of Isolate::current_zone to Thread::zone. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 5 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/locations.cc ('k') | runtime/vm/os_android.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 "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 4150 matching lines...) Expand 10 before | Expand all | Expand 10 after
4161 return LibraryPrefix::null(); 4161 return LibraryPrefix::null();
4162 } 4162 }
4163 4163
4164 4164
4165 const char* Class::ToCString() const { 4165 const char* Class::ToCString() const {
4166 const char* format = "%s Class: %s"; 4166 const char* format = "%s Class: %s";
4167 const Library& lib = Library::Handle(library()); 4167 const Library& lib = Library::Handle(library());
4168 const char* library_name = lib.IsNull() ? "" : lib.ToCString(); 4168 const char* library_name = lib.IsNull() ? "" : lib.ToCString();
4169 const char* class_name = String::Handle(Name()).ToCString(); 4169 const char* class_name = String::Handle(Name()).ToCString();
4170 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1; 4170 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1;
4171 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 4171 char* chars = Thread::Current()->zone()->Alloc<char>(len);
4172 OS::SNPrint(chars, len, format, library_name, class_name); 4172 OS::SNPrint(chars, len, format, library_name, class_name);
4173 return chars; 4173 return chars;
4174 } 4174 }
4175 4175
4176 4176
4177 void Class::PrintJSONImpl(JSONStream* stream, bool ref) const { 4177 void Class::PrintJSONImpl(JSONStream* stream, bool ref) const {
4178 JSONObject jsobj(stream); 4178 JSONObject jsobj(stream);
4179 if ((raw() == Class::null()) || (id() == kFreeListElement)) { 4179 if ((raw() == Class::null()) || (id() == kFreeListElement)) {
4180 // TODO(turnidge): This is weird and needs to be changed. 4180 // TODO(turnidge): This is weird and needs to be changed.
4181 jsobj.AddProperty("type", "null"); 4181 jsobj.AddProperty("type", "null");
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
4332 } else { 4332 } else {
4333 return ident(); 4333 return ident();
4334 } 4334 }
4335 } 4335 }
4336 4336
4337 4337
4338 const char* UnresolvedClass::ToCString() const { 4338 const char* UnresolvedClass::ToCString() const {
4339 const char* format = "unresolved class '%s'"; 4339 const char* format = "unresolved class '%s'";
4340 const char* cname = String::Handle(Name()).ToCString(); 4340 const char* cname = String::Handle(Name()).ToCString();
4341 intptr_t len = OS::SNPrint(NULL, 0, format, cname) + 1; 4341 intptr_t len = OS::SNPrint(NULL, 0, format, cname) + 1;
4342 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 4342 char* chars = Thread::Current()->zone()->Alloc<char>(len);
4343 OS::SNPrint(chars, len, format, cname); 4343 OS::SNPrint(chars, len, format, cname);
4344 return chars; 4344 return chars;
4345 } 4345 }
4346 4346
4347 4347
4348 void UnresolvedClass::PrintJSONImpl(JSONStream* stream, bool ref) const { 4348 void UnresolvedClass::PrintJSONImpl(JSONStream* stream, bool ref) const {
4349 Object::PrintJSONImpl(stream, ref); 4349 Object::PrintJSONImpl(stream, ref);
4350 } 4350 }
4351 4351
4352 4352
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after
5086 const char* TypeArguments::ToCString() const { 5086 const char* TypeArguments::ToCString() const {
5087 if (IsNull()) { 5087 if (IsNull()) {
5088 return "NULL TypeArguments"; 5088 return "NULL TypeArguments";
5089 } 5089 }
5090 const char* format = "%s [%s]"; 5090 const char* format = "%s [%s]";
5091 const char* prev_cstr = "TypeArguments:"; 5091 const char* prev_cstr = "TypeArguments:";
5092 for (int i = 0; i < Length(); i++) { 5092 for (int i = 0; i < Length(); i++) {
5093 const AbstractType& type_at = AbstractType::Handle(TypeAt(i)); 5093 const AbstractType& type_at = AbstractType::Handle(TypeAt(i));
5094 const char* type_cstr = type_at.IsNull() ? "null" : type_at.ToCString(); 5094 const char* type_cstr = type_at.IsNull() ? "null" : type_at.ToCString();
5095 intptr_t len = OS::SNPrint(NULL, 0, format, prev_cstr, type_cstr) + 1; 5095 intptr_t len = OS::SNPrint(NULL, 0, format, prev_cstr, type_cstr) + 1;
5096 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 5096 char* chars = Thread::Current()->zone()->Alloc<char>(len);
5097 OS::SNPrint(chars, len, format, prev_cstr, type_cstr); 5097 OS::SNPrint(chars, len, format, prev_cstr, type_cstr);
5098 prev_cstr = chars; 5098 prev_cstr = chars;
5099 } 5099 }
5100 return prev_cstr; 5100 return prev_cstr;
5101 } 5101 }
5102 5102
5103 5103
5104 const char* PatchClass::ToCString() const { 5104 const char* PatchClass::ToCString() const {
5105 const char* kFormat = "PatchClass for %s"; 5105 const char* kFormat = "PatchClass for %s";
5106 const Class& cls = Class::Handle(patched_class()); 5106 const Class& cls = Class::Handle(patched_class());
5107 const char* cls_name = cls.ToCString(); 5107 const char* cls_name = cls.ToCString();
5108 intptr_t len = OS::SNPrint(NULL, 0, kFormat, cls_name) + 1; 5108 intptr_t len = OS::SNPrint(NULL, 0, kFormat, cls_name) + 1;
5109 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 5109 char* chars = Thread::Current()->zone()->Alloc<char>(len);
5110 OS::SNPrint(chars, len, kFormat, cls_name); 5110 OS::SNPrint(chars, len, kFormat, cls_name);
5111 return chars; 5111 return chars;
5112 } 5112 }
5113 5113
5114 5114
5115 void PatchClass::PrintJSONImpl(JSONStream* stream, bool ref) const { 5115 void PatchClass::PrintJSONImpl(JSONStream* stream, bool ref) const {
5116 Object::PrintJSONImpl(stream, ref); 5116 Object::PrintJSONImpl(stream, ref);
5117 } 5117 }
5118 5118
5119 5119
(...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after
5914 } 5914 }
5915 ASSERT(library_name != NULL); 5915 ASSERT(library_name != NULL);
5916 lib_class_format = (library_name[0] == '\0') ? "%s%s_" : "%s_%s_"; 5916 lib_class_format = (library_name[0] == '\0') ? "%s%s_" : "%s_%s_";
5917 } else { 5917 } else {
5918 library_name = ""; 5918 library_name = "";
5919 lib_class_format = "%s%s."; 5919 lib_class_format = "%s%s.";
5920 } 5920 }
5921 reserve_len += 5921 reserve_len +=
5922 OS::SNPrint(NULL, 0, lib_class_format, library_name, class_name); 5922 OS::SNPrint(NULL, 0, lib_class_format, library_name, class_name);
5923 ASSERT(chars != NULL); 5923 ASSERT(chars != NULL);
5924 *chars = Isolate::Current()->current_zone()->Alloc<char>(reserve_len + 1); 5924 *chars = Thread::Current()->zone()->Alloc<char>(reserve_len + 1);
5925 written = OS::SNPrint( 5925 written = OS::SNPrint(
5926 *chars, reserve_len + 1, lib_class_format, library_name, class_name); 5926 *chars, reserve_len + 1, lib_class_format, library_name, class_name);
5927 } else { 5927 } else {
5928 written = ConstructFunctionFullyQualifiedCString(parent, 5928 written = ConstructFunctionFullyQualifiedCString(parent,
5929 chars, 5929 chars,
5930 reserve_len, 5930 reserve_len,
5931 with_lib, 5931 with_lib,
5932 lib_kind); 5932 lib_kind);
5933 } 5933 }
5934 ASSERT(*chars != NULL); 5934 ASSERT(*chars != NULL);
(...skipping 984 matching lines...) Expand 10 before | Expand all | Expand 10 after
6919 case RawFunction::kIrregexpFunction: 6919 case RawFunction::kIrregexpFunction:
6920 kind_str = "irregexp-function"; 6920 kind_str = "irregexp-function";
6921 break; 6921 break;
6922 default: 6922 default:
6923 UNREACHABLE(); 6923 UNREACHABLE();
6924 } 6924 }
6925 const char* kFormat = "Function '%s':%s%s%s%s."; 6925 const char* kFormat = "Function '%s':%s%s%s%s.";
6926 const char* function_name = String::Handle(name()).ToCString(); 6926 const char* function_name = String::Handle(name()).ToCString();
6927 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, 6927 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name,
6928 static_str, abstract_str, kind_str, const_str) + 1; 6928 static_str, abstract_str, kind_str, const_str) + 1;
6929 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 6929 char* chars = Thread::Current()->zone()->Alloc<char>(len);
6930 OS::SNPrint(chars, len, kFormat, function_name, 6930 OS::SNPrint(chars, len, kFormat, function_name,
6931 static_str, abstract_str, kind_str, const_str); 6931 static_str, abstract_str, kind_str, const_str);
6932 return chars; 6932 return chars;
6933 } 6933 }
6934 6934
6935 6935
6936 static void AddFunctionServiceId(const JSONObject& jsobj, 6936 static void AddFunctionServiceId(const JSONObject& jsobj,
6937 const Function& f, 6937 const Function& f,
6938 const Class& cls) { 6938 const Class& cls) {
6939 // Special kinds of functions use indices in their respective lists. 6939 // Special kinds of functions use indices in their respective lists.
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
7311 } 7311 }
7312 const char* kF0 = is_static() ? " static" : ""; 7312 const char* kF0 = is_static() ? " static" : "";
7313 const char* kF1 = is_final() ? " final" : ""; 7313 const char* kF1 = is_final() ? " final" : "";
7314 const char* kF2 = is_const() ? " const" : ""; 7314 const char* kF2 = is_const() ? " const" : "";
7315 const char* kFormat = "Field <%s.%s>:%s%s%s"; 7315 const char* kFormat = "Field <%s.%s>:%s%s%s";
7316 const char* field_name = String::Handle(name()).ToCString(); 7316 const char* field_name = String::Handle(name()).ToCString();
7317 const Class& cls = Class::Handle(owner()); 7317 const Class& cls = Class::Handle(owner());
7318 const char* cls_name = String::Handle(cls.Name()).ToCString(); 7318 const char* cls_name = String::Handle(cls.Name()).ToCString();
7319 intptr_t len = 7319 intptr_t len =
7320 OS::SNPrint(NULL, 0, kFormat, cls_name, field_name, kF0, kF1, kF2) + 1; 7320 OS::SNPrint(NULL, 0, kFormat, cls_name, field_name, kF0, kF1, kF2) + 1;
7321 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 7321 char* chars = Thread::Current()->zone()->Alloc<char>(len);
7322 OS::SNPrint(chars, len, kFormat, cls_name, field_name, kF0, kF1, kF2); 7322 OS::SNPrint(chars, len, kFormat, cls_name, field_name, kF0, kF1, kF2);
7323 return chars; 7323 return chars;
7324 } 7324 }
7325 7325
7326 void Field::PrintJSONImpl(JSONStream* stream, bool ref) const { 7326 void Field::PrintJSONImpl(JSONStream* stream, bool ref) const {
7327 JSONObject jsobj(stream); 7327 JSONObject jsobj(stream);
7328 Class& cls = Class::Handle(owner()); 7328 Class& cls = Class::Handle(owner());
7329 intptr_t id = cls.FindFieldIndex(*this); 7329 intptr_t id = cls.FindFieldIndex(*this);
7330 ASSERT(id >= 0); 7330 ASSERT(id >= 0);
7331 intptr_t cid = cls.id(); 7331 intptr_t cid = cls.id();
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
7521 7521
7522 const Class& cls = Class::Handle( 7522 const Class& cls = Class::Handle(
7523 Isolate::Current()->class_table()->At(guarded_cid())); 7523 Isolate::Current()->class_table()->At(guarded_cid()));
7524 const char* class_name = String::Handle(cls.Name()).ToCString(); 7524 const char* class_name = String::Handle(cls.Name()).ToCString();
7525 7525
7526 if (RawObject::IsBuiltinListClassId(guarded_cid()) && 7526 if (RawObject::IsBuiltinListClassId(guarded_cid()) &&
7527 !is_nullable() && 7527 !is_nullable() &&
7528 is_final()) { 7528 is_final()) {
7529 ASSERT(guarded_list_length() != kUnknownFixedLength); 7529 ASSERT(guarded_list_length() != kUnknownFixedLength);
7530 if (guarded_list_length() == kNoFixedLength) { 7530 if (guarded_list_length() == kNoFixedLength) {
7531 return Isolate::Current()->current_zone()->PrintToString( 7531 return Thread::Current()->zone()->PrintToString(
7532 "<%s [*]>", class_name); 7532 "<%s [*]>", class_name);
7533 } else { 7533 } else {
7534 return Isolate::Current()->current_zone()->PrintToString( 7534 return Thread::Current()->zone()->PrintToString(
7535 "<%s [%" Pd " @%" Pd "]>", 7535 "<%s [%" Pd " @%" Pd "]>",
7536 class_name, 7536 class_name,
7537 guarded_list_length(), 7537 guarded_list_length(),
7538 guarded_list_length_in_object_offset()); 7538 guarded_list_length_in_object_offset());
7539 } 7539 }
7540 } 7540 }
7541 7541
7542 return Isolate::Current()->current_zone()->PrintToString("<%s %s>", 7542 return Thread::Current()->zone()->PrintToString("<%s %s>",
7543 is_nullable() ? "nullable" : "not-nullable", 7543 is_nullable() ? "nullable" : "not-nullable",
7544 class_name); 7544 class_name);
7545 } 7545 }
7546 7546
7547 7547
7548 void Field::InitializeGuardedListLengthInObjectOffset() const { 7548 void Field::InitializeGuardedListLengthInObjectOffset() const {
7549 if (needs_length_check() && 7549 if (needs_length_check() &&
7550 (guarded_list_length() != Field::kUnknownFixedLength)) { 7550 (guarded_list_length() != Field::kUnknownFixedLength)) {
7551 const intptr_t offset = GetListLengthOffset(guarded_cid()); 7551 const intptr_t offset = GetListLengthOffset(guarded_cid());
7552 set_guarded_list_length_in_object_offset(offset); 7552 set_guarded_list_length_in_object_offset(offset);
(...skipping 2451 matching lines...) Expand 10 before | Expand all | Expand 10 after
10004 10004
10005 RawLibrary* Library::TypedDataLibrary() { 10005 RawLibrary* Library::TypedDataLibrary() {
10006 return Isolate::Current()->object_store()->typed_data_library(); 10006 return Isolate::Current()->object_store()->typed_data_library();
10007 } 10007 }
10008 10008
10009 10009
10010 const char* Library::ToCString() const { 10010 const char* Library::ToCString() const {
10011 const char* kFormat = "Library:'%s'"; 10011 const char* kFormat = "Library:'%s'";
10012 const String& name = String::Handle(url()); 10012 const String& name = String::Handle(url());
10013 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; 10013 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1;
10014 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 10014 char* chars = Thread::Current()->zone()->Alloc<char>(len);
10015 OS::SNPrint(chars, len, kFormat, name.ToCString()); 10015 OS::SNPrint(chars, len, kFormat, name.ToCString());
10016 return chars; 10016 return chars;
10017 } 10017 }
10018 10018
10019 10019
10020 void Library::PrintJSONImpl(JSONStream* stream, bool ref) const { 10020 void Library::PrintJSONImpl(JSONStream* stream, bool ref) const {
10021 const char* library_name = String::Handle(name()).ToCString(); 10021 const char* library_name = String::Handle(name()).ToCString();
10022 intptr_t id = index(); 10022 intptr_t id = index();
10023 ASSERT(id >= 0); 10023 ASSERT(id >= 0);
10024 JSONObject jsobj(stream); 10024 JSONObject jsobj(stream);
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
10418 10418
10419 void LibraryPrefix::set_importer(const Library& value) const { 10419 void LibraryPrefix::set_importer(const Library& value) const {
10420 StorePointer(&raw_ptr()->importer_, value.raw()); 10420 StorePointer(&raw_ptr()->importer_, value.raw());
10421 } 10421 }
10422 10422
10423 10423
10424 const char* LibraryPrefix::ToCString() const { 10424 const char* LibraryPrefix::ToCString() const {
10425 const char* kFormat = "LibraryPrefix:'%s'"; 10425 const char* kFormat = "LibraryPrefix:'%s'";
10426 const String& prefix = String::Handle(name()); 10426 const String& prefix = String::Handle(name());
10427 intptr_t len = OS::SNPrint(NULL, 0, kFormat, prefix.ToCString()) + 1; 10427 intptr_t len = OS::SNPrint(NULL, 0, kFormat, prefix.ToCString()) + 1;
10428 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 10428 char* chars = Thread::Current()->zone()->Alloc<char>(len);
10429 OS::SNPrint(chars, len, kFormat, prefix.ToCString()); 10429 OS::SNPrint(chars, len, kFormat, prefix.ToCString());
10430 return chars; 10430 return chars;
10431 } 10431 }
10432 10432
10433 10433
10434 void LibraryPrefix::PrintJSONImpl(JSONStream* stream, bool ref) const { 10434 void LibraryPrefix::PrintJSONImpl(JSONStream* stream, bool ref) const {
10435 Object::PrintJSONImpl(stream, ref); 10435 Object::PrintJSONImpl(stream, ref);
10436 } 10436 }
10437 10437
10438 10438
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
10474 } 10474 }
10475 } 10475 }
10476 return metadata.raw(); 10476 return metadata.raw();
10477 } 10477 }
10478 10478
10479 10479
10480 const char* Namespace::ToCString() const { 10480 const char* Namespace::ToCString() const {
10481 const char* kFormat = "Namespace for library '%s'"; 10481 const char* kFormat = "Namespace for library '%s'";
10482 const Library& lib = Library::Handle(library()); 10482 const Library& lib = Library::Handle(library());
10483 intptr_t len = OS::SNPrint(NULL, 0, kFormat, lib.ToCString()) + 1; 10483 intptr_t len = OS::SNPrint(NULL, 0, kFormat, lib.ToCString()) + 1;
10484 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 10484 char* chars = Thread::Current()->zone()->Alloc<char>(len);
10485 OS::SNPrint(chars, len, kFormat, lib.ToCString()); 10485 OS::SNPrint(chars, len, kFormat, lib.ToCString());
10486 return chars; 10486 return chars;
10487 } 10487 }
10488 10488
10489 10489
10490 void Namespace::PrintJSONImpl(JSONStream* stream, bool ref) const { 10490 void Namespace::PrintJSONImpl(JSONStream* stream, bool ref) const {
10491 Object::PrintJSONImpl(stream, ref); 10491 Object::PrintJSONImpl(stream, ref);
10492 } 10492 }
10493 10493
10494 10494
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
10982 while (iter.MoveNext()) { 10982 while (iter.MoveNext()) {
10983 len += OS::SNPrint(NULL, 0, kFormat, addr_width, 10983 len += OS::SNPrint(NULL, 0, kFormat, addr_width,
10984 iter.PcOffset(), 10984 iter.PcOffset(),
10985 KindAsStr(iter.Kind()), 10985 KindAsStr(iter.Kind()),
10986 iter.DeoptId(), 10986 iter.DeoptId(),
10987 iter.TokenPos(), 10987 iter.TokenPos(),
10988 iter.TryIndex()); 10988 iter.TryIndex());
10989 } 10989 }
10990 } 10990 }
10991 // Allocate the buffer. 10991 // Allocate the buffer.
10992 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len); 10992 char* buffer = Thread::Current()->zone()->Alloc<char>(len);
10993 // Layout the fields in the buffer. 10993 // Layout the fields in the buffer.
10994 intptr_t index = 0; 10994 intptr_t index = 0;
10995 Iterator iter(*this, RawPcDescriptors::kAnyKind); 10995 Iterator iter(*this, RawPcDescriptors::kAnyKind);
10996 while (iter.MoveNext()) { 10996 while (iter.MoveNext()) {
10997 index += OS::SNPrint((buffer + index), (len - index), kFormat, addr_width, 10997 index += OS::SNPrint((buffer + index), (len - index), kFormat, addr_width,
10998 iter.PcOffset(), 10998 iter.PcOffset(),
10999 KindAsStr(iter.Kind()), 10999 KindAsStr(iter.Kind()),
11000 iter.DeoptId(), 11000 iter.DeoptId(),
11001 iter.TokenPos(), 11001 iter.TokenPos(),
11002 iter.TryIndex()); 11002 iter.TryIndex());
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
11170 return result.raw(); 11170 return result.raw();
11171 } 11171 }
11172 11172
11173 11173
11174 const char* Stackmap::ToCString() const { 11174 const char* Stackmap::ToCString() const {
11175 if (IsNull()) { 11175 if (IsNull()) {
11176 return "{null}"; 11176 return "{null}";
11177 } else { 11177 } else {
11178 const char* kFormat = "%#" Px ": "; 11178 const char* kFormat = "%#" Px ": ";
11179 intptr_t fixed_length = OS::SNPrint(NULL, 0, kFormat, PcOffset()) + 1; 11179 intptr_t fixed_length = OS::SNPrint(NULL, 0, kFormat, PcOffset()) + 1;
11180 Isolate* isolate = Isolate::Current(); 11180 Thread* thread = Thread::Current();
11181 // Guard against integer overflow in the computation of alloc_size. 11181 // Guard against integer overflow in the computation of alloc_size.
11182 // 11182 //
11183 // TODO(kmillikin): We could just truncate the string if someone 11183 // TODO(kmillikin): We could just truncate the string if someone
11184 // tries to print a 2 billion plus entry stackmap. 11184 // tries to print a 2 billion plus entry stackmap.
11185 if (Length() > (kIntptrMax - fixed_length)) { 11185 if (Length() > (kIntptrMax - fixed_length)) {
11186 FATAL1("Length() is unexpectedly large (%" Pd ")", Length()); 11186 FATAL1("Length() is unexpectedly large (%" Pd ")", Length());
11187 } 11187 }
11188 intptr_t alloc_size = fixed_length + Length(); 11188 intptr_t alloc_size = fixed_length + Length();
11189 char* chars = isolate->current_zone()->Alloc<char>(alloc_size); 11189 char* chars = thread->zone()->Alloc<char>(alloc_size);
11190 intptr_t index = OS::SNPrint(chars, alloc_size, kFormat, PcOffset()); 11190 intptr_t index = OS::SNPrint(chars, alloc_size, kFormat, PcOffset());
11191 for (intptr_t i = 0; i < Length(); i++) { 11191 for (intptr_t i = 0; i < Length(); i++) {
11192 chars[index++] = IsObject(i) ? '1' : '0'; 11192 chars[index++] = IsObject(i) ? '1' : '0';
11193 } 11193 }
11194 chars[index] = '\0'; 11194 chars[index] = '\0';
11195 return chars; 11195 return chars;
11196 } 11196 }
11197 } 11197 }
11198 11198
11199 11199
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
11294 return "LocalVarDescriptors(NULL)"; 11294 return "LocalVarDescriptors(NULL)";
11295 } 11295 }
11296 intptr_t len = 1; // Trailing '\0'. 11296 intptr_t len = 1; // Trailing '\0'.
11297 String& var_name = String::Handle(); 11297 String& var_name = String::Handle();
11298 for (intptr_t i = 0; i < Length(); i++) { 11298 for (intptr_t i = 0; i < Length(); i++) {
11299 RawLocalVarDescriptors::VarInfo info; 11299 RawLocalVarDescriptors::VarInfo info;
11300 var_name = GetName(i); 11300 var_name = GetName(i);
11301 GetInfo(i, &info); 11301 GetInfo(i, &info);
11302 len += PrintVarInfo(NULL, 0, i, var_name, info); 11302 len += PrintVarInfo(NULL, 0, i, var_name, info);
11303 } 11303 }
11304 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1); 11304 char* buffer = Thread::Current()->zone()->Alloc<char>(len + 1);
11305 buffer[0] = '\0'; 11305 buffer[0] = '\0';
11306 intptr_t num_chars = 0; 11306 intptr_t num_chars = 0;
11307 for (intptr_t i = 0; i < Length(); i++) { 11307 for (intptr_t i = 0; i < Length(); i++) {
11308 RawLocalVarDescriptors::VarInfo info; 11308 RawLocalVarDescriptors::VarInfo info;
11309 var_name = GetName(i); 11309 var_name = GetName(i);
11310 GetInfo(i, &info); 11310 GetInfo(i, &info);
11311 num_chars += PrintVarInfo((buffer + num_chars), 11311 num_chars += PrintVarInfo((buffer + num_chars),
11312 (len - num_chars), 11312 (len - num_chars),
11313 i, var_name, info); 11313 i, var_name, info);
11314 } 11314 }
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
11537 info.handler_pc_offset, 11537 info.handler_pc_offset,
11538 num_types, 11538 num_types,
11539 info.outer_try_index); 11539 info.outer_try_index);
11540 for (int k = 0; k < num_types; k++) { 11540 for (int k = 0; k < num_types; k++) {
11541 type ^= handled_types.At(k); 11541 type ^= handled_types.At(k);
11542 ASSERT(!type.IsNull()); 11542 ASSERT(!type.IsNull());
11543 len += OS::SNPrint(NULL, 0, kFormat2, k, type.ToCString()); 11543 len += OS::SNPrint(NULL, 0, kFormat2, k, type.ToCString());
11544 } 11544 }
11545 } 11545 }
11546 // Allocate the buffer. 11546 // Allocate the buffer.
11547 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len); 11547 char* buffer = Thread::Current()->zone()->Alloc<char>(len);
11548 // Layout the fields in the buffer. 11548 // Layout the fields in the buffer.
11549 intptr_t num_chars = 0; 11549 intptr_t num_chars = 0;
11550 for (intptr_t i = 0; i < num_entries(); i++) { 11550 for (intptr_t i = 0; i < num_entries(); i++) {
11551 GetHandlerInfo(i, &info); 11551 GetHandlerInfo(i, &info);
11552 handled_types = GetHandledTypes(i); 11552 handled_types = GetHandledTypes(i);
11553 const intptr_t num_types = 11553 const intptr_t num_types =
11554 handled_types.IsNull() ? 0 : handled_types.Length(); 11554 handled_types.IsNull() ? 0 : handled_types.Length();
11555 num_chars += OS::SNPrint((buffer + num_chars), 11555 num_chars += OS::SNPrint((buffer + num_chars),
11556 (len - num_chars), 11556 (len - num_chars),
11557 kFormat, 11557 kFormat,
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
11646 GrowableArray<DeoptInstr*> deopt_instrs; 11646 GrowableArray<DeoptInstr*> deopt_instrs;
11647 Unpack(deopt_table, packed, &deopt_instrs); 11647 Unpack(deopt_table, packed, &deopt_instrs);
11648 11648
11649 // Compute the buffer size required. 11649 // Compute the buffer size required.
11650 intptr_t len = 1; // Trailing '\0'. 11650 intptr_t len = 1; // Trailing '\0'.
11651 for (intptr_t i = 0; i < deopt_instrs.length(); i++) { 11651 for (intptr_t i = 0; i < deopt_instrs.length(); i++) {
11652 len += OS::SNPrint(NULL, 0, "[%s]", deopt_instrs[i]->ToCString()); 11652 len += OS::SNPrint(NULL, 0, "[%s]", deopt_instrs[i]->ToCString());
11653 } 11653 }
11654 11654
11655 // Allocate the buffer. 11655 // Allocate the buffer.
11656 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len); 11656 char* buffer = Thread::Current()->zone()->Alloc<char>(len);
11657 11657
11658 // Layout the fields in the buffer. 11658 // Layout the fields in the buffer.
11659 intptr_t index = 0; 11659 intptr_t index = 0;
11660 for (intptr_t i = 0; i < deopt_instrs.length(); i++) { 11660 for (intptr_t i = 0; i < deopt_instrs.length(); i++) {
11661 index += OS::SNPrint((buffer + index), 11661 index += OS::SNPrint((buffer + index),
11662 (len - index), 11662 (len - index),
11663 "[%s]", 11663 "[%s]",
11664 deopt_instrs[i]->ToCString()); 11664 deopt_instrs[i]->ToCString());
11665 } 11665 }
11666 11666
(...skipping 16 matching lines...) Expand all
11683 11683
11684 11684
11685 const char* ICData::ToCString() const { 11685 const char* ICData::ToCString() const {
11686 const char* kFormat = "ICData target:'%s' num-args: %" Pd 11686 const char* kFormat = "ICData target:'%s' num-args: %" Pd
11687 " num-checks: %" Pd ""; 11687 " num-checks: %" Pd "";
11688 const String& name = String::Handle(target_name()); 11688 const String& name = String::Handle(target_name());
11689 const intptr_t num_args = NumArgsTested(); 11689 const intptr_t num_args = NumArgsTested();
11690 const intptr_t num_checks = NumberOfChecks(); 11690 const intptr_t num_checks = NumberOfChecks();
11691 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString(), 11691 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString(),
11692 num_args, num_checks) + 1; 11692 num_args, num_checks) + 1;
11693 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 11693 char* chars = Thread::Current()->zone()->Alloc<char>(len);
11694 OS::SNPrint(chars, len, kFormat, name.ToCString(), num_args, num_checks); 11694 OS::SNPrint(chars, len, kFormat, name.ToCString(), num_args, num_checks);
11695 return chars; 11695 return chars;
11696 } 11696 }
11697 11697
11698 11698
11699 void ICData::set_owner(const Function& value) const { 11699 void ICData::set_owner(const Function& value) const {
11700 ASSERT(!value.IsNull()); 11700 ASSERT(!value.IsNull());
11701 StorePointer(&raw_ptr()->owner_, value.raw()); 11701 StorePointer(&raw_ptr()->owner_, value.raw());
11702 } 11702 }
11703 11703
(...skipping 1242 matching lines...) Expand 10 before | Expand all | Expand 10 after
12946 return iter.DeoptId(); 12946 return iter.DeoptId();
12947 } 12947 }
12948 } 12948 }
12949 return Isolate::kNoDeoptId; 12949 return Isolate::kNoDeoptId;
12950 } 12950 }
12951 12951
12952 12952
12953 const char* Code::ToCString() const { 12953 const char* Code::ToCString() const {
12954 const char* kFormat = "Code entry:%p"; 12954 const char* kFormat = "Code entry:%p";
12955 intptr_t len = OS::SNPrint(NULL, 0, kFormat, EntryPoint()) + 1; 12955 intptr_t len = OS::SNPrint(NULL, 0, kFormat, EntryPoint()) + 1;
12956 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 12956 char* chars = Thread::Current()->zone()->Alloc<char>(len);
12957 OS::SNPrint(chars, len, kFormat, EntryPoint()); 12957 OS::SNPrint(chars, len, kFormat, EntryPoint());
12958 return chars; 12958 return chars;
12959 } 12959 }
12960 12960
12961 12961
12962 RawString* Code::Name() const { 12962 RawString* Code::Name() const {
12963 const Object& obj = Object::Handle(owner()); 12963 const Object& obj = Object::Handle(owner());
12964 if (obj.IsNull()) { 12964 if (obj.IsNull()) {
12965 // Regular stub. 12965 // Regular stub.
12966 const char* name = StubCode::NameOfStub(EntryPoint()); 12966 const char* name = StubCode::NameOfStub(EntryPoint());
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
13265 result.set_num_variables(num_variables); 13265 result.set_num_variables(num_variables);
13266 } 13266 }
13267 return result.raw(); 13267 return result.raw();
13268 } 13268 }
13269 13269
13270 13270
13271 const char* Context::ToCString() const { 13271 const char* Context::ToCString() const {
13272 if (IsNull()) { 13272 if (IsNull()) {
13273 return "Context (Null)"; 13273 return "Context (Null)";
13274 } 13274 }
13275 Zone* zone = Isolate::Current()->current_zone(); 13275 Zone* zone = Thread::Current()->zone();
13276 const Context& parent_ctx = Context::Handle(parent()); 13276 const Context& parent_ctx = Context::Handle(parent());
13277 if (parent_ctx.IsNull()) { 13277 if (parent_ctx.IsNull()) {
13278 return zone->PrintToString("Context@%p num_variables:% " Pd "", 13278 return zone->PrintToString("Context@%p num_variables:% " Pd "",
13279 this->raw(), num_variables()); 13279 this->raw(), num_variables());
13280 } else { 13280 } else {
13281 const char* parent_str = parent_ctx.ToCString(); 13281 const char* parent_str = parent_ctx.ToCString();
13282 return zone->PrintToString( 13282 return zone->PrintToString(
13283 "Context@%p num_variables:% " Pd " parent:{ %s }", 13283 "Context@%p num_variables:% " Pd " parent:{ %s }",
13284 this->raw(), num_variables(), parent_str); 13284 this->raw(), num_variables(), parent_str);
13285 } 13285 }
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
13466 const char* prev_cstr = "ContextScope:"; 13466 const char* prev_cstr = "ContextScope:";
13467 String& name = String::Handle(); 13467 String& name = String::Handle();
13468 for (int i = 0; i < num_variables(); i++) { 13468 for (int i = 0; i < num_variables(); i++) {
13469 name = NameAt(i); 13469 name = NameAt(i);
13470 const char* cname = name.ToCString(); 13470 const char* cname = name.ToCString();
13471 intptr_t pos = TokenIndexAt(i); 13471 intptr_t pos = TokenIndexAt(i);
13472 intptr_t idx = ContextIndexAt(i); 13472 intptr_t idx = ContextIndexAt(i);
13473 intptr_t lvl = ContextLevelAt(i); 13473 intptr_t lvl = ContextLevelAt(i);
13474 intptr_t len = 13474 intptr_t len =
13475 OS::SNPrint(NULL, 0, format, prev_cstr, cname, pos, lvl, idx) + 1; 13475 OS::SNPrint(NULL, 0, format, prev_cstr, cname, pos, lvl, idx) + 1;
13476 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 13476 char* chars = Thread::Current()->zone()->Alloc<char>(len);
13477 OS::SNPrint(chars, len, format, prev_cstr, cname, pos, lvl, idx); 13477 OS::SNPrint(chars, len, format, prev_cstr, cname, pos, lvl, idx);
13478 prev_cstr = chars; 13478 prev_cstr = chars;
13479 } 13479 }
13480 return prev_cstr; 13480 return prev_cstr;
13481 } 13481 }
13482 13482
13483 13483
13484 void ContextScope::PrintJSONImpl(JSONStream* stream, bool ref) const { 13484 void ContextScope::PrintJSONImpl(JSONStream* stream, bool ref) const {
13485 Object::PrintJSONImpl(stream, ref); 13485 Object::PrintJSONImpl(stream, ref);
13486 } 13486 }
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
13923 StorePointer(&raw_ptr()->exception_, exception.raw()); 13923 StorePointer(&raw_ptr()->exception_, exception.raw());
13924 } 13924 }
13925 13925
13926 13926
13927 void UnhandledException::set_stacktrace(const Instance& stacktrace) const { 13927 void UnhandledException::set_stacktrace(const Instance& stacktrace) const {
13928 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw()); 13928 StorePointer(&raw_ptr()->stacktrace_, stacktrace.raw());
13929 } 13929 }
13930 13930
13931 13931
13932 const char* UnhandledException::ToErrorCString() const { 13932 const char* UnhandledException::ToErrorCString() const {
13933 Isolate* isolate = Isolate::Current(); 13933 Thread* thread = Thread::Current();
13934 Isolate* isolate = thread->isolate();
13934 HANDLESCOPE(isolate); 13935 HANDLESCOPE(isolate);
13935 Object& strtmp = Object::Handle(); 13936 Object& strtmp = Object::Handle();
13936 const char* exc_str; 13937 const char* exc_str;
13937 if (exception() == isolate->object_store()->out_of_memory()) { 13938 if (exception() == isolate->object_store()->out_of_memory()) {
13938 exc_str = "Out of Memory"; 13939 exc_str = "Out of Memory";
13939 } else if (exception() == isolate->object_store()->stack_overflow()) { 13940 } else if (exception() == isolate->object_store()->stack_overflow()) {
13940 exc_str = "Stack Overflow"; 13941 exc_str = "Stack Overflow";
13941 } else { 13942 } else {
13942 const Instance& exc = Instance::Handle(exception()); 13943 const Instance& exc = Instance::Handle(exception());
13943 strtmp = DartLibraryCalls::ToString(exc); 13944 strtmp = DartLibraryCalls::ToString(exc);
13944 if (!strtmp.IsError()) { 13945 if (!strtmp.IsError()) {
13945 exc_str = strtmp.ToCString(); 13946 exc_str = strtmp.ToCString();
13946 } else { 13947 } else {
13947 exc_str = "<Received error while converting exception to string>"; 13948 exc_str = "<Received error while converting exception to string>";
13948 } 13949 }
13949 } 13950 }
13950 const Instance& stack = Instance::Handle(stacktrace()); 13951 const Instance& stack = Instance::Handle(stacktrace());
13951 strtmp = DartLibraryCalls::ToString(stack); 13952 strtmp = DartLibraryCalls::ToString(stack);
13952 const char* stack_str = 13953 const char* stack_str =
13953 "<Received error while converting stack trace to string>"; 13954 "<Received error while converting stack trace to string>";
13954 if (!strtmp.IsError()) { 13955 if (!strtmp.IsError()) {
13955 stack_str = strtmp.ToCString(); 13956 stack_str = strtmp.ToCString();
13956 } 13957 }
13957 const char* format = "Unhandled exception:\n%s\n%s"; 13958 const char* format = "Unhandled exception:\n%s\n%s";
13958 intptr_t len = OS::SNPrint(NULL, 0, format, exc_str, stack_str); 13959 intptr_t len = OS::SNPrint(NULL, 0, format, exc_str, stack_str);
13959 char* chars = isolate->current_zone()->Alloc<char>(len); 13960 char* chars = thread->zone()->Alloc<char>(len);
13960 OS::SNPrint(chars, len, format, exc_str, stack_str); 13961 OS::SNPrint(chars, len, format, exc_str, stack_str);
13961 return chars; 13962 return chars;
13962 } 13963 }
13963 13964
13964 13965
13965 const char* UnhandledException::ToCString() const { 13966 const char* UnhandledException::ToCString() const {
13966 return "UnhandledException"; 13967 return "UnhandledException";
13967 } 13968 }
13968 13969
13969 13970
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
14115 if (obj.IsInstance() && !obj.IsSmi() && !obj.IsCanonical()) { 14116 if (obj.IsInstance() && !obj.IsSmi() && !obj.IsCanonical()) {
14116 if (obj.IsNumber() || obj.IsString()) { 14117 if (obj.IsNumber() || obj.IsString()) {
14117 obj = Instance::Cast(obj).CheckAndCanonicalize(NULL); 14118 obj = Instance::Cast(obj).CheckAndCanonicalize(NULL);
14118 ASSERT(!obj.IsNull()); 14119 ASSERT(!obj.IsNull());
14119 this->SetFieldAtOffset(field_offset, obj); 14120 this->SetFieldAtOffset(field_offset, obj);
14120 } else { 14121 } else {
14121 ASSERT(error_str != NULL); 14122 ASSERT(error_str != NULL);
14122 const char* kFormat = "field: %s\n"; 14123 const char* kFormat = "field: %s\n";
14123 const intptr_t len = 14124 const intptr_t len =
14124 OS::SNPrint(NULL, 0, kFormat, obj.ToCString()) + 1; 14125 OS::SNPrint(NULL, 0, kFormat, obj.ToCString()) + 1;
14125 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 14126 char* chars = Thread::Current()->zone()->Alloc<char>(len);
14126 OS::SNPrint(chars, len, kFormat, obj.ToCString()); 14127 OS::SNPrint(chars, len, kFormat, obj.ToCString());
14127 *error_str = chars; 14128 *error_str = chars;
14128 return false; 14129 return false;
14129 } 14130 }
14130 } 14131 }
14131 } 14132 }
14132 } else { 14133 } else {
14133 #if defined(DEBUG) 14134 #if defined(DEBUG)
14134 // Make sure that we are not missing any fields. 14135 // Make sure that we are not missing any fields.
14135 CheckForPointers has_pointers(Isolate::Current()); 14136 CheckForPointers has_pointers(Isolate::Current());
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
14449 TypeArguments& type_arguments = TypeArguments::Handle(); 14450 TypeArguments& type_arguments = TypeArguments::Handle();
14450 const intptr_t num_type_arguments = cls.NumTypeArguments(); 14451 const intptr_t num_type_arguments = cls.NumTypeArguments();
14451 if (num_type_arguments > 0) { 14452 if (num_type_arguments > 0) {
14452 type_arguments = GetTypeArguments(); 14453 type_arguments = GetTypeArguments();
14453 } 14454 }
14454 const Type& type = 14455 const Type& type =
14455 Type::Handle(Type::New(cls, type_arguments, Scanner::kNoSourcePos)); 14456 Type::Handle(Type::New(cls, type_arguments, Scanner::kNoSourcePos));
14456 const String& type_name = String::Handle(type.UserVisibleName()); 14457 const String& type_name = String::Handle(type.UserVisibleName());
14457 // Calculate the size of the string. 14458 // Calculate the size of the string.
14458 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1; 14459 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1;
14459 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 14460 char* chars = Thread::Current()->zone()->Alloc<char>(len);
14460 OS::SNPrint(chars, len, kFormat, type_name.ToCString()); 14461 OS::SNPrint(chars, len, kFormat, type_name.ToCString());
14461 return chars; 14462 return chars;
14462 } 14463 }
14463 } 14464 }
14464 14465
14465 14466
14466 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, 14467 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj,
14467 bool ref) const { 14468 bool ref) const {
14468 AddCommonObjectProperties(jsobj, "Instance", ref); 14469 AddCommonObjectProperties(jsobj, "Instance", ref);
14469 if (ref) { 14470 if (ref) {
(...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after
15599 if (HasResolvedTypeClass()) { 15600 if (HasResolvedTypeClass()) {
15600 class_name = String::Handle( 15601 class_name = String::Handle(
15601 Class::Handle(type_class()).Name()).ToCString(); 15602 Class::Handle(type_class()).Name()).ToCString();
15602 } else { 15603 } else {
15603 class_name = UnresolvedClass::Handle(unresolved_class()).ToCString(); 15604 class_name = UnresolvedClass::Handle(unresolved_class()).ToCString();
15604 } 15605 }
15605 if (type_arguments.IsNull()) { 15606 if (type_arguments.IsNull()) {
15606 const char* format = "%sType: class '%s'"; 15607 const char* format = "%sType: class '%s'";
15607 const intptr_t len = 15608 const intptr_t len =
15608 OS::SNPrint(NULL, 0, format, unresolved, class_name) + 1; 15609 OS::SNPrint(NULL, 0, format, unresolved, class_name) + 1;
15609 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15610 char* chars = Thread::Current()->zone()->Alloc<char>(len);
15610 OS::SNPrint(chars, len, format, unresolved, class_name); 15611 OS::SNPrint(chars, len, format, unresolved, class_name);
15611 return chars; 15612 return chars;
15612 } else if (IsResolved() && IsFinalized() && IsRecursive()) { 15613 } else if (IsResolved() && IsFinalized() && IsRecursive()) {
15613 const char* format = "Type: (@%" Px " H%" Px ") class '%s', args:[%s]"; 15614 const char* format = "Type: (@%" Px " H%" Px ") class '%s', args:[%s]";
15614 const intptr_t hash = Hash(); 15615 const intptr_t hash = Hash();
15615 const char* args_cstr = TypeArguments::Handle(arguments()).ToCString(); 15616 const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
15616 const intptr_t len = 15617 const intptr_t len =
15617 OS::SNPrint(NULL, 0, format, raw(), hash, class_name, args_cstr) + 1; 15618 OS::SNPrint(NULL, 0, format, raw(), hash, class_name, args_cstr) + 1;
15618 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15619 char* chars = Thread::Current()->zone()->Alloc<char>(len);
15619 OS::SNPrint(chars, len, format, raw(), hash, class_name, args_cstr); 15620 OS::SNPrint(chars, len, format, raw(), hash, class_name, args_cstr);
15620 return chars; 15621 return chars;
15621 } else { 15622 } else {
15622 const char* format = "%sType: class '%s', args:[%s]"; 15623 const char* format = "%sType: class '%s', args:[%s]";
15623 const char* args_cstr = TypeArguments::Handle(arguments()).ToCString(); 15624 const char* args_cstr = TypeArguments::Handle(arguments()).ToCString();
15624 const intptr_t len = 15625 const intptr_t len =
15625 OS::SNPrint(NULL, 0, format, unresolved, class_name, args_cstr) + 1; 15626 OS::SNPrint(NULL, 0, format, unresolved, class_name, args_cstr) + 1;
15626 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15627 char* chars = Thread::Current()->zone()->Alloc<char>(len);
15627 OS::SNPrint(chars, len, format, unresolved, class_name, args_cstr); 15628 OS::SNPrint(chars, len, format, unresolved, class_name, args_cstr);
15628 return chars; 15629 return chars;
15629 } 15630 }
15630 } 15631 }
15631 15632
15632 15633
15633 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const { 15634 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const {
15634 JSONObject jsobj(stream); 15635 JSONObject jsobj(stream);
15635 PrintSharedInstanceJSON(&jsobj, ref); 15636 PrintSharedInstanceJSON(&jsobj, ref);
15636 jsobj.AddProperty("kind", "Type"); 15637 jsobj.AddProperty("kind", "Type");
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
15801 15802
15802 const char* TypeRef::ToCString() const { 15803 const char* TypeRef::ToCString() const {
15803 const char* type_cstr = String::Handle(Class::Handle( 15804 const char* type_cstr = String::Handle(Class::Handle(
15804 type_class()).Name()).ToCString(); 15805 type_class()).Name()).ToCString();
15805 AbstractType& ref_type = AbstractType::Handle(type()); 15806 AbstractType& ref_type = AbstractType::Handle(type());
15806 if (ref_type.IsFinalized()) { 15807 if (ref_type.IsFinalized()) {
15807 const char* format = "TypeRef: %s<...> (@%" Px " H%" Px ")"; 15808 const char* format = "TypeRef: %s<...> (@%" Px " H%" Px ")";
15808 const intptr_t hash = ref_type.Hash(); 15809 const intptr_t hash = ref_type.Hash();
15809 const intptr_t len = 15810 const intptr_t len =
15810 OS::SNPrint(NULL, 0, format, type_cstr, ref_type.raw(), hash) + 1; 15811 OS::SNPrint(NULL, 0, format, type_cstr, ref_type.raw(), hash) + 1;
15811 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15812 char* chars = Thread::Current()->zone()->Alloc<char>(len);
15812 OS::SNPrint(chars, len, format, type_cstr, ref_type.raw(), hash); 15813 OS::SNPrint(chars, len, format, type_cstr, ref_type.raw(), hash);
15813 return chars; 15814 return chars;
15814 } else { 15815 } else {
15815 const char* format = "TypeRef: %s<...>"; 15816 const char* format = "TypeRef: %s<...>";
15816 const intptr_t len = OS::SNPrint(NULL, 0, format, type_cstr) + 1; 15817 const intptr_t len = OS::SNPrint(NULL, 0, format, type_cstr) + 1;
15817 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15818 char* chars = Thread::Current()->zone()->Alloc<char>(len);
15818 OS::SNPrint(chars, len, format, type_cstr); 15819 OS::SNPrint(chars, len, format, type_cstr);
15819 return chars; 15820 return chars;
15820 } 15821 }
15821 } 15822 }
15822 15823
15823 15824
15824 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const { 15825 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const {
15825 JSONObject jsobj(stream); 15826 JSONObject jsobj(stream);
15826 PrintSharedInstanceJSON(&jsobj, ref); 15827 PrintSharedInstanceJSON(&jsobj, ref);
15827 jsobj.AddProperty("kind", "TypeRef"); 15828 jsobj.AddProperty("kind", "TypeRef");
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
16043 const char* format = 16044 const char* format =
16044 "TypeParameter: name %s; index: %d; class: %s; bound: %s"; 16045 "TypeParameter: name %s; index: %d; class: %s; bound: %s";
16045 const char* name_cstr = String::Handle(Name()).ToCString(); 16046 const char* name_cstr = String::Handle(Name()).ToCString();
16046 const Class& cls = Class::Handle(parameterized_class()); 16047 const Class& cls = Class::Handle(parameterized_class());
16047 const char* cls_cstr = 16048 const char* cls_cstr =
16048 cls.IsNull() ? " null" : String::Handle(cls.Name()).ToCString(); 16049 cls.IsNull() ? " null" : String::Handle(cls.Name()).ToCString();
16049 const AbstractType& upper_bound = AbstractType::Handle(bound()); 16050 const AbstractType& upper_bound = AbstractType::Handle(bound());
16050 const char* bound_cstr = String::Handle(upper_bound.Name()).ToCString(); 16051 const char* bound_cstr = String::Handle(upper_bound.Name()).ToCString();
16051 intptr_t len = OS::SNPrint( 16052 intptr_t len = OS::SNPrint(
16052 NULL, 0, format, name_cstr, index(), cls_cstr, bound_cstr) + 1; 16053 NULL, 0, format, name_cstr, index(), cls_cstr, bound_cstr) + 1;
16053 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 16054 char* chars = Thread::Current()->zone()->Alloc<char>(len);
16054 OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr); 16055 OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr);
16055 return chars; 16056 return chars;
16056 } 16057 }
16057 16058
16058 16059
16059 void TypeParameter::PrintJSONImpl(JSONStream* stream, bool ref) const { 16060 void TypeParameter::PrintJSONImpl(JSONStream* stream, bool ref) const {
16060 JSONObject jsobj(stream); 16061 JSONObject jsobj(stream);
16061 PrintSharedInstanceJSON(&jsobj, ref); 16062 PrintSharedInstanceJSON(&jsobj, ref);
16062 jsobj.AddProperty("kind", "TypeParameter"); 16063 jsobj.AddProperty("kind", "TypeParameter");
16063 jsobj.AddServiceId(*this); 16064 jsobj.AddServiceId(*this);
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
16258 const char* type_cstr = String::Handle(AbstractType::Handle( 16259 const char* type_cstr = String::Handle(AbstractType::Handle(
16259 type()).Name()).ToCString(); 16260 type()).Name()).ToCString();
16260 const char* bound_cstr = String::Handle(AbstractType::Handle( 16261 const char* bound_cstr = String::Handle(AbstractType::Handle(
16261 bound()).Name()).ToCString(); 16262 bound()).Name()).ToCString();
16262 const TypeParameter& type_param = TypeParameter::Handle(type_parameter()); 16263 const TypeParameter& type_param = TypeParameter::Handle(type_parameter());
16263 const char* type_param_cstr = String::Handle(type_param.name()).ToCString(); 16264 const char* type_param_cstr = String::Handle(type_param.name()).ToCString();
16264 const Class& cls = Class::Handle(type_param.parameterized_class()); 16265 const Class& cls = Class::Handle(type_param.parameterized_class());
16265 const char* cls_cstr = String::Handle(cls.Name()).ToCString(); 16266 const char* cls_cstr = String::Handle(cls.Name()).ToCString();
16266 intptr_t len = OS::SNPrint( 16267 intptr_t len = OS::SNPrint(
16267 NULL, 0, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr) + 1; 16268 NULL, 0, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr) + 1;
16268 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 16269 char* chars = Thread::Current()->zone()->Alloc<char>(len);
16269 OS::SNPrint( 16270 OS::SNPrint(
16270 chars, len, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr); 16271 chars, len, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr);
16271 return chars; 16272 return chars;
16272 } 16273 }
16273 16274
16274 16275
16275 void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const { 16276 void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const {
16276 JSONObject jsobj(stream); 16277 JSONObject jsobj(stream);
16277 PrintSharedInstanceJSON(&jsobj, ref); 16278 PrintSharedInstanceJSON(&jsobj, ref);
16278 jsobj.AddProperty("kind", "BoundedType"); 16279 jsobj.AddProperty("kind", "BoundedType");
(...skipping 25 matching lines...) Expand all
16304 16305
16305 16306
16306 const char* MixinAppType::ToCString() const { 16307 const char* MixinAppType::ToCString() const {
16307 const char* format = "MixinAppType: super type: %s; first mixin type: %s"; 16308 const char* format = "MixinAppType: super type: %s; first mixin type: %s";
16308 const char* super_type_cstr = String::Handle(AbstractType::Handle( 16309 const char* super_type_cstr = String::Handle(AbstractType::Handle(
16309 super_type()).Name()).ToCString(); 16310 super_type()).Name()).ToCString();
16310 const char* first_mixin_type_cstr = String::Handle(AbstractType::Handle( 16311 const char* first_mixin_type_cstr = String::Handle(AbstractType::Handle(
16311 MixinTypeAt(0)).Name()).ToCString(); 16312 MixinTypeAt(0)).Name()).ToCString();
16312 intptr_t len = OS::SNPrint( 16313 intptr_t len = OS::SNPrint(
16313 NULL, 0, format, super_type_cstr, first_mixin_type_cstr) + 1; 16314 NULL, 0, format, super_type_cstr, first_mixin_type_cstr) + 1;
16314 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 16315 char* chars = Thread::Current()->zone()->Alloc<char>(len);
16315 OS::SNPrint(chars, len, format, super_type_cstr, first_mixin_type_cstr); 16316 OS::SNPrint(chars, len, format, super_type_cstr, first_mixin_type_cstr);
16316 return chars; 16317 return chars;
16317 } 16318 }
16318 16319
16319 16320
16320 void MixinAppType::PrintJSONImpl(JSONStream* stream, bool ref) const { 16321 void MixinAppType::PrintJSONImpl(JSONStream* stream, bool ref) const {
16321 UNREACHABLE(); 16322 UNREACHABLE();
16322 } 16323 }
16323 16324
16324 16325
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
16791 } 16792 }
16792 UNREACHABLE(); 16793 UNREACHABLE();
16793 return 0; 16794 return 0;
16794 } 16795 }
16795 16796
16796 16797
16797 const char* Smi::ToCString() const { 16798 const char* Smi::ToCString() const {
16798 const char* kFormat = "%ld"; 16799 const char* kFormat = "%ld";
16799 // Calculate the size of the string. 16800 // Calculate the size of the string.
16800 intptr_t len = OS::SNPrint(NULL, 0, kFormat, Value()) + 1; 16801 intptr_t len = OS::SNPrint(NULL, 0, kFormat, Value()) + 1;
16801 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 16802 char* chars = Thread::Current()->zone()->Alloc<char>(len);
16802 OS::SNPrint(chars, len, kFormat, Value()); 16803 OS::SNPrint(chars, len, kFormat, Value());
16803 return chars; 16804 return chars;
16804 } 16805 }
16805 16806
16806 16807
16807 void Smi::PrintJSONImpl(JSONStream* stream, bool ref) const { 16808 void Smi::PrintJSONImpl(JSONStream* stream, bool ref) const {
16808 JSONObject jsobj(stream); 16809 JSONObject jsobj(stream);
16809 PrintSharedInstanceJSON(&jsobj, ref); 16810 PrintSharedInstanceJSON(&jsobj, ref);
16810 jsobj.AddProperty("kind", "Int"); 16811 jsobj.AddProperty("kind", "Int");
16811 jsobj.AddFixedServiceId("objects/int-%" Pd "", Value()); 16812 jsobj.AddFixedServiceId("objects/int-%" Pd "", Value());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
16922 return this->IsNegative() ? 1 : -1; 16923 return this->IsNegative() ? 1 : -1;
16923 } 16924 }
16924 return this->IsNegative() ? -1 : 1; 16925 return this->IsNegative() ? -1 : 1;
16925 } 16926 }
16926 16927
16927 16928
16928 const char* Mint::ToCString() const { 16929 const char* Mint::ToCString() const {
16929 const char* kFormat = "%lld"; 16930 const char* kFormat = "%lld";
16930 // Calculate the size of the string. 16931 // Calculate the size of the string.
16931 intptr_t len = OS::SNPrint(NULL, 0, kFormat, value()) + 1; 16932 intptr_t len = OS::SNPrint(NULL, 0, kFormat, value()) + 1;
16932 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 16933 char* chars = Thread::Current()->zone()->Alloc<char>(len);
16933 OS::SNPrint(chars, len, kFormat, value()); 16934 OS::SNPrint(chars, len, kFormat, value());
16934 return chars; 16935 return chars;
16935 } 16936 }
16936 16937
16937 16938
16938 void Mint::PrintJSONImpl(JSONStream* stream, bool ref) const { 16939 void Mint::PrintJSONImpl(JSONStream* stream, bool ref) const {
16939 Integer::PrintJSONImpl(stream, ref); 16940 Integer::PrintJSONImpl(stream, ref);
16940 } 16941 }
16941 16942
16942 16943
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
17053 17054
17054 17055
17055 const char* Double::ToCString() const { 17056 const char* Double::ToCString() const {
17056 if (isnan(value())) { 17057 if (isnan(value())) {
17057 return "NaN"; 17058 return "NaN";
17058 } 17059 }
17059 if (isinf(value())) { 17060 if (isinf(value())) {
17060 return value() < 0 ? "-Infinity" : "Infinity"; 17061 return value() < 0 ? "-Infinity" : "Infinity";
17061 } 17062 }
17062 const int kBufferSize = 128; 17063 const int kBufferSize = 128;
17063 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(kBufferSize); 17064 char* buffer = Thread::Current()->zone()->Alloc<char>(kBufferSize);
17064 buffer[kBufferSize - 1] = '\0'; 17065 buffer[kBufferSize - 1] = '\0';
17065 DoubleToCString(value(), buffer, kBufferSize); 17066 DoubleToCString(value(), buffer, kBufferSize);
17066 return buffer; 17067 return buffer;
17067 } 17068 }
17068 17069
17069 17070
17070 void Double::PrintJSONImpl(JSONStream* stream, bool ref) const { 17071 void Double::PrintJSONImpl(JSONStream* stream, bool ref) const {
17071 JSONObject jsobj(stream); 17072 JSONObject jsobj(stream);
17072 PrintSharedInstanceJSON(&jsobj, ref); 17073 PrintSharedInstanceJSON(&jsobj, ref);
17073 jsobj.AddProperty("kind", "Double"); 17074 jsobj.AddProperty("kind", "Double");
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
17802 chars[--pos] = '0'; 17803 chars[--pos] = '0';
17803 if (Neg()) { 17804 if (Neg()) {
17804 chars[--pos] = '-'; 17805 chars[--pos] = '-';
17805 } 17806 }
17806 ASSERT(pos == 0); 17807 ASSERT(pos == 0);
17807 return chars; 17808 return chars;
17808 } 17809 }
17809 17810
17810 17811
17811 static uword BigintAllocator(intptr_t size) { 17812 static uword BigintAllocator(intptr_t size) {
17812 Zone* zone = Isolate::Current()->current_zone(); 17813 Zone* zone = Thread::Current()->zone();
17813 return zone->AllocUnsafe(size); 17814 return zone->AllocUnsafe(size);
17814 } 17815 }
17815 17816
17816 17817
17817 const char* Bigint::ToCString() const { 17818 const char* Bigint::ToCString() const {
17818 return ToDecCString(&BigintAllocator); 17819 return ToDecCString(&BigintAllocator);
17819 } 17820 }
17820 17821
17821 17822
17822 void Bigint::PrintJSONImpl(JSONStream* stream, bool ref) const { 17823 void Bigint::PrintJSONImpl(JSONStream* stream, bool ref) const {
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
18388 } 18389 }
18389 18390
18390 18391
18391 static int32_t MergeHexCharacters(int32_t c1, int32_t c2) { 18392 static int32_t MergeHexCharacters(int32_t c1, int32_t c2) {
18392 return GetHexValue(c1) << 4 | GetHexValue(c2); 18393 return GetHexValue(c1) << 4 | GetHexValue(c2);
18393 } 18394 }
18394 18395
18395 18396
18396 RawString* String::EncodeIRI(const String& str) { 18397 RawString* String::EncodeIRI(const String& str) {
18397 const intptr_t len = Utf8::Length(str); 18398 const intptr_t len = Utf8::Length(str);
18398 Zone* zone = Isolate::Current()->current_zone(); 18399 Zone* zone = Thread::Current()->zone();
18399 uint8_t* utf8 = zone->Alloc<uint8_t>(len); 18400 uint8_t* utf8 = zone->Alloc<uint8_t>(len);
18400 str.ToUTF8(utf8, len); 18401 str.ToUTF8(utf8, len);
18401 intptr_t num_escapes = 0; 18402 intptr_t num_escapes = 0;
18402 for (int i = 0; i < len; ++i) { 18403 for (int i = 0; i < len; ++i) {
18403 uint8_t byte = utf8[i]; 18404 uint8_t byte = utf8[i];
18404 if (!IsURISafeCharacter(byte)) { 18405 if (!IsURISafeCharacter(byte)) {
18405 num_escapes += 2; 18406 num_escapes += 2;
18406 } 18407 }
18407 } 18408 }
18408 const String& dststr = String::Handle( 18409 const String& dststr = String::Handle(
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
18452 code_point = cpi.Current(); 18453 code_point = cpi.Current();
18453 if (!IsHexCharacter(code_point)) { 18454 if (!IsHexCharacter(code_point)) {
18454 return String::null(); 18455 return String::null();
18455 } 18456 }
18456 num_escapes += 2; 18457 num_escapes += 2;
18457 } 18458 }
18458 } 18459 }
18459 } 18460 }
18460 intptr_t utf8_len = len - num_escapes; 18461 intptr_t utf8_len = len - num_escapes;
18461 ASSERT(utf8_len >= 0); 18462 ASSERT(utf8_len >= 0);
18462 Zone* zone = Isolate::Current()->current_zone(); 18463 Zone* zone = Thread::Current()->zone();
18463 uint8_t* utf8 = zone->Alloc<uint8_t>(utf8_len); 18464 uint8_t* utf8 = zone->Alloc<uint8_t>(utf8_len);
18464 { 18465 {
18465 intptr_t index = 0; 18466 intptr_t index = 0;
18466 CodePointIterator cpi(str); 18467 CodePointIterator cpi(str);
18467 while (cpi.Next()) { 18468 while (cpi.Next()) {
18468 ASSERT(index < utf8_len); 18469 ASSERT(index < utf8_len);
18469 int32_t code_point = cpi.Current(); 18470 int32_t code_point = cpi.Current();
18470 if (IsPercent(code_point)) { 18471 if (IsPercent(code_point)) {
18471 cpi.Next(); 18472 cpi.Next();
18472 int32_t ch1 = cpi.Current(); 18473 int32_t ch1 = cpi.Current();
(...skipping 22 matching lines...) Expand all
18495 return result; 18496 return result;
18496 } 18497 }
18497 18498
18498 18499
18499 RawString* String::NewFormattedV(const char* format, va_list args) { 18500 RawString* String::NewFormattedV(const char* format, va_list args) {
18500 va_list args_copy; 18501 va_list args_copy;
18501 va_copy(args_copy, args); 18502 va_copy(args_copy, args);
18502 intptr_t len = OS::VSNPrint(NULL, 0, format, args_copy); 18503 intptr_t len = OS::VSNPrint(NULL, 0, format, args_copy);
18503 va_end(args_copy); 18504 va_end(args_copy);
18504 18505
18505 Zone* zone = Isolate::Current()->current_zone(); 18506 Zone* zone = Thread::Current()->zone();
18506 char* buffer = zone->Alloc<char>(len + 1); 18507 char* buffer = zone->Alloc<char>(len + 1);
18507 OS::VSNPrint(buffer, (len + 1), format, args); 18508 OS::VSNPrint(buffer, (len + 1), format, args);
18508 18509
18509 return String::New(buffer); 18510 return String::New(buffer);
18510 } 18511 }
18511 18512
18512 18513
18513 RawString* String::Concat(const String& str1, 18514 RawString* String::Concat(const String& str1,
18514 const String& str2, 18515 const String& str2,
18515 Heap::Space space) { 18516 Heap::Space space) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
18605 } 18606 }
18606 18607
18607 18608
18608 const char* String::ToCString() const { 18609 const char* String::ToCString() const {
18609 if (IsOneByteString()) { 18610 if (IsOneByteString()) {
18610 // Quick conversion if OneByteString contains only ASCII characters. 18611 // Quick conversion if OneByteString contains only ASCII characters.
18611 intptr_t len = Length(); 18612 intptr_t len = Length();
18612 if (len == 0) { 18613 if (len == 0) {
18613 return ""; 18614 return "";
18614 } 18615 }
18615 Zone* zone = Isolate::Current()->current_zone(); 18616 Zone* zone = Thread::Current()->zone();
18616 uint8_t* result = zone->Alloc<uint8_t>(len + 1); 18617 uint8_t* result = zone->Alloc<uint8_t>(len + 1);
18617 NoSafepointScope no_safepoint; 18618 NoSafepointScope no_safepoint;
18618 const uint8_t* original_str = OneByteString::CharAddr(*this, 0); 18619 const uint8_t* original_str = OneByteString::CharAddr(*this, 0);
18619 for (intptr_t i = 0; i < len; i++) { 18620 for (intptr_t i = 0; i < len; i++) {
18620 if (original_str[i] <= Utf8::kMaxOneByteChar) { 18621 if (original_str[i] <= Utf8::kMaxOneByteChar) {
18621 result[i] = original_str[i]; 18622 result[i] = original_str[i];
18622 } else { 18623 } else {
18623 len = -1; 18624 len = -1;
18624 break; 18625 break;
18625 } 18626 }
18626 } 18627 }
18627 if (len > 0) { 18628 if (len > 0) {
18628 result[len] = 0; 18629 result[len] = 0;
18629 return reinterpret_cast<const char*>(result); 18630 return reinterpret_cast<const char*>(result);
18630 } 18631 }
18631 } 18632 }
18632 const intptr_t len = Utf8::Length(*this); 18633 const intptr_t len = Utf8::Length(*this);
18633 Zone* zone = Isolate::Current()->current_zone(); 18634 Zone* zone = Thread::Current()->zone();
18634 uint8_t* result = zone->Alloc<uint8_t>(len + 1); 18635 uint8_t* result = zone->Alloc<uint8_t>(len + 1);
18635 ToUTF8(result, len); 18636 ToUTF8(result, len);
18636 result[len] = 0; 18637 result[len] = 0;
18637 return reinterpret_cast<const char*>(result); 18638 return reinterpret_cast<const char*>(result);
18638 } 18639 }
18639 18640
18640 18641
18641 void String::PrintJSONImpl(JSONStream* stream, bool ref) const { 18642 void String::PrintJSONImpl(JSONStream* stream, bool ref) const {
18642 JSONObject jsobj(stream); 18643 JSONObject jsobj(stream);
18643 if (raw() == Symbols::OptimizedOut().raw()) { 18644 if (raw() == Symbols::OptimizedOut().raw()) {
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
18827 ASSERT(start <= end); 18828 ASSERT(start <= end);
18828 ASSERT(end <= str.Length()); 18829 ASSERT(end <= str.Length());
18829 intptr_t length = end - start; 18830 intptr_t length = end - start;
18830 NoSafepointScope no_safepoint; 18831 NoSafepointScope no_safepoint;
18831 const uint8_t* startChar; 18832 const uint8_t* startChar;
18832 if (str.IsOneByteString()) { 18833 if (str.IsOneByteString()) {
18833 startChar = OneByteString::CharAddr(str, start); 18834 startChar = OneByteString::CharAddr(str, start);
18834 } else if (str.IsExternalOneByteString()) { 18835 } else if (str.IsExternalOneByteString()) {
18835 startChar = ExternalOneByteString::CharAddr(str, start); 18836 startChar = ExternalOneByteString::CharAddr(str, start);
18836 } else { 18837 } else {
18837 uint8_t* chars = Isolate::Current()->current_zone()->Alloc<uint8_t>(length); 18838 uint8_t* chars = Thread::Current()->zone()->Alloc<uint8_t>(length);
18838 const Scanner::CharAtFunc char_at = str.CharAtFunc(); 18839 const Scanner::CharAtFunc char_at = str.CharAtFunc();
18839 for (intptr_t i = 0; i < length; i++) { 18840 for (intptr_t i = 0; i < length; i++) {
18840 int32_t ch = char_at(str, start + i); 18841 int32_t ch = char_at(str, start + i);
18841 if (ch < 128) { 18842 if (ch < 128) {
18842 chars[i] = ch; 18843 chars[i] = ch;
18843 } else { 18844 } else {
18844 return false; // Not ASCII, so definitely not valid double numeral. 18845 return false; // Not ASCII, so definitely not valid double numeral.
18845 } 18846 }
18846 } 18847 }
18847 startChar = chars; 18848 startChar = chars;
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after
19652 old_tags); 19653 old_tags);
19653 tags = CompareAndSwapTags(old_tags, new_tags); 19654 tags = CompareAndSwapTags(old_tags, new_tags);
19654 } while (tags != old_tags); 19655 } while (tags != old_tags);
19655 } 19656 }
19656 19657
19657 19658
19658 const char* Array::ToCString() const { 19659 const char* Array::ToCString() const {
19659 if (IsNull()) { 19660 if (IsNull()) {
19660 return IsImmutable() ? "_ImmutableList NULL" : "_List NULL"; 19661 return IsImmutable() ? "_ImmutableList NULL" : "_List NULL";
19661 } 19662 }
19662 Zone* zone = Isolate::Current()->current_zone(); 19663 Zone* zone = Thread::Current()->zone();
19663 const char* format = IsImmutable() ? "_ImmutableList len:%" Pd 19664 const char* format = IsImmutable() ? "_ImmutableList len:%" Pd
19664 : "_List len:%" Pd; 19665 : "_List len:%" Pd;
19665 return zone->PrintToString(format, Length()); 19666 return zone->PrintToString(format, Length());
19666 } 19667 }
19667 19668
19668 19669
19669 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const { 19670 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const {
19670 JSONObject jsobj(stream); 19671 JSONObject jsobj(stream);
19671 PrintSharedInstanceJSON(&jsobj, ref); 19672 PrintSharedInstanceJSON(&jsobj, ref);
19672 jsobj.AddProperty("kind", "List"); 19673 jsobj.AddProperty("kind", "List");
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
19769 if (obj.IsInstance() && !obj.IsSmi() && !obj.IsCanonical()) { 19770 if (obj.IsInstance() && !obj.IsSmi() && !obj.IsCanonical()) {
19770 if (obj.IsNumber() || obj.IsString()) { 19771 if (obj.IsNumber() || obj.IsString()) {
19771 obj = Instance::Cast(obj).CheckAndCanonicalize(NULL); 19772 obj = Instance::Cast(obj).CheckAndCanonicalize(NULL);
19772 ASSERT(!obj.IsNull()); 19773 ASSERT(!obj.IsNull());
19773 this->SetAt(i, obj); 19774 this->SetAt(i, obj);
19774 } else { 19775 } else {
19775 ASSERT(error_str != NULL); 19776 ASSERT(error_str != NULL);
19776 const char* kFormat = "element at index %" Pd ": %s\n"; 19777 const char* kFormat = "element at index %" Pd ": %s\n";
19777 const intptr_t len = 19778 const intptr_t len =
19778 OS::SNPrint(NULL, 0, kFormat, i, obj.ToCString()) + 1; 19779 OS::SNPrint(NULL, 0, kFormat, i, obj.ToCString()) + 1;
19779 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 19780 char* chars = Thread::Current()->zone()->Alloc<char>(len);
19780 OS::SNPrint(chars, len, kFormat, i, obj.ToCString()); 19781 OS::SNPrint(chars, len, kFormat, i, obj.ToCString());
19781 *error_str = chars; 19782 *error_str = chars;
19782 return false; 19783 return false;
19783 } 19784 }
19784 } 19785 }
19785 } 19786 }
19786 return true; 19787 return true;
19787 } 19788 }
19788 19789
19789 19790
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
19896 return result.raw(); 19897 return result.raw();
19897 } 19898 }
19898 19899
19899 19900
19900 const char* GrowableObjectArray::ToCString() const { 19901 const char* GrowableObjectArray::ToCString() const {
19901 if (IsNull()) { 19902 if (IsNull()) {
19902 return "_GrowableList NULL"; 19903 return "_GrowableList NULL";
19903 } 19904 }
19904 const char* format = "Instance(length:%" Pd ") of '_GrowableList'"; 19905 const char* format = "Instance(length:%" Pd ") of '_GrowableList'";
19905 intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1; 19906 intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1;
19906 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 19907 char* chars = Thread::Current()->zone()->Alloc<char>(len);
19907 OS::SNPrint(chars, len, format, Length()); 19908 OS::SNPrint(chars, len, format, Length());
19908 return chars; 19909 return chars;
19909 } 19910 }
19910 19911
19911 19912
19912 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream, 19913 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream,
19913 bool ref) const { 19914 bool ref) const {
19914 JSONObject jsobj(stream); 19915 JSONObject jsobj(stream);
19915 PrintSharedInstanceJSON(&jsobj, ref); 19916 PrintSharedInstanceJSON(&jsobj, ref);
19916 jsobj.AddProperty("kind", "List"); 19917 jsobj.AddProperty("kind", "List");
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
20004 LinkedHashMap::InstanceSize(), 20005 LinkedHashMap::InstanceSize(),
20005 space); 20006 space);
20006 NoSafepointScope no_safepoint; 20007 NoSafepointScope no_safepoint;
20007 result ^= raw; 20008 result ^= raw;
20008 } 20009 }
20009 return result.raw(); 20010 return result.raw();
20010 } 20011 }
20011 20012
20012 20013
20013 const char* LinkedHashMap::ToCString() const { 20014 const char* LinkedHashMap::ToCString() const {
20014 Zone* zone = Isolate::Current()->current_zone(); 20015 Zone* zone = Thread::Current()->zone();
20015 return zone->PrintToString("_LinkedHashMap len:%" Pd, Length()); 20016 return zone->PrintToString("_LinkedHashMap len:%" Pd, Length());
20016 } 20017 }
20017 20018
20018 20019
20019 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const { 20020 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const {
20020 JSONObject jsobj(stream); 20021 JSONObject jsobj(stream);
20021 PrintSharedInstanceJSON(&jsobj, ref); 20022 PrintSharedInstanceJSON(&jsobj, ref);
20022 jsobj.AddProperty("kind", "Map"); 20023 jsobj.AddProperty("kind", "Map");
20023 jsobj.AddServiceId(*this); 20024 jsobj.AddServiceId(*this);
20024 jsobj.AddProperty("length", Length()); 20025 jsobj.AddProperty("length", Length());
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
20127 20128
20128 20129
20129 const char* Float32x4::ToCString() const { 20130 const char* Float32x4::ToCString() const {
20130 const char* kFormat = "[%f, %f, %f, %f]"; 20131 const char* kFormat = "[%f, %f, %f, %f]";
20131 float _x = x(); 20132 float _x = x();
20132 float _y = y(); 20133 float _y = y();
20133 float _z = z(); 20134 float _z = z();
20134 float _w = w(); 20135 float _w = w();
20135 // Calculate the size of the string. 20136 // Calculate the size of the string.
20136 intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1; 20137 intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1;
20137 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 20138 char* chars = Thread::Current()->zone()->Alloc<char>(len);
20138 OS::SNPrint(chars, len, kFormat, _x, _y, _z, _w); 20139 OS::SNPrint(chars, len, kFormat, _x, _y, _z, _w);
20139 return chars; 20140 return chars;
20140 } 20141 }
20141 20142
20142 20143
20143 void Float32x4::PrintJSONImpl(JSONStream* stream, bool ref) const { 20144 void Float32x4::PrintJSONImpl(JSONStream* stream, bool ref) const {
20144 Instance::PrintJSONImpl(stream, ref); 20145 Instance::PrintJSONImpl(stream, ref);
20145 } 20146 }
20146 20147
20147 20148
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
20232 20233
20233 20234
20234 const char* Int32x4::ToCString() const { 20235 const char* Int32x4::ToCString() const {
20235 const char* kFormat = "[%08x, %08x, %08x, %08x]"; 20236 const char* kFormat = "[%08x, %08x, %08x, %08x]";
20236 int32_t _x = x(); 20237 int32_t _x = x();
20237 int32_t _y = y(); 20238 int32_t _y = y();
20238 int32_t _z = z(); 20239 int32_t _z = z();
20239 int32_t _w = w(); 20240 int32_t _w = w();
20240 // Calculate the size of the string. 20241 // Calculate the size of the string.
20241 intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1; 20242 intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1;
20242 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 20243 char* chars = Thread::Current()->zone()->Alloc<char>(len);
20243 OS::SNPrint(chars, len, kFormat, _x, _y, _z, _w); 20244 OS::SNPrint(chars, len, kFormat, _x, _y, _z, _w);
20244 return chars; 20245 return chars;
20245 } 20246 }
20246 20247
20247 20248
20248 void Int32x4::PrintJSONImpl(JSONStream* stream, bool ref) const { 20249 void Int32x4::PrintJSONImpl(JSONStream* stream, bool ref) const {
20249 Instance::PrintJSONImpl(stream, ref); 20250 Instance::PrintJSONImpl(stream, ref);
20250 } 20251 }
20251 20252
20252 20253
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
20312 StoreSimd128(&raw_ptr()->value_[0], value); 20313 StoreSimd128(&raw_ptr()->value_[0], value);
20313 } 20314 }
20314 20315
20315 20316
20316 const char* Float64x2::ToCString() const { 20317 const char* Float64x2::ToCString() const {
20317 const char* kFormat = "[%f, %f]"; 20318 const char* kFormat = "[%f, %f]";
20318 double _x = x(); 20319 double _x = x();
20319 double _y = y(); 20320 double _y = y();
20320 // Calculate the size of the string. 20321 // Calculate the size of the string.
20321 intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y) + 1; 20322 intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y) + 1;
20322 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 20323 char* chars = Thread::Current()->zone()->Alloc<char>(len);
20323 OS::SNPrint(chars, len, kFormat, _x, _y); 20324 OS::SNPrint(chars, len, kFormat, _x, _y);
20324 return chars; 20325 return chars;
20325 } 20326 }
20326 20327
20327 20328
20328 void Float64x2::PrintJSONImpl(JSONStream* stream, bool ref) const { 20329 void Float64x2::PrintJSONImpl(JSONStream* stream, bool ref) const {
20329 Instance::PrintJSONImpl(stream, ref); 20330 Instance::PrintJSONImpl(stream, ref);
20330 } 20331 }
20331 20332
20332 20333
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
20582 20583
20583 20584
20584 const char* Closure::ToCString(const Instance& closure) { 20585 const char* Closure::ToCString(const Instance& closure) {
20585 const Function& fun = Function::Handle(Closure::function(closure)); 20586 const Function& fun = Function::Handle(Closure::function(closure));
20586 const bool is_implicit_closure = fun.IsImplicitClosureFunction(); 20587 const bool is_implicit_closure = fun.IsImplicitClosureFunction();
20587 const char* fun_sig = String::Handle(fun.UserVisibleSignature()).ToCString(); 20588 const char* fun_sig = String::Handle(fun.UserVisibleSignature()).ToCString();
20588 const char* from = is_implicit_closure ? " from " : ""; 20589 const char* from = is_implicit_closure ? " from " : "";
20589 const char* fun_desc = is_implicit_closure ? fun.ToCString() : ""; 20590 const char* fun_desc = is_implicit_closure ? fun.ToCString() : "";
20590 const char* format = "Closure: %s%s%s"; 20591 const char* format = "Closure: %s%s%s";
20591 intptr_t len = OS::SNPrint(NULL, 0, format, fun_sig, from, fun_desc) + 1; 20592 intptr_t len = OS::SNPrint(NULL, 0, format, fun_sig, from, fun_desc) + 1;
20592 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 20593 char* chars = Thread::Current()->zone()->Alloc<char>(len);
20593 OS::SNPrint(chars, len, format, fun_sig, from, fun_desc); 20594 OS::SNPrint(chars, len, format, fun_sig, from, fun_desc);
20594 return chars; 20595 return chars;
20595 } 20596 }
20596 20597
20597 20598
20598 RawInstance* Closure::New(const Function& function, 20599 RawInstance* Closure::New(const Function& function,
20599 const Context& context, 20600 const Context& context,
20600 Heap::Space space) { 20601 Heap::Space space) {
20601 const Class& cls = Class::Handle(function.signature_class()); 20602 const Class& cls = Class::Handle(function.signature_class());
20602 ASSERT(cls.instance_size() == Closure::InstanceSize()); 20603 ASSERT(cls.instance_size() == Closure::InstanceSize());
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
20698 const String& trace = String::Handle(FullStacktrace()); 20699 const String& trace = String::Handle(FullStacktrace());
20699 return trace.ToCString(); 20700 return trace.ToCString();
20700 } 20701 }
20701 20702
20702 20703
20703 void Stacktrace::PrintJSONImpl(JSONStream* stream, bool ref) const { 20704 void Stacktrace::PrintJSONImpl(JSONStream* stream, bool ref) const {
20704 Instance::PrintJSONImpl(stream, ref); 20705 Instance::PrintJSONImpl(stream, ref);
20705 } 20706 }
20706 20707
20707 20708
20708 static intptr_t PrintOneStacktrace(Isolate* isolate, 20709 static intptr_t PrintOneStacktrace(Zone* zone,
20709 GrowableArray<char*>* frame_strings, 20710 GrowableArray<char*>* frame_strings,
20710 uword pc, 20711 uword pc,
20711 const Function& function, 20712 const Function& function,
20712 const Code& code, 20713 const Code& code,
20713 intptr_t frame_index) { 20714 intptr_t frame_index) {
20714 const char* kFormatWithCol = "#%-6d %s (%s:%d:%d)\n"; 20715 const char* kFormatWithCol = "#%-6d %s (%s:%d:%d)\n";
20715 const char* kFormatNoCol = "#%-6d %s (%s:%d)\n"; 20716 const char* kFormatNoCol = "#%-6d %s (%s:%d)\n";
20716 const char* kFormatNoLine = "#%-6d %s (%s)\n"; 20717 const char* kFormatNoLine = "#%-6d %s (%s)\n";
20717 const intptr_t token_pos = code.GetTokenIndexOfPC(pc); 20718 const intptr_t token_pos = code.GetTokenIndexOfPC(pc);
20718 const Script& script = Script::Handle(isolate, function.script()); 20719 const Script& script = Script::Handle(zone, function.script());
20719 const String& function_name = 20720 const String& function_name =
20720 String::Handle(isolate, function.QualifiedUserVisibleName()); 20721 String::Handle(zone, function.QualifiedUserVisibleName());
20721 const String& url = String::Handle(isolate, script.url()); 20722 const String& url = String::Handle(zone, script.url());
20722 intptr_t line = -1; 20723 intptr_t line = -1;
20723 intptr_t column = -1; 20724 intptr_t column = -1;
20724 if (token_pos > 0) { 20725 if (token_pos > 0) {
20725 if (script.HasSource()) { 20726 if (script.HasSource()) {
20726 script.GetTokenLocation(token_pos, &line, &column); 20727 script.GetTokenLocation(token_pos, &line, &column);
20727 } else { 20728 } else {
20728 script.GetTokenLocation(token_pos, &line, NULL); 20729 script.GetTokenLocation(token_pos, &line, NULL);
20729 } 20730 }
20730 } 20731 }
20731 intptr_t len = 0; 20732 intptr_t len = 0;
20732 char* chars = NULL; 20733 char* chars = NULL;
20733 if (column >= 0) { 20734 if (column >= 0) {
20734 len = OS::SNPrint(NULL, 0, kFormatWithCol, 20735 len = OS::SNPrint(NULL, 0, kFormatWithCol,
20735 frame_index, function_name.ToCString(), 20736 frame_index, function_name.ToCString(),
20736 url.ToCString(), line, column); 20737 url.ToCString(), line, column);
20737 chars = isolate->current_zone()->Alloc<char>(len + 1); 20738 chars = zone->Alloc<char>(len + 1);
20738 OS::SNPrint(chars, (len + 1), kFormatWithCol, 20739 OS::SNPrint(chars, (len + 1), kFormatWithCol,
20739 frame_index, 20740 frame_index,
20740 function_name.ToCString(), 20741 function_name.ToCString(),
20741 url.ToCString(), line, column); 20742 url.ToCString(), line, column);
20742 } else if (line >= 0) { 20743 } else if (line >= 0) {
20743 len = OS::SNPrint(NULL, 0, kFormatNoCol, 20744 len = OS::SNPrint(NULL, 0, kFormatNoCol,
20744 frame_index, function_name.ToCString(), 20745 frame_index, function_name.ToCString(),
20745 url.ToCString(), line); 20746 url.ToCString(), line);
20746 chars = isolate->current_zone()->Alloc<char>(len + 1); 20747 chars = zone->Alloc<char>(len + 1);
20747 OS::SNPrint(chars, (len + 1), kFormatNoCol, 20748 OS::SNPrint(chars, (len + 1), kFormatNoCol,
20748 frame_index, function_name.ToCString(), 20749 frame_index, function_name.ToCString(),
20749 url.ToCString(), line); 20750 url.ToCString(), line);
20750 } else { 20751 } else {
20751 len = OS::SNPrint(NULL, 0, kFormatNoLine, 20752 len = OS::SNPrint(NULL, 0, kFormatNoLine,
20752 frame_index, function_name.ToCString(), 20753 frame_index, function_name.ToCString(),
20753 url.ToCString()); 20754 url.ToCString());
20754 chars = isolate->current_zone()->Alloc<char>(len + 1); 20755 chars = zone->Alloc<char>(len + 1);
20755 OS::SNPrint(chars, (len + 1), kFormatNoLine, 20756 OS::SNPrint(chars, (len + 1), kFormatNoLine,
20756 frame_index, function_name.ToCString(), 20757 frame_index, function_name.ToCString(),
20757 url.ToCString()); 20758 url.ToCString());
20758 } 20759 }
20759 frame_strings->Add(chars); 20760 frame_strings->Add(chars);
20760 return len; 20761 return len;
20761 } 20762 }
20762 20763
20763 20764
20764 const char* Stacktrace::ToCStringInternal(intptr_t* frame_index, 20765 const char* Stacktrace::ToCStringInternal(intptr_t* frame_index,
20765 intptr_t max_frames) const { 20766 intptr_t max_frames) const {
20766 Isolate* isolate = Isolate::Current(); 20767 Zone* zone = Thread::Current()->zone();
20767 Function& function = Function::Handle(); 20768 Function& function = Function::Handle();
20768 Code& code = Code::Handle(); 20769 Code& code = Code::Handle();
20769 // Iterate through the stack frames and create C string description 20770 // Iterate through the stack frames and create C string description
20770 // for each frame. 20771 // for each frame.
20771 intptr_t total_len = 0; 20772 intptr_t total_len = 0;
20772 GrowableArray<char*> frame_strings; 20773 GrowableArray<char*> frame_strings;
20773 for (intptr_t i = 0; (i < Length()) && (*frame_index < max_frames); i++) { 20774 for (intptr_t i = 0; (i < Length()) && (*frame_index < max_frames); i++) {
20774 function = FunctionAtFrame(i); 20775 function = FunctionAtFrame(i);
20775 if (function.IsNull()) { 20776 if (function.IsNull()) {
20776 // Check if null function object indicates a stack trace overflow. 20777 // Check if null function object indicates a stack trace overflow.
20777 if ((i < (Length() - 1)) && 20778 if ((i < (Length() - 1)) &&
20778 (FunctionAtFrame(i + 1) != Function::null())) { 20779 (FunctionAtFrame(i + 1) != Function::null())) {
20779 const char* kTruncated = "...\n...\n"; 20780 const char* kTruncated = "...\n...\n";
20780 intptr_t truncated_len = strlen(kTruncated) + 1; 20781 intptr_t truncated_len = strlen(kTruncated) + 1;
20781 char* chars = isolate->current_zone()->Alloc<char>(truncated_len); 20782 char* chars = zone->Alloc<char>(truncated_len);
20782 OS::SNPrint(chars, truncated_len, "%s", kTruncated); 20783 OS::SNPrint(chars, truncated_len, "%s", kTruncated);
20783 frame_strings.Add(chars); 20784 frame_strings.Add(chars);
20784 total_len += truncated_len; 20785 total_len += truncated_len;
20785 } 20786 }
20786 } else if (function.is_visible() || FLAG_show_invisible_frames) { 20787 } else if (function.is_visible() || FLAG_show_invisible_frames) {
20787 code = CodeAtFrame(i); 20788 code = CodeAtFrame(i);
20788 ASSERT(function.raw() == code.function()); 20789 ASSERT(function.raw() == code.function());
20789 uword pc = code.EntryPoint() + Smi::Value(PcOffsetAtFrame(i)); 20790 uword pc = code.EntryPoint() + Smi::Value(PcOffsetAtFrame(i));
20790 if (code.is_optimized() && expand_inlined()) { 20791 if (code.is_optimized() && expand_inlined()) {
20791 // Traverse inlined frames. 20792 // Traverse inlined frames.
20792 for (InlinedFunctionsIterator it(code, pc); 20793 for (InlinedFunctionsIterator it(code, pc);
20793 !it.Done() && (*frame_index < max_frames); it.Advance()) { 20794 !it.Done() && (*frame_index < max_frames); it.Advance()) {
20794 function = it.function(); 20795 function = it.function();
20795 if (function.is_visible() || FLAG_show_invisible_frames) { 20796 if (function.is_visible() || FLAG_show_invisible_frames) {
20796 code = it.code(); 20797 code = it.code();
20797 ASSERT(function.raw() == code.function()); 20798 ASSERT(function.raw() == code.function());
20798 uword pc = it.pc(); 20799 uword pc = it.pc();
20799 ASSERT(pc != 0); 20800 ASSERT(pc != 0);
20800 ASSERT(code.EntryPoint() <= pc); 20801 ASSERT(code.EntryPoint() <= pc);
20801 ASSERT(pc < (code.EntryPoint() + code.Size())); 20802 ASSERT(pc < (code.EntryPoint() + code.Size()));
20802 total_len += PrintOneStacktrace( 20803 total_len += PrintOneStacktrace(
20803 isolate, &frame_strings, pc, function, code, *frame_index); 20804 zone, &frame_strings, pc, function, code, *frame_index);
20804 (*frame_index)++; // To account for inlined frames. 20805 (*frame_index)++; // To account for inlined frames.
20805 } 20806 }
20806 } 20807 }
20807 } else { 20808 } else {
20808 total_len += PrintOneStacktrace( 20809 total_len += PrintOneStacktrace(
20809 isolate, &frame_strings, pc, function, code, *frame_index); 20810 zone, &frame_strings, pc, function, code, *frame_index);
20810 (*frame_index)++; 20811 (*frame_index)++;
20811 } 20812 }
20812 } 20813 }
20813 } 20814 }
20814 20815
20815 // Now concatenate the frame descriptions into a single C string. 20816 // Now concatenate the frame descriptions into a single C string.
20816 char* chars = isolate->current_zone()->Alloc<char>(total_len + 1); 20817 char* chars = zone->Alloc<char>(total_len + 1);
20817 intptr_t index = 0; 20818 intptr_t index = 0;
20818 for (intptr_t i = 0; i < frame_strings.length(); i++) { 20819 for (intptr_t i = 0; i < frame_strings.length(); i++) {
20819 index += OS::SNPrint((chars + index), 20820 index += OS::SNPrint((chars + index),
20820 (total_len + 1 - index), 20821 (total_len + 1 - index),
20821 "%s", 20822 "%s",
20822 frame_strings[i]); 20823 frame_strings[i]);
20823 } 20824 }
20824 chars[total_len] = '\0'; 20825 chars[total_len] = '\0';
20825 return chars; 20826 return chars;
20826 } 20827 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
20909 return false; 20910 return false;
20910 } 20911 }
20911 return true; 20912 return true;
20912 } 20913 }
20913 20914
20914 20915
20915 const char* JSRegExp::ToCString() const { 20916 const char* JSRegExp::ToCString() const {
20916 const String& str = String::Handle(pattern()); 20917 const String& str = String::Handle(pattern());
20917 const char* format = "JSRegExp: pattern=%s flags=%s"; 20918 const char* format = "JSRegExp: pattern=%s flags=%s";
20918 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); 20919 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags());
20919 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); 20920 char* chars = Thread::Current()->zone()->Alloc<char>(len + 1);
20920 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); 20921 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags());
20921 return chars; 20922 return chars;
20922 } 20923 }
20923 20924
20924 20925
20925 void JSRegExp::PrintJSONImpl(JSONStream* stream, bool ref) const { 20926 void JSRegExp::PrintJSONImpl(JSONStream* stream, bool ref) const {
20926 JSONObject jsobj(stream); 20927 JSONObject jsobj(stream);
20927 PrintSharedInstanceJSON(&jsobj, ref); 20928 PrintSharedInstanceJSON(&jsobj, ref);
20928 jsobj.AddProperty("kind", "RegExp"); 20929 jsobj.AddProperty("kind", "RegExp");
20929 jsobj.AddServiceId(*this); 20930 jsobj.AddServiceId(*this);
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
21174 return tag_label.ToCString(); 21175 return tag_label.ToCString();
21175 } 21176 }
21176 21177
21177 21178
21178 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 21179 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
21179 Instance::PrintJSONImpl(stream, ref); 21180 Instance::PrintJSONImpl(stream, ref);
21180 } 21181 }
21181 21182
21182 21183
21183 } // namespace dart 21184 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/locations.cc ('k') | runtime/vm/os_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698