From 0dad442511fc3e96bae721c38fe8040a222cc21a Mon Sep 17 00:00:00 2001 From: couriersud Date: Mon, 20 Jun 2022 20:01:03 +0200 Subject: netlist: fix bug, prepare for future changes and improve readability (#9947) * netlist: fix bug, prepare for future changes and improve readability - fix a bug where a net processing error may trigger a nullptr access - applied some clang-tidy recommendations - add no_return to plib::terminate - properly encapsulate dynamic_cast usage - more review of noexcept - added a clang-format file. Over time, all source files will be processed with clang-format - Used clang format on a number of files - Rewrote 74174 - all device constructors now use a struct to pass data on to base classes. Neither netlist state nor the name are intended to be used in a constructor. After the base class was constructed, they can be accessed by state() and name(). - The device construction macros can now be removed. Changes to the core will not need to be reflected in constructors. - Change truth table macros so that going forward NETLIST_END and TRUTH_TABLE_END can be replaced by a closing curly brace. netlists can than use curly braces enclosed blocks. - more clang-format - removed some macros completely - all derived classes from base_device_t now don't use macros any longer. - as a result, delegator_t was removed. This class was only used to support macros :-( --- src/lib/netlist/plib/ptokenizer.cpp | 40 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'src/lib/netlist/plib/ptokenizer.cpp') diff --git a/src/lib/netlist/plib/ptokenizer.cpp b/src/lib/netlist/plib/ptokenizer.cpp index 98be18b6419..59468bf84cd 100644 --- a/src/lib/netlist/plib/ptokenizer.cpp +++ b/src/lib/netlist/plib/ptokenizer.cpp @@ -69,16 +69,16 @@ namespace plib { m_unget = c; } - void tokenizer_t::append_to_store(putf8_reader *reader, token_store_t &tokstor) + void tokenizer_t::append_to_store(putf8_reader *reader, token_store_t &store) { clear(); m_strm = reader; // Process tokens into queue token_t ret(token_type::UNKNOWN); - m_token_queue = &tokstor; + m_token_queue = &store; do { ret = get_token_comment(); - tokstor.push_back(ret); + store.push_back(ret); } while (!ret.is_type(token_type::token_type::ENDOFFILE)); m_token_queue = nullptr; } @@ -300,28 +300,26 @@ namespace plib { } return { token_type::STRING, tokstr }; } - else + + // read identifier till first identifier char or ws + pstring tokstr = ""; + while ((m_identifier_chars.find(c) == pstring::npos) && (m_whitespace.find(c) == pstring::npos)) { - // read identifier till first identifier char or ws - pstring tokstr = ""; - while ((m_identifier_chars.find(c) == pstring::npos) && (m_whitespace.find(c) == pstring::npos)) + tokstr += c; + // expensive, check for single char tokens + if (tokstr.length() == 1) { - tokstr += c; - // expensive, check for single char tokens - if (tokstr.length() == 1) - { - auto id = m_tokens.find(tokstr); - if (id != m_tokens.end()) - return { id->second, tokstr }; - } - c = getc(); + auto id = m_tokens.find(tokstr); + if (id != m_tokens.end()) + return { id->second, tokstr }; } - ungetc(c); - auto id = m_tokens.find(tokstr); - return (id != m_tokens.end()) ? - token_t(id->second, tokstr) - : token_t(token_type::UNKNOWN, tokstr); + c = getc(); } + ungetc(c); + auto id = m_tokens.find(tokstr); + return (id != m_tokens.end()) ? + token_t(id->second, tokstr) + : token_t(token_type::UNKNOWN, tokstr); } token_reader_t::token_t tokenizer_t::get_token_comment() -- cgit v1.2.3-70-g09d2