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

Unified Diff: runtime/vm/exceptions.h

Issue 2734323003: Re-landing of "replace TrySync with Metadata". (Closed)
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/exceptions.h
diff --git a/runtime/vm/exceptions.h b/runtime/vm/exceptions.h
index c2a3350042b24ec8941869ff52528da1d6f4e385..67a8ffcd7aeb6d1bdcec5e1314de322962b8c48b 100644
--- a/runtime/vm/exceptions.h
+++ b/runtime/vm/exceptions.h
@@ -102,6 +102,65 @@ struct ExceptionHandlerInfo {
int8_t is_generated; // True if this is a generated handler.
};
+
+class CatchEntryState {
+ public:
+ enum { kCatchEntryStateIsMove = 1, kCatchEntryStateDestShift = 1 };
+
+ CatchEntryState() : data(NULL), ref_count(NULL) {}
+ explicit CatchEntryState(intptr_t* data_)
+ : data(data_), ref_count(new intptr_t(1)) {}
Florian Schneider 2017/03/09 16:33:32 Style: Private fields end with _. Rename parameter
Dmitry Olshansky 2017/03/13 12:26:30 Done.
+
+ CatchEntryState(const CatchEntryState& state) { Copy(state); }
+
+ ~CatchEntryState() { Destroy(); }
+
+ CatchEntryState& operator=(const CatchEntryState& state) {
+ Destroy();
+ Copy(state);
+ return *this;
+ }
+
+ bool Empty() { return ref_count == NULL; }
+
+ intptr_t Pairs() { return data[0]; }
+
+ intptr_t Src(intptr_t i) { return data[1 + 2 * i]; }
+
+ intptr_t Dest(intptr_t i) {
+ return data[2 + 2 * i] >> kCatchEntryStateDestShift;
+ }
+
+ bool isMove(intptr_t i) { return data[2 + 2 * i] & kCatchEntryStateIsMove; }
+
+ private:
+ void Destroy() {
+ if (ref_count != NULL) {
+ (*ref_count)--;
+ if (*ref_count == 0) {
+ delete ref_count;
+ delete[] data;
+ }
+ }
+ }
+
+ void Copy(const CatchEntryState& state) {
+ data = state.data;
+ ref_count = state.ref_count;
+ if (ref_count != NULL) {
+ (*ref_count)++;
+ }
+ }
+
+ // Data has the following format:
+ // 0 - number of pairs in this state
+ // 1-2 - 1st encoded src,dest pair
+ // 3-4 - 2nd pair
+ // ....
+ intptr_t* data;
+ intptr_t* ref_count;
Florian Schneider 2017/03/09 16:33:32 s/ref_count/ref_count_/g
Dmitry Olshansky 2017/03/13 12:26:31 Done.
+};
+
} // namespace dart
#endif // RUNTIME_VM_EXCEPTIONS_H_

Powered by Google App Engine
This is Rietveld 408576698