Fixed a netlist crash on clang due to ATTR_NORETURN. Also fixed some debug statements. [Couriersud]

This commit is contained in:
Couriersud 2014-02-24 23:47:40 +00:00
parent dafa3b185b
commit bd09f4dbc0
9 changed files with 22 additions and 20 deletions

View File

@ -261,7 +261,7 @@ void netlist_mame_stream_output_t::custom_netlist_additions(netlist_setup_t &set
// netlist_mame_t // netlist_mame_t
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void netlist_mame_t::vfatalerror(const loglevel_e level, const char *format, va_list ap) const void netlist_mame_t::verror(const loglevel_e level, const char *format, va_list ap) const
{ {
pstring errstr = pstring(format).vprintf(ap); pstring errstr = pstring(format).vprintf(ap);

View File

@ -142,7 +142,7 @@ public:
protected: protected:
void vfatalerror(const loglevel_e level, const char *format, va_list ap) const; void verror(const loglevel_e level, const char *format, va_list ap) const;
private: private:
netlist_mame_device_t &m_parent; netlist_mame_device_t &m_parent;

View File

@ -77,9 +77,6 @@ NETLIB_START(SN74LS629)
register_sub(m_R_FC, "R_FC"); register_sub(m_R_FC, "R_FC");
register_sub(m_R_RNG, "R_RNG"); register_sub(m_R_RNG, "R_RNG");
m_R_FC.set_R(90000.0);
m_R_RNG.set_R(90000.0);
register_input("ENQ", m_ENQ); register_input("ENQ", m_ENQ);
register_input("RNG", m_RNG); register_input("RNG", m_RNG);
register_input("FC", m_FC); register_input("FC", m_FC);
@ -95,6 +92,8 @@ NETLIB_START(SN74LS629)
NETLIB_RESET(SN74LS629) NETLIB_RESET(SN74LS629)
{ {
m_R_FC.set_R(90000.0);
m_R_RNG.set_R(90000.0);
m_clock.reset(); m_clock.reset();
} }

View File

@ -43,7 +43,7 @@ void netlist_queue_t::on_pre_save()
{ {
NL_VERBOSE_OUT(("on_pre_save\n")); NL_VERBOSE_OUT(("on_pre_save\n"));
m_qsize = this->count(); m_qsize = this->count();
NL_VERBOSE_OUT(("current time %f qsize %d\n", m_netlist->time().as_double(), qsize)); NL_VERBOSE_OUT(("current time %f qsize %d\n", m_netlist.time().as_double(), m_qsize));
for (int i = 0; i < m_qsize; i++ ) for (int i = 0; i < m_qsize; i++ )
{ {
m_times[i] = this->listptr()[i].time().as_raw(); m_times[i] = this->listptr()[i].time().as_raw();
@ -58,12 +58,12 @@ void netlist_queue_t::on_pre_save()
void netlist_queue_t::on_post_load() void netlist_queue_t::on_post_load()
{ {
this->clear(); this->clear();
NL_VERBOSE_OUT(("current time %f qsize %d\n", m_netlist->time().as_double(), qsize)); NL_VERBOSE_OUT(("current time %f qsize %d\n", m_netlist.time().as_double(), m_qsize));
for (int i = 0; i < m_qsize; i++ ) for (int i = 0; i < m_qsize; i++ )
{ {
netlist_net_t *n = m_netlist.find_net(&(m_name[i][0])); netlist_net_t *n = m_netlist.find_net(&(m_name[i][0]));
NL_VERBOSE_OUT(("Got %s ==> %p\n", qtemp[i].m_name, n)); //NL_VERBOSE_OUT(("Got %s ==> %p\n", qtemp[i].m_name, n));
NL_VERBOSE_OUT(("schedule time %f (%f)\n", n->time().as_double(), qtemp[i].m_time.as_double())); //NL_VERBOSE_OUT(("schedule time %f (%f)\n", n->time().as_double(), qtemp[i].m_time.as_double()));
this->push(netlist_queue_t::entry_t(netlist_time::from_raw(m_times[i]), n)); this->push(netlist_queue_t::entry_t(netlist_time::from_raw(m_times[i]), n));
} }
} }
@ -311,7 +311,7 @@ ATTR_COLD void netlist_base_t::error(const char *format, ...) const
{ {
va_list ap; va_list ap;
va_start(ap, format); va_start(ap, format);
vfatalerror(NL_ERROR, format, ap); verror(NL_ERROR, format, ap);
va_end(ap); va_end(ap);
} }
@ -319,7 +319,7 @@ ATTR_COLD void netlist_base_t::warning(const char *format, ...) const
{ {
va_list ap; va_list ap;
va_start(ap, format); va_start(ap, format);
vfatalerror(NL_WARNING, format, ap); verror(NL_WARNING, format, ap);
va_end(ap); va_end(ap);
} }
@ -327,7 +327,7 @@ ATTR_COLD void netlist_base_t::log(const char *format, ...) const
{ {
va_list ap; va_list ap;
va_start(ap, format); va_start(ap, format);
vfatalerror(NL_LOG, format, ap); verror(NL_LOG, format, ap);
va_end(ap); va_end(ap);
} }

View File

@ -1118,7 +1118,7 @@ protected:
}; };
// any derived netlist must override this ... // any derived netlist must override this ...
ATTR_COLD ATTR_NORETURN virtual void vfatalerror(const loglevel_e level, ATTR_COLD virtual void verror(const loglevel_e level,
const char *format, va_list ap) const = 0; const char *format, va_list ap) const = 0;
/* from netlist_object */ /* from netlist_object */

View File

@ -40,6 +40,7 @@ public:
ATTR_COLD netlist_list_t &operator=(const netlist_list_t &rhs) ATTR_COLD netlist_list_t &operator=(const netlist_list_t &rhs)
{ {
this->reset();
for (int i=0; i<rhs.count(); i++) for (int i=0; i<rhs.count(); i++)
{ {
this->add(rhs[i]); this->add(rhs[i]);

View File

@ -293,7 +293,7 @@ void netlist_parser::parse_netlist(const pstring &nlname)
return; return;
require_token(m_tok_param_left); require_token(m_tok_param_left);
NL_VERBOSE_OUT(("Parser: Device: %s\n", n.cstr())); NL_VERBOSE_OUT(("Parser: Device: %s\n", token.str().cstr()));
if (token.is(m_tok_ALIAS)) if (token.is(m_tok_ALIAS))
net_alias(); net_alias();
@ -425,7 +425,7 @@ void netlist_parser::device(const pstring &dev_type)
{ {
pstring paramfq = devname + "." + def_params[cnt]; pstring paramfq = devname + "." + def_params[cnt];
NL_VERBOSE_OUT(("Defparam: %s\n", def_param.cstr())); NL_VERBOSE_OUT(("Defparam: %s\n", paramfq.cstr()));
require_token(m_tok_comma); require_token(m_tok_comma);
tok = get_token(); tok = get_token();
if (tok.is_type(STRING)) if (tok.is_type(STRING))

View File

@ -208,7 +208,7 @@ void netlist_setup_t::register_object(netlist_device_t &dev, const pstring &name
{ {
case netlist_param_t::DOUBLE: case netlist_param_t::DOUBLE:
{ {
NL_VERBOSE_OUT(("Found parameter ... %s : %s\n", temp.cstr(), val->cstr())); NL_VERBOSE_OUT(("Found parameter ... %s : %s\n", name.cstr(), val.cstr()));
double vald = 0; double vald = 0;
if (sscanf(val.cstr(), "%lf", &vald) != 1) if (sscanf(val.cstr(), "%lf", &vald) != 1)
netlist().error("Invalid number conversion %s : %s\n", name.cstr(), val.cstr()); netlist().error("Invalid number conversion %s : %s\n", name.cstr(), val.cstr());
@ -218,7 +218,7 @@ void netlist_setup_t::register_object(netlist_device_t &dev, const pstring &name
case netlist_param_t::INTEGER: case netlist_param_t::INTEGER:
case netlist_param_t::LOGIC: case netlist_param_t::LOGIC:
{ {
NL_VERBOSE_OUT(("Found parameter ... %s : %s\n", name.cstr(), val->cstr())); NL_VERBOSE_OUT(("Found parameter ... %s : %s\n", name.cstr(), val.cstr()));
double vald = 0; double vald = 0;
if (sscanf(val.cstr(), "%lf", &vald) != 1) if (sscanf(val.cstr(), "%lf", &vald) != 1)
netlist().error("Invalid number conversion %s : %s\n", name.cstr(), val.cstr()); netlist().error("Invalid number conversion %s : %s\n", name.cstr(), val.cstr());
@ -533,7 +533,7 @@ static netlist_core_terminal_t &resolve_proxy(netlist_core_terminal_t &term)
void netlist_setup_t::connect(netlist_core_terminal_t &t1_in, netlist_core_terminal_t &t2_in) void netlist_setup_t::connect(netlist_core_terminal_t &t1_in, netlist_core_terminal_t &t2_in)
{ {
NL_VERBOSE_OUT(("Connecting %s to %s\n", t1.name().cstr(), t2.name().cstr())); NL_VERBOSE_OUT(("Connecting %s to %s\n", t1_in.name().cstr(), t2_in.name().cstr()));
netlist_core_terminal_t &t1 = resolve_proxy(t1_in); netlist_core_terminal_t &t1 = resolve_proxy(t1_in);
netlist_core_terminal_t &t2 = resolve_proxy(t2_in); netlist_core_terminal_t &t2 = resolve_proxy(t2_in);
@ -578,6 +578,7 @@ void netlist_setup_t::resolve_inputs()
bool has_twoterms = false; bool has_twoterms = false;
netlist().log("Resolving inputs ..."); netlist().log("Resolving inputs ...");
for (const link_t *entry = m_links.first(); entry != NULL; entry = m_links.next(entry)) for (const link_t *entry = m_links.first(); entry != NULL; entry = m_links.next(entry))
{ {
const pstring t1s = entry->e1; const pstring t1s = entry->e1;
@ -588,6 +589,7 @@ void netlist_setup_t::resolve_inputs()
connect(*t1, *t2); connect(*t1, *t2);
} }
//netlist().log("printing outputs ...");
/* print all outputs */ /* print all outputs */
for (tagmap_terminal_t::entry_t *entry = m_terminals.first(); entry != NULL; entry = m_terminals.next(entry)) for (tagmap_terminal_t::entry_t *entry = m_terminals.first(); entry != NULL; entry = m_terminals.next(entry))
{ {

View File

@ -156,7 +156,7 @@ public:
pstring m_logs; pstring m_logs;
protected: protected:
void vfatalerror(const loglevel_e level, const char *format, va_list ap) const void verror(const loglevel_e level, const char *format, va_list ap) const
{ {
switch (level) switch (level)
{ {