}
// Generate code for the statements in the try block.
- bool was_inside_try = is_inside_try_;
- is_inside_try_ = true;
- VisitStatements(node->try_block()->statements());
- is_inside_try_ = was_inside_try;
+ { TempAssign<bool> temp(&is_inside_try_, true);
+ VisitStatements(node->try_block()->statements());
+ }
// Stop the introduced shadowing and count the number of required unlinks.
// After shadowing stops, the original labels are unshadowed and the
}
// Generate code for the statements in the try block.
- bool was_inside_try = is_inside_try_;
- is_inside_try_ = true;
- VisitStatements(node->try_block()->statements());
- is_inside_try_ = was_inside_try;
+ { TempAssign<bool> temp(&is_inside_try_, true);
+ VisitStatements(node->try_block()->statements());
+ }
// Stop the introduced shadowing and count the number of required unlinks.
// After shadowing stops, the original labels are unshadowed and the
};
+// A temporary assignment sets a (non-local) variable to a value on
+// construction and resets it the value on destruction.
+template <typename T>
+class TempAssign {
+ public:
+ TempAssign(T* var, T value): var_(var), old_value_(*var) {
+ *var = value;
+ }
+
+ ~TempAssign() { *var_ = old_value_; }
+
+ private:
+ T* var_;
+ T old_value_;
+};
+
+
template <typename T, int kSize>
class EmbeddedVector : public Vector<T> {
public: