Reviewers: Mads Ager,

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

Please review this at http://codereview.chromium.org/14422

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
   M     src/codegen-ia32.cc
   M     src/utils.h


Index: src/utils.h
===================================================================
--- src/utils.h (revision 958)
+++ src/utils.h (working copy)
@@ -372,6 +372,23 @@
  };


+// 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:
Index: src/codegen-ia32.cc
===================================================================
--- src/codegen-ia32.cc (revision 958)
+++ src/codegen-ia32.cc (working copy)
@@ -2057,10 +2057,9 @@
    }

    // 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 @@
    }

    // 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



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to