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/cpu.h" | 10 #include "vm/cpu.h" |
(...skipping 11695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11706 | 11706 |
11707 RawString* String::ConcatAll(const Array& strings, | 11707 RawString* String::ConcatAll(const Array& strings, |
11708 Heap::Space space) { | 11708 Heap::Space space) { |
11709 ASSERT(!strings.IsNull()); | 11709 ASSERT(!strings.IsNull()); |
11710 intptr_t result_len = 0; | 11710 intptr_t result_len = 0; |
11711 intptr_t strings_len = strings.Length(); | 11711 intptr_t strings_len = strings.Length(); |
11712 String& str = String::Handle(); | 11712 String& str = String::Handle(); |
11713 intptr_t char_size = kOneByteChar; | 11713 intptr_t char_size = kOneByteChar; |
11714 for (intptr_t i = 0; i < strings_len; i++) { | 11714 for (intptr_t i = 0; i < strings_len; i++) { |
11715 str ^= strings.At(i); | 11715 str ^= strings.At(i); |
11716 result_len += str.Length(); | 11716 intptr_t str_len = str.Length(); |
| 11717 if ((kMaxElements - result_len) < str_len) { |
| 11718 Isolate* isolate = Isolate::Current(); |
| 11719 const Instance& exception = |
| 11720 Instance::Handle(isolate->object_store()->out_of_memory()); |
| 11721 Exceptions::Throw(exception); |
| 11722 UNREACHABLE(); |
| 11723 } |
| 11724 result_len += str_len; |
11717 char_size = Utils::Maximum(char_size, str.CharSize()); | 11725 char_size = Utils::Maximum(char_size, str.CharSize()); |
11718 } | 11726 } |
11719 if (char_size == kOneByteChar) { | 11727 if (char_size == kOneByteChar) { |
11720 return OneByteString::ConcatAll(strings, result_len, space); | 11728 return OneByteString::ConcatAll(strings, result_len, space); |
11721 } | 11729 } |
11722 ASSERT(char_size == kTwoByteChar); | 11730 ASSERT(char_size == kTwoByteChar); |
11723 return TwoByteString::ConcatAll(strings, result_len, space); | 11731 return TwoByteString::ConcatAll(strings, result_len, space); |
11724 } | 11732 } |
11725 | 11733 |
11726 | 11734 |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12180 intptr_t len, | 12188 intptr_t len, |
12181 Heap::Space space) { | 12189 Heap::Space space) { |
12182 const String& result = String::Handle(OneByteString::New(len, space)); | 12190 const String& result = String::Handle(OneByteString::New(len, space)); |
12183 String& str = String::Handle(); | 12191 String& str = String::Handle(); |
12184 intptr_t strings_len = strings.Length(); | 12192 intptr_t strings_len = strings.Length(); |
12185 intptr_t pos = 0; | 12193 intptr_t pos = 0; |
12186 for (intptr_t i = 0; i < strings_len; i++) { | 12194 for (intptr_t i = 0; i < strings_len; i++) { |
12187 str ^= strings.At(i); | 12195 str ^= strings.At(i); |
12188 intptr_t str_len = str.Length(); | 12196 intptr_t str_len = str.Length(); |
12189 String::Copy(result, pos, str, 0, str_len); | 12197 String::Copy(result, pos, str, 0, str_len); |
| 12198 ASSERT((kMaxElements - pos) >= str_len); |
12190 pos += str_len; | 12199 pos += str_len; |
12191 } | 12200 } |
12192 return OneByteString::raw(result); | 12201 return OneByteString::raw(result); |
12193 } | 12202 } |
12194 | 12203 |
12195 | 12204 |
12196 RawOneByteString* OneByteString::Transform(int32_t (*mapping)(int32_t ch), | 12205 RawOneByteString* OneByteString::Transform(int32_t (*mapping)(int32_t ch), |
12197 const String& str, | 12206 const String& str, |
12198 Heap::Space space) { | 12207 Heap::Space space) { |
12199 ASSERT(!str.IsNull()); | 12208 ASSERT(!str.IsNull()); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12343 intptr_t len, | 12352 intptr_t len, |
12344 Heap::Space space) { | 12353 Heap::Space space) { |
12345 const String& result = String::Handle(TwoByteString::New(len, space)); | 12354 const String& result = String::Handle(TwoByteString::New(len, space)); |
12346 String& str = String::Handle(); | 12355 String& str = String::Handle(); |
12347 intptr_t strings_len = strings.Length(); | 12356 intptr_t strings_len = strings.Length(); |
12348 intptr_t pos = 0; | 12357 intptr_t pos = 0; |
12349 for (intptr_t i = 0; i < strings_len; i++) { | 12358 for (intptr_t i = 0; i < strings_len; i++) { |
12350 str ^= strings.At(i); | 12359 str ^= strings.At(i); |
12351 intptr_t str_len = str.Length(); | 12360 intptr_t str_len = str.Length(); |
12352 String::Copy(result, pos, str, 0, str_len); | 12361 String::Copy(result, pos, str, 0, str_len); |
| 12362 ASSERT((kMaxElements - pos) >= str_len); |
12353 pos += str_len; | 12363 pos += str_len; |
12354 } | 12364 } |
12355 return TwoByteString::raw(result); | 12365 return TwoByteString::raw(result); |
12356 } | 12366 } |
12357 | 12367 |
12358 | 12368 |
12359 RawTwoByteString* TwoByteString::Transform(int32_t (*mapping)(int32_t ch), | 12369 RawTwoByteString* TwoByteString::Transform(int32_t (*mapping)(int32_t ch), |
12360 const String& str, | 12370 const String& str, |
12361 Heap::Space space) { | 12371 Heap::Space space) { |
12362 ASSERT(!str.IsNull()); | 12372 ASSERT(!str.IsNull()); |
(...skipping 1039 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13402 space); | 13412 space); |
13403 return reinterpret_cast<RawWeakProperty*>(raw); | 13413 return reinterpret_cast<RawWeakProperty*>(raw); |
13404 } | 13414 } |
13405 | 13415 |
13406 | 13416 |
13407 const char* WeakProperty::ToCString() const { | 13417 const char* WeakProperty::ToCString() const { |
13408 return "_WeakProperty"; | 13418 return "_WeakProperty"; |
13409 } | 13419 } |
13410 | 13420 |
13411 } // namespace dart | 13421 } // namespace dart |
OLD | NEW |