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

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

Issue 10869063: Add attributions so printf like functions can have their arguments checked. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: rebased Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/os.h » ('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/bigint_operations.h" 10 #include "vm/bigint_operations.h"
(...skipping 3525 matching lines...) Expand 10 before | Expand all | Expand 10 after
3536 } 3536 }
3537 instantiated_array.SetTypeAt(i, type); 3537 instantiated_array.SetTypeAt(i, type);
3538 } 3538 }
3539 return instantiated_array.raw(); 3539 return instantiated_array.raw();
3540 } 3540 }
3541 3541
3542 3542
3543 RawTypeArguments* TypeArguments::New(intptr_t len, Heap::Space space) { 3543 RawTypeArguments* TypeArguments::New(intptr_t len, Heap::Space space) {
3544 if (len < 0 || len > kMaxElements) { 3544 if (len < 0 || len > kMaxElements) {
3545 // This should be caught before we reach here. 3545 // This should be caught before we reach here.
3546 FATAL1("Fatal error in TypeArguments::New: invalid len %ld\n", len); 3546 FATAL1("Fatal error in TypeArguments::New: invalid len %"Pd"\n", len);
3547 } 3547 }
3548 TypeArguments& result = TypeArguments::Handle(); 3548 TypeArguments& result = TypeArguments::Handle();
3549 { 3549 {
3550 RawObject* raw = Object::Allocate(TypeArguments::kClassId, 3550 RawObject* raw = Object::Allocate(TypeArguments::kClassId,
3551 TypeArguments::InstanceSize(len), 3551 TypeArguments::InstanceSize(len),
3552 space); 3552 space);
3553 NoGCScope no_gc; 3553 NoGCScope no_gc;
3554 result ^= raw; 3554 result ^= raw;
3555 // Length must be set before we start storing into the array. 3555 // Length must be set before we start storing into the array.
3556 result.SetLength(len); 3556 result.SetLength(len);
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
3968 int num_named_arguments, 3968 int num_named_arguments,
3969 String* error_message) const { 3969 String* error_message) const {
3970 if (num_arguments > NumberOfParameters()) { 3970 if (num_arguments > NumberOfParameters()) {
3971 if (error_message != NULL) { 3971 if (error_message != NULL) {
3972 const intptr_t kMessageBufferSize = 64; 3972 const intptr_t kMessageBufferSize = 64;
3973 char message_buffer[kMessageBufferSize]; 3973 char message_buffer[kMessageBufferSize];
3974 // Hide implicit parameters to the user. 3974 // Hide implicit parameters to the user.
3975 const intptr_t num_hidden_params = NumberOfImplicitParameters(); 3975 const intptr_t num_hidden_params = NumberOfImplicitParameters();
3976 OS::SNPrint(message_buffer, 3976 OS::SNPrint(message_buffer,
3977 kMessageBufferSize, 3977 kMessageBufferSize,
3978 "%d passed, %s%d expected", 3978 "%"Pd" passed, %s%"Pd" expected",
3979 num_arguments - num_hidden_params, 3979 num_arguments - num_hidden_params,
3980 num_optional_parameters() > 0 ? "at most " : "", 3980 num_optional_parameters() > 0 ? "at most " : "",
3981 NumberOfParameters() - num_hidden_params); 3981 NumberOfParameters() - num_hidden_params);
3982 *error_message = String::New(message_buffer); 3982 *error_message = String::New(message_buffer);
3983 } 3983 }
3984 return false; // Too many arguments. 3984 return false; // Too many arguments.
3985 } 3985 }
3986 const int num_positional_args = num_arguments - num_named_arguments; 3986 const int num_positional_args = num_arguments - num_named_arguments;
3987 if (num_positional_args < num_fixed_parameters()) { 3987 if (num_positional_args < num_fixed_parameters()) {
3988 if (error_message != NULL) { 3988 if (error_message != NULL) {
3989 const intptr_t kMessageBufferSize = 64; 3989 const intptr_t kMessageBufferSize = 64;
3990 char message_buffer[kMessageBufferSize]; 3990 char message_buffer[kMessageBufferSize];
3991 // Hide implicit parameters to the user. 3991 // Hide implicit parameters to the user.
3992 const intptr_t num_hidden_params = NumberOfImplicitParameters(); 3992 const intptr_t num_hidden_params = NumberOfImplicitParameters();
3993 OS::SNPrint(message_buffer, 3993 OS::SNPrint(message_buffer,
3994 kMessageBufferSize, 3994 kMessageBufferSize,
3995 "%d %spassed, %d expected", 3995 "%"Pd" %spassed, %"Pd" expected",
3996 num_positional_args - num_hidden_params, 3996 num_positional_args - num_hidden_params,
3997 num_optional_parameters() > 0 ? "positional " : "", 3997 num_optional_parameters() > 0 ? "positional " : "",
3998 num_fixed_parameters() - num_hidden_params); 3998 num_fixed_parameters() - num_hidden_params);
3999 *error_message = String::New(message_buffer); 3999 *error_message = String::New(message_buffer);
4000 } 4000 }
4001 return false; // Too few arguments. 4001 return false; // Too few arguments.
4002 } 4002 }
4003 return true; 4003 return true;
4004 } 4004 }
4005 4005
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after
4967 index += 1; 4967 index += 1;
4968 } 4968 }
4969 return iterator.CurrentPosition(); 4969 return iterator.CurrentPosition();
4970 } 4970 }
4971 4971
4972 4972
4973 RawTokenStream* TokenStream::New(intptr_t len) { 4973 RawTokenStream* TokenStream::New(intptr_t len) {
4974 ASSERT(Object::token_stream_class() != Class::null()); 4974 ASSERT(Object::token_stream_class() != Class::null());
4975 if (len < 0 || len > kMaxElements) { 4975 if (len < 0 || len > kMaxElements) {
4976 // This should be caught before we reach here. 4976 // This should be caught before we reach here.
4977 FATAL1("Fatal error in TokenStream::New: invalid len %ld\n", len); 4977 FATAL1("Fatal error in TokenStream::New: invalid len %"Pd"\n", len);
4978 } 4978 }
4979 TokenStream& result = TokenStream::Handle(); 4979 TokenStream& result = TokenStream::Handle();
4980 { 4980 {
4981 RawObject* raw = Object::Allocate(TokenStream::kClassId, 4981 RawObject* raw = Object::Allocate(TokenStream::kClassId,
4982 TokenStream::InstanceSize(len), 4982 TokenStream::InstanceSize(len),
4983 Heap::kOld); 4983 Heap::kOld);
4984 NoGCScope no_gc; 4984 NoGCScope no_gc;
4985 result ^= raw; 4985 result ^= raw;
4986 result.SetLength(len); 4986 result.SetLength(len);
4987 } 4987 }
(...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after
6528 } 6528 }
6529 } 6529 }
6530 return error.raw(); 6530 return error.raw();
6531 } 6531 }
6532 6532
6533 6533
6534 RawInstructions* Instructions::New(intptr_t size) { 6534 RawInstructions* Instructions::New(intptr_t size) {
6535 ASSERT(Object::instructions_class() != Class::null()); 6535 ASSERT(Object::instructions_class() != Class::null());
6536 if (size < 0 || size > kMaxElements) { 6536 if (size < 0 || size > kMaxElements) {
6537 // This should be caught before we reach here. 6537 // This should be caught before we reach here.
6538 FATAL1("Fatal error in Instructions::New: invalid size %ld\n", size); 6538 FATAL1("Fatal error in Instructions::New: invalid size %"Pd"\n", size);
6539 } 6539 }
6540 Instructions& result = Instructions::Handle(); 6540 Instructions& result = Instructions::Handle();
6541 { 6541 {
6542 uword aligned_size = Instructions::InstanceSize(size); 6542 uword aligned_size = Instructions::InstanceSize(size);
6543 RawObject* raw = Object::Allocate(Instructions::kClassId, 6543 RawObject* raw = Object::Allocate(Instructions::kClassId,
6544 aligned_size, 6544 aligned_size,
6545 Heap::kCode); 6545 Heap::kCode);
6546 NoGCScope no_gc; 6546 NoGCScope no_gc;
6547 // TODO(iposva): Remove premarking once old and code spaces are merged. 6547 // TODO(iposva): Remove premarking once old and code spaces are merged.
6548 raw->SetMarkBit(); 6548 raw->SetMarkBit();
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
6631 intptr_t PcDescriptors::DeoptReason(intptr_t index) const { 6631 intptr_t PcDescriptors::DeoptReason(intptr_t index) const {
6632 ASSERT(DescriptorKind(index) == kDeoptIndex); 6632 ASSERT(DescriptorKind(index) == kDeoptIndex);
6633 return *(EntryAddr(index, kDeoptReasonEntry)); 6633 return *(EntryAddr(index, kDeoptReasonEntry));
6634 } 6634 }
6635 6635
6636 6636
6637 RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors) { 6637 RawPcDescriptors* PcDescriptors::New(intptr_t num_descriptors) {
6638 ASSERT(Object::pc_descriptors_class() != Class::null()); 6638 ASSERT(Object::pc_descriptors_class() != Class::null());
6639 if (num_descriptors < 0 || num_descriptors > kMaxElements) { 6639 if (num_descriptors < 0 || num_descriptors > kMaxElements) {
6640 // This should be caught before we reach here. 6640 // This should be caught before we reach here.
6641 FATAL1("Fatal error in PcDescriptors::New: invalid num_descriptors %ld\n", 6641 FATAL1("Fatal error in PcDescriptors::New: "
6642 num_descriptors); 6642 "invalid num_descriptors %"Pd"\n", num_descriptors);
6643 } 6643 }
6644 PcDescriptors& result = PcDescriptors::Handle(); 6644 PcDescriptors& result = PcDescriptors::Handle();
6645 { 6645 {
6646 uword size = PcDescriptors::InstanceSize(num_descriptors); 6646 uword size = PcDescriptors::InstanceSize(num_descriptors);
6647 RawObject* raw = Object::Allocate(PcDescriptors::kClassId, 6647 RawObject* raw = Object::Allocate(PcDescriptors::kClassId,
6648 size, 6648 size,
6649 Heap::kOld); 6649 Heap::kOld);
6650 NoGCScope no_gc; 6650 NoGCScope no_gc;
6651 result ^= raw; 6651 result ^= raw;
6652 result.SetLength(num_descriptors); 6652 result.SetLength(num_descriptors);
(...skipping 29 matching lines...) Expand all
6682 6682
6683 const char* PcDescriptors::ToCString() const { 6683 const char* PcDescriptors::ToCString() const {
6684 if (Length() == 0) { 6684 if (Length() == 0) {
6685 return "No pc descriptors\n"; 6685 return "No pc descriptors\n";
6686 } 6686 }
6687 // 4 bits per hex digit. 6687 // 4 bits per hex digit.
6688 const int addr_width = kBitsPerWord / 4; 6688 const int addr_width = kBitsPerWord / 4;
6689 // "*" in a printf format specifier tells it to read the field width from 6689 // "*" in a printf format specifier tells it to read the field width from
6690 // the printf argument list. 6690 // the printf argument list.
6691 const char* kFormat = 6691 const char* kFormat =
6692 "0x%-*" PRIxPTR "\t%s\t%" PRIdPTR "\t%" PRIdPTR "\t%" PRIdPTR "\n"; 6692 "%#-*"Px"\t%s\t%"Pd"\t%"Pd"\t%"Pd"\n";
6693 // First compute the buffer size required. 6693 // First compute the buffer size required.
6694 intptr_t len = 1; // Trailing '\0'. 6694 intptr_t len = 1; // Trailing '\0'.
6695 for (intptr_t i = 0; i < Length(); i++) { 6695 for (intptr_t i = 0; i < Length(); i++) {
6696 intptr_t token_pos_or_deopt_reason = DescriptorKind(i) == kDeoptIndex ? 6696 intptr_t token_pos_or_deopt_reason = DescriptorKind(i) == kDeoptIndex ?
6697 DeoptReason(i) : TokenPos(i); 6697 DeoptReason(i) : TokenPos(i);
6698 intptr_t multi_purpose_index = DescriptorKind(i) == kDeoptIndex ? 6698 intptr_t multi_purpose_index = DescriptorKind(i) == kDeoptIndex ?
6699 DeoptIndex(i) : TryIndex(i); 6699 DeoptIndex(i) : TryIndex(i);
6700 len += OS::SNPrint(NULL, 0, kFormat, addr_width, 6700 len += OS::SNPrint(NULL, 0, kFormat, addr_width,
6701 PC(i), 6701 PC(i),
6702 KindAsStr(i), 6702 KindAsStr(i),
(...skipping 26 matching lines...) Expand all
6729 // - No two ic-call descriptors have the same deoptimization id (type feedback). 6729 // - No two ic-call descriptors have the same deoptimization id (type feedback).
6730 // - No two descriptors of same kind have the same PC. 6730 // - No two descriptors of same kind have the same PC.
6731 // A function without unique ids is marked as non-optimizable (e.g., because of 6731 // A function without unique ids is marked as non-optimizable (e.g., because of
6732 // finally blocks). 6732 // finally blocks).
6733 void PcDescriptors::Verify(bool check_ids) const { 6733 void PcDescriptors::Verify(bool check_ids) const {
6734 #if defined(DEBUG) 6734 #if defined(DEBUG)
6735 // TODO(srdjan): Implement a more efficient way to check, currently drop 6735 // TODO(srdjan): Implement a more efficient way to check, currently drop
6736 // the check for too large number of descriptors. 6736 // the check for too large number of descriptors.
6737 if (Length() > 3000) { 6737 if (Length() > 3000) {
6738 if (FLAG_trace_compiler) { 6738 if (FLAG_trace_compiler) {
6739 OS::Print("Not checking pc decriptors, length %d\n", Length()); 6739 OS::Print("Not checking pc decriptors, length %"Pd"\n", Length());
6740 } 6740 }
6741 return; 6741 return;
6742 } 6742 }
6743 for (intptr_t i = 0; i < Length(); i++) { 6743 for (intptr_t i = 0; i < Length(); i++) {
6744 uword pc = PC(i); 6744 uword pc = PC(i);
6745 PcDescriptors::Kind kind = DescriptorKind(i); 6745 PcDescriptors::Kind kind = DescriptorKind(i);
6746 // 'deopt_id' is set for kDeopt and kIcCall and must be unique for one kind. 6746 // 'deopt_id' is set for kDeopt and kIcCall and must be unique for one kind.
6747 intptr_t deopt_id = Isolate::kNoDeoptId; 6747 intptr_t deopt_id = Isolate::kNoDeoptId;
6748 if (check_ids) { 6748 if (check_ids) {
6749 if ((DescriptorKind(i) == PcDescriptors::kDeoptBefore) || 6749 if ((DescriptorKind(i) == PcDescriptors::kDeoptBefore) ||
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
6800 ASSERT(bmap != NULL); 6800 ASSERT(bmap != NULL);
6801 Stackmap& result = Stackmap::Handle(); 6801 Stackmap& result = Stackmap::Handle();
6802 // Guard against integer overflow of the instance size computation. 6802 // Guard against integer overflow of the instance size computation.
6803 intptr_t length = bmap->Length(); 6803 intptr_t length = bmap->Length();
6804 intptr_t payload_size = 6804 intptr_t payload_size =
6805 Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte; 6805 Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte;
6806 if ((payload_size < 0) || 6806 if ((payload_size < 0) ||
6807 (payload_size > 6807 (payload_size >
6808 (kSmiMax - static_cast<intptr_t>(sizeof(RawStackmap))))) { 6808 (kSmiMax - static_cast<intptr_t>(sizeof(RawStackmap))))) {
6809 // This should be caught before we reach here. 6809 // This should be caught before we reach here.
6810 FATAL1("Fatal error in Stackmap::New: invalid length %" PRIdPTR "\n", 6810 FATAL1("Fatal error in Stackmap::New: invalid length %"Pd"\n",
6811 length); 6811 length);
6812 } 6812 }
6813 { 6813 {
6814 // Stackmap data objects are associated with a code object, allocate them 6814 // Stackmap data objects are associated with a code object, allocate them
6815 // in old generation. 6815 // in old generation.
6816 RawObject* raw = Object::Allocate(Stackmap::kClassId, 6816 RawObject* raw = Object::Allocate(Stackmap::kClassId,
6817 Stackmap::InstanceSize(length), 6817 Stackmap::InstanceSize(length),
6818 Heap::kOld); 6818 Heap::kOld);
6819 NoGCScope no_gc; 6819 NoGCScope no_gc;
6820 result ^= raw; 6820 result ^= raw;
6821 result.SetLength(length); 6821 result.SetLength(length);
6822 } 6822 }
6823 // When constructing a stackmap we store the pc offset in the stackmap's 6823 // When constructing a stackmap we store the pc offset in the stackmap's
6824 // PC. StackmapTableBuilder::FinalizeStackmaps will replace it with the pc 6824 // PC. StackmapTableBuilder::FinalizeStackmaps will replace it with the pc
6825 // address. 6825 // address.
6826 ASSERT(pc_offset >= 0); 6826 ASSERT(pc_offset >= 0);
6827 result.SetPC(pc_offset); 6827 result.SetPC(pc_offset);
6828 for (intptr_t i = 0; i < length; ++i) { 6828 for (intptr_t i = 0; i < length; ++i) {
6829 result.SetBit(i, bmap->Get(i)); 6829 result.SetBit(i, bmap->Get(i));
6830 } 6830 }
6831 result.SetRegisterBitCount(register_bit_count); 6831 result.SetRegisterBitCount(register_bit_count);
6832 return result.raw(); 6832 return result.raw();
6833 } 6833 }
6834 6834
6835 6835
6836 const char* Stackmap::ToCString() const { 6836 const char* Stackmap::ToCString() const {
6837 if (IsNull()) { 6837 if (IsNull()) {
6838 return "{null}"; 6838 return "{null}";
6839 } else { 6839 } else {
6840 const char* kFormat = "0x%" PRIxPTR ": "; 6840 const char* kFormat = "%#"Px": ";
6841 intptr_t fixed_length = OS::SNPrint(NULL, 0, kFormat, PC()) + 1; 6841 intptr_t fixed_length = OS::SNPrint(NULL, 0, kFormat, PC()) + 1;
6842 Isolate* isolate = Isolate::Current(); 6842 Isolate* isolate = Isolate::Current();
6843 // Guard against integer overflow in the computation of alloc_size. 6843 // Guard against integer overflow in the computation of alloc_size.
6844 // 6844 //
6845 // TODO(kmillikin): We could just truncate the string if someone 6845 // TODO(kmillikin): We could just truncate the string if someone
6846 // tries to print a 2 billion plus entry stackmap. 6846 // tries to print a 2 billion plus entry stackmap.
6847 if (Length() > (kIntptrMax - fixed_length)) { 6847 if (Length() > (kIntptrMax - fixed_length)) {
6848 FATAL1("Length() is unexpectedly large (%" PRIdPTR ")", Length()); 6848 FATAL1("Length() is unexpectedly large (%"Pd")", Length());
6849 } 6849 }
6850 intptr_t alloc_size = fixed_length + Length(); 6850 intptr_t alloc_size = fixed_length + Length();
6851 char* chars = isolate->current_zone()->Alloc<char>(alloc_size); 6851 char* chars = isolate->current_zone()->Alloc<char>(alloc_size);
6852 intptr_t index = OS::SNPrint(chars, alloc_size, kFormat, PC()); 6852 intptr_t index = OS::SNPrint(chars, alloc_size, kFormat, PC());
6853 for (intptr_t i = 0; i < Length(); i++) { 6853 for (intptr_t i = 0; i < Length(); i++) {
6854 chars[index++] = IsObject(i) ? '1' : '0'; 6854 chars[index++] = IsObject(i) ? '1' : '0';
6855 } 6855 }
6856 chars[index] = '\0'; 6856 chars[index] = '\0';
6857 return chars; 6857 return chars;
6858 } 6858 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
6890 UNIMPLEMENTED(); 6890 UNIMPLEMENTED();
6891 return "LocalVarDescriptors"; 6891 return "LocalVarDescriptors";
6892 } 6892 }
6893 6893
6894 6894
6895 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) { 6895 RawLocalVarDescriptors* LocalVarDescriptors::New(intptr_t num_variables) {
6896 ASSERT(Object::var_descriptors_class() != Class::null()); 6896 ASSERT(Object::var_descriptors_class() != Class::null());
6897 if (num_variables < 0 || num_variables > kMaxElements) { 6897 if (num_variables < 0 || num_variables > kMaxElements) {
6898 // This should be caught before we reach here. 6898 // This should be caught before we reach here.
6899 FATAL1("Fatal error in LocalVarDescriptors::New: " 6899 FATAL1("Fatal error in LocalVarDescriptors::New: "
6900 "invalid num_variables %ld\n", num_variables); 6900 "invalid num_variables %"Pd"\n", num_variables);
6901 } 6901 }
6902 LocalVarDescriptors& result = LocalVarDescriptors::Handle(); 6902 LocalVarDescriptors& result = LocalVarDescriptors::Handle();
6903 { 6903 {
6904 uword size = LocalVarDescriptors::InstanceSize(num_variables); 6904 uword size = LocalVarDescriptors::InstanceSize(num_variables);
6905 RawObject* raw = Object::Allocate(LocalVarDescriptors::kClassId, 6905 RawObject* raw = Object::Allocate(LocalVarDescriptors::kClassId,
6906 size, 6906 size,
6907 Heap::kOld); 6907 Heap::kOld);
6908 NoGCScope no_gc; 6908 NoGCScope no_gc;
6909 result ^= raw; 6909 result ^= raw;
6910 result.raw_ptr()->length_ = num_variables; 6910 result.raw_ptr()->length_ = num_variables;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
6950 void ExceptionHandlers::SetHandlerPC(intptr_t index, 6950 void ExceptionHandlers::SetHandlerPC(intptr_t index,
6951 intptr_t value) const { 6951 intptr_t value) const {
6952 *(EntryAddr(index, kHandlerPcEntry)) = value; 6952 *(EntryAddr(index, kHandlerPcEntry)) = value;
6953 } 6953 }
6954 6954
6955 6955
6956 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { 6956 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) {
6957 ASSERT(Object::exception_handlers_class() != Class::null()); 6957 ASSERT(Object::exception_handlers_class() != Class::null());
6958 if (num_handlers < 0 || num_handlers > kMaxElements) { 6958 if (num_handlers < 0 || num_handlers > kMaxElements) {
6959 // This should be caught before we reach here. 6959 // This should be caught before we reach here.
6960 FATAL1("Fatal error in ExceptionHandlers::New: invalid num_handlers %ld\n", 6960 FATAL1("Fatal error in ExceptionHandlers::New: "
6961 "invalid num_handlers %"Pd"\n",
6961 num_handlers); 6962 num_handlers);
6962 } 6963 }
6963 ExceptionHandlers& result = ExceptionHandlers::Handle(); 6964 ExceptionHandlers& result = ExceptionHandlers::Handle();
6964 { 6965 {
6965 uword size = ExceptionHandlers::InstanceSize(num_handlers); 6966 uword size = ExceptionHandlers::InstanceSize(num_handlers);
6966 RawObject* raw = Object::Allocate(ExceptionHandlers::kClassId, 6967 RawObject* raw = Object::Allocate(ExceptionHandlers::kClassId,
6967 size, 6968 size,
6968 Heap::kOld); 6969 Heap::kOld);
6969 NoGCScope no_gc; 6970 NoGCScope no_gc;
6970 result ^= raw; 6971 result ^= raw;
6971 result.SetLength(num_handlers); 6972 result.SetLength(num_handlers);
6972 } 6973 }
6973 return result.raw(); 6974 return result.raw();
6974 } 6975 }
6975 6976
6976 6977
6977 const char* ExceptionHandlers::ToCString() const { 6978 const char* ExceptionHandlers::ToCString() const {
6978 if (Length() == 0) { 6979 if (Length() == 0) {
6979 return "No exception handlers\n"; 6980 return "No exception handlers\n";
6980 } 6981 }
6981 // First compute the buffer size required. 6982 // First compute the buffer size required.
6982 const char* kFormat = "%" PRIdPTR " => 0x%" PRIxPTR "\n"; 6983 const char* kFormat = "%"Pd" => %#"Px"\n";
6983 intptr_t len = 1; // Trailing '\0'. 6984 intptr_t len = 1; // Trailing '\0'.
6984 for (intptr_t i = 0; i < Length(); i++) { 6985 for (intptr_t i = 0; i < Length(); i++) {
6985 len += OS::SNPrint(NULL, 0, kFormat, TryIndex(i), HandlerPC(i)); 6986 len += OS::SNPrint(NULL, 0, kFormat, TryIndex(i), HandlerPC(i));
6986 } 6987 }
6987 // Allocate the buffer. 6988 // Allocate the buffer.
6988 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len); 6989 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len);
6989 // Layout the fields in the buffer. 6990 // Layout the fields in the buffer.
6990 intptr_t index = 0; 6991 intptr_t index = 0;
6991 for (intptr_t i = 0; i < Length(); i++) { 6992 for (intptr_t i = 0; i < Length(); i++) {
6992 index += OS::SNPrint((buffer + index), 6993 index += OS::SNPrint((buffer + index),
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
7070 intptr_t from_index) const { 7071 intptr_t from_index) const {
7071 *(EntryAddr(index, kInstruction)) = instr_kind; 7072 *(EntryAddr(index, kInstruction)) = instr_kind;
7072 *(EntryAddr(index, kFromIndex)) = from_index; 7073 *(EntryAddr(index, kFromIndex)) = from_index;
7073 } 7074 }
7074 7075
7075 7076
7076 Code::Comments& Code::Comments::New(intptr_t count) { 7077 Code::Comments& Code::Comments::New(intptr_t count) {
7077 Comments* comments; 7078 Comments* comments;
7078 if (count < 0 || count > (kIntptrMax / kNumberOfEntries)) { 7079 if (count < 0 || count > (kIntptrMax / kNumberOfEntries)) {
7079 // This should be caught before we reach here. 7080 // This should be caught before we reach here.
7080 FATAL1("Fatal error in Code::Comments::New: invalid count %ld\n", count); 7081 FATAL1("Fatal error in Code::Comments::New: invalid count %"Pd"\n", count);
7081 } 7082 }
7082 if (count == 0) { 7083 if (count == 0) {
7083 comments = new Comments(Object::empty_array()); 7084 comments = new Comments(Object::empty_array());
7084 } else { 7085 } else {
7085 comments = new Comments(Array::New(count * kNumberOfEntries)); 7086 comments = new Comments(Array::New(count * kNumberOfEntries));
7086 } 7087 }
7087 return *comments; 7088 return *comments;
7088 } 7089 }
7089 7090
7090 7091
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
7146 7147
7147 7148
7148 void Code::set_comments(const Code::Comments& comments) const { 7149 void Code::set_comments(const Code::Comments& comments) const {
7149 StorePointer(&raw_ptr()->comments_, comments.comments_.raw()); 7150 StorePointer(&raw_ptr()->comments_, comments.comments_.raw());
7150 } 7151 }
7151 7152
7152 7153
7153 RawCode* Code::New(intptr_t pointer_offsets_length) { 7154 RawCode* Code::New(intptr_t pointer_offsets_length) {
7154 if (pointer_offsets_length < 0 || pointer_offsets_length > kMaxElements) { 7155 if (pointer_offsets_length < 0 || pointer_offsets_length > kMaxElements) {
7155 // This should be caught before we reach here. 7156 // This should be caught before we reach here.
7156 FATAL1("Fatal error in Code::New: invalid pointer_offsets_length %ld\n", 7157 FATAL1("Fatal error in Code::New: invalid pointer_offsets_length %"Pd"\n",
7157 pointer_offsets_length); 7158 pointer_offsets_length);
7158 } 7159 }
7159 ASSERT(Object::code_class() != Class::null()); 7160 ASSERT(Object::code_class() != Class::null());
7160 Code& result = Code::Handle(); 7161 Code& result = Code::Handle();
7161 { 7162 {
7162 uword size = Code::InstanceSize(pointer_offsets_length); 7163 uword size = Code::InstanceSize(pointer_offsets_length);
7163 RawObject* raw = Object::Allocate(Code::kClassId, size, Heap::kOld); 7164 RawObject* raw = Object::Allocate(Code::kClassId, size, Heap::kOld);
7164 NoGCScope no_gc; 7165 NoGCScope no_gc;
7165 result ^= raw; 7166 result ^= raw;
7166 result.set_pointer_offsets_length(pointer_offsets_length); 7167 result.set_pointer_offsets_length(pointer_offsets_length);
(...skipping 11 matching lines...) Expand all
7178 Instructions& instrs = 7179 Instructions& instrs =
7179 Instructions::ZoneHandle(Instructions::New(assembler->CodeSize())); 7180 Instructions::ZoneHandle(Instructions::New(assembler->CodeSize()));
7180 7181
7181 // Copy the instructions into the instruction area and apply all fixups. 7182 // Copy the instructions into the instruction area and apply all fixups.
7182 // Embedded pointers are still in handles at this point. 7183 // Embedded pointers are still in handles at this point.
7183 MemoryRegion region(reinterpret_cast<void*>(instrs.EntryPoint()), 7184 MemoryRegion region(reinterpret_cast<void*>(instrs.EntryPoint()),
7184 instrs.size()); 7185 instrs.size());
7185 assembler->FinalizeInstructions(region); 7186 assembler->FinalizeInstructions(region);
7186 Dart_FileWriterFunction perf_events_writer = Dart::perf_events_writer(); 7187 Dart_FileWriterFunction perf_events_writer = Dart::perf_events_writer();
7187 if (perf_events_writer != NULL) { 7188 if (perf_events_writer != NULL) {
7188 const char* format = "%" PRIxPTR " %" PRIxPTR " %s\n"; 7189 const char* format = "%#"Px" %#"Px" %s\n";
7189 uword addr = instrs.EntryPoint(); 7190 uword addr = instrs.EntryPoint();
7190 uword size = instrs.size(); 7191 uword size = instrs.size();
7191 intptr_t len = OS::SNPrint(NULL, 0, format, addr, size, name); 7192 intptr_t len = OS::SNPrint(NULL, 0, format, addr, size, name);
7192 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1); 7193 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1);
7193 OS::SNPrint(buffer, len + 1, format, addr, size, name); 7194 OS::SNPrint(buffer, len + 1, format, addr, size, name);
7194 (*perf_events_writer)(buffer, len); 7195 (*perf_events_writer)(buffer, len);
7195 } 7196 }
7196 DebugInfo* pprof_symbol_generator = Dart::pprof_symbol_generator(); 7197 DebugInfo* pprof_symbol_generator = Dart::pprof_symbol_generator();
7197 if (pprof_symbol_generator != NULL) { 7198 if (pprof_symbol_generator != NULL) {
7198 ASSERT(strlen(name) != 0); 7199 ASSERT(strlen(name) != 0);
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
7400 return Stackmap::null(); 7401 return Stackmap::null();
7401 } 7402 }
7402 7403
7403 7404
7404 RawContext* Context::New(intptr_t num_variables, Heap::Space space) { 7405 RawContext* Context::New(intptr_t num_variables, Heap::Space space) {
7405 ASSERT(num_variables >= 0); 7406 ASSERT(num_variables >= 0);
7406 ASSERT(Object::context_class() != Class::null()); 7407 ASSERT(Object::context_class() != Class::null());
7407 7408
7408 if (num_variables < 0 || num_variables > kMaxElements) { 7409 if (num_variables < 0 || num_variables > kMaxElements) {
7409 // This should be caught before we reach here. 7410 // This should be caught before we reach here.
7410 FATAL1("Fatal error in Context::New: invalid num_variables %ld\n", 7411 FATAL1("Fatal error in Context::New: invalid num_variables %"Pd"\n",
7411 num_variables); 7412 num_variables);
7412 } 7413 }
7413 Context& result = Context::Handle(); 7414 Context& result = Context::Handle();
7414 { 7415 {
7415 RawObject* raw = Object::Allocate(Context::kClassId, 7416 RawObject* raw = Object::Allocate(Context::kClassId,
7416 Context::InstanceSize(num_variables), 7417 Context::InstanceSize(num_variables),
7417 space); 7418 space);
7418 NoGCScope no_gc; 7419 NoGCScope no_gc;
7419 result ^= raw; 7420 result ^= raw;
7420 result.set_num_variables(num_variables); 7421 result.set_num_variables(num_variables);
7421 } 7422 }
7422 result.set_isolate(Isolate::Current()); 7423 result.set_isolate(Isolate::Current());
7423 return result.raw(); 7424 return result.raw();
7424 } 7425 }
7425 7426
7426 7427
7427 const char* Context::ToCString() const { 7428 const char* Context::ToCString() const {
7428 return "Context"; 7429 return "Context";
7429 } 7430 }
7430 7431
7431 7432
7432 RawContextScope* ContextScope::New(intptr_t num_variables) { 7433 RawContextScope* ContextScope::New(intptr_t num_variables) {
7433 ASSERT(Object::context_scope_class() != Class::null()); 7434 ASSERT(Object::context_scope_class() != Class::null());
7434 if (num_variables < 0 || num_variables > kMaxElements) { 7435 if (num_variables < 0 || num_variables > kMaxElements) {
7435 // This should be caught before we reach here. 7436 // This should be caught before we reach here.
7436 FATAL1("Fatal error in ContextScope::New: invalid num_variables %ld\n", 7437 FATAL1("Fatal error in ContextScope::New: invalid num_variables %"Pd"\n",
7437 num_variables); 7438 num_variables);
7438 } 7439 }
7439 intptr_t size = ContextScope::InstanceSize(num_variables); 7440 intptr_t size = ContextScope::InstanceSize(num_variables);
7440 ContextScope& result = ContextScope::Handle(); 7441 ContextScope& result = ContextScope::Handle();
7441 { 7442 {
7442 RawObject* raw = Object::Allocate(ContextScope::kClassId, 7443 RawObject* raw = Object::Allocate(ContextScope::kClassId,
7443 size, 7444 size,
7444 Heap::kOld); 7445 Heap::kOld);
7445 NoGCScope no_gc; 7446 NoGCScope no_gc;
7446 result ^= raw; 7447 result ^= raw;
(...skipping 1246 matching lines...) Expand 10 before | Expand all | Expand 10 after
8693 if (this->IsNegative() == other.IsNegative()) { 8694 if (this->IsNegative() == other.IsNegative()) {
8694 return this->IsNegative() ? -1 : 1; 8695 return this->IsNegative() ? -1 : 1;
8695 } 8696 }
8696 return this->IsNegative() ? -1 : 1; 8697 return this->IsNegative() ? -1 : 1;
8697 } 8698 }
8698 8699
8699 8700
8700 RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) { 8701 RawBigint* Bigint::Allocate(intptr_t length, Heap::Space space) {
8701 if (length < 0 || length > kMaxElements) { 8702 if (length < 0 || length > kMaxElements) {
8702 // This should be caught before we reach here. 8703 // This should be caught before we reach here.
8703 FATAL1("Fatal error in Bigint::Allocate: invalid length %ld\n", length); 8704 FATAL1("Fatal error in Bigint::Allocate: invalid length %"Pd"\n", length);
8704 } 8705 }
8705 ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null()); 8706 ASSERT(Isolate::Current()->object_store()->bigint_class() != Class::null());
8706 Bigint& result = Bigint::Handle(); 8707 Bigint& result = Bigint::Handle();
8707 { 8708 {
8708 RawObject* raw = Object::Allocate(Bigint::kClassId, 8709 RawObject* raw = Object::Allocate(Bigint::kClassId,
8709 Bigint::InstanceSize(length), 8710 Bigint::InstanceSize(length),
8710 space); 8711 space);
8711 NoGCScope no_gc; 8712 NoGCScope no_gc;
8712 result ^= raw; 8713 result ^= raw;
8713 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated. 8714 result.raw_ptr()->allocated_length_ = length; // Chunk length allocated.
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after
9460 } 9461 }
9461 9462
9462 9463
9463 RawOneByteString* OneByteString::New(intptr_t len, 9464 RawOneByteString* OneByteString::New(intptr_t len,
9464 Heap::Space space) { 9465 Heap::Space space) {
9465 ASSERT(Isolate::Current() == Dart::vm_isolate() || 9466 ASSERT(Isolate::Current() == Dart::vm_isolate() ||
9466 Isolate::Current()->object_store()->one_byte_string_class() != 9467 Isolate::Current()->object_store()->one_byte_string_class() !=
9467 Class::null()); 9468 Class::null());
9468 if (len < 0 || len > kMaxElements) { 9469 if (len < 0 || len > kMaxElements) {
9469 // This should be caught before we reach here. 9470 // This should be caught before we reach here.
9470 FATAL1("Fatal error in OneByteString::New: invalid len %ld\n", len); 9471 FATAL1("Fatal error in OneByteString::New: invalid len %"Pd"\n", len);
9471 } 9472 }
9472 OneByteString& result = OneByteString::Handle(); 9473 OneByteString& result = OneByteString::Handle();
9473 { 9474 {
9474 RawObject* raw = Object::Allocate(OneByteString::kClassId, 9475 RawObject* raw = Object::Allocate(OneByteString::kClassId,
9475 OneByteString::InstanceSize(len), 9476 OneByteString::InstanceSize(len),
9476 space); 9477 space);
9477 NoGCScope no_gc; 9478 NoGCScope no_gc;
9478 result ^= raw; 9479 result ^= raw;
9479 result.SetLength(len); 9480 result.SetLength(len);
9480 result.SetHash(0); 9481 result.SetHash(0);
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
9602 } 9603 }
9603 return TwoByteString::null(); 9604 return TwoByteString::null();
9604 } 9605 }
9605 9606
9606 9607
9607 RawTwoByteString* TwoByteString::New(intptr_t len, 9608 RawTwoByteString* TwoByteString::New(intptr_t len,
9608 Heap::Space space) { 9609 Heap::Space space) {
9609 ASSERT(Isolate::Current()->object_store()->two_byte_string_class()); 9610 ASSERT(Isolate::Current()->object_store()->two_byte_string_class());
9610 if (len < 0 || len > kMaxElements) { 9611 if (len < 0 || len > kMaxElements) {
9611 // This should be caught before we reach here. 9612 // This should be caught before we reach here.
9612 FATAL1("Fatal error in TwoByteString::New: invalid len %ld\n", len); 9613 FATAL1("Fatal error in TwoByteString::New: invalid len %"Pd"\n", len);
9613 } 9614 }
9614 TwoByteString& result = TwoByteString::Handle(); 9615 TwoByteString& result = TwoByteString::Handle();
9615 { 9616 {
9616 RawObject* raw = Object::Allocate(TwoByteString::kClassId, 9617 RawObject* raw = Object::Allocate(TwoByteString::kClassId,
9617 TwoByteString::InstanceSize(len), 9618 TwoByteString::InstanceSize(len),
9618 space); 9619 space);
9619 NoGCScope no_gc; 9620 NoGCScope no_gc;
9620 result ^= raw; 9621 result ^= raw;
9621 result.SetLength(len); 9622 result.SetLength(len);
9622 result.SetHash(0); 9623 result.SetHash(0);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
9735 return FourByteString::null(); 9736 return FourByteString::null();
9736 } 9737 }
9737 9738
9738 9739
9739 RawFourByteString* FourByteString::New(intptr_t len, 9740 RawFourByteString* FourByteString::New(intptr_t len,
9740 Heap::Space space) { 9741 Heap::Space space) {
9741 ASSERT(Isolate::Current()->object_store()->four_byte_string_class() != 9742 ASSERT(Isolate::Current()->object_store()->four_byte_string_class() !=
9742 Class::null()); 9743 Class::null());
9743 if (len < 0 || len > kMaxElements) { 9744 if (len < 0 || len > kMaxElements) {
9744 // This should be caught before we reach here. 9745 // This should be caught before we reach here.
9745 FATAL1("Fatal error in FourByteString::New: invalid len %ld\n", len); 9746 FATAL1("Fatal error in FourByteString::New: invalid len %"Pd"\n", len);
9746 } 9747 }
9747 FourByteString& result = FourByteString::Handle(); 9748 FourByteString& result = FourByteString::Handle();
9748 { 9749 {
9749 RawObject* raw = Object::Allocate(FourByteString::kClassId, 9750 RawObject* raw = Object::Allocate(FourByteString::kClassId,
9750 FourByteString::InstanceSize(len), 9751 FourByteString::InstanceSize(len),
9751 space); 9752 space);
9752 NoGCScope no_gc; 9753 NoGCScope no_gc;
9753 result ^= raw; 9754 result ^= raw;
9754 result.SetLength(len); 9755 result.SetLength(len);
9755 result.SetHash(0); 9756 result.SetHash(0);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
9846 RawExternalOneByteString* ExternalOneByteString::New( 9847 RawExternalOneByteString* ExternalOneByteString::New(
9847 const uint8_t* data, 9848 const uint8_t* data,
9848 intptr_t len, 9849 intptr_t len,
9849 void* peer, 9850 void* peer,
9850 Dart_PeerFinalizer callback, 9851 Dart_PeerFinalizer callback,
9851 Heap::Space space) { 9852 Heap::Space space) {
9852 ASSERT(Isolate::Current()->object_store()->external_one_byte_string_class() != 9853 ASSERT(Isolate::Current()->object_store()->external_one_byte_string_class() !=
9853 Class::null()); 9854 Class::null());
9854 if (len < 0 || len > kMaxElements) { 9855 if (len < 0 || len > kMaxElements) {
9855 // This should be caught before we reach here. 9856 // This should be caught before we reach here.
9856 FATAL1("Fatal error in ExternalOneByteString::New: invalid len %ld\n", len); 9857 FATAL1("Fatal error in ExternalOneByteString::New: invalid len %"Pd"\n",
9858 len);
9857 } 9859 }
9858 ExternalOneByteString& result = ExternalOneByteString::Handle(); 9860 ExternalOneByteString& result = ExternalOneByteString::Handle();
9859 ExternalStringData<uint8_t>* external_data = 9861 ExternalStringData<uint8_t>* external_data =
9860 new ExternalStringData<uint8_t>(data, peer, callback); 9862 new ExternalStringData<uint8_t>(data, peer, callback);
9861 { 9863 {
9862 RawObject* raw = Object::Allocate(ExternalOneByteString::kClassId, 9864 RawObject* raw = Object::Allocate(ExternalOneByteString::kClassId,
9863 ExternalOneByteString::InstanceSize(), 9865 ExternalOneByteString::InstanceSize(),
9864 space); 9866 space);
9865 NoGCScope no_gc; 9867 NoGCScope no_gc;
9866 result ^= raw; 9868 result ^= raw;
(...skipping 30 matching lines...) Expand all
9897 RawExternalTwoByteString* ExternalTwoByteString::New( 9899 RawExternalTwoByteString* ExternalTwoByteString::New(
9898 const uint16_t* data, 9900 const uint16_t* data,
9899 intptr_t len, 9901 intptr_t len,
9900 void* peer, 9902 void* peer,
9901 Dart_PeerFinalizer callback, 9903 Dart_PeerFinalizer callback,
9902 Heap::Space space) { 9904 Heap::Space space) {
9903 ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() != 9905 ASSERT(Isolate::Current()->object_store()->external_two_byte_string_class() !=
9904 Class::null()); 9906 Class::null());
9905 if (len < 0 || len > kMaxElements) { 9907 if (len < 0 || len > kMaxElements) {
9906 // This should be caught before we reach here. 9908 // This should be caught before we reach here.
9907 FATAL1("Fatal error in ExternalTwoByteString::New: invalid len %ld\n", len); 9909 FATAL1("Fatal error in ExternalTwoByteString::New: invalid len %"Pd"\n",
9910 len);
9908 } 9911 }
9909 ExternalTwoByteString& result = ExternalTwoByteString::Handle(); 9912 ExternalTwoByteString& result = ExternalTwoByteString::Handle();
9910 ExternalStringData<uint16_t>* external_data = 9913 ExternalStringData<uint16_t>* external_data =
9911 new ExternalStringData<uint16_t>(data, peer, callback); 9914 new ExternalStringData<uint16_t>(data, peer, callback);
9912 { 9915 {
9913 RawObject* raw = Object::Allocate(ExternalTwoByteString::kClassId, 9916 RawObject* raw = Object::Allocate(ExternalTwoByteString::kClassId,
9914 ExternalTwoByteString::InstanceSize(), 9917 ExternalTwoByteString::InstanceSize(),
9915 space); 9918 space);
9916 NoGCScope no_gc; 9919 NoGCScope no_gc;
9917 result ^= raw; 9920 result ^= raw;
(...skipping 20 matching lines...) Expand all
9938 RawExternalFourByteString* ExternalFourByteString::New( 9941 RawExternalFourByteString* ExternalFourByteString::New(
9939 const uint32_t* data, 9942 const uint32_t* data,
9940 intptr_t len, 9943 intptr_t len,
9941 void* peer, 9944 void* peer,
9942 Dart_PeerFinalizer callback, 9945 Dart_PeerFinalizer callback,
9943 Heap::Space space) { 9946 Heap::Space space) {
9944 ASSERT(Isolate::Current()->object_store()-> 9947 ASSERT(Isolate::Current()->object_store()->
9945 external_four_byte_string_class() != Class::null()); 9948 external_four_byte_string_class() != Class::null());
9946 if (len < 0 || len > kMaxElements) { 9949 if (len < 0 || len > kMaxElements) {
9947 // This should be caught before we reach here. 9950 // This should be caught before we reach here.
9948 FATAL1("Fatal error in ExternalFourByteString::New: invalid len %ld\n", 9951 FATAL1("Fatal error in ExternalFourByteString::New: invalid len %"Pd"\n",
9949 len); 9952 len);
9950 } 9953 }
9951 ExternalFourByteString& result = ExternalFourByteString::Handle(); 9954 ExternalFourByteString& result = ExternalFourByteString::Handle();
9952 ExternalStringData<uint32_t>* external_data = 9955 ExternalStringData<uint32_t>* external_data =
9953 new ExternalStringData<uint32_t>(data, peer, callback); 9956 new ExternalStringData<uint32_t>(data, peer, callback);
9954 { 9957 {
9955 RawObject* raw = Object::Allocate(ExternalFourByteString::kClassId, 9958 RawObject* raw = Object::Allocate(ExternalFourByteString::kClassId,
9956 ExternalFourByteString::InstanceSize(), 9959 ExternalFourByteString::InstanceSize(),
9957 space); 9960 space);
9958 NoGCScope no_gc; 9961 NoGCScope no_gc;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
10046 ObjectStore* object_store = Isolate::Current()->object_store(); 10049 ObjectStore* object_store = Isolate::Current()->object_store();
10047 ASSERT(object_store->array_class() != Class::null()); 10050 ASSERT(object_store->array_class() != Class::null());
10048 Class& cls = Class::Handle(object_store->array_class()); 10051 Class& cls = Class::Handle(object_store->array_class());
10049 return New(cls, len, space); 10052 return New(cls, len, space);
10050 } 10053 }
10051 10054
10052 10055
10053 RawArray* Array::New(const Class& cls, intptr_t len, Heap::Space space) { 10056 RawArray* Array::New(const Class& cls, intptr_t len, Heap::Space space) {
10054 if (len < 0 || len > Array::kMaxElements) { 10057 if (len < 0 || len > Array::kMaxElements) {
10055 // This should be caught before we reach here. 10058 // This should be caught before we reach here.
10056 FATAL1("Fatal error in Array::New: invalid len %ld\n", len); 10059 FATAL1("Fatal error in Array::New: invalid len %"Pd"\n", len);
10057 } 10060 }
10058 Array& result = Array::Handle(); 10061 Array& result = Array::Handle();
10059 { 10062 {
10060 RawObject* raw = Object::Allocate(cls.id(), 10063 RawObject* raw = Object::Allocate(cls.id(),
10061 Array::InstanceSize(len), 10064 Array::InstanceSize(len),
10062 space); 10065 space);
10063 NoGCScope no_gc; 10066 NoGCScope no_gc;
10064 result ^= raw; 10067 result ^= raw;
10065 result.SetLength(len); 10068 result.SetLength(len);
10066 } 10069 }
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
10343 10346
10344 template<typename HandleT, typename RawT, typename ElementT> 10347 template<typename HandleT, typename RawT, typename ElementT>
10345 RawT* ByteArray::NewExternalImpl(const Class& cls, 10348 RawT* ByteArray::NewExternalImpl(const Class& cls,
10346 ElementT* data, 10349 ElementT* data,
10347 intptr_t len, 10350 intptr_t len,
10348 void* peer, 10351 void* peer,
10349 Dart_PeerFinalizer callback, 10352 Dart_PeerFinalizer callback,
10350 Heap::Space space) { 10353 Heap::Space space) {
10351 if (len < 0 || len > HandleT::kMaxElements) { 10354 if (len < 0 || len > HandleT::kMaxElements) {
10352 // This should be caught before we reach here. 10355 // This should be caught before we reach here.
10353 FATAL1("Fatal error in ByteArray::NewExternalImpl: invalid len %ld\n", len); 10356 FATAL1("Fatal error in ByteArray::NewExternalImpl: invalid len %"Pd"\n",
10357 len);
10354 } 10358 }
10355 HandleT& result = HandleT::Handle(); 10359 HandleT& result = HandleT::Handle();
10356 ExternalByteArrayData<ElementT>* external_data = 10360 ExternalByteArrayData<ElementT>* external_data =
10357 new ExternalByteArrayData<ElementT>(data, peer, callback); 10361 new ExternalByteArrayData<ElementT>(data, peer, callback);
10358 { 10362 {
10359 RawObject* raw = Object::Allocate(cls.id(), HandleT::InstanceSize(), space); 10363 RawObject* raw = Object::Allocate(cls.id(), HandleT::InstanceSize(), space);
10360 NoGCScope no_gc; 10364 NoGCScope no_gc;
10361 result ^= raw; 10365 result ^= raw;
10362 result.SetLength(len); 10366 result.SetLength(len);
10363 result.SetExternalData(external_data); 10367 result.SetExternalData(external_data);
(...skipping 21 matching lines...) Expand all
10385 // ByteArray is an abstract class. 10389 // ByteArray is an abstract class.
10386 UNREACHABLE(); 10390 UNREACHABLE();
10387 return "ByteArray"; 10391 return "ByteArray";
10388 } 10392 }
10389 10393
10390 10394
10391 template<typename HandleT, typename RawT> 10395 template<typename HandleT, typename RawT>
10392 RawT* ByteArray::NewImpl(const Class& cls, intptr_t len, Heap::Space space) { 10396 RawT* ByteArray::NewImpl(const Class& cls, intptr_t len, Heap::Space space) {
10393 if (len < 0 || len > HandleT::kMaxElements) { 10397 if (len < 0 || len > HandleT::kMaxElements) {
10394 // This should be caught before we reach here. 10398 // This should be caught before we reach here.
10395 FATAL1("Fatal error in ByteArray::NewImpl: invalid len %ld\n", len); 10399 FATAL1("Fatal error in ByteArray::NewImpl: invalid len %"Pd"\n", len);
10396 } 10400 }
10397 HandleT& result = HandleT::Handle(); 10401 HandleT& result = HandleT::Handle();
10398 { 10402 {
10399 RawObject* raw = Object::Allocate(cls.id(), 10403 RawObject* raw = Object::Allocate(cls.id(),
10400 HandleT::InstanceSize(len), 10404 HandleT::InstanceSize(len),
10401 space); 10405 space);
10402 NoGCScope no_gc; 10406 NoGCScope no_gc;
10403 result ^= raw; 10407 result ^= raw;
10404 result.SetLength(len); 10408 result.SetLength(len);
10405 if (len > 0) { 10409 if (len > 0) {
10406 memset(result.ByteAddr(0), 0, result.ByteLength()); 10410 memset(result.ByteAddr(0), 0, result.ByteLength());
10407 } 10411 }
10408 } 10412 }
10409 return result.raw(); 10413 return result.raw();
10410 } 10414 }
10411 10415
10412 10416
10413 template<typename HandleT, typename RawT, typename ElementT> 10417 template<typename HandleT, typename RawT, typename ElementT>
10414 RawT* ByteArray::NewImpl(const Class& cls, 10418 RawT* ByteArray::NewImpl(const Class& cls,
10415 const ElementT* data, 10419 const ElementT* data,
10416 intptr_t len, 10420 intptr_t len,
10417 Heap::Space space) { 10421 Heap::Space space) {
10418 if (len < 0 || len > HandleT::kMaxElements) { 10422 if (len < 0 || len > HandleT::kMaxElements) {
10419 // This should be caught before we reach here. 10423 // This should be caught before we reach here.
10420 FATAL1("Fatal error in ByteArray::NewImpl: invalid len %ld\n", len); 10424 FATAL1("Fatal error in ByteArray::NewImpl: invalid len %"Pd"\n", len);
10421 } 10425 }
10422 HandleT& result = HandleT::Handle(); 10426 HandleT& result = HandleT::Handle();
10423 { 10427 {
10424 RawObject* raw = Object::Allocate(cls.id(), 10428 RawObject* raw = Object::Allocate(cls.id(),
10425 HandleT::InstanceSize(len), 10429 HandleT::InstanceSize(len),
10426 space); 10430 space);
10427 NoGCScope no_gc; 10431 NoGCScope no_gc;
10428 result ^= raw; 10432 result ^= raw;
10429 result.SetLength(len); 10433 result.SetLength(len);
10430 if (len > 0) { 10434 if (len > 0) {
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
11092 void JSRegExp::set_num_bracket_expressions(intptr_t value) const { 11096 void JSRegExp::set_num_bracket_expressions(intptr_t value) const {
11093 raw_ptr()->num_bracket_expressions_ = Smi::New(value); 11097 raw_ptr()->num_bracket_expressions_ = Smi::New(value);
11094 } 11098 }
11095 11099
11096 11100
11097 RawJSRegExp* JSRegExp::New(intptr_t len, Heap::Space space) { 11101 RawJSRegExp* JSRegExp::New(intptr_t len, Heap::Space space) {
11098 ASSERT(Isolate::Current()->object_store()->jsregexp_class() != 11102 ASSERT(Isolate::Current()->object_store()->jsregexp_class() !=
11099 Class::null()); 11103 Class::null());
11100 if (len < 0 || len > kMaxElements) { 11104 if (len < 0 || len > kMaxElements) {
11101 // This should be caught before we reach here. 11105 // This should be caught before we reach here.
11102 FATAL1("Fatal error in JSRegexp::New: invalid len %ld\n", len); 11106 FATAL1("Fatal error in JSRegexp::New: invalid len %"Pd"\n", len);
11103 } 11107 }
11104 JSRegExp& result = JSRegExp::Handle(); 11108 JSRegExp& result = JSRegExp::Handle();
11105 { 11109 {
11106 RawObject* raw = Object::Allocate(JSRegExp::kClassId, 11110 RawObject* raw = Object::Allocate(JSRegExp::kClassId,
11107 JSRegExp::InstanceSize(len), 11111 JSRegExp::InstanceSize(len),
11108 space); 11112 space);
11109 NoGCScope no_gc; 11113 NoGCScope no_gc;
11110 result ^= raw; 11114 result ^= raw;
11111 result.set_type(kUnitialized); 11115 result.set_type(kUnitialized);
11112 result.set_flags(0); 11116 result.set_flags(0);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
11195 } 11199 }
11196 return result.raw(); 11200 return result.raw();
11197 } 11201 }
11198 11202
11199 11203
11200 const char* WeakProperty::ToCString() const { 11204 const char* WeakProperty::ToCString() const {
11201 return "_WeakProperty"; 11205 return "_WeakProperty";
11202 } 11206 }
11203 11207
11204 } // namespace dart 11208 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/os.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698