Chromium Code Reviews| Index: runtime/vm/object.cc |
| =================================================================== |
| --- runtime/vm/object.cc (revision 39255) |
| +++ runtime/vm/object.cc (working copy) |
| @@ -17042,7 +17042,7 @@ |
| NoGCScope no_gc; |
| ASSERT(array != NULL); |
| intptr_t str_length = this->Length(); |
| - ASSERT(length >= (str_length * this->CharSize())); |
| + RELEASE_ASSERT(length >= (str_length * this->CharSize())); |
| intptr_t class_id = raw()->GetClassId(); |
| intptr_t used_size = 0; |
| intptr_t original_size = 0; |
| @@ -17065,10 +17065,12 @@ |
| tags = RawObject::ClassIdTag::update(class_id, tags); |
| raw_ptr()->tags_ = tags; |
| result = this->raw(); |
| + const uint8_t* ext_array = reinterpret_cast<const uint8_t*>(array); |
| ExternalStringData<uint8_t>* ext_data = new ExternalStringData<uint8_t>( |
| - reinterpret_cast<const uint8_t*>(array), peer, cback); |
| - result.SetLength(str_length); |
| - result.SetHash(0); |
| + ext_array, peer, cback); |
| + RELEASE_ASSERT(result.Length() == str_length); |
| + RELEASE_ASSERT(!result.HasHash() || |
|
Ivan Posva
2014/08/14 20:42:12
We are aware that this makes the externalization o
siva
2014/08/14 21:04:57
Will change it to a plain ASSERT.
|
| + (result.Hash() == String::Hash(ext_array, str_length))); |
|
koda
2014/08/14 20:43:30
This is costly to always run in release mode, and
siva
2014/08/14 21:04:57
See above changing to a plain ASSERT
|
| ExternalOneByteString::SetExternalData(result, ext_data); |
| external_data = ext_data; |
| finalizer = ExternalOneByteString::Finalize; |
| @@ -17091,10 +17093,12 @@ |
| tags = RawObject::ClassIdTag::update(class_id, tags); |
| raw_ptr()->tags_ = tags; |
| result = this->raw(); |
| + const uint16_t* ext_array = reinterpret_cast<const uint16_t*>(array); |
| ExternalStringData<uint16_t>* ext_data = new ExternalStringData<uint16_t>( |
| - reinterpret_cast<const uint16_t*>(array), peer, cback); |
| - result.SetLength(str_length); |
| - result.SetHash(0); |
| + ext_array, peer, cback); |
| + RELEASE_ASSERT(result.Length() == str_length); |
| + RELEASE_ASSERT(!result.HasHash() || |
| + (result.Hash() == String::Hash(ext_array, str_length))); |
| ExternalTwoByteString::SetExternalData(result, ext_data); |
| external_data = ext_data; |
| finalizer = ExternalTwoByteString::Finalize; |