[muparser] Convert more exception handling into explicit errors

This commit is contained in:
ridiculousfish 2017-12-16 14:10:45 -08:00
parent d3822e4cb3
commit 6f14d55612
3 changed files with 9 additions and 17 deletions

View File

@ -95,21 +95,18 @@ class ParserTester // final
static ValueOrError land(value_type v1, value_type v2) { return (int)v1 & (int)v2; }
static ValueOrError FirstArg(const value_type* a_afArg, int a_iArgc) {
if (!a_iArgc)
throw mu::Parser::exception_type(_T("too few arguments for function FirstArg."));
if (!a_iArgc) return ParserError(_T("too few arguments for function FirstArg."));
return a_afArg[0];
}
static ValueOrError LastArg(const value_type* a_afArg, int a_iArgc) {
if (!a_iArgc)
throw mu::Parser::exception_type(_T("too few arguments for function LastArg."));
if (!a_iArgc) return ParserError(_T("too few arguments for function LastArg."));
return a_afArg[a_iArgc - 1];
}
static ValueOrError Sum(const value_type* a_afArg, int a_iArgc) {
if (!a_iArgc) throw mu::Parser::exception_type(_T("too few arguments for function sum."));
if (!a_iArgc) return ParserError(_T("too few arguments for function sum."));
value_type fRes = 0;
for (int i = 0; i < a_iArgc; ++i) fRes += a_afArg[i];

View File

@ -288,7 +288,7 @@ class ParserToken {
}
//------------------------------------------------------------------------------
/** \biref Get value of the token.
/** \brifef Get value of the token.
Only applicable to variable and value tokens.
*/
@ -299,7 +299,7 @@ class ParserToken {
case cmVAR:
return *((TBase *)m_pTok);
default:
throw ParserError(ecVAL_EXPECTED);
return ParserError(ecVAL_EXPECTED);
}
}

View File

@ -1250,15 +1250,10 @@ OptionalError ParserBase::CreateRPN() const {
uses bytecode instead of string parsing.
*/
ValueOrError ParserBase::ParseString() const {
try {
OptionalError oerr = CreateRPN();
if (oerr.has_error()) return oerr.error();
m_pParseFormula = &ParserBase::ParseCmdCode;
return (this->*m_pParseFormula)();
} catch (ParserError &exc) {
exc.SetFormula(m_pTokenReader->GetExpr());
throw;
}
OptionalError oerr = CreateRPN();
if (oerr.has_error()) return oerr.error();
m_pParseFormula = &ParserBase::ParseCmdCode;
return (this->*m_pParseFormula)();
}
//---------------------------------------------------------------------------