diff options
author | 2020-08-15 22:18:59 +0200 | |
---|---|---|
committer | 2020-08-15 22:20:23 +0200 | |
commit | a2248e8e18bf50384344ed88c57c86ee915155e0 (patch) | |
tree | 99ef02c4297e85ec51a10cc9b11781a59679ba2b | |
parent | fb81629f73ac27b5ad7a2364c678b6931b15d8cb (diff) |
netlist: Fix elif processing.
-rw-r--r-- | src/lib/netlist/plib/ppreprocessor.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/netlist/plib/ppreprocessor.cpp b/src/lib/netlist/plib/ppreprocessor.cpp index 7e8c363fbd3..ccf03c97bc7 100644 --- a/src/lib/netlist/plib/ppreprocessor.cpp +++ b/src/lib/netlist/plib/ppreprocessor.cpp @@ -502,12 +502,16 @@ namespace plib { else m_elif |= (1 << m_if_level); } - else if (lti[0] == "#else") + else if (lti[0] == "#else") // basically #elif (1) { if (!(m_if_seen & (1 << m_if_level))) error("#else without #if"); - m_if_flag ^= (1 << m_if_level); - m_elif &= ~(1 << m_if_level); + + if (m_elif & (1 << m_if_level)) // elif disabled + m_if_flag |= (1 << m_if_level); + else + m_if_flag &= ~(1 << m_if_level); + m_elif |= (1 << m_if_level); } else if (lti[0] == "#elif") { @@ -516,7 +520,7 @@ namespace plib { //if ((m_if_flag & (1 << m_if_level)) == 0) // m_if_flag ^= (1 << m_if_level); - if (m_elif & (1 << m_if_level)) + if (m_elif & (1 << m_if_level)) // elif disabled m_if_flag |= (1 << m_if_level); else m_if_flag &= ~(1 << m_if_level); @@ -532,7 +536,7 @@ namespace plib { if (val == 0) m_if_flag |= (1 << m_if_level); else - m_elif |= ~(1 << m_if_level); + m_elif |= (1 << m_if_level); } } else if (lti[0] == "#endif") |