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.cpp32
1 files changed, 22 insertions, 10 deletions
diff --git a/src/emu/debug/express.cpp b/src/emu/debug/express.cpp
index a9f9e38816f..6e3a6a65354 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);
+ 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 access
virtual bool is_lval() const override;
@@ -203,11 +203,12 @@ const char *expression_error::code_string() const
// symbol_entry - constructor
//-------------------------------------------------
-symbol_entry::symbol_entry(symbol_table &table, symbol_type type, const char *name, void *ref)
+symbol_entry::symbol_entry(symbol_table &table, symbol_type type, const char *name, const std::string &format, void *ref)
: m_next(nullptr),
m_table(table),
m_type(type),
m_name(name),
+ m_format(format),
m_ref(ref)
{
}
@@ -232,7 +233,7 @@ 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),
+ : 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),
m_value(0)
@@ -241,7 +242,7 @@ integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name
integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name, u64 constval)
- : symbol_entry(table, SMT_INTEGER, name, &m_value),
+ : symbol_entry(table, SMT_INTEGER, name, "", &m_value),
m_getter(internal_getter),
m_setter(nullptr),
m_value(constval)
@@ -249,8 +250,8 @@ integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name
}
-integer_symbol_entry::integer_symbol_entry(symbol_table &table, const char *name, void *ref, symbol_table::getter_func getter, symbol_table::setter_func setter)
- : symbol_entry(table, SMT_INTEGER, name, ref),
+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),
m_getter(getter),
m_setter(setter),
m_value(0)
@@ -323,7 +324,7 @@ void integer_symbol_entry::internal_setter(symbol_table &table, void *symref, u6
//-------------------------------------------------
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),
+ : symbol_entry(table, SMT_FUNCTION, name, "", ref),
m_minparams(minparams),
m_maxparams(maxparams),
m_execute(execute)
@@ -434,10 +435,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)
+void symbol_table::add(const char *name, void *ref, 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));
+ m_symlist.emplace(name, std::make_unique<integer_symbol_entry>(*this, name, ref, getter, setter, format_string));
}
@@ -951,7 +952,18 @@ void parsed_expression::parse_symbol_or_number(parse_token &token, const char *&
// if we have an 0b prefix, we must be a binary value
case 'b':
case 'B':
- return parse_number(token, buffer.c_str() + 2, 2, expression_error::INVALID_NUMBER);
+ try
+ {
+ return parse_number(token, buffer.c_str() + 2, 2, expression_error::INVALID_NUMBER);
+ }
+ catch (expression_error const &err)
+ {
+ // this is really a hack, but 0B1234 could also hex depending on default base
+ if (expression_error::INVALID_NUMBER == err)
+ return parse_number(token, buffer.c_str(), DEFAULT_BASE, expression_error::INVALID_NUMBER);
+ else
+ throw;
+ }
// TODO: for octal address spaces, treat 0123 as octal
default: