| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 2481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2492 set_null_value(Oddball::cast(obj)); | 2492 set_null_value(Oddball::cast(obj)); |
| 2493 Oddball::cast(obj)->set_kind(Oddball::kNull); | 2493 Oddball::cast(obj)->set_kind(Oddball::kNull); |
| 2494 | 2494 |
| 2495 { MaybeObject* maybe_obj = Allocate(undefined_map(), OLD_POINTER_SPACE); | 2495 { MaybeObject* maybe_obj = Allocate(undefined_map(), OLD_POINTER_SPACE); |
| 2496 if (!maybe_obj->ToObject(&obj)) return false; | 2496 if (!maybe_obj->ToObject(&obj)) return false; |
| 2497 } | 2497 } |
| 2498 set_undefined_value(Oddball::cast(obj)); | 2498 set_undefined_value(Oddball::cast(obj)); |
| 2499 Oddball::cast(obj)->set_kind(Oddball::kUndefined); | 2499 Oddball::cast(obj)->set_kind(Oddball::kUndefined); |
| 2500 ASSERT(!InNewSpace(undefined_value())); | 2500 ASSERT(!InNewSpace(undefined_value())); |
| 2501 | 2501 |
| 2502 // Set preliminary exception sentinel value before actually initializing it. |
| 2503 set_exception(null_value()); |
| 2504 |
| 2502 // Allocate the empty descriptor array. | 2505 // Allocate the empty descriptor array. |
| 2503 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); | 2506 { MaybeObject* maybe_obj = AllocateEmptyFixedArray(); |
| 2504 if (!maybe_obj->ToObject(&obj)) return false; | 2507 if (!maybe_obj->ToObject(&obj)) return false; |
| 2505 } | 2508 } |
| 2506 set_empty_descriptor_array(DescriptorArray::cast(obj)); | 2509 set_empty_descriptor_array(DescriptorArray::cast(obj)); |
| 2507 | 2510 |
| 2508 // Allocate the constant pool array. | 2511 // Allocate the constant pool array. |
| 2509 { MaybeObject* maybe_obj = AllocateEmptyConstantPoolArray(); | 2512 { MaybeObject* maybe_obj = AllocateEmptyConstantPoolArray(); |
| 2510 if (!maybe_obj->ToObject(&obj)) return false; | 2513 if (!maybe_obj->ToObject(&obj)) return false; |
| 2511 } | 2514 } |
| (...skipping 1457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3969 decoder(isolate_->unicode_cache()->utf8_decoder()); | 3972 decoder(isolate_->unicode_cache()->utf8_decoder()); |
| 3970 decoder->Reset(string.start() + non_ascii_start, | 3973 decoder->Reset(string.start() + non_ascii_start, |
| 3971 string.length() - non_ascii_start); | 3974 string.length() - non_ascii_start); |
| 3972 int utf16_length = decoder->Utf16Length(); | 3975 int utf16_length = decoder->Utf16Length(); |
| 3973 ASSERT(utf16_length > 0); | 3976 ASSERT(utf16_length > 0); |
| 3974 // Allocate string. | 3977 // Allocate string. |
| 3975 Object* result; | 3978 Object* result; |
| 3976 { | 3979 { |
| 3977 int chars = non_ascii_start + utf16_length; | 3980 int chars = non_ascii_start + utf16_length; |
| 3978 MaybeObject* maybe_result = AllocateRawTwoByteString(chars, pretenure); | 3981 MaybeObject* maybe_result = AllocateRawTwoByteString(chars, pretenure); |
| 3979 if (!maybe_result->ToObject(&result)) return maybe_result; | 3982 if (!maybe_result->ToObject(&result) || result->IsException()) { |
| 3983 return maybe_result; |
| 3984 } |
| 3980 } | 3985 } |
| 3981 // Convert and copy the characters into the new object. | 3986 // Convert and copy the characters into the new object. |
| 3982 SeqTwoByteString* twobyte = SeqTwoByteString::cast(result); | 3987 SeqTwoByteString* twobyte = SeqTwoByteString::cast(result); |
| 3983 // Copy ascii portion. | 3988 // Copy ascii portion. |
| 3984 uint16_t* data = twobyte->GetChars(); | 3989 uint16_t* data = twobyte->GetChars(); |
| 3985 if (non_ascii_start != 0) { | 3990 if (non_ascii_start != 0) { |
| 3986 const char* ascii_data = string.start(); | 3991 const char* ascii_data = string.start(); |
| 3987 for (int i = 0; i < non_ascii_start; i++) { | 3992 for (int i = 0; i < non_ascii_start; i++) { |
| 3988 *data++ = *ascii_data++; | 3993 *data++ = *ascii_data++; |
| 3989 } | 3994 } |
| 3990 } | 3995 } |
| 3991 // Now write the remainder. | 3996 // Now write the remainder. |
| 3992 decoder->WriteUtf16(data, utf16_length); | 3997 decoder->WriteUtf16(data, utf16_length); |
| 3993 return result; | 3998 return result; |
| 3994 } | 3999 } |
| 3995 | 4000 |
| 3996 | 4001 |
| 3997 MaybeObject* Heap::AllocateStringFromTwoByte(Vector<const uc16> string, | 4002 MaybeObject* Heap::AllocateStringFromTwoByte(Vector<const uc16> string, |
| 3998 PretenureFlag pretenure) { | 4003 PretenureFlag pretenure) { |
| 3999 // Check if the string is an ASCII string. | 4004 // Check if the string is an ASCII string. |
| 4000 Object* result; | 4005 Object* result; |
| 4001 int length = string.length(); | 4006 int length = string.length(); |
| 4002 const uc16* start = string.start(); | 4007 const uc16* start = string.start(); |
| 4003 | 4008 |
| 4004 if (String::IsOneByte(start, length)) { | 4009 if (String::IsOneByte(start, length)) { |
| 4005 MaybeObject* maybe_result = AllocateRawOneByteString(length, pretenure); | 4010 MaybeObject* maybe_result = AllocateRawOneByteString(length, pretenure); |
| 4006 if (!maybe_result->ToObject(&result)) return maybe_result; | 4011 if (!maybe_result->ToObject(&result) || result->IsException()) { |
| 4012 return maybe_result; |
| 4013 } |
| 4007 CopyChars(SeqOneByteString::cast(result)->GetChars(), start, length); | 4014 CopyChars(SeqOneByteString::cast(result)->GetChars(), start, length); |
| 4008 } else { // It's not a one byte string. | 4015 } else { // It's not a one byte string. |
| 4009 MaybeObject* maybe_result = AllocateRawTwoByteString(length, pretenure); | 4016 MaybeObject* maybe_result = AllocateRawTwoByteString(length, pretenure); |
| 4010 if (!maybe_result->ToObject(&result)) return maybe_result; | 4017 if (!maybe_result->ToObject(&result) || result->IsException()) { |
| 4018 return maybe_result; |
| 4019 } |
| 4011 CopyChars(SeqTwoByteString::cast(result)->GetChars(), start, length); | 4020 CopyChars(SeqTwoByteString::cast(result)->GetChars(), start, length); |
| 4012 } | 4021 } |
| 4013 return result; | 4022 return result; |
| 4014 } | 4023 } |
| 4015 | 4024 |
| 4016 | 4025 |
| 4017 Map* Heap::InternalizedStringMapForString(String* string) { | 4026 Map* Heap::InternalizedStringMapForString(String* string) { |
| 4018 // If the string is in new space it cannot be used as internalized. | 4027 // If the string is in new space it cannot be used as internalized. |
| 4019 if (InNewSpace(string)) return NULL; | 4028 if (InNewSpace(string)) return NULL; |
| 4020 | 4029 |
| (...skipping 2707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6728 static_cast<int>(object_sizes_last_time_[index])); | 6737 static_cast<int>(object_sizes_last_time_[index])); |
| 6729 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) | 6738 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) |
| 6730 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 6739 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
| 6731 | 6740 |
| 6732 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 6741 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
| 6733 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 6742 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
| 6734 ClearObjectStats(); | 6743 ClearObjectStats(); |
| 6735 } | 6744 } |
| 6736 | 6745 |
| 6737 } } // namespace v8::internal | 6746 } } // namespace v8::internal |
| OLD | NEW |