summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-10-03 12:18:04 +0200
committer couriersud <couriersud@gmx.org>2020-10-03 14:41:15 +0200
commitb49a86981c1e2d635f738dbddf285d03d2bce183 (patch)
treeef7680b3d63b6b24eafd79ba637e2ed55fe4e689
parenta0e531e0e7c1e2d60b527be2c73e049db558e0a9 (diff)
netlist: catch parenthesis count mismatch in formulas.
-rw-r--r--src/lib/netlist/plib/pfunction.cpp2
-rw-r--r--src/lib/netlist/tests/test_pfunction.cpp7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp
index 0cf4fc4cdc2..d592a90d670 100644
--- a/src/lib/netlist/plib/pfunction.cpp
+++ b/src/lib/netlist/plib/pfunction.cpp
@@ -150,6 +150,8 @@ namespace plib {
throw pexception(plib::pfmt("pfunction: stack underflow on token <{1}> in <{2}>")(cmd)(expr));
if (stk >= narrow_cast<int>(MAX_STACK))
throw pexception(plib::pfmt("pfunction: stack overflow on token <{1}> in <{2}>")(cmd)(expr));
+ if (rc.cmd() == LP || rc.cmd() == RP)
+ throw pexception(plib::pfmt("pfunction: parenthesis inequality on token <{1}> in <{2}>")(cmd)(expr));
m_precompiled.push_back(rc);
}
if (stk != 1)
diff --git a/src/lib/netlist/tests/test_pfunction.cpp b/src/lib/netlist/tests/test_pfunction.cpp
index 56923be8149..21dc33f28ac 100644
--- a/src/lib/netlist/tests/test_pfunction.cpp
+++ b/src/lib/netlist/tests/test_pfunction.cpp
@@ -50,6 +50,11 @@ PTEST(pfunction, unary_minus)
PFUNCEXPECT("3*-trunc(3.2)", -9.0);
PFUNCEXPECT("3*-(3*2)", -18.0);
PFUNCEXPECT("3*-(2*1)^2", -12.0);
+ PEXPECT_NO_THROW(plib::pfunction<double>("(-3)")()); // fail
+}
+PTEST(pfunction, expect_throw)
+{
PEXPECT_THROW(plib::pfunction<double>("(3, 4)")(), plib::pexception);
- PEXPECT_NO_THROW(plib::pfunction<double>("(3)")()); // fail
+ PEXPECT_THROW(plib::pfunction<double>("((3)")(), plib::pexception);
+ PEXPECT_THROW(plib::pfunction<double>("(3))")(), plib::pexception);
}