| OLD | NEW |
| 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/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
| (...skipping 2187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2198 } | 2198 } |
| 2199 | 2199 |
| 2200 | 2200 |
| 2201 const char* Class::ToCString() const { | 2201 const char* Class::ToCString() const { |
| 2202 const char* format = is_interface() | 2202 const char* format = is_interface() |
| 2203 ? "%s Interface: %s" : "%s Class: %s"; | 2203 ? "%s Interface: %s" : "%s Class: %s"; |
| 2204 const Library& lib = Library::Handle(library()); | 2204 const Library& lib = Library::Handle(library()); |
| 2205 const char* library_name = lib.IsNull() ? "" : lib.ToCString(); | 2205 const char* library_name = lib.IsNull() ? "" : lib.ToCString(); |
| 2206 const char* class_name = String::Handle(Name()).ToCString(); | 2206 const char* class_name = String::Handle(Name()).ToCString(); |
| 2207 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1; | 2207 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1; |
| 2208 char* chars = reinterpret_cast<char*>( | 2208 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 2209 Isolate::Current()->current_zone()->Allocate(len)); | |
| 2210 OS::SNPrint(chars, len, format, library_name, class_name); | 2209 OS::SNPrint(chars, len, format, library_name, class_name); |
| 2211 return chars; | 2210 return chars; |
| 2212 } | 2211 } |
| 2213 | 2212 |
| 2214 | 2213 |
| 2215 void Class::InsertCanonicalConstant(intptr_t index, | 2214 void Class::InsertCanonicalConstant(intptr_t index, |
| 2216 const Instance& constant) const { | 2215 const Instance& constant) const { |
| 2217 // The constant needs to be added to the list. Grow the list if it is full. | 2216 // The constant needs to be added to the list. Grow the list if it is full. |
| 2218 Array& canonical_list = Array::Handle(constants()); | 2217 Array& canonical_list = Array::Handle(constants()); |
| 2219 const intptr_t list_len = canonical_list.Length(); | 2218 const intptr_t list_len = canonical_list.Length(); |
| (...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2928 | 2927 |
| 2929 const char* Type::ToCString() const { | 2928 const char* Type::ToCString() const { |
| 2930 if (IsResolved()) { | 2929 if (IsResolved()) { |
| 2931 const AbstractTypeArguments& type_arguments = | 2930 const AbstractTypeArguments& type_arguments = |
| 2932 AbstractTypeArguments::Handle(arguments()); | 2931 AbstractTypeArguments::Handle(arguments()); |
| 2933 if (type_arguments.IsNull()) { | 2932 if (type_arguments.IsNull()) { |
| 2934 const char* format = "Type: class '%s'"; | 2933 const char* format = "Type: class '%s'"; |
| 2935 const char* class_name = | 2934 const char* class_name = |
| 2936 String::Handle(Class::Handle(type_class()).Name()).ToCString(); | 2935 String::Handle(Class::Handle(type_class()).Name()).ToCString(); |
| 2937 intptr_t len = OS::SNPrint(NULL, 0, format, class_name) + 1; | 2936 intptr_t len = OS::SNPrint(NULL, 0, format, class_name) + 1; |
| 2938 char* chars = reinterpret_cast<char*>( | 2937 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 2939 Isolate::Current()->current_zone()->Allocate(len)); | |
| 2940 OS::SNPrint(chars, len, format, class_name); | 2938 OS::SNPrint(chars, len, format, class_name); |
| 2941 return chars; | 2939 return chars; |
| 2942 } else { | 2940 } else { |
| 2943 const char* format = "Type: class '%s', args:[%s]"; | 2941 const char* format = "Type: class '%s', args:[%s]"; |
| 2944 const char* class_name = | 2942 const char* class_name = |
| 2945 String::Handle(Class::Handle(type_class()).Name()).ToCString(); | 2943 String::Handle(Class::Handle(type_class()).Name()).ToCString(); |
| 2946 const char* args_cstr = | 2944 const char* args_cstr = |
| 2947 AbstractTypeArguments::Handle(arguments()).ToCString(); | 2945 AbstractTypeArguments::Handle(arguments()).ToCString(); |
| 2948 intptr_t len = OS::SNPrint(NULL, 0, format, class_name, args_cstr) + 1; | 2946 intptr_t len = OS::SNPrint(NULL, 0, format, class_name, args_cstr) + 1; |
| 2949 char* chars = reinterpret_cast<char*>( | 2947 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 2950 Isolate::Current()->current_zone()->Allocate(len)); | |
| 2951 OS::SNPrint(chars, len, format, class_name, args_cstr); | 2948 OS::SNPrint(chars, len, format, class_name, args_cstr); |
| 2952 return chars; | 2949 return chars; |
| 2953 } | 2950 } |
| 2954 } else { | 2951 } else { |
| 2955 return "Unresolved Type"; | 2952 return "Unresolved Type"; |
| 2956 } | 2953 } |
| 2957 } | 2954 } |
| 2958 | 2955 |
| 2959 | 2956 |
| 2960 void TypeParameter::set_is_finalized() const { | 2957 void TypeParameter::set_is_finalized() const { |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3086 (state == RawTypeParameter::kBeingFinalized) || | 3083 (state == RawTypeParameter::kBeingFinalized) || |
| 3087 (state == RawTypeParameter::kFinalizedUninstantiated)); | 3084 (state == RawTypeParameter::kFinalizedUninstantiated)); |
| 3088 raw_ptr()->type_state_ = state; | 3085 raw_ptr()->type_state_ = state; |
| 3089 } | 3086 } |
| 3090 | 3087 |
| 3091 | 3088 |
| 3092 const char* TypeParameter::ToCString() const { | 3089 const char* TypeParameter::ToCString() const { |
| 3093 const char* format = "TypeParameter: name %s; index: %d"; | 3090 const char* format = "TypeParameter: name %s; index: %d"; |
| 3094 const char* name_cstr = String::Handle(Name()).ToCString(); | 3091 const char* name_cstr = String::Handle(Name()).ToCString(); |
| 3095 intptr_t len = OS::SNPrint(NULL, 0, format, name_cstr, index()) + 1; | 3092 intptr_t len = OS::SNPrint(NULL, 0, format, name_cstr, index()) + 1; |
| 3096 char* chars = reinterpret_cast<char*>( | 3093 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 3097 Isolate::Current()->current_zone()->Allocate(len)); | |
| 3098 OS::SNPrint(chars, len, format, name_cstr, index()); | 3094 OS::SNPrint(chars, len, format, name_cstr, index()); |
| 3099 return chars; | 3095 return chars; |
| 3100 } | 3096 } |
| 3101 | 3097 |
| 3102 | 3098 |
| 3103 intptr_t AbstractTypeArguments::Length() const { | 3099 intptr_t AbstractTypeArguments::Length() const { |
| 3104 // AbstractTypeArguments is an abstract class. | 3100 // AbstractTypeArguments is an abstract class. |
| 3105 UNREACHABLE(); | 3101 UNREACHABLE(); |
| 3106 return -1; | 3102 return -1; |
| 3107 } | 3103 } |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3540 const char* TypeArguments::ToCString() const { | 3536 const char* TypeArguments::ToCString() const { |
| 3541 if (IsNull()) { | 3537 if (IsNull()) { |
| 3542 return "NULL TypeArguments"; | 3538 return "NULL TypeArguments"; |
| 3543 } | 3539 } |
| 3544 const char* format = "%s [%s]"; | 3540 const char* format = "%s [%s]"; |
| 3545 const char* prev_cstr = "TypeArguments:"; | 3541 const char* prev_cstr = "TypeArguments:"; |
| 3546 for (int i = 0; i < Length(); i++) { | 3542 for (int i = 0; i < Length(); i++) { |
| 3547 const AbstractType& type_at = AbstractType::Handle(TypeAt(i)); | 3543 const AbstractType& type_at = AbstractType::Handle(TypeAt(i)); |
| 3548 const char* type_cstr = type_at.IsNull() ? "null" : type_at.ToCString(); | 3544 const char* type_cstr = type_at.IsNull() ? "null" : type_at.ToCString(); |
| 3549 intptr_t len = OS::SNPrint(NULL, 0, format, prev_cstr, type_cstr) + 1; | 3545 intptr_t len = OS::SNPrint(NULL, 0, format, prev_cstr, type_cstr) + 1; |
| 3550 char* chars = reinterpret_cast<char*>( | 3546 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 3551 Isolate::Current()->current_zone()->Allocate(len)); | |
| 3552 OS::SNPrint(chars, len, format, prev_cstr, type_cstr); | 3547 OS::SNPrint(chars, len, format, prev_cstr, type_cstr); |
| 3553 prev_cstr = chars; | 3548 prev_cstr = chars; |
| 3554 } | 3549 } |
| 3555 return prev_cstr; | 3550 return prev_cstr; |
| 3556 } | 3551 } |
| 3557 | 3552 |
| 3558 | 3553 |
| 3559 intptr_t InstantiatedTypeArguments::Length() const { | 3554 intptr_t InstantiatedTypeArguments::Length() const { |
| 3560 return AbstractTypeArguments::Handle( | 3555 return AbstractTypeArguments::Handle( |
| 3561 uninstantiated_type_arguments()).Length(); | 3556 uninstantiated_type_arguments()).Length(); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3620 return "NULL InstantiatedTypeArguments"; | 3615 return "NULL InstantiatedTypeArguments"; |
| 3621 } | 3616 } |
| 3622 const char* format = "InstantiatedTypeArguments: [%s] instantiator: [%s]"; | 3617 const char* format = "InstantiatedTypeArguments: [%s] instantiator: [%s]"; |
| 3623 const char* arg_cstr = | 3618 const char* arg_cstr = |
| 3624 AbstractTypeArguments::Handle( | 3619 AbstractTypeArguments::Handle( |
| 3625 uninstantiated_type_arguments()).ToCString(); | 3620 uninstantiated_type_arguments()).ToCString(); |
| 3626 const char* instantiator_cstr = | 3621 const char* instantiator_cstr = |
| 3627 AbstractTypeArguments::Handle(instantiator_type_arguments()).ToCString(); | 3622 AbstractTypeArguments::Handle(instantiator_type_arguments()).ToCString(); |
| 3628 intptr_t len = | 3623 intptr_t len = |
| 3629 OS::SNPrint(NULL, 0, format, arg_cstr, instantiator_cstr) + 1; | 3624 OS::SNPrint(NULL, 0, format, arg_cstr, instantiator_cstr) + 1; |
| 3630 char* chars = reinterpret_cast<char*>( | 3625 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 3631 Isolate::Current()->current_zone()->Allocate(len)); | |
| 3632 OS::SNPrint(chars, len, format, arg_cstr, instantiator_cstr); | 3626 OS::SNPrint(chars, len, format, arg_cstr, instantiator_cstr); |
| 3633 return chars; | 3627 return chars; |
| 3634 } | 3628 } |
| 3635 | 3629 |
| 3636 | 3630 |
| 3637 void Function::SetCode(const Code& value) const { | 3631 void Function::SetCode(const Code& value) const { |
| 3638 StorePointer(&raw_ptr()->code_, value.raw()); | 3632 StorePointer(&raw_ptr()->code_, value.raw()); |
| 3639 ASSERT(Function::Handle(value.function()).IsNull() || | 3633 ASSERT(Function::Handle(value.function()).IsNull() || |
| 3640 (value.function() == this->raw())); | 3634 (value.function() == this->raw())); |
| 3641 value.set_function(*this); | 3635 value.set_function(*this); |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3933 ASSERT(class_name != NULL); | 3927 ASSERT(class_name != NULL); |
| 3934 const Library& library = Library::Handle(function_class.library()); | 3928 const Library& library = Library::Handle(function_class.library()); |
| 3935 ASSERT(!library.IsNull()); | 3929 ASSERT(!library.IsNull()); |
| 3936 const char* library_name = String::Handle(library.url()).ToCString(); | 3930 const char* library_name = String::Handle(library.url()).ToCString(); |
| 3937 ASSERT(library_name != NULL); | 3931 ASSERT(library_name != NULL); |
| 3938 const char* lib_class_format = | 3932 const char* lib_class_format = |
| 3939 (library_name[0] == '\0') ? "%s%s_" : "%s_%s_"; | 3933 (library_name[0] == '\0') ? "%s%s_" : "%s_%s_"; |
| 3940 reserve_len += | 3934 reserve_len += |
| 3941 OS::SNPrint(NULL, 0, lib_class_format, library_name, class_name); | 3935 OS::SNPrint(NULL, 0, lib_class_format, library_name, class_name); |
| 3942 ASSERT(chars != NULL); | 3936 ASSERT(chars != NULL); |
| 3943 *chars = reinterpret_cast<char*>( | 3937 *chars = Isolate::Current()->current_zone()->Alloc<char>(reserve_len + 1); |
| 3944 Isolate::Current()->current_zone()->Allocate(reserve_len + 1)); | |
| 3945 written = OS::SNPrint( | 3938 written = OS::SNPrint( |
| 3946 *chars, reserve_len, lib_class_format, library_name, class_name); | 3939 *chars, reserve_len, lib_class_format, library_name, class_name); |
| 3947 } else { | 3940 } else { |
| 3948 written = ConstructFunctionFullyQualifiedCString(parent, | 3941 written = ConstructFunctionFullyQualifiedCString(parent, |
| 3949 chars, | 3942 chars, |
| 3950 reserve_len); | 3943 reserve_len); |
| 3951 } | 3944 } |
| 3952 ASSERT(*chars != NULL); | 3945 ASSERT(*chars != NULL); |
| 3953 char* next = *chars + written; | 3946 char* next = *chars + written; |
| 3954 written += OS::SNPrint(next, reserve_len + 1, function_format, name); | 3947 written += OS::SNPrint(next, reserve_len + 1, function_format, name); |
| (...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4399 case RawFunction::kConstImplicitGetter: | 4392 case RawFunction::kConstImplicitGetter: |
| 4400 kind_str = " const-getter"; | 4393 kind_str = " const-getter"; |
| 4401 break; | 4394 break; |
| 4402 default: | 4395 default: |
| 4403 UNREACHABLE(); | 4396 UNREACHABLE(); |
| 4404 } | 4397 } |
| 4405 const char* kFormat = "Function '%s':%s%s%s%s."; | 4398 const char* kFormat = "Function '%s':%s%s%s%s."; |
| 4406 const char* function_name = String::Handle(name()).ToCString(); | 4399 const char* function_name = String::Handle(name()).ToCString(); |
| 4407 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, | 4400 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, |
| 4408 static_str, abstract_str, kind_str, const_str) + 1; | 4401 static_str, abstract_str, kind_str, const_str) + 1; |
| 4409 char* chars = reinterpret_cast<char*>( | 4402 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 4410 Isolate::Current()->current_zone()->Allocate(len)); | |
| 4411 OS::SNPrint(chars, len, kFormat, function_name, | 4403 OS::SNPrint(chars, len, kFormat, function_name, |
| 4412 static_str, abstract_str, kind_str, const_str); | 4404 static_str, abstract_str, kind_str, const_str); |
| 4413 return chars; | 4405 return chars; |
| 4414 } | 4406 } |
| 4415 | 4407 |
| 4416 | 4408 |
| 4417 RawString* Field::GetterName(const String& field_name) { | 4409 RawString* Field::GetterName(const String& field_name) { |
| 4418 String& str = String::Handle(); | 4410 String& str = String::Handle(); |
| 4419 str = String::New(kGetterPrefix); | 4411 str = String::New(kGetterPrefix); |
| 4420 str = String::Concat(str, field_name); | 4412 str = String::Concat(str, field_name); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4529 const char* Field::ToCString() const { | 4521 const char* Field::ToCString() const { |
| 4530 const char* kF0 = is_static() ? " static" : ""; | 4522 const char* kF0 = is_static() ? " static" : ""; |
| 4531 const char* kF1 = is_final() ? " final" : ""; | 4523 const char* kF1 = is_final() ? " final" : ""; |
| 4532 const char* kF2 = is_const() ? " const" : ""; | 4524 const char* kF2 = is_const() ? " const" : ""; |
| 4533 const char* kFormat = "Field <%s.%s>:%s%s%s"; | 4525 const char* kFormat = "Field <%s.%s>:%s%s%s"; |
| 4534 const char* field_name = String::Handle(name()).ToCString(); | 4526 const char* field_name = String::Handle(name()).ToCString(); |
| 4535 const Class& cls = Class::Handle(owner()); | 4527 const Class& cls = Class::Handle(owner()); |
| 4536 const char* cls_name = String::Handle(cls.Name()).ToCString(); | 4528 const char* cls_name = String::Handle(cls.Name()).ToCString(); |
| 4537 intptr_t len = | 4529 intptr_t len = |
| 4538 OS::SNPrint(NULL, 0, kFormat, cls_name, field_name, kF0, kF1, kF2) + 1; | 4530 OS::SNPrint(NULL, 0, kFormat, cls_name, field_name, kF0, kF1, kF2) + 1; |
| 4539 char* chars = reinterpret_cast<char*>( | 4531 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 4540 Isolate::Current()->current_zone()->Allocate(len)); | |
| 4541 OS::SNPrint(chars, len, kFormat, cls_name, field_name, kF0, kF1, kF2); | 4532 OS::SNPrint(chars, len, kFormat, cls_name, field_name, kF0, kF1, kF2); |
| 4542 return chars; | 4533 return chars; |
| 4543 } | 4534 } |
| 4544 | 4535 |
| 4545 | 4536 |
| 4546 void LiteralToken::set_literal(const String& literal) const { | 4537 void LiteralToken::set_literal(const String& literal) const { |
| 4547 StorePointer(&raw_ptr()->literal_, literal.raw()); | 4538 StorePointer(&raw_ptr()->literal_, literal.raw()); |
| 4548 } | 4539 } |
| 4549 | 4540 |
| 4550 | 4541 |
| (...skipping 1734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6285 | 6276 |
| 6286 RawLibrary* Library::NativeWrappersLibrary() { | 6277 RawLibrary* Library::NativeWrappersLibrary() { |
| 6287 return Isolate::Current()->object_store()->native_wrappers_library(); | 6278 return Isolate::Current()->object_store()->native_wrappers_library(); |
| 6288 } | 6279 } |
| 6289 | 6280 |
| 6290 | 6281 |
| 6291 const char* Library::ToCString() const { | 6282 const char* Library::ToCString() const { |
| 6292 const char* kFormat = "Library:'%s'"; | 6283 const char* kFormat = "Library:'%s'"; |
| 6293 const String& name = String::Handle(url()); | 6284 const String& name = String::Handle(url()); |
| 6294 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; | 6285 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; |
| 6295 char* chars = reinterpret_cast<char*>( | 6286 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 6296 Isolate::Current()->current_zone()->Allocate(len)); | |
| 6297 OS::SNPrint(chars, len, kFormat, name.ToCString()); | 6287 OS::SNPrint(chars, len, kFormat, name.ToCString()); |
| 6298 return chars; | 6288 return chars; |
| 6299 } | 6289 } |
| 6300 | 6290 |
| 6301 | 6291 |
| 6302 RawLibrary* LibraryPrefix::GetLibrary(int index) const { | 6292 RawLibrary* LibraryPrefix::GetLibrary(int index) const { |
| 6303 Library& lib = Library::Handle(); | 6293 Library& lib = Library::Handle(); |
| 6304 if ((index >= 0) || (index < num_libs())) { | 6294 if ((index >= 0) || (index < num_libs())) { |
| 6305 Array& libs = Array::Handle(libraries()); | 6295 Array& libs = Array::Handle(libraries()); |
| 6306 lib ^= libs.At(index); | 6296 lib ^= libs.At(index); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6380 result.set_num_libs(0); | 6370 result.set_num_libs(0); |
| 6381 result.AddLibrary(lib); | 6371 result.AddLibrary(lib); |
| 6382 return result.raw(); | 6372 return result.raw(); |
| 6383 } | 6373 } |
| 6384 | 6374 |
| 6385 | 6375 |
| 6386 const char* LibraryPrefix::ToCString() const { | 6376 const char* LibraryPrefix::ToCString() const { |
| 6387 const char* kFormat = "LibraryPrefix:'%s'"; | 6377 const char* kFormat = "LibraryPrefix:'%s'"; |
| 6388 const String& prefix = String::Handle(name()); | 6378 const String& prefix = String::Handle(name()); |
| 6389 intptr_t len = OS::SNPrint(NULL, 0, kFormat, prefix.ToCString()) + 1; | 6379 intptr_t len = OS::SNPrint(NULL, 0, kFormat, prefix.ToCString()) + 1; |
| 6390 char* chars = reinterpret_cast<char*>( | 6380 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 6391 Isolate::Current()->current_zone()->Allocate(len)); | |
| 6392 OS::SNPrint(chars, len, kFormat, prefix.ToCString()); | 6381 OS::SNPrint(chars, len, kFormat, prefix.ToCString()); |
| 6393 return chars; | 6382 return chars; |
| 6394 } | 6383 } |
| 6395 | 6384 |
| 6396 | 6385 |
| 6397 RawString* LibraryPrefix::CheckForDuplicateDefinition() const { | 6386 RawString* LibraryPrefix::CheckForDuplicateDefinition() const { |
| 6398 Library& lib = Library::Handle(); | 6387 Library& lib = Library::Handle(); |
| 6399 Library& conflicting_lib = Library::Handle(); | 6388 Library& conflicting_lib = Library::Handle(); |
| 6400 Object& obj = Object::Handle(); | 6389 Object& obj = Object::Handle(); |
| 6401 Class& cls = Class::Handle(); | 6390 Class& cls = Class::Handle(); |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6630 const char* kFormat = "0x%x\t%s\t%ld\t%ld\t%ld\n"; | 6619 const char* kFormat = "0x%x\t%s\t%ld\t%ld\t%ld\n"; |
| 6631 // First compute the buffer size required. | 6620 // First compute the buffer size required. |
| 6632 intptr_t len = 0; | 6621 intptr_t len = 0; |
| 6633 for (intptr_t i = 0; i < Length(); i++) { | 6622 for (intptr_t i = 0; i < Length(); i++) { |
| 6634 const intptr_t multi_purpose_index = DescriptorKind(i) == kDeoptIndex ? | 6623 const intptr_t multi_purpose_index = DescriptorKind(i) == kDeoptIndex ? |
| 6635 DeoptIndex(i) : TryIndex(i); | 6624 DeoptIndex(i) : TryIndex(i); |
| 6636 len += OS::SNPrint(NULL, 0, kFormat, | 6625 len += OS::SNPrint(NULL, 0, kFormat, |
| 6637 PC(i), KindAsStr(i), NodeId(i), TokenIndex(i), multi_purpose_index); | 6626 PC(i), KindAsStr(i), NodeId(i), TokenIndex(i), multi_purpose_index); |
| 6638 } | 6627 } |
| 6639 // Allocate the buffer. | 6628 // Allocate the buffer. |
| 6640 char* buffer = reinterpret_cast<char*>( | 6629 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 6641 Isolate::Current()->current_zone()->Allocate(len + 1)); | |
| 6642 // Layout the fields in the buffer. | 6630 // Layout the fields in the buffer. |
| 6643 intptr_t index = 0; | 6631 intptr_t index = 0; |
| 6644 for (intptr_t i = 0; i < Length(); i++) { | 6632 for (intptr_t i = 0; i < Length(); i++) { |
| 6645 const intptr_t multi_purpose_index = DescriptorKind(i) == kDeoptIndex ? | 6633 const intptr_t multi_purpose_index = DescriptorKind(i) == kDeoptIndex ? |
| 6646 DeoptIndex(i) : TryIndex(i); | 6634 DeoptIndex(i) : TryIndex(i); |
| 6647 index += OS::SNPrint((buffer + index), (len - index), kFormat, | 6635 index += OS::SNPrint((buffer + index), (len - index), kFormat, |
| 6648 PC(i), KindAsStr(i), NodeId(i), TokenIndex(i), multi_purpose_index); | 6636 PC(i), KindAsStr(i), NodeId(i), TokenIndex(i), multi_purpose_index); |
| 6649 } | 6637 } |
| 6650 return buffer; | 6638 return buffer; |
| 6651 } | 6639 } |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6754 // This is only safe because we create a new Smi, which does not cause | 6742 // This is only safe because we create a new Smi, which does not cause |
| 6755 // heap allocation. | 6743 // heap allocation. |
| 6756 raw_ptr()->bitmap_size_in_bytes_ = Smi::New(value); | 6744 raw_ptr()->bitmap_size_in_bytes_ = Smi::New(value); |
| 6757 } | 6745 } |
| 6758 | 6746 |
| 6759 | 6747 |
| 6760 const char* Stackmap::ToCString() const { | 6748 const char* Stackmap::ToCString() const { |
| 6761 if (IsNull()) { | 6749 if (IsNull()) { |
| 6762 return "{null}"; | 6750 return "{null}"; |
| 6763 } else { | 6751 } else { |
| 6752 // Guard against integer overflow, though it is highly unlikely. |
| 6753 if (MaximumBitIndex() > kIntptrMax / 4) { |
| 6754 FATAL1("MaximumBitIndex() is unexpectedly large (%ld)", |
| 6755 MaximumBitIndex()); |
| 6756 } |
| 6764 intptr_t index = OS::SNPrint(NULL, 0, "0x%lx { ", PC()); | 6757 intptr_t index = OS::SNPrint(NULL, 0, "0x%lx { ", PC()); |
| 6765 intptr_t alloc_size = | 6758 intptr_t alloc_size = |
| 6766 index + ((MaximumBitIndex() + 1) * 2) + 2; // "{ 1 0 .... }". | 6759 index + ((MaximumBitIndex() + 1) * 2) + 2; // "{ 1 0 .... }". |
| 6767 Isolate* isolate = Isolate::Current(); | 6760 Isolate* isolate = Isolate::Current(); |
| 6768 char* chars = reinterpret_cast<char*>( | 6761 char* chars = isolate->current_zone()->Alloc<char>(alloc_size); |
| 6769 isolate->current_zone()->Allocate(alloc_size)); | |
| 6770 index = OS::SNPrint(chars, alloc_size, "0x%lx { ", PC()); | 6762 index = OS::SNPrint(chars, alloc_size, "0x%lx { ", PC()); |
| 6771 for (intptr_t i = 0; i <= MaximumBitIndex(); i++) { | 6763 for (intptr_t i = 0; i <= MaximumBitIndex(); i++) { |
| 6772 index += OS::SNPrint((chars + index), | 6764 index += OS::SNPrint((chars + index), |
| 6773 (alloc_size - index), | 6765 (alloc_size - index), |
| 6774 "%d ", | 6766 "%d ", |
| 6775 IsObject(i) ? 1 : 0); | 6767 IsObject(i) ? 1 : 0); |
| 6776 } | 6768 } |
| 6777 OS::SNPrint((chars + index), (alloc_size - index), "}"); | 6769 OS::SNPrint((chars + index), (alloc_size - index), "}"); |
| 6778 return chars; | 6770 return chars; |
| 6779 } | 6771 } |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6899 if (Length() == 0) { | 6891 if (Length() == 0) { |
| 6900 return "No exception handlers\n"; | 6892 return "No exception handlers\n"; |
| 6901 } | 6893 } |
| 6902 // First compute the buffer size required. | 6894 // First compute the buffer size required. |
| 6903 intptr_t len = 0; | 6895 intptr_t len = 0; |
| 6904 for (intptr_t i = 0; i < Length(); i++) { | 6896 for (intptr_t i = 0; i < Length(); i++) { |
| 6905 len += OS::SNPrint(NULL, 0, "%ld => 0x%x\n", | 6897 len += OS::SNPrint(NULL, 0, "%ld => 0x%x\n", |
| 6906 TryIndex(i), HandlerPC(i)); | 6898 TryIndex(i), HandlerPC(i)); |
| 6907 } | 6899 } |
| 6908 // Allocate the buffer. | 6900 // Allocate the buffer. |
| 6909 char* buffer = reinterpret_cast<char*>( | 6901 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 6910 Isolate::Current()->current_zone()->Allocate(len + 1)); | |
| 6911 // Layout the fields in the buffer. | 6902 // Layout the fields in the buffer. |
| 6912 intptr_t index = 0; | 6903 intptr_t index = 0; |
| 6913 for (intptr_t i = 0; i < Length(); i++) { | 6904 for (intptr_t i = 0; i < Length(); i++) { |
| 6914 index += OS::SNPrint((buffer + index), | 6905 index += OS::SNPrint((buffer + index), |
| 6915 (len - index), | 6906 (len - index), |
| 6916 "%ld => 0x%x\n", | 6907 "%ld => 0x%x\n", |
| 6917 TryIndex(i), | 6908 TryIndex(i), |
| 6918 HandlerPC(i)); | 6909 HandlerPC(i)); |
| 6919 } | 6910 } |
| 6920 return buffer; | 6911 return buffer; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 6940 if (Length() == 0) { | 6931 if (Length() == 0) { |
| 6941 return "No DeoptInfo"; | 6932 return "No DeoptInfo"; |
| 6942 } | 6933 } |
| 6943 // First compute the buffer size required. | 6934 // First compute the buffer size required. |
| 6944 intptr_t len = 0; | 6935 intptr_t len = 0; |
| 6945 for (intptr_t i = 0; i < Length(); i++) { | 6936 for (intptr_t i = 0; i < Length(); i++) { |
| 6946 len += OS::SNPrint(NULL, 0, "[%d(%d):%d]", | 6937 len += OS::SNPrint(NULL, 0, "[%d(%d):%d]", |
| 6947 Instruction(i), FromIndex(i), i); | 6938 Instruction(i), FromIndex(i), i); |
| 6948 } | 6939 } |
| 6949 // Allocate the buffer. | 6940 // Allocate the buffer. |
| 6950 char* buffer = reinterpret_cast<char*>( | 6941 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 6951 Isolate::Current()->current_zone()->Allocate(len + 1)); | |
| 6952 // Layout the fields in the buffer. | 6942 // Layout the fields in the buffer. |
| 6953 intptr_t index = 0; | 6943 intptr_t index = 0; |
| 6954 for (intptr_t i = 0; i < Length(); i++) { | 6944 for (intptr_t i = 0; i < Length(); i++) { |
| 6955 index += OS::SNPrint((buffer + index), | 6945 index += OS::SNPrint((buffer + index), |
| 6956 (len - index), | 6946 (len - index), |
| 6957 "[%d(%d):%d]", | 6947 "[%d(%d):%d]", |
| 6958 Instruction(i), | 6948 Instruction(i), |
| 6959 FromIndex(i), | 6949 FromIndex(i), |
| 6960 i); | 6950 i); |
| 6961 } | 6951 } |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7103 // Embedded pointers are still in handles at this point. | 7093 // Embedded pointers are still in handles at this point. |
| 7104 MemoryRegion region(reinterpret_cast<void*>(instrs.EntryPoint()), | 7094 MemoryRegion region(reinterpret_cast<void*>(instrs.EntryPoint()), |
| 7105 instrs.size()); | 7095 instrs.size()); |
| 7106 assembler->FinalizeInstructions(region); | 7096 assembler->FinalizeInstructions(region); |
| 7107 Dart_FileWriterFunction perf_events_writer = Dart::perf_events_writer(); | 7097 Dart_FileWriterFunction perf_events_writer = Dart::perf_events_writer(); |
| 7108 if (perf_events_writer != NULL) { | 7098 if (perf_events_writer != NULL) { |
| 7109 const char* format = "%x %x %s\n"; | 7099 const char* format = "%x %x %s\n"; |
| 7110 uword addr = instrs.EntryPoint(); | 7100 uword addr = instrs.EntryPoint(); |
| 7111 uword size = instrs.size(); | 7101 uword size = instrs.size(); |
| 7112 intptr_t len = OS::SNPrint(NULL, 0, format, addr, size, name); | 7102 intptr_t len = OS::SNPrint(NULL, 0, format, addr, size, name); |
| 7113 char* buffer = reinterpret_cast<char*>( | 7103 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 7114 Isolate::Current()->current_zone()->Allocate(len + 1)); | |
| 7115 OS::SNPrint(buffer, len + 1, format, addr, size, name); | 7104 OS::SNPrint(buffer, len + 1, format, addr, size, name); |
| 7116 (*perf_events_writer)(buffer, len); | 7105 (*perf_events_writer)(buffer, len); |
| 7117 } | 7106 } |
| 7118 DebugInfo* pprof_symbol_generator = Dart::pprof_symbol_generator(); | 7107 DebugInfo* pprof_symbol_generator = Dart::pprof_symbol_generator(); |
| 7119 if (pprof_symbol_generator != NULL) { | 7108 if (pprof_symbol_generator != NULL) { |
| 7120 ASSERT(strlen(name) != 0); | 7109 ASSERT(strlen(name) != 0); |
| 7121 pprof_symbol_generator->AddCode(instrs.EntryPoint(), instrs.size()); | 7110 pprof_symbol_generator->AddCode(instrs.EntryPoint(), instrs.size()); |
| 7122 pprof_symbol_generator->AddCodeRegion(name, | 7111 pprof_symbol_generator->AddCodeRegion(name, |
| 7123 instrs.EntryPoint(), | 7112 instrs.EntryPoint(), |
| 7124 instrs.size()); | 7113 instrs.size()); |
| 7125 } | 7114 } |
| 7126 if (FLAG_generate_gdb_symbols) { | 7115 if (FLAG_generate_gdb_symbols) { |
| 7127 ASSERT(strlen(name) != 0); | 7116 ASSERT(strlen(name) != 0); |
| 7128 intptr_t prolog_offset = assembler->prolog_offset(); | 7117 intptr_t prolog_offset = assembler->prolog_offset(); |
| 7129 if (prolog_offset > 0) { | 7118 if (prolog_offset > 0) { |
| 7130 // In order to ensure that gdb sees the first instruction of a function | 7119 // In order to ensure that gdb sees the first instruction of a function |
| 7131 // as the prolog sequence we register two symbols for the cases when | 7120 // as the prolog sequence we register two symbols for the cases when |
| 7132 // the prolog sequence is not the first instruction: | 7121 // the prolog sequence is not the first instruction: |
| 7133 // <name>_entry is used for code preceding the prolog sequence. | 7122 // <name>_entry is used for code preceding the prolog sequence. |
| 7134 // <name> for rest of the code (first instruction is prolog sequence). | 7123 // <name> for rest of the code (first instruction is prolog sequence). |
| 7135 const char* kFormat = "%s_%s"; | 7124 const char* kFormat = "%s_%s"; |
| 7136 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name, "entry"); | 7125 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name, "entry"); |
| 7137 char* pname = reinterpret_cast<char*>( | 7126 char* pname = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 7138 Isolate::Current()->current_zone()->Allocate(len + 1)); | |
| 7139 OS::SNPrint(pname, (len + 1), kFormat, name, "entry"); | 7127 OS::SNPrint(pname, (len + 1), kFormat, name, "entry"); |
| 7140 DebugInfo::RegisterSection(pname, instrs.EntryPoint(), prolog_offset); | 7128 DebugInfo::RegisterSection(pname, instrs.EntryPoint(), prolog_offset); |
| 7141 DebugInfo::RegisterSection(name, | 7129 DebugInfo::RegisterSection(name, |
| 7142 (instrs.EntryPoint() + prolog_offset), | 7130 (instrs.EntryPoint() + prolog_offset), |
| 7143 (instrs.size() - prolog_offset)); | 7131 (instrs.size() - prolog_offset)); |
| 7144 } else { | 7132 } else { |
| 7145 DebugInfo::RegisterSection(name, instrs.EntryPoint(), instrs.size()); | 7133 DebugInfo::RegisterSection(name, instrs.EntryPoint(), instrs.size()); |
| 7146 } | 7134 } |
| 7147 } | 7135 } |
| 7148 | 7136 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7224 return descriptors.PC(i); | 7212 return descriptors.PC(i); |
| 7225 } | 7213 } |
| 7226 } | 7214 } |
| 7227 return 0; | 7215 return 0; |
| 7228 } | 7216 } |
| 7229 | 7217 |
| 7230 | 7218 |
| 7231 const char* Code::ToCString() const { | 7219 const char* Code::ToCString() const { |
| 7232 const char* kFormat = "Code entry:0x%d"; | 7220 const char* kFormat = "Code entry:0x%d"; |
| 7233 intptr_t len = OS::SNPrint(NULL, 0, kFormat, EntryPoint()); | 7221 intptr_t len = OS::SNPrint(NULL, 0, kFormat, EntryPoint()); |
| 7234 char* chars = reinterpret_cast<char*>( | 7222 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 7235 Isolate::Current()->current_zone()->Allocate(len)); | |
| 7236 OS::SNPrint(chars, len, kFormat, EntryPoint()); | 7223 OS::SNPrint(chars, len, kFormat, EntryPoint()); |
| 7237 return chars; | 7224 return chars; |
| 7238 } | 7225 } |
| 7239 | 7226 |
| 7240 | 7227 |
| 7241 uword Code::GetPatchCodePc() const { | 7228 uword Code::GetPatchCodePc() const { |
| 7242 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); | 7229 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); |
| 7243 for (intptr_t i = 0; i < descriptors.Length(); i++) { | 7230 for (intptr_t i = 0; i < descriptors.Length(); i++) { |
| 7244 if (descriptors.DescriptorKind(i) == PcDescriptors::kPatchCode) { | 7231 if (descriptors.DescriptorKind(i) == PcDescriptors::kPatchCode) { |
| 7245 return descriptors.PC(i); | 7232 return descriptors.PC(i); |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7426 | 7413 |
| 7427 const char* ContextScope::ToCString() const { | 7414 const char* ContextScope::ToCString() const { |
| 7428 return "ContextScope"; | 7415 return "ContextScope"; |
| 7429 } | 7416 } |
| 7430 | 7417 |
| 7431 | 7418 |
| 7432 const char* ICData::ToCString() const { | 7419 const char* ICData::ToCString() const { |
| 7433 const char* kFormat = "ICData target:%s"; | 7420 const char* kFormat = "ICData target:%s"; |
| 7434 const String& name = String::Handle(target_name()); | 7421 const String& name = String::Handle(target_name()); |
| 7435 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; | 7422 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name.ToCString()) + 1; |
| 7436 char* chars = reinterpret_cast<char*>( | 7423 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 7437 Isolate::Current()->current_zone()->Allocate(len)); | |
| 7438 OS::SNPrint(chars, len, kFormat, name.ToCString()); | 7424 OS::SNPrint(chars, len, kFormat, name.ToCString()); |
| 7439 return chars; | 7425 return chars; |
| 7440 } | 7426 } |
| 7441 | 7427 |
| 7442 | 7428 |
| 7443 void ICData::set_function(const Function& value) const { | 7429 void ICData::set_function(const Function& value) const { |
| 7444 StorePointer(&raw_ptr()->function_, value.raw()); | 7430 StorePointer(&raw_ptr()->function_, value.raw()); |
| 7445 } | 7431 } |
| 7446 | 7432 |
| 7447 | 7433 |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7847 const char* stack_str = | 7833 const char* stack_str = |
| 7848 "<Received error while converting stack trace to string>"; | 7834 "<Received error while converting stack trace to string>"; |
| 7849 if (!strtmp.IsError()) { | 7835 if (!strtmp.IsError()) { |
| 7850 stack_str = strtmp.ToCString(); | 7836 stack_str = strtmp.ToCString(); |
| 7851 } | 7837 } |
| 7852 | 7838 |
| 7853 const char* format = "Unhandled exception:\n%s\n%s"; | 7839 const char* format = "Unhandled exception:\n%s\n%s"; |
| 7854 int len = (strlen(exc_str) + strlen(stack_str) + strlen(format) | 7840 int len = (strlen(exc_str) + strlen(stack_str) + strlen(format) |
| 7855 - 4 // Two '%s' | 7841 - 4 // Two '%s' |
| 7856 + 1); // '\0' | 7842 + 1); // '\0' |
| 7857 char* chars = reinterpret_cast<char*>(isolate->current_zone()->Allocate(len)); | 7843 char* chars = isolate->current_zone()->Alloc<char>(len); |
| 7858 OS::SNPrint(chars, len, format, exc_str, stack_str); | 7844 OS::SNPrint(chars, len, format, exc_str, stack_str); |
| 7859 return chars; | 7845 return chars; |
| 7860 } | 7846 } |
| 7861 | 7847 |
| 7862 | 7848 |
| 7863 const char* UnhandledException::ToCString() const { | 7849 const char* UnhandledException::ToCString() const { |
| 7864 return "UnhandledException"; | 7850 return "UnhandledException"; |
| 7865 } | 7851 } |
| 7866 | 7852 |
| 7867 | 7853 |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8131 AbstractTypeArguments& type_arguments = AbstractTypeArguments::Handle(); | 8117 AbstractTypeArguments& type_arguments = AbstractTypeArguments::Handle(); |
| 8132 const intptr_t num_type_arguments = cls.NumTypeArguments(); | 8118 const intptr_t num_type_arguments = cls.NumTypeArguments(); |
| 8133 if (num_type_arguments > 0) { | 8119 if (num_type_arguments > 0) { |
| 8134 type_arguments = GetTypeArguments(); | 8120 type_arguments = GetTypeArguments(); |
| 8135 } | 8121 } |
| 8136 const Type& type = | 8122 const Type& type = |
| 8137 Type::Handle(Type::New(cls, type_arguments, Scanner::kDummyTokenIndex)); | 8123 Type::Handle(Type::New(cls, type_arguments, Scanner::kDummyTokenIndex)); |
| 8138 const String& type_name = String::Handle(type.Name()); | 8124 const String& type_name = String::Handle(type.Name()); |
| 8139 // Calculate the size of the string. | 8125 // Calculate the size of the string. |
| 8140 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1; | 8126 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1; |
| 8141 char* chars = reinterpret_cast<char*>( | 8127 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 8142 Isolate::Current()->current_zone()->Allocate(len)); | |
| 8143 OS::SNPrint(chars, len, kFormat, type_name.ToCString()); | 8128 OS::SNPrint(chars, len, kFormat, type_name.ToCString()); |
| 8144 return chars; | 8129 return chars; |
| 8145 } | 8130 } |
| 8146 } | 8131 } |
| 8147 | 8132 |
| 8148 | 8133 |
| 8149 const char* Number::ToCString() const { | 8134 const char* Number::ToCString() const { |
| 8150 // Number is an interface. No instances of Number should exist. | 8135 // Number is an interface. No instances of Number should exist. |
| 8151 UNREACHABLE(); | 8136 UNREACHABLE(); |
| 8152 return "Number"; | 8137 return "Number"; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8256 } | 8241 } |
| 8257 UNREACHABLE(); | 8242 UNREACHABLE(); |
| 8258 return 0; | 8243 return 0; |
| 8259 } | 8244 } |
| 8260 | 8245 |
| 8261 | 8246 |
| 8262 const char* Smi::ToCString() const { | 8247 const char* Smi::ToCString() const { |
| 8263 const char* kFormat = "%ld"; | 8248 const char* kFormat = "%ld"; |
| 8264 // Calculate the size of the string. | 8249 // Calculate the size of the string. |
| 8265 intptr_t len = OS::SNPrint(NULL, 0, kFormat, Value()) + 1; | 8250 intptr_t len = OS::SNPrint(NULL, 0, kFormat, Value()) + 1; |
| 8266 char* chars = reinterpret_cast<char*>( | 8251 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 8267 Isolate::Current()->current_zone()->Allocate(len)); | |
| 8268 OS::SNPrint(chars, len, kFormat, Value()); | 8252 OS::SNPrint(chars, len, kFormat, Value()); |
| 8269 return chars; | 8253 return chars; |
| 8270 } | 8254 } |
| 8271 | 8255 |
| 8272 | 8256 |
| 8273 RawClass* Smi::Class() { | 8257 RawClass* Smi::Class() { |
| 8274 return Isolate::Current()->object_store()->smi_class(); | 8258 return Isolate::Current()->object_store()->smi_class(); |
| 8275 } | 8259 } |
| 8276 | 8260 |
| 8277 | 8261 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8371 } | 8355 } |
| 8372 UNREACHABLE(); | 8356 UNREACHABLE(); |
| 8373 return 0; | 8357 return 0; |
| 8374 } | 8358 } |
| 8375 | 8359 |
| 8376 | 8360 |
| 8377 const char* Mint::ToCString() const { | 8361 const char* Mint::ToCString() const { |
| 8378 const char* kFormat = "%lld"; | 8362 const char* kFormat = "%lld"; |
| 8379 // Calculate the size of the string. | 8363 // Calculate the size of the string. |
| 8380 intptr_t len = OS::SNPrint(NULL, 0, kFormat, value()) + 1; | 8364 intptr_t len = OS::SNPrint(NULL, 0, kFormat, value()) + 1; |
| 8381 char* chars = reinterpret_cast<char*>( | 8365 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 8382 Isolate::Current()->current_zone()->Allocate(len)); | |
| 8383 OS::SNPrint(chars, len, kFormat, value()); | 8366 OS::SNPrint(chars, len, kFormat, value()); |
| 8384 return chars; | 8367 return chars; |
| 8385 } | 8368 } |
| 8386 | 8369 |
| 8387 | 8370 |
| 8388 void Double::set_value(double value) const { | 8371 void Double::set_value(double value) const { |
| 8389 raw_ptr()->value_ = value; | 8372 raw_ptr()->value_ = value; |
| 8390 } | 8373 } |
| 8391 | 8374 |
| 8392 | 8375 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8492 | 8475 |
| 8493 | 8476 |
| 8494 const char* Double::ToCString() const { | 8477 const char* Double::ToCString() const { |
| 8495 if (isnan(value())) { | 8478 if (isnan(value())) { |
| 8496 return "NaN"; | 8479 return "NaN"; |
| 8497 } | 8480 } |
| 8498 if (isinf(value())) { | 8481 if (isinf(value())) { |
| 8499 return value() < 0 ? "-Infinity" : "Infinity"; | 8482 return value() < 0 ? "-Infinity" : "Infinity"; |
| 8500 } | 8483 } |
| 8501 const int kBufferSize = 128; | 8484 const int kBufferSize = 128; |
| 8502 char* buffer = reinterpret_cast<char*>( | 8485 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(kBufferSize); |
| 8503 Isolate::Current()->current_zone()->Allocate(kBufferSize)); | |
| 8504 buffer[kBufferSize - 1] = '\0'; | 8486 buffer[kBufferSize - 1] = '\0'; |
| 8505 DoubleToCString(value(), buffer, kBufferSize); | 8487 DoubleToCString(value(), buffer, kBufferSize); |
| 8506 return buffer; | 8488 return buffer; |
| 8507 } | 8489 } |
| 8508 | 8490 |
| 8509 | 8491 |
| 8510 bool Bigint::Equals(const Instance& other) const { | 8492 bool Bigint::Equals(const Instance& other) const { |
| 8511 if (this->raw() == other.raw()) { | 8493 if (this->raw() == other.raw()) { |
| 8512 // Both handles point to the same raw instance. | 8494 // Both handles point to the same raw instance. |
| 8513 return true; | 8495 return true; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8583 space); | 8565 space); |
| 8584 NoGCScope no_gc; | 8566 NoGCScope no_gc; |
| 8585 result ^= raw; | 8567 result ^= raw; |
| 8586 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. | 8568 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. |
| 8587 result.raw_ptr()->signed_length_ = length; // Chunk length in use. | 8569 result.raw_ptr()->signed_length_ = length; // Chunk length in use. |
| 8588 } | 8570 } |
| 8589 return result.raw(); | 8571 return result.raw(); |
| 8590 } | 8572 } |
| 8591 | 8573 |
| 8592 | 8574 |
| 8593 static uword ZoneAllocator(intptr_t size) { | 8575 static uword BigintAllocator(intptr_t size) { |
| 8594 Zone* zone = Isolate::Current()->current_zone(); | 8576 Zone* zone = Isolate::Current()->current_zone(); |
| 8595 return zone->Allocate(size); | 8577 return zone->AllocUnsafe(size); |
| 8596 } | 8578 } |
| 8597 | 8579 |
| 8598 | 8580 |
| 8599 const char* Bigint::ToCString() const { | 8581 const char* Bigint::ToCString() const { |
| 8600 return BigintOperations::ToDecimalCString(*this, &ZoneAllocator); | 8582 return BigintOperations::ToDecimalCString(*this, &BigintAllocator); |
| 8601 } | 8583 } |
| 8602 | 8584 |
| 8603 | 8585 |
| 8604 class StringHasher : ValueObject { | 8586 class StringHasher : ValueObject { |
| 8605 public: | 8587 public: |
| 8606 StringHasher() : hash_(0) {} | 8588 StringHasher() : hash_(0) {} |
| 8607 void Add(int32_t ch) { | 8589 void Add(int32_t ch) { |
| 8608 hash_ += ch; | 8590 hash_ += ch; |
| 8609 hash_ += hash_ << 10; | 8591 hash_ += hash_ << 10; |
| 8610 hash_ ^= hash_ >> 6; | 8592 hash_ ^= hash_ >> 6; |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9087 } | 9069 } |
| 9088 | 9070 |
| 9089 | 9071 |
| 9090 RawString* String::NewFormatted(const char* format, ...) { | 9072 RawString* String::NewFormatted(const char* format, ...) { |
| 9091 va_list args; | 9073 va_list args; |
| 9092 va_start(args, format); | 9074 va_start(args, format); |
| 9093 intptr_t len = OS::VSNPrint(NULL, 0, format, args); | 9075 intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
| 9094 va_end(args); | 9076 va_end(args); |
| 9095 | 9077 |
| 9096 Zone* zone = Isolate::Current()->current_zone(); | 9078 Zone* zone = Isolate::Current()->current_zone(); |
| 9097 char* buffer = reinterpret_cast<char*>(zone->Allocate(len + 1)); | 9079 char* buffer = zone->Alloc<char>(len + 1); |
| 9098 va_list args2; | 9080 va_list args2; |
| 9099 va_start(args2, format); | 9081 va_start(args2, format); |
| 9100 OS::VSNPrint(buffer, (len + 1), format, args2); | 9082 OS::VSNPrint(buffer, (len + 1), format, args2); |
| 9101 va_end(args2); | 9083 va_end(args2); |
| 9102 | 9084 |
| 9103 return String::New(buffer); | 9085 return String::New(buffer); |
| 9104 } | 9086 } |
| 9105 | 9087 |
| 9106 | 9088 |
| 9107 RawString* String::Concat(const String& str1, | 9089 RawString* String::Concat(const String& str1, |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9192 result ^= FourByteString::New(length, space); | 9174 result ^= FourByteString::New(length, space); |
| 9193 } | 9175 } |
| 9194 String::Copy(result, 0, str, begin_index, length); | 9176 String::Copy(result, 0, str, begin_index, length); |
| 9195 return result.raw(); | 9177 return result.raw(); |
| 9196 } | 9178 } |
| 9197 | 9179 |
| 9198 | 9180 |
| 9199 const char* String::ToCString() const { | 9181 const char* String::ToCString() const { |
| 9200 intptr_t len = Utf8::Length(*this); | 9182 intptr_t len = Utf8::Length(*this); |
| 9201 Zone* zone = Isolate::Current()->current_zone(); | 9183 Zone* zone = Isolate::Current()->current_zone(); |
| 9202 char* result = reinterpret_cast<char*>(zone->Allocate(len + 1)); | 9184 char* result = zone->Alloc<char>(len + 1); |
| 9203 Utf8::Encode(*this, result, len); | 9185 Utf8::Encode(*this, result, len); |
| 9204 result[len] = 0; | 9186 result[len] = 0; |
| 9205 return result; | 9187 return result; |
| 9206 } | 9188 } |
| 9207 | 9189 |
| 9208 | 9190 |
| 9209 RawString* String::Transform(int32_t (*mapping)(int32_t ch), | 9191 RawString* String::Transform(int32_t (*mapping)(int32_t ch), |
| 9210 const String& str, | 9192 const String& str, |
| 9211 Heap::Space space) { | 9193 Heap::Space space) { |
| 9212 ASSERT(!str.IsNull()); | 9194 ASSERT(!str.IsNull()); |
| (...skipping 1578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10791 | 10773 |
| 10792 | 10774 |
| 10793 const char* Closure::ToCString() const { | 10775 const char* Closure::ToCString() const { |
| 10794 const Function& fun = Function::Handle(function()); | 10776 const Function& fun = Function::Handle(function()); |
| 10795 const bool is_implicit_closure = fun.IsImplicitClosureFunction(); | 10777 const bool is_implicit_closure = fun.IsImplicitClosureFunction(); |
| 10796 const char* fun_sig = String::Handle(fun.Signature()).ToCString(); | 10778 const char* fun_sig = String::Handle(fun.Signature()).ToCString(); |
| 10797 const char* from = is_implicit_closure ? " from " : ""; | 10779 const char* from = is_implicit_closure ? " from " : ""; |
| 10798 const char* fun_desc = is_implicit_closure ? fun.ToCString() : ""; | 10780 const char* fun_desc = is_implicit_closure ? fun.ToCString() : ""; |
| 10799 const char* format = "Closure: %s%s%s"; | 10781 const char* format = "Closure: %s%s%s"; |
| 10800 intptr_t len = OS::SNPrint(NULL, 0, format, fun_sig, from, fun_desc) + 1; | 10782 intptr_t len = OS::SNPrint(NULL, 0, format, fun_sig, from, fun_desc) + 1; |
| 10801 char* chars = reinterpret_cast<char*>( | 10783 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 10802 Isolate::Current()->current_zone()->Allocate(len)); | |
| 10803 OS::SNPrint(chars, len, format, fun_sig, from, fun_desc); | 10784 OS::SNPrint(chars, len, format, fun_sig, from, fun_desc); |
| 10804 return chars; | 10785 return chars; |
| 10805 } | 10786 } |
| 10806 | 10787 |
| 10807 | 10788 |
| 10808 intptr_t Stacktrace::Length() const { | 10789 intptr_t Stacktrace::Length() const { |
| 10809 const Array& code_array = Array::Handle(raw_ptr()->code_array_); | 10790 const Array& code_array = Array::Handle(raw_ptr()->code_array_); |
| 10810 return code_array.Length(); | 10791 return code_array.Length(); |
| 10811 } | 10792 } |
| 10812 | 10793 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10954 } | 10935 } |
| 10955 intptr_t len = OS::SNPrint(NULL, 0, kFormat, | 10936 intptr_t len = OS::SNPrint(NULL, 0, kFormat, |
| 10956 i, | 10937 i, |
| 10957 class_name.ToCString(), | 10938 class_name.ToCString(), |
| 10958 function_class.IsTopLevel() ? "" : ".", | 10939 function_class.IsTopLevel() ? "" : ".", |
| 10959 function_name.ToCString(), | 10940 function_name.ToCString(), |
| 10960 url.ToCString(), | 10941 url.ToCString(), |
| 10961 line, column, | 10942 line, column, |
| 10962 code.EntryPoint()); | 10943 code.EntryPoint()); |
| 10963 total_len += len; | 10944 total_len += len; |
| 10964 char* chars = reinterpret_cast<char*>( | 10945 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 10965 Isolate::Current()->current_zone()->Allocate(len + 1)); | |
| 10966 OS::SNPrint(chars, (len + 1), kFormat, | 10946 OS::SNPrint(chars, (len + 1), kFormat, |
| 10967 i, | 10947 i, |
| 10968 class_name.ToCString(), | 10948 class_name.ToCString(), |
| 10969 function_class.IsTopLevel() ? "" : ".", | 10949 function_class.IsTopLevel() ? "" : ".", |
| 10970 function_name.ToCString(), | 10950 function_name.ToCString(), |
| 10971 url.ToCString(), | 10951 url.ToCString(), |
| 10972 line, column, | 10952 line, column, |
| 10973 code.EntryPoint()); | 10953 code.EntryPoint()); |
| 10974 frame_strings.Add(chars); | 10954 frame_strings.Add(chars); |
| 10975 } | 10955 } |
| 10976 | 10956 |
| 10977 // Now concatentate the frame descriptions into a single C string. | 10957 // Now concatentate the frame descriptions into a single C string. |
| 10978 char* chars = reinterpret_cast<char*>( | 10958 char* chars = Isolate::Current()->current_zone()->Alloc<char>(total_len + 1); |
| 10979 Isolate::Current()->current_zone()->Allocate(total_len + 1)); | |
| 10980 intptr_t index = 0; | 10959 intptr_t index = 0; |
| 10981 for (intptr_t i = 0; i < frame_strings.length(); i++) { | 10960 for (intptr_t i = 0; i < frame_strings.length(); i++) { |
| 10982 index += OS::SNPrint((chars + index), | 10961 index += OS::SNPrint((chars + index), |
| 10983 (total_len + 1 - index), | 10962 (total_len + 1 - index), |
| 10984 "%s", | 10963 "%s", |
| 10985 frame_strings[i]); | 10964 frame_strings[i]); |
| 10986 } | 10965 } |
| 10987 return chars; | 10966 return chars; |
| 10988 } | 10967 } |
| 10989 | 10968 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11078 return false; | 11057 return false; |
| 11079 } | 11058 } |
| 11080 return true; | 11059 return true; |
| 11081 } | 11060 } |
| 11082 | 11061 |
| 11083 | 11062 |
| 11084 const char* JSRegExp::ToCString() const { | 11063 const char* JSRegExp::ToCString() const { |
| 11085 const String& str = String::Handle(pattern()); | 11064 const String& str = String::Handle(pattern()); |
| 11086 const char* format = "JSRegExp: pattern=%s flags=%s"; | 11065 const char* format = "JSRegExp: pattern=%s flags=%s"; |
| 11087 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 11066 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
| 11088 char* chars = reinterpret_cast<char*>( | 11067 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 11089 Isolate::Current()->current_zone()->Allocate(len + 1)); | |
| 11090 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 11068 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
| 11091 return chars; | 11069 return chars; |
| 11092 } | 11070 } |
| 11093 | 11071 |
| 11094 } // namespace dart | 11072 } // namespace dart |
| OLD | NEW |