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

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

Issue 13139002: Remove support for 'dart:scalarlist' in the Dart VM. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 8 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
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/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"
(...skipping 2212 matching lines...) Expand 10 before | Expand all | Expand 10 after
2223 writer->WriteIntptrValue(writer->GetObjectTags(this)); 2223 writer->WriteIntptrValue(writer->GetObjectTags(this));
2224 2224
2225 // Write out the mask values. 2225 // Write out the mask values.
2226 writer->Write<uint32_t>(ptr()->value_[0]); 2226 writer->Write<uint32_t>(ptr()->value_[0]);
2227 writer->Write<uint32_t>(ptr()->value_[1]); 2227 writer->Write<uint32_t>(ptr()->value_[1]);
2228 writer->Write<uint32_t>(ptr()->value_[2]); 2228 writer->Write<uint32_t>(ptr()->value_[2]);
2229 writer->Write<uint32_t>(ptr()->value_[3]); 2229 writer->Write<uint32_t>(ptr()->value_[3]);
2230 } 2230 }
2231 2231
2232 2232
2233 RawByteArray* ByteArray::ReadFrom(SnapshotReader* reader,
2234 intptr_t object_id,
2235 intptr_t tags,
2236 Snapshot::Kind kind) {
2237 UNREACHABLE(); // ByteArray is an abstract class.
2238 return ByteArray::null();
2239 }
2240
2241
2242 template<typename HandleT, typename RawT, typename ElementT>
2243 RawT* ByteArray::ReadFromImpl(SnapshotReader* reader,
2244 intptr_t object_id,
2245 intptr_t tags,
2246 Snapshot::Kind kind) {
2247 ASSERT(reader != NULL);
2248
2249 intptr_t len = reader->ReadSmiValue();
2250 HandleT& result = HandleT::ZoneHandle(
2251 reader->isolate(), HandleT::New(len, HEAP_SPACE(kind)));
2252 reader->AddBackRef(object_id, &result, kIsDeserialized);
2253
2254 // Set the object tags.
2255 result.set_tags(tags);
2256
2257 // Setup the array elements.
2258 for (intptr_t i = 0; i < len; ++i) {
2259 result.SetAt(i, reader->Read<ElementT>());
2260 }
2261 return result.raw();
2262 }
2263
2264
2265 #define BYTEARRAY_TYPE_LIST(V) \
2266 V(Int8, int8, int8_t) \
2267 V(Uint8, uint8, uint8_t) \
2268 V(Uint8Clamped, uint8, uint8_t) \
2269 V(Int16, int16, int16_t) \
2270 V(Uint16, uint16, uint16_t) \
2271 V(Int32, int32, int32_t) \
2272 V(Uint32, uint32, uint32_t) \
2273 V(Int64, int64, int64_t) \
2274 V(Uint64, uint64, uint64_t) \
2275 V(Float32, float32, float) \
2276 V(Float64, float64, double) \
2277
2278
2279 #define BYTEARRAY_READ_FROM(name, lname, type) \
2280 Raw##name##Array* name##Array::ReadFrom(SnapshotReader* reader, \
2281 intptr_t object_id, \
2282 intptr_t tags, \
2283 Snapshot::Kind kind) { \
2284 return ReadFromImpl<name##Array, Raw##name##Array, type>(reader, \
2285 object_id, \
2286 tags, \
2287 kind); \
2288 } \
2289
2290
2291 BYTEARRAY_TYPE_LIST(BYTEARRAY_READ_FROM)
2292 #undef BYTEARRAY_READ_FROM
2293
2294
2295 #define EXTERNALARRAY_READ_FROM(name, lname, type) \
2296 RawExternal##name##Array* External##name##Array::ReadFrom( \
2297 SnapshotReader* reader, \
2298 intptr_t object_id, \
2299 intptr_t tags, \
2300 Snapshot::Kind kind) { \
2301 ASSERT(kind != Snapshot::kFull); \
2302 intptr_t length = reader->ReadSmiValue(); \
2303 type* data = reinterpret_cast<type*>(reader->ReadIntptrValue()); \
2304 const External##name##Array& obj = External##name##Array::Handle( \
2305 External##name##Array::New(data, length)); \
2306 void* peer = reinterpret_cast<void*>(reader->ReadIntptrValue()); \
2307 Dart_WeakPersistentHandleFinalizer callback = \
2308 reinterpret_cast<Dart_WeakPersistentHandleFinalizer>( \
2309 reader->ReadIntptrValue()); \
2310 obj.AddFinalizer(peer, callback); \
2311 return obj.raw(); \
2312 } \
2313
2314 BYTEARRAY_TYPE_LIST(EXTERNALARRAY_READ_FROM)
2315 #undef EXTERNALARRAY_READ_FROM
2316
2317
2318 template<typename ElementT>
2319 static void ByteArrayWriteTo(SnapshotWriter* writer,
2320 intptr_t object_id,
2321 Snapshot::Kind kind,
2322 intptr_t byte_array_kind,
2323 intptr_t tags,
2324 RawSmi* length,
2325 ElementT* data) {
2326 ASSERT(writer != NULL);
2327 intptr_t len = Smi::Value(length);
2328
2329 // Write out the serialization header value for this object.
2330 writer->WriteInlinedObjectHeader(object_id);
2331
2332 // Write out the class and tags information.
2333 writer->WriteIndexedObject(byte_array_kind);
2334 writer->WriteIntptrValue(tags);
2335
2336 // Write out the length field.
2337 writer->Write<RawObject*>(length);
2338
2339 // Write out the array elements.
2340 for (intptr_t i = 0; i < len; i++) {
2341 writer->Write(data[i]);
2342 }
2343 }
2344
2345
2346 void RawByteArray::WriteTo(SnapshotWriter* writer,
2347 intptr_t object_id,
2348 Snapshot::Kind kind) {
2349 UNREACHABLE(); // ByteArray is an abstract class
2350 }
2351
2352
2353 #define BYTEARRAY_WRITE_TO(name, lname, type) \
2354 void Raw##name##Array::WriteTo(SnapshotWriter* writer, \
2355 intptr_t object_id, \
2356 Snapshot::Kind kind) { \
2357 ByteArrayWriteTo(writer, \
2358 object_id, \
2359 kind, \
2360 k##name##ArrayCid, \
2361 writer->GetObjectTags(this), \
2362 ptr()->length_, \
2363 ptr()->data_); \
2364 } \
2365
2366
2367 BYTEARRAY_TYPE_LIST(BYTEARRAY_WRITE_TO)
2368 #undef BYTEARRAY_WRITE_TO
2369
2370
2371 #define EXTERNALARRAY_WRITE_TO(name, lname, type) \
2372 void RawExternal##name##Array::WriteTo(SnapshotWriter* writer, \
2373 intptr_t object_id, \
2374 Snapshot::Kind kind) { \
2375 ByteArrayWriteTo(writer, \
2376 object_id, \
2377 kind, \
2378 k##name##ArrayCid, \
2379 writer->GetObjectTags(this), \
2380 ptr()->length_, \
2381 ptr()->data_); \
2382 } \
2383
2384
2385 BYTEARRAY_TYPE_LIST(EXTERNALARRAY_WRITE_TO)
2386 #undef BYTEARRAY_WRITE_TO
2387
2388 #undef BYTEARRAY_TYPE_LIST
2389
2390
2391 #define TYPED_DATA_READ(setter, type) \ 2233 #define TYPED_DATA_READ(setter, type) \
2392 for (intptr_t i = 0; i < lengthInBytes; i += element_size) { \ 2234 for (intptr_t i = 0; i < lengthInBytes; i += element_size) { \
2393 result.Set##setter(i, reader->Read<type>()); \ 2235 result.Set##setter(i, reader->Read<type>()); \
2394 } \ 2236 } \
2395 2237
2238
2396 RawTypedData* TypedData::ReadFrom(SnapshotReader* reader, 2239 RawTypedData* TypedData::ReadFrom(SnapshotReader* reader,
2397 intptr_t object_id, 2240 intptr_t object_id,
2398 intptr_t tags, 2241 intptr_t tags,
2399 Snapshot::Kind kind) { 2242 Snapshot::Kind kind) {
2400 ASSERT(reader != NULL); 2243 ASSERT(reader != NULL);
2401 2244
2402 intptr_t cid = RawObject::ClassIdTag::decode(tags); 2245 intptr_t cid = RawObject::ClassIdTag::decode(tags);
2403 intptr_t len = reader->ReadSmiValue(); 2246 intptr_t len = reader->ReadSmiValue();
2404 TypedData& result = TypedData::ZoneHandle( 2247 TypedData& result = TypedData::ZoneHandle(
2405 reader->isolate(), TypedData::New(cid, len, HEAP_SPACE(kind))); 2248 reader->isolate(), TypedData::New(cid, len, HEAP_SPACE(kind)));
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
2766 // Write out the class and tags information. 2609 // Write out the class and tags information.
2767 writer->WriteIndexedObject(kWeakPropertyCid); 2610 writer->WriteIndexedObject(kWeakPropertyCid);
2768 writer->WriteIntptrValue(writer->GetObjectTags(this)); 2611 writer->WriteIntptrValue(writer->GetObjectTags(this));
2769 2612
2770 // Write out all the other fields. 2613 // Write out all the other fields.
2771 writer->Write<RawObject*>(ptr()->key_); 2614 writer->Write<RawObject*>(ptr()->key_);
2772 writer->Write<RawObject*>(ptr()->value_); 2615 writer->Write<RawObject*>(ptr()->value_);
2773 } 2616 }
2774 2617
2775 } // namespace dart 2618 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698