Index: runtime/vm/snapshot.h |
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h |
index 7f6436b8b841a71a13821d789f910f08603f75a7..0bb9178f4d7e477f5efc80864f7e70ef075f0fc6 100644 |
--- a/runtime/vm/snapshot.h |
+++ b/runtime/vm/snapshot.h |
@@ -32,6 +32,7 @@ class LanguageError; |
class Library; |
class Object; |
class PassiveObject; |
+class ObjectPool; |
class ObjectStore; |
class MegamorphicCache; |
class PageSpace; |
@@ -370,7 +371,7 @@ class InstructionsReader : public ZoneAllocated { |
OS::PreferredCodeAlignment())); |
} |
- RawInstructions* GetInstructionsAt(int32_t offset, uword expected_tags); |
+ uword GetInstructionsAt(int32_t offset); |
RawObject* GetObjectAt(int32_t offset); |
private: |
@@ -402,6 +403,7 @@ class SnapshotReader : public BaseReader { |
Code* CodeHandle() { return &code_; } |
Function* FunctionHandle() { return &function_; } |
MegamorphicCache* MegamorphicCacheHandle() { return &megamorphic_cache_; } |
+ ObjectPool* ObjectPoolHandle() { return &object_pool_; } |
Snapshot::Kind kind() const { return kind_; } |
bool snapshot_code() const { return snapshot_code_; } |
@@ -483,8 +485,8 @@ class SnapshotReader : public BaseReader { |
RawWeakProperty* NewWeakProperty(); |
RawRegExp* NewRegExp(); |
- RawInstructions* GetInstructionsAt(int32_t offset, uword expected_tags) { |
- return instructions_reader_->GetInstructionsAt(offset, expected_tags); |
+ uword GetInstructionsAt(int32_t offset) { |
+ return instructions_reader_->GetInstructionsAt(offset); |
} |
RawObject* GetObjectAt(int32_t offset) { |
@@ -588,6 +590,7 @@ class SnapshotReader : public BaseReader { |
Code& code_; // Temporary code handle. |
Function& function_; // Temporary function handle. |
MegamorphicCache& megamorphic_cache_; // Temporary megamorphic cache handle. |
+ ObjectPool& object_pool_; // Temporary object pool handle. |
UnhandledException& error_; // Error handle. |
intptr_t max_vm_isolate_object_id_; |
ZoneGrowableArray<BackRefNode>* backward_references_; |
@@ -862,26 +865,18 @@ class InstructionsWriter : public ZoneAllocated { |
intptr_t binary_size() { return binary_size_; } |
- int32_t GetOffsetFor(RawInstructions* instructions); |
+ int32_t GetOffsetFor(RawInstructions* instructions, RawCode* code); |
int32_t GetObjectOffsetFor(RawObject* raw_object); |
- void SetInstructionsCode(RawInstructions* insns, RawCode* code) { |
- for (intptr_t i = 0; i < instructions_.length(); i++) { |
- if (instructions_[i].raw_insns_ == insns) { |
- instructions_[i].raw_code_ = code; |
- return; |
- } |
- } |
- UNREACHABLE(); |
- } |
- |
void WriteAssembly(); |
private: |
struct InstructionsData { |
- explicit InstructionsData(RawInstructions* insns) |
- : raw_insns_(insns), raw_code_(NULL) { } |
+ explicit InstructionsData(RawInstructions* insns, |
+ RawCode* code, |
+ intptr_t offset) |
+ : raw_insns_(insns), raw_code_(code), offset_(offset) { } |
union { |
RawInstructions* raw_insns_; |
@@ -891,6 +886,7 @@ class InstructionsWriter : public ZoneAllocated { |
RawCode* raw_code_; |
const Code* code_; |
}; |
+ intptr_t offset_; |
}; |
struct ObjectData { |
@@ -970,18 +966,14 @@ class SnapshotWriter : public BaseWriter { |
static intptr_t FirstObjectId(); |
- int32_t GetInstructionsId(RawInstructions* instructions) { |
- return instructions_writer_->GetOffsetFor(instructions); |
+ int32_t GetInstructionsId(RawInstructions* instructions, RawCode* code) { |
+ return instructions_writer_->GetOffsetFor(instructions, code); |
} |
int32_t GetObjectId(RawObject* raw) { |
return instructions_writer_->GetObjectOffsetFor(raw); |
} |
- void SetInstructionsCode(RawInstructions* instructions, RawCode* code) { |
- return instructions_writer_->SetInstructionsCode(instructions, code); |
- } |
- |
void WriteFunctionId(RawFunction* func, bool owner_is_class); |
RawFunction* IsSerializableClosure(RawClosure* closure); |
@@ -1048,6 +1040,7 @@ class SnapshotWriter : public BaseWriter { |
friend class RawArray; |
friend class RawClass; |
friend class RawClosureData; |
+ friend class RawCode; |
friend class RawContextScope; |
friend class RawExceptionHandlers; |
friend class RawField; |