summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame/luaengine_mem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/mame/luaengine_mem.cpp')
-rw-r--r--src/frontend/mame/luaengine_mem.cpp81
1 files changed, 48 insertions, 33 deletions
diff --git a/src/frontend/mame/luaengine_mem.cpp b/src/frontend/mame/luaengine_mem.cpp
index 8ad5d6300bb..f22d23b0961 100644
--- a/src/frontend/mame/luaengine_mem.cpp
+++ b/src/frontend/mame/luaengine_mem.cpp
@@ -238,7 +238,15 @@ public:
void remove()
{
++m_installing;
- m_handler.remove();
+ try
+ {
+ m_handler.remove();
+ }
+ catch (...)
+ {
+ --m_installing;
+ throw;
+ }
--m_installing;
}
@@ -249,41 +257,48 @@ private:
if (m_installing)
return;
++m_installing;
- m_handler.remove();
+ try
+ {
+ m_handler.remove();
- switch (m_mode)
+ switch (m_mode)
+ {
+ case read_or_write::READ:
+ m_handler = m_space.install_read_tap(
+ m_start,
+ m_end,
+ m_name,
+ [this] (offs_t offset, T &data, T mem_mask)
+ {
+ auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
+ if (result)
+ data = *result;
+ },
+ &m_handler);
+ break;
+ case read_or_write::WRITE:
+ m_handler = m_space.install_write_tap(
+ m_start,
+ m_end,
+ m_name,
+ [this] (offs_t offset, T &data, T mem_mask)
+ {
+ auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
+ if (result)
+ data = *result;
+ },
+ &m_handler);
+ break;
+ case read_or_write::READWRITE:
+ // won't ever get here, but compilers complain about unhandled enum value
+ break;
+ }
+ }
+ catch (...)
{
- case read_or_write::READ:
- m_handler = m_space.install_read_tap(
- m_start,
- m_end,
- m_name,
- [this] (offs_t offset, T &data, T mem_mask)
- {
- auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
- if (result)
- data = *result;
- },
- &m_handler);
- break;
- case read_or_write::WRITE:
- m_handler = m_space.install_write_tap(
- m_start,
- m_end,
- m_name,
- [this] (offs_t offset, T &data, T mem_mask)
- {
- auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
- if (result)
- data = *result;
- },
- &m_handler);
- break;
- case read_or_write::READWRITE:
- // won't ever get here, but compilers complain about unhandled enum value
- break;
+ --m_installing;
+ throw;
}
-
--m_installing;
};