Previous 199869 Revisions Next

r19994 Tuesday 1st January, 2013 at 17:49:06 UTC by Oliver Stöneberg
log all unhandled exceptions in running_machine::run() / handle bad_cast exceptions thrown by dynaic_cast - gives proper error in osc1000b and pippin now (nw)
[src/emu]emucore.h machine.c

trunk/src/emu/machine.c
r19993r19994
433433      mame_printf_error("Error performing a late bind of type %s to %s\n", btex.m_actual_type.name(), btex.m_target_type.name());
434434      error = MAMERR_FATALERROR;
435435   }
436   catch (std::exception &ex)
437   {
438      mame_printf_error("Caught unhandled %s exception: %s\n", typeid(ex).name(), ex.what());
439      error = MAMERR_FATALERROR;
440   }
436441
437442   // make sure our phase is set properly before cleaning up,
438443   // in case we got here via exception
trunk/src/emu/emucore.h
r19993r19994
343343inline _Dest downcast(_Source *src)
344344{
345345#ifdef MAME_DEBUG
346   if (dynamic_cast<_Dest>(src) != src)
346   try {
347      if (dynamic_cast<_Dest>(src) != src)
348      {
349         if (dynamic_cast<const device_t *>(src) != NULL)
350            report_bad_device_cast(dynamic_cast<const device_t *>(src), typeid(src), typeid(_Dest));
351         else
352            report_bad_cast(typeid(src), typeid(_Dest));
353      }
354   }
355   catch (std::bad_cast &)
347356   {
348      if (dynamic_cast<const device_t *>(src) != NULL)
349         report_bad_device_cast(dynamic_cast<const device_t *>(src), typeid(src), typeid(_Dest));
350      else
351         report_bad_cast(typeid(src), typeid(_Dest));
357      report_bad_cast(typeid(src), typeid(_Dest));
352358   }
353359#endif
354360   return static_cast<_Dest>(src);
r19993r19994
358364inline _Dest downcast(_Source &src)
359365{
360366#ifdef MAME_DEBUG
361   if (&dynamic_cast<_Dest>(src) != &src)
367   try {
368      if (&dynamic_cast<_Dest>(src) != &src)
369      {
370         if (dynamic_cast<const device_t *>(&src) != NULL)
371            report_bad_device_cast(dynamic_cast<const device_t *>(&src), typeid(src), typeid(_Dest));
372         else
373            report_bad_cast(typeid(src), typeid(_Dest));
374      }
375   }
376   catch (std::bad_cast &)
362377   {
363      if (dynamic_cast<const device_t *>(&src) != NULL)
364         report_bad_device_cast(dynamic_cast<const device_t *>(&src), typeid(src), typeid(_Dest));
365      else
366         report_bad_cast(typeid(src), typeid(_Dest));
378      report_bad_cast(typeid(src), typeid(_Dest));
367379   }
368380#endif
369381   return static_cast<_Dest>(src);
r19993r19994
375387template<class _Dest, class _Source>
376388inline _Dest crosscast(_Source *src)
377389{
378   _Dest result = dynamic_cast<_Dest>(src);
390   _Dest result;
391#ifdef MAME_DEBUG
392   try
393   {
394#endif
395      result = dynamic_cast<_Dest>(src);
396#ifdef MAME_DEBUG
397   }
398   catch (std::bad_cast &)
399   {
400      report_bad_cast(typeid(src), typeid(_Dest));
401   }
402#endif
379403   assert(result != NULL);
380404   if (result == NULL)
381405      throw std::bad_cast();

Previous 199869 Revisions Next


© 1997-2024 The MAME Team