Index: runtime/vm/deopt_instructions.h |
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h |
index c2ee73565ae7a4edf9dbbf98a8136e8591da34da..158305606fcd0e8492b0020b8680f4f4241d100f 100644 |
--- a/runtime/vm/deopt_instructions.h |
+++ b/runtime/vm/deopt_instructions.h |
@@ -92,6 +92,9 @@ class DeoptContext { |
RawCode* code() const { return code_; } |
ICData::DeoptReasonId deopt_reason() const { return deopt_reason_; } |
+ bool HasDeoptFlag(ICData::DeoptFlags flag) { |
+ return (deopt_flags_ & flag) != 0; |
+ } |
RawDeoptInfo* deopt_info() const { return deopt_info_; } |
@@ -191,6 +194,7 @@ class DeoptContext { |
fpu_register_t* fpu_registers_; |
intptr_t num_args_; |
ICData::DeoptReasonId deopt_reason_; |
+ uint32_t deopt_flags_; |
intptr_t caller_fp_; |
Isolate* isolate_; |
@@ -486,7 +490,7 @@ class DeoptTable : public AllStatic { |
intptr_t index, |
const Smi& offset, |
const DeoptInfo& info, |
- const Smi& reason); |
+ const Smi& reason_and_flags); |
// Return the length of the table in entries. |
static intptr_t GetLength(const Array& table); |
@@ -497,7 +501,16 @@ class DeoptTable : public AllStatic { |
intptr_t index, |
Smi* offset, |
DeoptInfo* info, |
- Smi* reason); |
+ Smi* reason_and_flags); |
+ |
+ static RawSmi* EncodeReasonAndFlags(ICData::DeoptReasonId reason, |
+ uint32_t flags) { |
+ return Smi::New(ReasonField::encode(reason) | |
+ FlagsField::encode(flags)); |
+ } |
+ |
+ class ReasonField : public BitField<ICData::DeoptReasonId, 0, 8> { }; |
+ class FlagsField : public BitField<uint32_t, 8, 8> { }; |
private: |
static const intptr_t kEntrySize = 3; |