diff options
author | Vas Crabb <vas@vastheman.com> | 2019-09-20 02:26:16 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2019-09-20 02:26:16 +1000 |
commit | 8b233839ba630012026321070d77153fdf5a19b2 (patch) | |
tree | 6eaa5e7bdf8bb413a1abbcce95284917d75d1f76 /src | |
parent | 37b02ce7de385c5c0a32853e52a861b8ff329077 (diff) |
(nw) get rid of the rest of assert_always - it's better to be explicit about what this thing is supposed to do
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/debug/debugcon.cpp | 6 | ||||
-rw-r--r-- | src/emu/dinetwork.cpp | 6 | ||||
-rw-r--r-- | src/emu/emucore.h | 12 | ||||
-rw-r--r-- | src/emu/emupal.cpp | 9 | ||||
-rw-r--r-- | src/emu/inputdev.cpp | 6 | ||||
-rw-r--r-- | src/emu/ioport.cpp | 18 | ||||
-rw-r--r-- | src/emu/machine.cpp | 13 | ||||
-rw-r--r-- | src/emu/render.cpp | 12 | ||||
-rw-r--r-- | src/mame/machine/3dom2.cpp | 9 | ||||
-rw-r--r-- | src/mame/machine/3dom2.h | 5 | ||||
-rw-r--r-- | src/osd/modules/diagnostics/diagnostics_win32.cpp | 12 | ||||
-rw-r--r-- | src/osd/modules/osdmodule.cpp | 19 | ||||
-rw-r--r-- | src/osd/modules/osdwindow.h | 6 | ||||
-rw-r--r-- | src/osd/modules/render/drawogl.cpp | 5 |
14 files changed, 80 insertions, 58 deletions
diff --git a/src/emu/debug/debugcon.cpp b/src/emu/debug/debugcon.cpp index 0fc33d32f10..8faf4f0de02 100644 --- a/src/emu/debug/debugcon.cpp +++ b/src/emu/debug/debugcon.cpp @@ -399,8 +399,10 @@ CMDERR debugger_console::validate_command(const char *command) void debugger_console::register_command(const char *command, u32 flags, int ref, int minparams, int maxparams, std::function<void(int, const std::vector<std::string> &)> handler) { - assert_always(m_machine.phase() == machine_phase::INIT, "Can only call register_command() at init time!"); - assert_always((m_machine.debug_flags & DEBUG_FLAG_ENABLED) != 0, "Cannot call register_command() when debugger is not running"); + if (m_machine.phase() != machine_phase::INIT) + throw emu_fatalerror("Can only call debugger_console::register_command() at init time!"); + if (!(m_machine.debug_flags & DEBUG_FLAG_ENABLED)) + throw emu_fatalerror("Cannot call debugger_console::register_command() when debugger is not running"); debug_command *cmd = auto_alloc_clear(m_machine, <debug_command>()); diff --git a/src/emu/dinetwork.cpp b/src/emu/dinetwork.cpp index cc1c4402759..0e9c0610566 100644 --- a/src/emu/dinetwork.cpp +++ b/src/emu/dinetwork.cpp @@ -31,7 +31,8 @@ void device_network_interface::interface_post_start() int device_network_interface::send(u8 *buf, int len) { // TODO: enable this check when other devices implement delayed transmit - //assert_always(!m_send_timer->enabled(), "attempted to transmit while transmit already in progress"); + //if (m_send_timer->enabled()) + //throw emu_fatalerror("%s(%s): attempted to transmit while transmit already in progress", device().shortname(), device().tag()); int result = 0; @@ -65,7 +66,8 @@ TIMER_CALLBACK_MEMBER(device_network_interface::send_complete) void device_network_interface::recv_cb(u8 *buf, int len) { - assert_always(!m_recv_timer->enabled(), "attempted to receive while receive already in progress"); + if (m_recv_timer->enabled()) + throw emu_fatalerror("%s(%s): attempted to receive while receive already in progress", device().shortname(), device().tag()); int result = 0; diff --git a/src/emu/emucore.h b/src/emu/emucore.h index 07a48404ab3..4c8b9c96056 100644 --- a/src/emu/emucore.h +++ b/src/emu/emucore.h @@ -220,18 +220,6 @@ inline TYPE &operator|=(TYPE &a, TYPE b) { return a = a | b; } #define FUNC(x) &x, #x -// standard assertion macros -#undef assert_always - -#if defined(MAME_DEBUG_FAST) -#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("%s\nCaused by assert: %s:%d: %s", msg, __FILE__, __LINE__, #x); } while (0) -#elif defined(MAME_DEBUG) -#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("%s\nCaused by assert: %s:%d: %s", msg, __FILE__, __LINE__, #x); } while (0) -#else -#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("%s (%s:%d)", msg, __FILE__, __LINE__); } while (0) -#endif - - // macros to convert radians to degrees and degrees to radians template <typename T> constexpr auto RADIAN_TO_DEGREE(T const &x) { return (180.0 / M_PI) * x; } template <typename T> constexpr auto DEGREE_TO_RADIAN(T const &x) { return (M_PI / 180.0) * x; } diff --git a/src/emu/emupal.cpp b/src/emu/emupal.cpp index f401a4b8cb4..d4c8818419c 100644 --- a/src/emu/emupal.cpp +++ b/src/emu/emupal.cpp @@ -506,7 +506,8 @@ void palette_device::device_start() const memory_share *share_ext = memshare(tag_ext.c_str()); // make sure we have specified a format - assert_always(m_raw_to_rgb.bytes_per_entry() > 0, "Palette has memory share but no format specified"); + if (m_raw_to_rgb.bytes_per_entry() <= 0) + throw emu_fatalerror("palette_device(%s): Palette has memory share but no format specified", tag()); // determine bytes per entry and configure int bytes_per_entry = m_raw_to_rgb.bytes_per_entry(); @@ -522,7 +523,8 @@ void palette_device::device_start() if (m_membits_supplied) { // forcing width only makes sense when narrower than the native bus width - assert_always(m_membits < share->bitwidth(), "Improper use of MCFG_PALETTE_MEMBITS"); + if (m_membits >= share->bitwidth()) + throw emu_fatalerror("palette_device(%s): Improper use of MCFG_PALETTE_MEMBITS", tag()); m_paletteram.set_membits(m_membits); if (share_ext != nullptr) m_paletteram_ext.set_membits(m_membits); @@ -532,7 +534,8 @@ void palette_device::device_start() if (m_endianness_supplied) { // forcing endianness only makes sense when the RAM is narrower than the palette format and not split - assert_always((share_ext == nullptr && m_paletteram.membits() / 8 < bytes_per_entry), "Improper use of MCFG_PALETTE_ENDIANNESS"); + if (share_ext || (m_paletteram.membits() / 8) >= bytes_per_entry) + throw emu_fatalerror("palette_device(%s): Improper use of MCFG_PALETTE_ENDIANNESS", tag()); m_paletteram.set_endianness(m_endianness); } } diff --git a/src/emu/inputdev.cpp b/src/emu/inputdev.cpp index 62aa1428b21..a9e8fee7491 100644 --- a/src/emu/inputdev.cpp +++ b/src/emu/inputdev.cpp @@ -277,7 +277,8 @@ input_device::~input_device() input_item_id input_device::add_item(const char *name, input_item_id itemid, item_get_state_func getstate, void *internal) { - assert_always(machine().phase() == machine_phase::INIT, "Can only call input_device::add_item at init time!"); + if (machine().phase() != machine_phase::INIT) + throw emu_fatalerror("Can only call input_device::add_item at init time!"); assert(name != nullptr); assert(itemid > ITEM_ID_INVALID && itemid < ITEM_ID_MAXIMUM); assert(getstate != nullptr); @@ -494,7 +495,8 @@ input_class::~input_class() input_device *input_class::add_device(const char *name, const char *id, void *internal) { - assert_always(machine().phase() == machine_phase::INIT, "Can only call input_class::add_device at init time!"); + if (machine().phase() != machine_phase::INIT) + throw emu_fatalerror("Can only call input_class::add_device at init time!"); assert(name != nullptr); assert(id != nullptr); diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp index c65a5cb582b..e74502439fe 100644 --- a/src/emu/ioport.cpp +++ b/src/emu/ioport.cpp @@ -1468,7 +1468,8 @@ ioport_field *ioport_port::field(ioport_value mask) const ioport_value ioport_port::read() { - assert_always(manager().safe_to_read(), "Input ports cannot be read at init time!"); + if (!manager().safe_to_read()) + throw emu_fatalerror("Input ports cannot be read at init time!"); // start with the digital state ioport_value result = m_live->digital; @@ -2716,7 +2717,8 @@ void ioport_manager::record_init() // open the record file osd_file::error filerr = m_record_file.open(filename); - assert_always(filerr == osd_file::error::NONE, "Failed to open file for recording"); + if (filerr != osd_file::error::NONE) + throw emu_fatalerror("ioport_manager::record_init: Failed to open file for recording"); // get the base time system_time systime; @@ -2738,15 +2740,18 @@ void ioport_manager::record_init() } -void ioport_manager::timecode_init() { +void ioport_manager::timecode_init() +{ // check if option -record_timecode is enabled - if (!machine().options().record_timecode()) { + if (!machine().options().record_timecode()) + { machine().video().set_timecode_enabled(false); return; } // if no file, nothing to do const char *record_filename = machine().options().record(); - if (record_filename[0] == 0) { + if (record_filename[0] == 0) + { machine().video().set_timecode_enabled(false); return; } @@ -2759,7 +2764,8 @@ void ioport_manager::timecode_init() { osd_printf_info("Record input timecode file: %s\n", record_filename); osd_file::error filerr = m_timecode_file.open(filename.c_str()); - assert_always(filerr == osd_file::error::NONE, "Failed to open file for input timecode recording"); + if (filerr != osd_file::error::NONE) + throw emu_fatalerror("ioport_manager::timecode_init: Failed to open file for input timecode recording"); m_timecode_file.puts(std::string("# ==========================================\n").c_str()); m_timecode_file.puts(std::string("# TIMECODE FILE FOR VIDEO PREVIEW GENERATION\n").c_str()); diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index 0ca233a5d38..68bf7dc74d9 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -299,7 +299,8 @@ int running_machine::run(bool quiet) { m_logfile = std::make_unique<emu_file>(OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); osd_file::error filerr = m_logfile->open("error.log"); - assert_always(filerr == osd_file::error::NONE, "unable to open log file"); + if (filerr != osd_file::error::NONE) + throw emu_fatalerror("running_machine::run: unable to open log file"); using namespace std::placeholders; add_logerror_callback(std::bind(&running_machine::logfile_callback, this, _1)); @@ -771,9 +772,10 @@ void running_machine::toggle_pause() void running_machine::add_notifier(machine_notification event, machine_notify_delegate callback, bool first) { - assert_always(m_current_phase == machine_phase::INIT, "Can only call add_notifier at init time!"); + if (m_current_phase != machine_phase::INIT) + throw emu_fatalerror("Can only call running_machine::add_notifier at init time!"); - if(first) + if (first) m_notifier_list[event].push_front(std::make_unique<notifier_callback_item>(callback)); // exit notifiers are added to the head, and executed in reverse order @@ -793,8 +795,9 @@ void running_machine::add_notifier(machine_notification event, machine_notify_de void running_machine::add_logerror_callback(logerror_callback callback) { - assert_always(m_current_phase == machine_phase::INIT, "Can only call add_logerror_callback at init time!"); - m_string_buffer.reserve(1024); + if (m_current_phase != machine_phase::INIT) + throw emu_fatalerror("Can only call running_machine::add_logerror_callback at init time!"); + m_string_buffer.reserve(1024); m_logerror_list.push_back(std::make_unique<logerror_callback_item>(callback)); } diff --git a/src/emu/render.cpp b/src/emu/render.cpp index 415906b3809..58d2c2961c9 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -460,7 +460,8 @@ void render_texture::get_scaled(u32 dwidth, u32 dheight, render_texinfo &texinfo for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++) if ((lowest == -1 || m_scaled[scalenum].seqid < m_scaled[lowest].seqid) && !primlist.has_reference(m_scaled[scalenum].bitmap)) lowest = scalenum; - assert_always(lowest != -1, "Too many live texture instances!"); + if (-1 == lowest) + throw emu_fatalerror("render_texture::get_scaled: Too many live texture instances!"); // throw out any existing entries scaled = &m_scaled[lowest]; @@ -2711,7 +2712,8 @@ bool render_target::remove_clear_extent(const render_bounds &bounds) // make a copy of this extent memmove(&ext[ext[1] + 2], &ext[0], (last - ext) * sizeof(*ext)); last += ext[1] + 2; - assert_always(last < max, "Ran out of clear extents!\n"); + if (last >= max) + throw emu_fatalerror("render_target::remove_clear_extent: Ran out of clear extents!"); // split the extent between pieces ext[ext[1] + 2] = -(-ext[0] - diff); @@ -2731,7 +2733,8 @@ bool render_target::remove_clear_extent(const render_bounds &bounds) // make a copy of this extent memmove(&ext[ext[1] + 2], &ext[0], (last - ext) * sizeof(*ext)); last += ext[1] + 2; - assert_always(last < max, "Ran out of clear extents!\n"); + if (last >= max) + throw emu_fatalerror("render_target::remove_clear_extent: Ran out of clear extents!"); // split the extent between pieces ext[ext[1] + 2] = -diff; @@ -2756,7 +2759,8 @@ bool render_target::remove_clear_extent(const render_bounds &bounds) memmove(&xext[2], &xext[0], (last - xext) * sizeof(*xext)); last += 2; linelast += 2; - assert_always(last < max, "Ran out of clear extents!\n"); + if (last >= max) + throw emu_fatalerror("render_target::remove_clear_extent: Ran out of clear extents!"); // split this extent into three parts xext[0] = boundsx0 - x0; diff --git a/src/mame/machine/3dom2.cpp b/src/mame/machine/3dom2.cpp index c1bf1cec1c5..fc3004c0f5e 100644 --- a/src/mame/machine/3dom2.cpp +++ b/src/mame/machine/3dom2.cpp @@ -1964,8 +1964,10 @@ void m2_cde_device::start_dma(uint32_t ch) if (setup & CDE_DATAWIDTH_16) { // 16-bit case - assert_always((dma_ch.m_ccnt & 1) == 0, "16-bit DMA: Byte count must be even?"); - assert_always((dma_ch.m_cpad & 1) == 0, "16-bit DMA: DMA destination must be word aligned?"); + if (dma_ch.m_ccnt & 1) + throw emu_fatalerror("m2_cde_device::start_dma: 16-bit DMA: Byte count must be even?"); + if (dma_ch.m_cpad & 1) + throw emu_fatalerror("m2_cde_device::start_dma: 16-bit DMA: DMA destination must be word aligned?"); const uint32_t srcinc = setup & CDE_READ_SETUP_IO ? 0 : 2; @@ -2012,7 +2014,8 @@ void m2_cde_device::next_dma(uint32_t ch) m_cpu1->set_cache_dirty(); #endif - assert_always(dma_ch.m_ccnt == 0, "DMA count non-zero during next DMA"); + if (dma_ch.m_ccnt != 0) + throw emu_fatalerror("m2_cde_device::next_dma: DMA count non-zero during next DMA"); if (dma_ch.m_cntl & CDE_DMA_NEXT_VALID) { diff --git a/src/mame/machine/3dom2.h b/src/mame/machine/3dom2.h index 8942b515064..ed6eabd425b 100644 --- a/src/mame/machine/3dom2.h +++ b/src/mame/machine/3dom2.h @@ -691,9 +691,10 @@ private: void start_dma(uint32_t ch); void next_dma(uint32_t ch); - uint32_t address_to_biobus_slot(uint32_t addr) const + static uint32_t address_to_biobus_slot(uint32_t addr) { - assert_always(addr >= 0x20000000 && addr <= 0x3fffffff, "Address not within BioBus address range"); + if ((addr < 0x20000000) || (addr > 0x3fffffff)) + throw emu_fatalerror("m2_cde_device::address_to_biobus_slot: Address not within BioBus address range"); return ((addr >> 24) >> 2) & 7; } diff --git a/src/osd/modules/diagnostics/diagnostics_win32.cpp b/src/osd/modules/diagnostics/diagnostics_win32.cpp index 3bd1e48fa10..677cd93bff7 100644 --- a/src/osd/modules/diagnostics/diagnostics_win32.cpp +++ b/src/osd/modules/diagnostics/diagnostics_win32.cpp @@ -670,16 +670,20 @@ sampling_profiler::~sampling_profiler() void sampling_profiler::start() { // do the dance to get a handle to ourself - BOOL result = DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &m_target_thread, - THREAD_GET_CONTEXT | THREAD_SUSPEND_RESUME | THREAD_QUERY_INFORMATION, FALSE, 0); - assert_always(result, "Failed to get thread handle for main thread"); + BOOL const result = DuplicateHandle( + GetCurrentProcess(), GetCurrentThread(), + GetCurrentProcess(), &m_target_thread, + THREAD_GET_CONTEXT | THREAD_SUSPEND_RESUME | THREAD_QUERY_INFORMATION, FALSE, 0); + if (!result) + throw emu_fatalerror("sampling_profiler::start: Failed to get thread handle for main thread"); // reset the exit flag m_thread_exit = false; // start the thread m_thread = CreateThread(nullptr, 0, thread_entry, (LPVOID)this, 0, &m_thread_id); - assert_always(m_thread != nullptr, "Failed to create profiler thread\n"); + if (!m_thread) + throw emu_fatalerror("sampling_profiler::start: Failed to create profiler thread"); // max out the priority SetThreadPriority(m_thread, THREAD_PRIORITY_TIME_CRITICAL); diff --git a/src/osd/modules/osdmodule.cpp b/src/osd/modules/osdmodule.cpp index 45664295cfb..75adc5c75bb 100644 --- a/src/osd/modules/osdmodule.cpp +++ b/src/osd/modules/osdmodule.cpp @@ -7,6 +7,9 @@ #include "modules/osdmodule.h" +#include <algorithm> + + osd_module_manager::osd_module_manager() { for (int i=0; i<MAX_MODULES; i++) @@ -25,17 +28,15 @@ osd_module_manager::~osd_module_manager() void osd_module_manager::register_module(const module_type &mod_type) { + auto const slot = std::find(std::begin(m_modules), std::end(m_modules), nullptr); + if (std::end(m_modules) == slot) + throw emu_fatalerror("osd_module_manager::register_module: Module registration beyond MAX_MODULES!"); + osd_module *module = mod_type(); if (module->probe()) { osd_printf_verbose("===> registered module %s %s\n", module->name(), module->type()); - - int i; - for (i = 0; i < MAX_MODULES && m_modules[i] != nullptr; i++) - ; - - assert_always(i < MAX_MODULES, "Module registration beyond MAX_MODULES!"); - m_modules[i] = module; + *slot = module; } else { @@ -51,8 +52,8 @@ bool osd_module_manager::type_has_name(const char *type, const char *name) const osd_module *osd_module_manager::get_module_generic(const char *type, const char *name) { - int i = get_module_index(type, name); - if (i>=0) + int const i = get_module_index(type, name); + if (i >= 0) return m_modules[i]; else return nullptr; diff --git a/src/osd/modules/osdwindow.h b/src/osd/modules/osdwindow.h index 506b4978161..3fe020c56fe 100644 --- a/src/osd/modules/osdwindow.h +++ b/src/osd/modules/osdwindow.h @@ -178,14 +178,16 @@ public: static const int FLAG_NEEDS_ASYNCBLIT = 0x0200; osd_renderer(std::shared_ptr<osd_window> window, const int flags) - : m_sliders_dirty(false), m_window(window), m_flags(flags) { } + : m_sliders_dirty(false), m_window(window), m_flags(flags) + { } virtual ~osd_renderer() { } std::shared_ptr<osd_window> assert_window() const { auto win = m_window.lock(); - assert_always(win != nullptr, "Window weak_ptr is not available!"); + if (!win) + throw emu_fatalerror("osd_renderer::assert_window: Window weak_ptr is not available!"); return win; } diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp index bd4648be474..6837e63bbe3 100644 --- a/src/osd/modules/render/drawogl.cpp +++ b/src/osd/modules/render/drawogl.cpp @@ -2026,10 +2026,11 @@ ogl_texture_info *renderer_ogl::texture_create(const render_texinfo *texsource, m_texhash[i] = texture; break; } - assert_always(i < HASH_SIZE + OVERFLOW_SIZE, "texture hash exhausted ..."); + if ((HASH_SIZE + OVERFLOW_SIZE) <= i) + throw emu_fatalerror("renderer_ogl::texture_create: texture hash exhausted ..."); } - if(m_usevbo) + if (m_usevbo) { // Generate And Bind The Texture Coordinate Buffer pfn_glGenBuffers( 1, &(texture->texCoordBufferName) ); |