From 88fde72e56c242c7b33a3e20225bcc4f24a12038 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 5 Oct 2019 16:46:48 -0400 Subject: [PATCH] addrmap.h: Replace assert with emu_fatalerror using helper function (nw) --- src/emu/addrmap.h | 85 +++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 50 deletions(-) diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h index 03d325f2372..ee6b0e4e3b6 100644 --- a/src/emu/addrmap.h +++ b/src/emu/addrmap.h @@ -77,6 +77,15 @@ class address_map_entry static std::enable_if_t::value, address_map_constructor> make_delegate(Ret (T::*func)(Params...), const char *name, T *obj) { return address_map_constructor(func, name, obj); } + template + static device_t &find_device(const device_finder &finder) { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + if (device == nullptr) + throw emu_fatalerror("Device %s not found in %s\n", target.second, target.first.tag()); + return *device; + } + template static std::enable_if_t, std::add_pointer_t >::value, T *> make_pointer(U &obj) { return &downcast(obj); } @@ -230,77 +239,53 @@ public: // device finder -> delegate converter template - address_map_entry &r(device_finder &finder, Ret (U::*read)(Params...), const char *read_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))); + address_map_entry &r(device_finder &finder, Ret (U::*read)(Params...), const char *read_name) { + device_t &device(find_device(finder)); + return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))); } template - address_map_entry &r(const device_finder &finder, Ret (U::*read)(Params...), const char *read_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))); + address_map_entry &r(const device_finder &finder, Ret (U::*read)(Params...), const char *read_name) { + device_t &device(find_device(finder)); + return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))); } template - address_map_entry &w(device_finder &finder, Ret (U::*write)(Params...), const char *write_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + address_map_entry &w(device_finder &finder, Ret (U::*write)(Params...), const char *write_name) { + device_t &device(find_device(finder)); + return w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } template - address_map_entry &w(const device_finder &finder, Ret (U::*write)(Params...), const char *write_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + address_map_entry &w(const device_finder &finder, Ret (U::*write)(Params...), const char *write_name) { + device_t &device(find_device(finder)); + return w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } template - address_map_entry &rw(device_finder &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))) - .w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + address_map_entry &rw(device_finder &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) { + device_t &device(find_device(finder)); + return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))) + .w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } template - address_map_entry &rw(const device_finder &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))) - .w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + address_map_entry &rw(const device_finder &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) { + device_t &device(find_device(finder)); + return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))) + .w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } template - address_map_entry &m(device_finder &finder, Ret (U::*map)(Params...), const char *map_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return m(device, make_delegate(map, map_name, make_pointer(*device))); + address_map_entry &m(device_finder &finder, Ret (U::*map)(Params...), const char *map_name) { + device_t &device(find_device(finder)); + return m(&device, make_delegate(map, map_name, make_pointer(device))); } template - address_map_entry &m(const device_finder &finder, Ret (U::*map)(Params...), const char *map_name) - { - const std::pair target(finder.finder_target()); - device_t *device(target.first.subdevice(target.second)); - assert(device != nullptr); - return m(make_delegate(map, map_name, make_pointer(*device))); + address_map_entry &m(const device_finder &finder, Ret (U::*map)(Params...), const char *map_name) { + device_t &device(find_device(finder)); + return m(&device, make_delegate(map, map_name, make_pointer(device))); }