Commit f7168008 authored by olehougaard's avatar olehougaard

Introduced a TempAssign utility because I just couldn't watch this anymore. YMMV.

Review URL: http://codereview.chromium.org/14422

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@976 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 5d2fd5cb
......@@ -2057,10 +2057,9 @@ void CodeGenerator::VisitTryCatch(TryCatch* node) {
}
// 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
......@@ -2155,10 +2154,9 @@ void CodeGenerator::VisitTryFinally(TryFinally* node) {
}
// 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
......
......@@ -372,6 +372,23 @@ class Vector {
};
// 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:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment