Added error checks to NUMINT arguments.

This commit is contained in:
claudiol 2019-02-14 17:22:00 -05:00
parent 34884fd210
commit 6edea50574
3 changed files with 39 additions and 2 deletions

View file

@ -26,7 +26,8 @@
ERR(INVALIDLISTOFVARS,2), \
ERR(INVALIDVARRANGE,3), \
ERR(REALVALUEDFUNCTIONSONLY,4), \
ERR(TRYDIFFERENTRANGE,5)
ERR(TRYDIFFERENTRANGE,5), \
ERR(INVALIDSYMBFUNCTION,6)
// LIST OF COMMANDS EXPORTED,
// INCLUDING INFORMATION FOR SYMBOLIC COMPILER
@ -151,6 +152,41 @@ case NUMINT:
return;
}
// ADD CHECKS TO SEE IF THE SYMBOLIC IS VALID
if(ISSYMBOLIC(*rplPeekData(4))) {
if(rplSymbMainOperator(rplPeekData(4))!=CMD_EQUATIONOPERATOR) {
rplError(ERR_INVALIDSYMBFUNCTION);
return;
}
WORDPTR leftpart=rplSymbMainOperatorPTR(rplPeekData(4))+1;
if(ISSYMBOLIC(*leftpart)) {
if(rplSymbMainOperator(leftpart)!=CMD_OVR_FUNCEVAL) {
rplError(ERR_INVALIDSYMBFUNCTION);
return;
}
// COUNT NUMBER OF ARGUMENTS
WORDPTR end=rplSkipOb(leftpart);
BINT nargs=0;
leftpart=rplSymbMainOperatorPTR(leftpart)+1;
while(leftpart<end) { ++nargs; leftpart=rplSkipOb(leftpart); }
if(nargs!=2) {
rplError(ERR_INVALIDSYMBFUNCTION);
return;
}
}
else {
rplError(ERR_INVALIDSYMBFUNCTION);
return;
}
}
if(!ISNUMBERCPLX(*rplPeekData(3)) || !ISNUMBERCPLX(*rplPeekData(2)))
{
rplError(ERR_COMPLEXORREALEXPECTED);

View file

@ -23,6 +23,7 @@
##1,ERR_INVALIDVARRANGE "Invalid variable range"
##1,ERR_REALVALUEDFUNCTIONSONLY "Real valued func only"
##1,ERR_TRYDIFFERENTRANGE "Try a different range"
##1,ERR_INVALIDSYMBFUNCTION "Use 'f(x)=...' in expressions."
}
@#name lib104_menu

View file

@ -202,7 +202,7 @@ R → A<fraction>"
@#name allroots_rules
{
'√.xX:→XROOT(ABS(.xX),2)*c{1,-1}'
'.xX^(1/.iN):→XROOT(ABS(.xX),.iN)*е^(ARG(.xX)/.iN*і+∡360°/.iN*RANGE(1,.iN,1))'
'.xX^(1/.iN):→XROOT(ABS(.xX),.iN)*е^(і*(ARG(.xX)/.iN+∡360°/.iN*RANGE(1,.iN,1)))'
}