diff options
Diffstat (limited to 'src/lib/netlist/nl_setup.cpp')
-rw-r--r-- | src/lib/netlist/nl_setup.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index a1e70ad2804..1c9b802ddbc 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -3,6 +3,7 @@ #include "plib/palloc.h" #include "analog/nld_twoterm.h" +#include "core/setup.h" #include "devices/nlid_proxy.h" #include "devices/nlid_system.h" #include "devices/nlid_truthtable.h" @@ -21,9 +22,8 @@ namespace netlist // nl_parse_t // ---------------------------------------------------------------------------------------- - nlparse_t::nlparse_t(log_type &log, abstract_t &abstract) - : m_factory(log) - , m_abstract(abstract) + nlparse_t::nlparse_t(log_type &log, detail::abstract_t &abstract) + : m_abstract(abstract) , m_log(log) , m_frontier_cnt(0) { } @@ -70,7 +70,7 @@ namespace netlist factory::element_t **felem) { - auto *f = m_factory.factory_by_name(classname); + auto *f = factory().factory_by_name(classname); // make sure we parse macro library entries // FIXME: this could be done here if e.g. f @@ -150,8 +150,9 @@ namespace netlist *felem = f; } - void nlparse_t::register_hint(const pstring &name) + void nlparse_t::register_hint(const pstring &objname, const pstring &hintname) { + const auto name = build_fqn(objname) + hintname; if (!m_abstract.m_hints.insert({name, false}).second) { log().fatal(MF_ADDING_HINT_1(name)); @@ -255,9 +256,20 @@ namespace netlist m_abstract.m_defparams.emplace_back(namespace_prefix() + name, val); } - void nlparse_t::register_lib_entry(const pstring &name, factory::properties &&props) + factory::list_t &nlparse_t::factory() noexcept { - m_factory.add(plib::make_unique<factory::library_element_t, host_arena>(name, std::move(props))); + return m_abstract.m_factory; + } + + const factory::list_t &nlparse_t::factory() const noexcept + { + return m_abstract.m_factory; + } + + + void nlparse_t::register_lib_entry(const pstring &name, const pstring &def_params, plib::source_location &&loc) + { + factory().add(plib::make_unique<factory::library_element_t, host_arena>(name, factory::properties(def_params, std::move(loc)))); } void nlparse_t::register_frontier(const pstring &attach, const pstring &r_IN, @@ -293,10 +305,15 @@ namespace netlist register_link(attach, frontier_name + ".Q"); } - void nlparse_t::truthtable_create(tt_desc &desc, factory::properties &&props) + void nlparse_t::register_source_proc(const pstring &name, nlsetup_func func) + { + register_source<netlist::source_proc_t>(name, func); + } + + void nlparse_t::truthtable_create(tt_desc &desc, const pstring &def_params, plib::source_location &&loc) { - auto fac = factory::truthtable_create(desc, std::move(props)); - m_factory.add(std::move(fac)); + auto fac = factory::truthtable_create(desc, netlist::factory::properties(def_params, std::move(loc))); + factory().add(std::move(fac)); } pstring nlparse_t::namespace_prefix() const @@ -320,7 +337,7 @@ namespace netlist void nlparse_t::register_link_fqn(const pstring &sin, const pstring &sout) { - link_t temp = link_t(sin, sout); + detail::abstract_t::link_t temp(sin, sout); log().debug("link {1} <== {2}", sin, sout); m_abstract.m_links.push_back(temp); } @@ -417,7 +434,7 @@ namespace netlist setup_t::setup_t(netlist_state_t &nlstate) - : m_abstract() + : m_abstract(nlstate.log()) , m_parser(nlstate.log(), m_abstract) , m_nlstate(nlstate) , m_models(m_abstract.m_models) // FIXME : parse abstract_t only |