Use scope_exit in regcache.c
authorTom Tromey <tom@tromey.com>
Wed, 23 Jan 2019 18:58:37 +0000 (18:58 +0000)
committerPedro Alves <palves@redhat.com>
Wed, 23 Jan 2019 19:14:44 +0000 (19:14 +0000)
This removes the regcache_invalidator class in favor of a scope_exit.
This seems like an improvement (albeit a minor one) because
regcache_invalidator is only used in a single spot.

gdb/ChangeLog:
2019-01-23  Tom Tromey  <tom@tromey.com>
    Pedro Alves  <palves@redhat.com>

* regcache.c (class regcache_invalidator): Remove.
(regcache::raw_write): Use make_scope_exit.

gdb/ChangeLog
gdb/regcache.c

index 39d5b58087867890c976699487c05c29b4e721c1..e01f5eecb4c7a10ffae41f810517acf316387bca 100644 (file)
@@ -1,3 +1,9 @@
+2019-01-23  Tom Tromey  <tom@tromey.com>
+           Pedro Alves  <palves@redhat.com>
+
+       * regcache.c (class regcache_invalidator): Remove.
+       (regcache::raw_write): Use make_scope_exit.
+
 2019-01-23  Tom Tromey  <tom@tromey.com>
 
        * ui-out.h (class ui_out_emit_type): Update comment.
index 4a68390c5f7c2e31ee1e7ce4f303fa84375c3f42..a354e15d2d84f7176ff3d29ca0abb74a62e0ef7c 100644 (file)
@@ -219,37 +219,6 @@ reg_buffer::arch () const
   return m_descr->gdbarch;
 }
 
-/* Cleanup class for invalidating a register.  */
-
-class regcache_invalidator
-{
-public:
-
-  regcache_invalidator (struct regcache *regcache, int regnum)
-    : m_regcache (regcache),
-      m_regnum (regnum)
-  {
-  }
-
-  ~regcache_invalidator ()
-  {
-    if (m_regcache != nullptr)
-      m_regcache->invalidate (m_regnum);
-  }
-
-  DISABLE_COPY_AND_ASSIGN (regcache_invalidator);
-
-  void release ()
-  {
-    m_regcache = nullptr;
-  }
-
-private:
-
-  struct regcache *m_regcache;
-  int m_regnum;
-};
-
 /* Return  a pointer to register REGNUM's buffer cache.  */
 
 gdb_byte *
@@ -769,7 +738,8 @@ regcache::raw_write (int regnum, const gdb_byte *buf)
 
   /* Invalidate the register after it is written, in case of a
      failure.  */
-  regcache_invalidator invalidator (this, regnum);
+  auto invalidator
+    = make_scope_exit ([&] { this->invalidate (regnum); });
 
   target_store_registers (this, regnum);