diff options
Diffstat (limited to 'src/emu/debug/express.cpp')
-rw-r--r-- | src/emu/debug/express.cpp | 73 |
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)); } |