summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/debug/express.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/debug/express.cpp')
-rw-r--r--src/emu/debug/express.cpp73
1 files changed, 26 insertions, 47 deletions
diff --git a/src/emu/debug/express.cpp b/src/emu/debug/express.cpp
index 9661d80a35a..06e12e09800 100644
--- a/src/emu/debug/express.cpp
+++ b/src/emu/debug/express.cpp
@@ -114,7 +114,7 @@ public:
// construction/destruction
integer_symbol_entry(symbol_table &table, const char *name, symbol_table::read_write rw, u64 *ptr = nullptr);
integer_symbol_entry(symbol_table &table, const char *name, u64 constval);
- integer_symbol_entry(symbol_table &table, const char *name, void *ref, symbol_table::getter_func getter, symbol_table::setter_func setter, const std::string &format);
+ integer_symbol_entry(symbol_table &table, const char *name, symbol_table::getter_func getter, symbol_table::setter_func setter, const std::string &format);
// symbol access
virtual bool is_lval() const override;
@@ -122,10 +122,6 @@ public:
virtual void set_value(u64 newvalue) override;
private:
- // internal helpers
- static u64 internal_getter(symbol_table &table, void *symref);
- static void internal_setter(symbol_table &table, void *symref, u64 value);
-
// internal state
symbol_table::getter_func m_getter;
symbol_table::setter_func m_setter;
@@ -138,7 +134,7 @@ class function_symbol_entry : public symbol_entry
{
public:
// construction/destruction
- function_symbol_entry(symbol_table &table, const char *name, void *ref, int minparams, int maxparams, symbol_table::execute_func execute);
+ function_symbol_entry(symbol_table &table, const char *name, int minparams, int maxparams, symbol_table::execute_func execute);
// symbol access
virtual bool is_lval() const override;
@@ -203,13 +199,12 @@ const char *expression_error::code_string() const
// symbol_entry - constructor
//-------------------------------------------------
-symbol_entry::symbol_entry(symbol_table &table, symbol_type type, const char *name, const std::string &format, void *ref)
+symbol_entry::symbol_entry(symbol_table &table, symbol_type type, const char *name, const std::string &format)
: m_next(nullptr),
m_table(table),
m_type(type),
m_name(name),
- m_format(format),
- m_ref(ref)
+ m_format(format)
{
}
@@ -233,25 +228,31 @@ symbol_entry::~symbol_entry()
//-------------------------------------------------
integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name, symbol_table::read_write rw, u64 *ptr)
- : symbol_entry(table, SMT_INTEGER, name, "", (ptr == nullptr) ? &m_value : ptr),
- m_getter(internal_getter),
- m_setter((rw == symbol_table::READ_ONLY) ? nullptr : internal_setter),
+ : symbol_entry(table, SMT_INTEGER, name, ""),
+ m_getter(ptr
+ ? symbol_table::getter_func([ptr] (symbol_table &table) { return *ptr; })
+ : symbol_table::getter_func([this] (symbol_table &table) { return m_value; })),
+ m_setter((rw == symbol_table::READ_ONLY)
+ ? symbol_table::setter_func(nullptr)
+ : ptr
+ ? symbol_table::setter_func([ptr] (symbol_table &table, u64 value) { *ptr = value; })
+ : symbol_table::setter_func([this] (symbol_table &table, u64 value) { m_value = value; })),
m_value(0)
{
}
integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name, u64 constval)
- : symbol_entry(table, SMT_INTEGER, name, "", &m_value),
- m_getter(internal_getter),
+ : symbol_entry(table, SMT_INTEGER, name, ""),
+ m_getter([this] (symbol_table &table) { return m_value; }),
m_setter(nullptr),
m_value(constval)
{
}
-integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name, void *ref, symbol_table::getter_func getter, symbol_table::setter_func setter, const std::string &format)
- : symbol_entry(table, SMT_INTEGER, name, format, ref),
+integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name, symbol_table::getter_func getter, symbol_table::setter_func setter, const std::string &format)
+ : symbol_entry(table, SMT_INTEGER, name, format),
m_getter(getter),
m_setter(setter),
m_value(0)
@@ -275,7 +276,7 @@ bool integer_symbol_entry::is_lval() const
u64 integer_symbol_entry::value() const
{
- return m_getter(m_table, m_ref);
+ return m_getter(m_table);
}
@@ -286,34 +287,12 @@ u64 integer_symbol_entry::value() const
void integer_symbol_entry::set_value(u64 newvalue)
{
if (m_setter != nullptr)
- m_setter(m_table, m_ref, newvalue);
+ m_setter(m_table, newvalue);
else
throw emu_fatalerror("Symbol '%s' is read-only", m_name.c_str());
}
-//-------------------------------------------------
-// internal_getter - internal helper for
-// returning the value of a variable
-//-------------------------------------------------
-
-u64 integer_symbol_entry::internal_getter(symbol_table &table, void *symref)
-{
- return *(u64 *)symref;
-}
-
-
-//-------------------------------------------------
-// internal_setter - internal helper for setting
-// the value of a variable
-//-------------------------------------------------
-
-void integer_symbol_entry::internal_setter(symbol_table &table, void *symref, u64 value)
-{
- *(u64 *)symref = value;
-}
-
-
//**************************************************************************
// FUNCTION SYMBOL ENTRY
@@ -323,8 +302,8 @@ void integer_symbol_entry::internal_setter(symbol_table &table, void *symref, u6
// function_symbol_entry - constructor
//-------------------------------------------------
-function_symbol_entry::function_symbol_entry(symbol_table &table, const char *name, void *ref, int minparams, int maxparams, symbol_table::execute_func execute)
- : symbol_entry(table, SMT_FUNCTION, name, "", ref),
+function_symbol_entry::function_symbol_entry(symbol_table &table, const char *name, int minparams, int maxparams, symbol_table::execute_func execute)
+ : symbol_entry(table, SMT_FUNCTION, name, ""),
m_minparams(minparams),
m_maxparams(maxparams),
m_execute(execute)
@@ -372,7 +351,7 @@ u64 function_symbol_entry::execute(int numparams, const u64 *paramlist)
throw emu_fatalerror("Function '%s' requires at least %d parameters", m_name.c_str(), m_minparams);
if (numparams > m_maxparams)
throw emu_fatalerror("Function '%s' accepts no more than %d parameters", m_name.c_str(), m_maxparams);
- return m_execute(m_table, m_ref, numparams, paramlist);
+ return m_execute(m_table, numparams, paramlist);
}
@@ -435,10 +414,10 @@ void symbol_table::add(const char *name, u64 value)
// add - add a new register symbol
//-------------------------------------------------
-void symbol_table::add(const char *name, void *ref, getter_func getter, setter_func setter, const std::string &format_string)
+void symbol_table::add(const char *name, getter_func getter, setter_func setter, const std::string &format_string)
{
m_symlist.erase(name);
- m_symlist.emplace(name, std::make_unique<integer_symbol_entry>(*this, name, ref, getter, setter, format_string));
+ m_symlist.emplace(name, std::make_unique<integer_symbol_entry>(*this, name, getter, setter, format_string));
}
@@ -446,10 +425,10 @@ void symbol_table::add(const char *name, void *ref, getter_func getter, setter_f
// add - add a new function symbol
//-------------------------------------------------
-void symbol_table::add(const char *name, void *ref, int minparams, int maxparams, execute_func execute)
+void symbol_table::add(const char *name, int minparams, int maxparams, execute_func execute)
{
m_symlist.erase(name);
- m_symlist.emplace(name, std::make_unique<function_symbol_entry>(*this, name, ref, minparams, maxparams, execute));
+ m_symlist.emplace(name, std::make_unique<function_symbol_entry>(*this, name, minparams, maxparams, execute));
}