summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-08-15 22:18:59 +0200
committer couriersud <couriersud@gmx.org>2020-08-15 22:20:23 +0200
commita2248e8e18bf50384344ed88c57c86ee915155e0 (patch)
tree99ef02c4297e85ec51a10cc9b11781a59679ba2b
parentfb81629f73ac27b5ad7a2364c678b6931b15d8cb (diff)
netlist: Fix elif processing.
-rw-r--r--src/lib/netlist/plib/ppreprocessor.cpp14
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")