| 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/bigint_operations.h" | 5 #include "vm/bigint_operations.h" |
| 6 #include "vm/object.h" | 6 #include "vm/object.h" |
| 7 #include "vm/object_store.h" | 7 #include "vm/object_store.h" |
| 8 #include "vm/snapshot.h" | 8 #include "vm/snapshot.h" |
| 9 #include "vm/symbols.h" | 9 #include "vm/symbols.h" |
| 10 #include "vm/visitor.h" | 10 #include "vm/visitor.h" |
| 11 | 11 |
| 12 namespace dart { | 12 namespace dart { |
| 13 | 13 |
| 14 #define NEW_OBJECT(type) \ | 14 #define NEW_OBJECT(type) \ |
| 15 ((kind == Snapshot::kFull) ? reader->New##type() : type::New()) | 15 ((kind == Snapshot::kFull) ? reader->New##type() : type::New()) |
| 16 | 16 |
| 17 #define NEW_OBJECT_WITH_LEN(type, len) \ | 17 #define NEW_OBJECT_WITH_LEN(type, len) \ |
| 18 ((kind == Snapshot::kFull) ? reader->New##type(len) : type::New(len)) | 18 ((kind == Snapshot::kFull) ? reader->New##type(len) : type::New(len)) |
| 19 | 19 |
| 20 | 20 |
| 21 static uword ZoneAllocator(intptr_t size) { | 21 static uword BigintAllocator(intptr_t size) { |
| 22 Zone* zone = Isolate::Current()->current_zone(); | 22 Zone* zone = Isolate::Current()->current_zone(); |
| 23 return zone->Allocate(size); | 23 return zone->AllocUnsafe(size); |
| 24 } | 24 } |
| 25 | 25 |
| 26 | 26 |
| 27 RawClass* Class::ReadFrom(SnapshotReader* reader, | 27 RawClass* Class::ReadFrom(SnapshotReader* reader, |
| 28 intptr_t object_id, | 28 intptr_t object_id, |
| 29 intptr_t tags, | 29 intptr_t tags, |
| 30 Snapshot::Kind kind) { | 30 Snapshot::Kind kind) { |
| 31 ASSERT(reader != NULL); | 31 ASSERT(reader != NULL); |
| 32 | 32 |
| 33 Class& cls = Class::ZoneHandle(reader->isolate(), Class::null()); | 33 Class& cls = Class::ZoneHandle(reader->isolate(), Class::null()); |
| (...skipping 1202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1236 | 1236 |
| 1237 | 1237 |
| 1238 RawBigint* Bigint::ReadFrom(SnapshotReader* reader, | 1238 RawBigint* Bigint::ReadFrom(SnapshotReader* reader, |
| 1239 intptr_t object_id, | 1239 intptr_t object_id, |
| 1240 intptr_t tags, | 1240 intptr_t tags, |
| 1241 Snapshot::Kind kind) { | 1241 Snapshot::Kind kind) { |
| 1242 ASSERT(reader != NULL); | 1242 ASSERT(reader != NULL); |
| 1243 | 1243 |
| 1244 // Read in the HexCString representation of the bigint. | 1244 // Read in the HexCString representation of the bigint. |
| 1245 intptr_t len = reader->ReadIntptrValue(); | 1245 intptr_t len = reader->ReadIntptrValue(); |
| 1246 char* str = reinterpret_cast<char*>(ZoneAllocator(len + 1)); | 1246 char* str = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 1247 str[len] = '\0'; | 1247 str[len] = '\0'; |
| 1248 reader->ReadBytes(reinterpret_cast<uint8_t*>(str), len); | 1248 reader->ReadBytes(reinterpret_cast<uint8_t*>(str), len); |
| 1249 | 1249 |
| 1250 // Create a Bigint object from HexCString. | 1250 // Create a Bigint object from HexCString. |
| 1251 Bigint& obj = Bigint::ZoneHandle( | 1251 Bigint& obj = Bigint::ZoneHandle( |
| 1252 reader->isolate(), | 1252 reader->isolate(), |
| 1253 (kind == Snapshot::kFull) ? reader->NewBigint(str) : | 1253 (kind == Snapshot::kFull) ? reader->NewBigint(str) : |
| 1254 BigintOperations::FromHexCString(str)); | 1254 BigintOperations::FromHexCString(str)); |
| 1255 | 1255 |
| 1256 // If it is a canonical constant make it one. | 1256 // If it is a canonical constant make it one. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1283 bool is_negative = false; | 1283 bool is_negative = false; |
| 1284 if (length <= 0) { | 1284 if (length <= 0) { |
| 1285 length = -length; | 1285 length = -length; |
| 1286 is_negative = true; | 1286 is_negative = true; |
| 1287 } | 1287 } |
| 1288 uword data_start = reinterpret_cast<uword>(ptr()) + sizeof(RawBigint); | 1288 uword data_start = reinterpret_cast<uword>(ptr()) + sizeof(RawBigint); |
| 1289 const char* str = BigintOperations::ToHexCString( | 1289 const char* str = BigintOperations::ToHexCString( |
| 1290 length, | 1290 length, |
| 1291 is_negative, | 1291 is_negative, |
| 1292 reinterpret_cast<void*>(data_start), | 1292 reinterpret_cast<void*>(data_start), |
| 1293 &ZoneAllocator); | 1293 &BigintAllocator); |
| 1294 bool neg = false; | 1294 bool neg = false; |
| 1295 if (*str == '-') { | 1295 if (*str == '-') { |
| 1296 neg = true; | 1296 neg = true; |
| 1297 str++; | 1297 str++; |
| 1298 } | 1298 } |
| 1299 intptr_t len = strlen(str); | 1299 intptr_t len = strlen(str); |
| 1300 ASSERT(len > 2 && str[0] == '0' && str[1] == 'x'); | 1300 ASSERT(len > 2 && str[0] == '0' && str[1] == 'x'); |
| 1301 if (neg) { | 1301 if (neg) { |
| 1302 writer->WriteIntptrValue(len - 1); // Include '-' in length. | 1302 writer->WriteIntptrValue(len - 1); // Include '-' in length. |
| 1303 writer->Write<uint8_t>('-'); | 1303 writer->Write<uint8_t>('-'); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1371 | 1371 |
| 1372 template<typename HandleType, typename CharacterType> | 1372 template<typename HandleType, typename CharacterType> |
| 1373 void String::ReadFromImpl(SnapshotReader* reader, | 1373 void String::ReadFromImpl(SnapshotReader* reader, |
| 1374 HandleType* str_obj, | 1374 HandleType* str_obj, |
| 1375 intptr_t len, | 1375 intptr_t len, |
| 1376 intptr_t tags) { | 1376 intptr_t tags) { |
| 1377 ASSERT(reader != NULL); | 1377 ASSERT(reader != NULL); |
| 1378 if (RawObject::IsCanonical(tags)) { | 1378 if (RawObject::IsCanonical(tags)) { |
| 1379 // Set up canonical string object. | 1379 // Set up canonical string object. |
| 1380 ASSERT(reader != NULL); | 1380 ASSERT(reader != NULL); |
| 1381 CharacterType* ptr = reinterpret_cast<CharacterType*>(ZoneAllocator(len)); | 1381 CharacterType* ptr = |
| 1382 Isolate::Current()->current_zone()->Alloc<CharacterType>(len); |
| 1382 for (intptr_t i = 0; i < len; i++) { | 1383 for (intptr_t i = 0; i < len; i++) { |
| 1383 ptr[i] = reader->Read<CharacterType>(); | 1384 ptr[i] = reader->Read<CharacterType>(); |
| 1384 } | 1385 } |
| 1385 *str_obj ^= Symbols::New(ptr, len); | 1386 *str_obj ^= Symbols::New(ptr, len); |
| 1386 } else { | 1387 } else { |
| 1387 // Set up the string object. | 1388 // Set up the string object. |
| 1388 *str_obj = HandleType::New(len, Heap::kNew); | 1389 *str_obj = HandleType::New(len, Heap::kNew); |
| 1389 str_obj->set_tags(tags); | 1390 str_obj->set_tags(tags); |
| 1390 str_obj->SetHash(0); // Will get computed when needed. | 1391 str_obj->SetHash(0); // Will get computed when needed. |
| 1391 for (intptr_t i = 0; i < len; i++) { | 1392 for (intptr_t i = 0; i < len; i++) { |
| (...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2007 writer->Write<RawObject*>(ptr()->num_bracket_expressions_); | 2008 writer->Write<RawObject*>(ptr()->num_bracket_expressions_); |
| 2008 writer->WriteObjectImpl(ptr()->pattern_); | 2009 writer->WriteObjectImpl(ptr()->pattern_); |
| 2009 writer->WriteIntptrValue(ptr()->type_); | 2010 writer->WriteIntptrValue(ptr()->type_); |
| 2010 writer->WriteIntptrValue(ptr()->flags_); | 2011 writer->WriteIntptrValue(ptr()->flags_); |
| 2011 | 2012 |
| 2012 // Do not write out the data part which is native. | 2013 // Do not write out the data part which is native. |
| 2013 } | 2014 } |
| 2014 | 2015 |
| 2015 | 2016 |
| 2016 } // namespace dart | 2017 } // namespace dart |
| OLD | NEW |