summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-07-16 09:55:15 +0200
committer couriersud <couriersud@gmx.org>2020-07-16 09:55:15 +0200
commit8cd6774cacf48cdebc9b61beaae9caf15f44fd03 (patch)
tree8a1d5c06f9aafb02d8e8292e4ff65d2566d380b5
parent0dfa500a4a4a72805d3ea42eb24c6e2922cffa72 (diff)
netlist: code maintenance.
* more handler alignment * dead code removal * remove update calls which do nothing
-rw-r--r--src/lib/netlist/analog/nld_bjt.cpp60
-rw-r--r--src/lib/netlist/analog/nld_mosfet.cpp32
-rw-r--r--src/lib/netlist/analog/nlid_fourterm.cpp5
-rw-r--r--src/lib/netlist/analog/nlid_fourterm.h40
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.cpp16
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.h18
-rw-r--r--src/lib/netlist/devices/nlid_system.h23
-rw-r--r--src/lib/netlist/nl_base.cpp14
-rw-r--r--src/lib/netlist/nl_base.h18
-rw-r--r--src/lib/netlist/nl_errstr.h6
-rw-r--r--src/lib/netlist/nl_setup.cpp10
11 files changed, 128 insertions, 114 deletions
diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp
index aeb38da4d50..a863bfbe8a7 100644
--- a/src/lib/netlist/analog/nld_bjt.cpp
+++ b/src/lib/netlist/analog/nld_bjt.cpp
@@ -176,9 +176,9 @@ namespace analog
{
NETLIB_CONSTRUCTOR(QBJT_switch)
, m_modacc(m_model)
- , m_RB(*this, "m_RB", true)
- , m_RC(*this, "m_RC", true)
- , m_BC(*this, "m_BC", true)
+ , m_RB(*this, "m_RB", NETLIB_DELEGATE(termhandler))
+ , m_RC(*this, "m_RC", NETLIB_DELEGATE(termhandler))
+ , m_BC(*this, "m_BC", NETLIB_DELEGATE(termhandler))
, m_gB(nlconst::cgmin())
, m_gC(nlconst::cgmin())
, m_V(nlconst::zero())
@@ -194,7 +194,19 @@ namespace analog
}
NETLIB_RESETI();
- NETLIB_UPDATEI();
+ NETLIB_UPDATEI()
+ {
+ termhandler();
+ }
+ NETLIB_HANDLERI(termhandler)
+ {
+ auto *solv(m_RB.solver());
+ if (solv != nullptr)
+ solv->solve_now();
+ else
+ m_RC.solver()->solve_now();
+ }
+
NETLIB_UPDATE_PARAMI();
NETLIB_UPDATE_TERMINALSI();
@@ -223,9 +235,9 @@ namespace analog
, m_modacc(m_model)
, m_gD_BC(*this, "m_D_BC")
, m_gD_BE(*this, "m_D_BE")
- , m_D_CB(*this, "m_D_CB", true)
- , m_D_EB(*this, "m_D_EB", true)
- , m_D_EC(*this, "m_D_EC", true)
+ , m_D_CB(*this, "m_D_CB", NETLIB_DELEGATE(termhandler))
+ , m_D_EB(*this, "m_D_EB", NETLIB_DELEGATE(termhandler))
+ , m_D_EC(*this, "m_D_EC", NETLIB_DELEGATE(termhandler))
, m_alpha_f(0)
, m_alpha_r(0)
{
@@ -256,7 +268,20 @@ namespace analog
protected:
NETLIB_RESETI();
- NETLIB_UPDATEI();
+ NETLIB_UPDATEI()
+ {
+ termhandler();
+ }
+
+ NETLIB_HANDLERI(termhandler)
+ {
+ auto *solv(m_D_EB.solver());
+ if (solv != nullptr)
+ solv->solve_now();
+ else
+ m_D_CB.solver()->solve_now();
+ }
+
NETLIB_UPDATE_PARAMI();
NETLIB_UPDATE_TERMINALSI();
@@ -307,16 +332,6 @@ namespace analog
}
- NETLIB_UPDATE(QBJT_switch)
- {
- auto *solv(m_RB.solver());
- if (solv != nullptr)
- solv->solve_now();
- else
- m_RC.solver()->solve_now();
- }
-
-
NETLIB_UPDATE_PARAM(QBJT_switch)
{
nl_fptype IS = m_modacc.m_IS;
@@ -371,15 +386,6 @@ namespace analog
// nld_Q - Ebers Moll
// ----------------------------------------------------------------------------------------
- NETLIB_UPDATE(QBJT_EB)
- {
- auto *solv(m_D_EB.solver());
- if (solv != nullptr)
- solv->solve_now();
- else
- m_D_CB.solver()->solve_now();
- }
-
NETLIB_RESET(QBJT_EB)
{
if (m_D_EB.solver() == nullptr && m_D_CB.solver() == nullptr)
diff --git a/src/lib/netlist/analog/nld_mosfet.cpp b/src/lib/netlist/analog/nld_mosfet.cpp
index 6ee3250dfa0..9d6f3b440d0 100644
--- a/src/lib/netlist/analog/nld_mosfet.cpp
+++ b/src/lib/netlist/analog/nld_mosfet.cpp
@@ -182,9 +182,9 @@ namespace analog
{
public:
NETLIB_CONSTRUCTOR(MOSFET)
- , m_DG(*this, "m_DG", true)
- , m_SG(*this, "m_SG", true)
- , m_SD(*this, "m_SD", true)
+ , m_DG(*this, "m_DG", NETLIB_DELEGATE(termhandler))
+ , m_SG(*this, "m_SG", NETLIB_DELEGATE(termhandler))
+ , m_SD(*this, "m_SD", NETLIB_DELEGATE(termhandler))
, m_D_BD(*this, "m_D_BD")
#if (!BODY_CONNECTED_TO_SOURCE)
, m_D_BS(*this, "m_D_BS")
@@ -332,7 +332,20 @@ namespace analog
#endif
}
- NETLIB_UPDATEI();
+ NETLIB_UPDATEI()
+ {
+ termhandler();
+ }
+ NETLIB_HANDLERI(termhandler)
+ {
+ // FIXME: This should never be called
+ if (!m_SG.P().net().is_rail_net())
+ m_SG.P().solve_now(); // Basis
+ else if (!m_SG.N().net().is_rail_net())
+ m_SG.N().solve_now(); // Emitter
+ else
+ m_DG.N().solve_now(); // Collector
+ }
NETLIB_UPDATE_PARAMI();
NETLIB_UPDATE_TERMINALSI();
@@ -438,17 +451,6 @@ namespace analog
// MOSFET
// ----------------------------------------------------------------------------------------
- NETLIB_UPDATE(MOSFET)
- {
- // FIXME: This should never be called
- if (!m_SG.P().net().is_rail_net())
- m_SG.P().solve_now(); // Basis
- else if (!m_SG.N().net().is_rail_net())
- m_SG.N().solve_now(); // Emitter
- else
- m_DG.N().solve_now(); // Collector
- }
-
NETLIB_UPDATE_TERMINALS(MOSFET)
{
nl_fptype Vgd = -m_DG.deltaV() * m_polarity; // Gate - Drain
diff --git a/src/lib/netlist/analog/nlid_fourterm.cpp b/src/lib/netlist/analog/nlid_fourterm.cpp
index 9182cd7267b..c6412127b6a 100644
--- a/src/lib/netlist/analog/nlid_fourterm.cpp
+++ b/src/lib/netlist/analog/nlid_fourterm.cpp
@@ -32,6 +32,11 @@ NETLIB_RESET(VCCS)
NETLIB_UPDATE(VCCS)
{
+ termhandler();
+}
+
+NETLIB_HANDLER(VCCS, termhandler)
+{
// only called if connected to a rail net ==> notify the solver to recalculate
if (!m_IP.net().is_rail_net())
m_IP.solve_now();
diff --git a/src/lib/netlist/analog/nlid_fourterm.h b/src/lib/netlist/analog/nlid_fourterm.h
index d3bfad330b6..21a22d60102 100644
--- a/src/lib/netlist/analog/nlid_fourterm.h
+++ b/src/lib/netlist/analog/nlid_fourterm.h
@@ -39,12 +39,12 @@ namespace analog {
NETLIB_CONSTRUCTOR_EX(VCCS, nl_fptype ri = nlconst::magic(1e9))
, m_G(*this, "G", nlconst::one())
, m_RI(*this, "RI", ri)
- , m_OP(*this, "OP", &m_IP)
- , m_ON(*this, "ON", &m_IP)
- , m_IP(*this, "IP", &m_IN) // <= this should be NULL and terminal be filtered out prior to solving...
- , m_IN(*this, "IN", &m_IP) // <= this should be NULL and terminal be filtered out prior to solving...
- , m_OP1(*this, "_OP1", &m_IN)
- , m_ON1(*this, "_ON1", &m_IN)
+ , m_OP(*this, "OP", &m_IP, NETLIB_DELEGATE(termhandler))
+ , m_ON(*this, "ON", &m_IP, NETLIB_DELEGATE(termhandler))
+ , m_IP(*this, "IP", &m_IN, NETLIB_DELEGATE(termhandler)) // <= this should be NULL and terminal be filtered out prior to solving...
+ , m_IN(*this, "IN", &m_IP, NETLIB_DELEGATE(termhandler)) // <= this should be NULL and terminal be filtered out prior to solving...
+ , m_OP1(*this, "_OP1", &m_IN, NETLIB_DELEGATE(termhandler))
+ , m_ON1(*this, "_ON1", &m_IN, NETLIB_DELEGATE(termhandler))
, m_gfac(nlconst::one())
{
connect(m_OP, m_OP1);
@@ -58,6 +58,7 @@ namespace analog {
protected:
NETLIB_UPDATEI();
+ NETLIB_HANDLERI(termhandler);
NETLIB_UPDATE_PARAMI()
{
NETLIB_NAME(VCCS)::reset();
@@ -181,8 +182,8 @@ namespace analog {
public:
NETLIB_CONSTRUCTOR(VCVS)
, m_RO(*this, "RO", nlconst::one())
- , m_OP2(*this, "_OP2", &m_ON2)
- , m_ON2(*this, "_ON2", &m_OP2)
+ , m_OP2(*this, "_OP2", &m_ON2, NETLIB_DELEGATE(termhandler))
+ , m_ON2(*this, "_ON2", &m_OP2, NETLIB_DELEGATE(termhandler))
{
connect(m_OP2, m_OP1);
connect(m_ON2, m_ON1);
@@ -193,8 +194,15 @@ namespace analog {
param_fp_t m_RO;
private:
- //NETLIB_UPDATEI();
+ NETLIB_UPDATEI()
+ {
+ termhandler();
+ }
//NETLIB_UPDATE_PARAMI();
+ NETLIB_HANDLERI(termhandler)
+ {
+ NETLIB_NAME(VCCS) :: termhandler();
+ }
terminal_t m_OP2;
terminal_t m_ON2;
@@ -233,8 +241,8 @@ namespace analog {
public:
NETLIB_CONSTRUCTOR_PASS(CCVS, nlconst::one())
, m_RO(*this, "RO", nlconst::one())
- , m_OP2(*this, "_OP2", &m_ON2)
- , m_ON2(*this, "_ON2", &m_OP2)
+ , m_OP2(*this, "_OP2", &m_ON2, NETLIB_DELEGATE(termhandler))
+ , m_ON2(*this, "_ON2", &m_OP2, NETLIB_DELEGATE(termhandler))
{
connect(m_OP2, m_OP1);
connect(m_ON2, m_ON1);
@@ -245,9 +253,17 @@ namespace analog {
param_fp_t m_RO;
private:
- //NETLIB_UPDATEI();
+ NETLIB_UPDATEI()
+ {
+ termhandler();
+ }
//NETLIB_UPDATE_PARAMI();
+ NETLIB_HANDLERI(termhandler)
+ {
+ NETLIB_NAME(VCCS) :: termhandler();
+ }
+
terminal_t m_OP2;
terminal_t m_ON2;
};
diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp
index 97b3f5e55ac..c3b2274984c 100644
--- a/src/lib/netlist/analog/nlid_twoterm.cpp
+++ b/src/lib/netlist/analog/nlid_twoterm.cpp
@@ -33,21 +33,15 @@ namespace analog
NETLIB_UPDATE(twoterm)
{
- // only called if connected to a rail net ==> notify the solver to recalculate
- solve_now();
+ termhandler();
}
- // ----------------------------------------------------------------------------------------
- // nld_R_base
- // ----------------------------------------------------------------------------------------
-
- NETLIB_RESET(R_base)
+ NETLIB_HANDLER(twoterm, termhandler)
{
- // FIXME: this reset is causing issues. Remove.
- NETLIB_NAME(twoterm)::reset();
- set_R(plib::reciprocal(exec().gmin()));
+ // only called if connected to a rail net ==> notify the solver to recalculate
+ //printf("%s update\n", this->name().c_str());
+ solve_now();
}
-
// ----------------------------------------------------------------------------------------
// nld_POT
// ----------------------------------------------------------------------------------------
diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h
index d7574a1cb35..2c6340705b0 100644
--- a/src/lib/netlist/analog/nlid_twoterm.h
+++ b/src/lib/netlist/analog/nlid_twoterm.h
@@ -70,10 +70,17 @@ namespace analog
NETLIB_BASE_OBJECT(twoterm)
{
- // FIXME locate use case of owned = true and eliminate them if possible
- NETLIB_CONSTRUCTOR_EX(twoterm, bool terminals_owned = false)
- , m_P(bselect(terminals_owned, owner, *this), (terminals_owned ? name + "." : "") + "1", &m_N)
- , m_N(bselect(terminals_owned, owner, *this), (terminals_owned ? name + "." : "") + "2", &m_P)
+ NETLIB_CONSTRUCTOR(twoterm)
+ , m_P(*this, "1", &m_N, NETLIB_DELEGATE(termhandler))
+ , m_N(*this, "2", &m_P, NETLIB_DELEGATE(termhandler))
+ {
+ }
+ //NETLIB_CONSTRUCTOR_EX(twoterm, nldelegate owner_delegate)
+ template <class C>
+ NETLIB_NAME(twoterm)(C &owner, const pstring &name, nldelegate owner_delegate) \
+ : base_type(owner, name)
+ , m_P(owner, name + ".1", &m_N, owner_delegate)
+ , m_N(owner, name + ".2", &m_P, owner_delegate)
{
}
@@ -83,6 +90,7 @@ namespace analog
public:
NETLIB_UPDATEI();
+ NETLIB_HANDLERI(termhandler);
solver::matrix_solver_t *solver() const noexcept;
@@ -196,7 +204,7 @@ namespace analog
-G, G, nlconst::zero());
}
- NETLIB_RESETI();
+ //NETLIB_RESETI();
protected:
//NETLIB_UPDATEI();
diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h
index e16e5ee33ac..7995d1eb685 100644
--- a/src/lib/netlist/devices/nlid_system.h
+++ b/src/lib/netlist/devices/nlid_system.h
@@ -33,7 +33,7 @@ namespace devices
, m_max_link_loops(*this, "MAX_LINK_RESOLVE_LOOPS", 100)
{
}
- NETLIB_UPDATEI() { }
+ //NETLIB_UPDATEI() { }
//NETLIB_RESETI() { }
//NETLIB_UPDATE_PARAMI() { }
public:
@@ -261,7 +261,7 @@ namespace devices
{
}
- NETLIB_UPDATEI() { }
+ //NETLIB_UPDATEI() { }
NETLIB_RESETI() { m_Q.initial(0); }
NETLIB_UPDATE_PARAMI()
{
@@ -286,7 +286,7 @@ namespace devices
{
}
- NETLIB_UPDATEI() { }
+ //NETLIB_UPDATEI() { }
NETLIB_RESETI() { for (auto &q : m_Q) q.initial(0); }
NETLIB_UPDATE_PARAMI()
{
@@ -310,7 +310,7 @@ namespace devices
{
}
- NETLIB_UPDATEI() { }
+ //NETLIB_UPDATEI() { }
NETLIB_RESETI() { m_Q.initial(nlconst::zero()); }
NETLIB_UPDATE_PARAMI() { m_Q.push(m_IN()); }
@@ -329,11 +329,14 @@ namespace devices
, m_Q(*this, "Q")
{
}
- NETLIB_UPDATEI()
+
+ //NETLIB_UPDATEI() { }
+ NETLIB_UPDATE_PARAMI()
{
m_Q.push(nlconst::zero());
}
- NETLIB_RESETI() { }
+
+ //NETLIB_RESETI() { }
protected:
analog_output_t m_Q;
};
@@ -351,8 +354,8 @@ namespace devices
}
protected:
- NETLIB_RESETI() { }
- NETLIB_UPDATEI() { }
+ //NETLIB_RESETI() { }
+ //NETLIB_UPDATEI() { }
private:
NETLIB_HANDLERI(noop)
@@ -371,8 +374,8 @@ namespace devices
{
public:
NETLIB_CONSTRUCTOR(frontier)
- , m_RIN(*this, "m_RIN", true)
- , m_ROUT(*this, "m_ROUT", true)
+ , m_RIN(*this, "m_RIN", NETLIB_DELEGATE(input))
+ , m_ROUT(*this, "m_ROUT", NETLIB_DELEGATE(input))
, m_I(*this, "_I", NETLIB_DELEGATE(input))
, m_Q(*this, "_Q")
, m_p_RIN(*this, "RIN", nlconst::magic(1.0e6))
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index f4c9fe2512e..e61bb0d6617 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -507,12 +507,6 @@ namespace netlist
m_stats = owner.state().make_pool_object<stats_t>();
}
- void core_device_t::set_default_delegate(detail::core_terminal_t &term)
- {
- if (!term.delegate().is_set())
- term.set_delegate(nldelegate(&core_device_t::update, this));
- }
-
log_type & core_device_t::log()
{
return state().log();
@@ -716,8 +710,8 @@ namespace netlist
// terminal_t
// ----------------------------------------------------------------------------------------
- terminal_t::terminal_t(core_device_t &dev, const pstring &aname, terminal_t *otherterm)
- : analog_t(dev, aname, STATE_BIDIR, nldelegate())
+ terminal_t::terminal_t(core_device_t &dev, const pstring &aname, terminal_t *otherterm, nldelegate delegate)
+ : analog_t(dev, aname, STATE_BIDIR, delegate)
, m_Idr(nullptr)
, m_go(nullptr)
, m_gt(nullptr)
@@ -771,8 +765,10 @@ namespace netlist
logic_input_t::logic_input_t(device_t &dev, const pstring &aname,
nldelegate delegate)
- : logic_t(dev, aname, STATE_INP_ACTIVE, delegate.is_set() ? delegate : dev.default_delegate())
+ : logic_t(dev, aname, STATE_INP_ACTIVE, delegate)
{
+ if (!delegate.is_set())
+ throw nl_exception("delegate not set for {1}", this->name());
state().setup().register_term(*this);
}
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 03e314f611c..b99ad7734e2 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -836,7 +836,7 @@ namespace netlist
/// @param dev core_devict_t object owning the terminal
/// @param aname name of this terminal
/// @param otherterm pointer to the sibling terminal
- terminal_t(core_device_t &dev, const pstring &aname, terminal_t *otherterm);
+ terminal_t(core_device_t &dev, const pstring &aname, terminal_t *otherterm, nldelegate delegate);
/// \brief Returns voltage of connected net
///
@@ -906,10 +906,6 @@ namespace netlist
logic_input_t(device_t &dev, const pstring &aname,
nldelegate delegate);
-#if 0
- template <class D>
- logic_input_t(D &dev, const pstring &aname);
-#endif
inline netlist_sig_t operator()() const noexcept;
void inactivate() noexcept;
@@ -1386,8 +1382,6 @@ namespace netlist
// Has to be set in device reset
void set_active_outputs(int n) noexcept { m_active_outputs = n; }
- void set_default_delegate(detail::core_terminal_t &term);
-
// stats
struct stats_t
{
@@ -1477,8 +1471,6 @@ namespace netlist
~device_t() noexcept override = default;
- //nldelegate default_delegate() { return nldelegate(&device_t::update, this); }
- nldelegate default_delegate() { return { &core_device_t::update, dynamic_cast<core_device_t *>(this) }; }
protected:
//NETLIB_UPDATEI() { }
@@ -2146,14 +2138,6 @@ namespace netlist
{
}
-#if 0
- explicit nld_power_pins(device_t &owner, const pstring &sVCC,
- const pstring &sGND)
- : m_VCC(owner, sVCC, NETLIB_DELEGATE(noop))
- , m_GND(owner, sGND, NETLIB_DELEGATE(noop))
- {
- }
-#endif
const analog_input_t &VCC() const noexcept
{
return m_VCC;
diff --git a/src/lib/netlist/nl_errstr.h b/src/lib/netlist/nl_errstr.h
index 4379c669fb3..d4c811c3ad9 100644
--- a/src/lib/netlist/nl_errstr.h
+++ b/src/lib/netlist/nl_errstr.h
@@ -15,8 +15,6 @@ namespace netlist
static constexpr const char sHINT_NO_DEACTIVATE[] = ".HINT_NO_DEACTIVATE"; // NOLINT(cppcoreguidelines-avoid-c-arrays, modernize-avoid-c-arrays)
static constexpr const char sHINT_NC[] = ".HINT_NC"; // NOLINT(cppcoreguidelines-avoid-c-arrays, modernize-avoid-c-arrays)
- static constexpr const char sPowerGND[] = "GND"; // NOLINT(cppcoreguidelines-avoid-c-arrays, modernize-avoid-c-arrays)
- static constexpr const char sPowerVCC[] = "VCC"; // NOLINT(cppcoreguidelines-avoid-c-arrays, modernize-avoid-c-arrays)
// nl_base.cpp
@@ -27,7 +25,6 @@ namespace netlist
PERRMSGV(MF_REMOVE_TERMINAL_1_FROM_NET_2, 2, "Can not remove terminal {1} from net {2}.")
PERRMSGV(MF_UNKNOWN_PARAM_TYPE, 1, "Can not determine param_type for {1}")
PERRMSGV(MF_ERROR_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
- PERRMSGV(MF_NO_SOLVER, 0, "No solver found for this netlist although analog elements are present")
PERRMSGV(ME_HND_VAL_NOT_SUPPORTED, 1, "HINT_NO_DEACTIVATE value not supported: <{1}>")
PERRMSGV(MW_ROM_NOT_FOUND, 1, "Rom {1} not found")
@@ -122,6 +119,9 @@ namespace netlist
PERRMSGV(ME_UNKNOWN_PARAMETER, 1, "Unknown parameter {1}")
PERRMSGV(MF_ERRORS_FOUND, 1, "Counted {1} errors which need to be fixed")
+ PERRMSGV(MF_NO_SOLVER, 0, "No solver found for this netlist although analog elements are present")
+ PERRMSGV(MF_DELEGATE_NOT_SET_1, 1, "delegate not set for terminal {1}")
+
// nlid_proxy.cpp
PERRMSGV(MF_NO_POWER_TERMINALS_ON_DEVICE_2, 2, "D/A Proxy {1}: Found no valid combination of power terminals on device {2}")
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index fd1c1e50b84..956504d3b27 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -1629,11 +1629,11 @@ void setup_t::prepare_to_run()
for (auto &n : m_nlstate.nets())
for (auto & term : n->core_terms())
- {
- core_device_t *dev = &term->device();
- dev->set_default_delegate(*term);
- }
-
+ if (!term->delegate().is_set())
+ {
+ log().fatal(MF_DELEGATE_NOT_SET_1(term->name()));
+ throw nl_exception(MF_DELEGATE_NOT_SET_1(term->name()));
+ }
}
// ----------------------------------------------------------------------------------------