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

Side by Side Diff: runtime/vm/snapshot.h

Issue 154393003: Implement eager instantiation and canonicalization of type arguments at run (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 10 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 #ifndef VM_SNAPSHOT_H_ 5 #ifndef VM_SNAPSHOT_H_
6 #define VM_SNAPSHOT_H_ 6 #define VM_SNAPSHOT_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/allocation.h" 9 #include "vm/allocation.h"
10 #include "vm/bitfield.h" 10 #include "vm/bitfield.h"
11 #include "vm/datastream.h" 11 #include "vm/datastream.h"
12 #include "vm/exceptions.h" 12 #include "vm/exceptions.h"
13 #include "vm/globals.h" 13 #include "vm/globals.h"
14 #include "vm/growable_array.h" 14 #include "vm/growable_array.h"
15 #include "vm/isolate.h" 15 #include "vm/isolate.h"
16 #include "vm/visitor.h" 16 #include "vm/visitor.h"
17 17
18 namespace dart { 18 namespace dart {
19 19
20 // Forward declarations. 20 // Forward declarations.
21 class AbstractType; 21 class AbstractType;
22 class AbstractTypeArguments;
23 class Array; 22 class Array;
24 class Class; 23 class Class;
25 class ClassTable; 24 class ClassTable;
26 class ExternalTypedData; 25 class ExternalTypedData;
27 class GrowableObjectArray; 26 class GrowableObjectArray;
28 class Heap; 27 class Heap;
29 class LanguageError; 28 class LanguageError;
30 class Library; 29 class Library;
31 class Object; 30 class Object;
32 class ObjectStore; 31 class ObjectStore;
33 class RawAbstractTypeArguments;
34 class RawApiError; 32 class RawApiError;
35 class RawArray; 33 class RawArray;
36 class RawBigint; 34 class RawBigint;
37 class RawBoundedType; 35 class RawBoundedType;
38 class RawMixinAppType; 36 class RawMixinAppType;
39 class RawClass; 37 class RawClass;
40 class RawContext; 38 class RawContext;
41 class RawDouble; 39 class RawDouble;
42 class RawField; 40 class RawField;
43 class RawClosureData; 41 class RawClosureData;
(...skipping 18 matching lines...) Expand all
62 class RawStacktrace; 60 class RawStacktrace;
63 class RawTokenStream; 61 class RawTokenStream;
64 class RawType; 62 class RawType;
65 class RawTypeRef; 63 class RawTypeRef;
66 class RawTypeParameter; 64 class RawTypeParameter;
67 class RawTypeArguments; 65 class RawTypeArguments;
68 class RawTwoByteString; 66 class RawTwoByteString;
69 class RawUnresolvedClass; 67 class RawUnresolvedClass;
70 class String; 68 class String;
71 class TokenStream; 69 class TokenStream;
70 class TypeArguments;
72 class UnhandledException; 71 class UnhandledException;
73 72
74 // Serialized object header encoding is as follows: 73 // Serialized object header encoding is as follows:
75 // - Smi: the Smi value is written as is (last bit is not tagged). 74 // - Smi: the Smi value is written as is (last bit is not tagged).
76 // - VM object (from VM isolate): (object id in vm isolate | 0x3) 75 // - VM object (from VM isolate): (object id in vm isolate | 0x3)
77 // This valus is serialized as a negative number. 76 // This valus is serialized as a negative number.
78 // (note VM objects are never serialized they are expected to be found 77 // (note VM objects are never serialized they are expected to be found
79 // using ths unique ID assigned to them). 78 // using ths unique ID assigned to them).
80 // - Reference to object that has already been written: (object id | 0x3) 79 // - Reference to object that has already been written: (object id | 0x3)
81 // This valus is serialized as a positive number. 80 // This valus is serialized as a positive number.
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 Isolate* isolate); 216 Isolate* isolate);
218 ~SnapshotReader() { } 217 ~SnapshotReader() { }
219 218
220 Isolate* isolate() const { return isolate_; } 219 Isolate* isolate() const { return isolate_; }
221 Heap* heap() const { return isolate_->heap(); } 220 Heap* heap() const { return isolate_->heap(); }
222 ObjectStore* object_store() const { return isolate_->object_store(); } 221 ObjectStore* object_store() const { return isolate_->object_store(); }
223 ClassTable* class_table() const { return isolate_->class_table(); } 222 ClassTable* class_table() const { return isolate_->class_table(); }
224 Object* ObjectHandle() { return &obj_; } 223 Object* ObjectHandle() { return &obj_; }
225 String* StringHandle() { return &str_; } 224 String* StringHandle() { return &str_; }
226 AbstractType* TypeHandle() { return &type_; } 225 AbstractType* TypeHandle() { return &type_; }
227 AbstractTypeArguments* TypeArgumentsHandle() { return &type_arguments_; } 226 TypeArguments* TypeArgumentsHandle() { return &type_arguments_; }
228 Array* TokensHandle() { return &tokens_; } 227 Array* TokensHandle() { return &tokens_; }
229 TokenStream* StreamHandle() { return &stream_; } 228 TokenStream* StreamHandle() { return &stream_; }
230 ExternalTypedData* DataHandle() { return &data_; } 229 ExternalTypedData* DataHandle() { return &data_; }
231 UnhandledException* ErrorHandle() { return &error_; } 230 UnhandledException* ErrorHandle() { return &error_; }
232 231
233 // Reads an object. 232 // Reads an object.
234 RawObject* ReadObject(); 233 RawObject* ReadObject();
235 234
236 // Add object to backward references. 235 // Add object to backward references.
237 void AddBackRef(intptr_t id, Object* obj, DeserializeState state); 236 void AddBackRef(intptr_t id, Object* obj, DeserializeState state);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 322
324 Snapshot::Kind kind_; // Indicates type of snapshot(full, script, message). 323 Snapshot::Kind kind_; // Indicates type of snapshot(full, script, message).
325 Isolate* isolate_; // Current isolate. 324 Isolate* isolate_; // Current isolate.
326 Class& cls_; // Temporary Class handle. 325 Class& cls_; // Temporary Class handle.
327 Object& obj_; // Temporary Object handle. 326 Object& obj_; // Temporary Object handle.
328 Array& array_; // Temporary Array handle. 327 Array& array_; // Temporary Array handle.
329 Field& field_; // Temporary Field handle. 328 Field& field_; // Temporary Field handle.
330 String& str_; // Temporary String handle. 329 String& str_; // Temporary String handle.
331 Library& library_; // Temporary library handle. 330 Library& library_; // Temporary library handle.
332 AbstractType& type_; // Temporary type handle. 331 AbstractType& type_; // Temporary type handle.
333 AbstractTypeArguments& type_arguments_; // Temporary type argument handle. 332 TypeArguments& type_arguments_; // Temporary type argument handle.
334 Array& tokens_; // Temporary tokens handle. 333 Array& tokens_; // Temporary tokens handle.
335 TokenStream& stream_; // Temporary token stream handle. 334 TokenStream& stream_; // Temporary token stream handle.
336 ExternalTypedData& data_; // Temporary stream data handle. 335 ExternalTypedData& data_; // Temporary stream data handle.
337 UnhandledException& error_; // Error handle. 336 UnhandledException& error_; // Error handle.
338 GrowableArray<BackRefNode*> backward_references_; 337 GrowableArray<BackRefNode*> backward_references_;
339 338
340 friend class ApiError; 339 friend class ApiError;
341 friend class Array; 340 friend class Array;
342 friend class BoundedType; 341 friend class BoundedType;
343 friend class MixinAppType; 342 friend class MixinAppType;
344 friend class Class; 343 friend class Class;
345 friend class Context; 344 friend class Context;
346 friend class ContextScope; 345 friend class ContextScope;
347 friend class Field; 346 friend class Field;
348 friend class ClosureData; 347 friend class ClosureData;
349 friend class RedirectionData; 348 friend class RedirectionData;
350 friend class Function; 349 friend class Function;
351 friend class GrowableObjectArray; 350 friend class GrowableObjectArray;
352 friend class ImmutableArray; 351 friend class ImmutableArray;
353 friend class InstantiatedTypeArguments;
354 friend class JSRegExp; 352 friend class JSRegExp;
355 friend class LanguageError; 353 friend class LanguageError;
356 friend class Library; 354 friend class Library;
357 friend class LibraryPrefix; 355 friend class LibraryPrefix;
358 friend class Namespace; 356 friend class Namespace;
359 friend class LiteralToken; 357 friend class LiteralToken;
360 friend class PatchClass; 358 friend class PatchClass;
361 friend class Script; 359 friend class Script;
362 friend class Stacktrace; 360 friend class Stacktrace;
363 friend class TokenStream; 361 friend class TokenStream;
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 501
504 void WriteObjectRef(RawObject* raw); 502 void WriteObjectRef(RawObject* raw);
505 void WriteClassId(RawClass* cls); 503 void WriteClassId(RawClass* cls);
506 void WriteObjectImpl(RawObject* raw); 504 void WriteObjectImpl(RawObject* raw);
507 void WriteInlinedObject(RawObject* raw); 505 void WriteInlinedObject(RawObject* raw);
508 void WriteForwardedObjects(); 506 void WriteForwardedObjects();
509 void ArrayWriteTo(intptr_t object_id, 507 void ArrayWriteTo(intptr_t object_id,
510 intptr_t array_kind, 508 intptr_t array_kind,
511 intptr_t tags, 509 intptr_t tags,
512 RawSmi* length, 510 RawSmi* length,
513 RawAbstractTypeArguments* type_arguments, 511 RawTypeArguments* type_arguments,
514 RawObject* data[]); 512 RawObject* data[]);
515 void CheckIfSerializable(RawClass* cls); 513 void CheckIfSerializable(RawClass* cls);
516 void SetWriteException(Exceptions::ExceptionType type, const char* msg); 514 void SetWriteException(Exceptions::ExceptionType type, const char* msg);
517 void WriteInstance(intptr_t object_id, 515 void WriteInstance(intptr_t object_id,
518 RawObject* raw, 516 RawObject* raw,
519 RawClass* cls, 517 RawClass* cls,
520 intptr_t tags); 518 intptr_t tags);
521 void WriteInstanceRef(RawObject* raw, RawClass* cls); 519 void WriteInstanceRef(RawObject* raw, RawClass* cls);
522 520
523 ObjectStore* object_store() const { return object_store_; } 521 ObjectStore* object_store() const { return object_store_; }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 private: 618 private:
621 SnapshotWriter* writer_; 619 SnapshotWriter* writer_;
622 bool as_references_; 620 bool as_references_;
623 621
624 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); 622 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor);
625 }; 623 };
626 624
627 } // namespace dart 625 } // namespace dart
628 626
629 #endif // VM_SNAPSHOT_H_ 627 #endif // VM_SNAPSHOT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698