in interpreters/minibasic/basic.c [1499:1611]
static int boolfactor(void)
{
int answer;
double left;
double right;
int op;
FAR char *strleft;
FAR char *strright;
int cmp;
switch (g_token)
{
case OPAREN:
match(OPAREN);
answer = boolexpr();
match(CPAREN);
break;
default:
if (isstring(g_token))
{
strleft = stringexpr();
op = relop();
strright = stringexpr();
if (!strleft || !strright)
{
if (strleft)
{
free(strleft);
}
if (strright)
{
free(strright);
}
return 0;
}
cmp = strcmp(strleft, strright);
switch (op)
{
case ROP_EQ:
answer = cmp == 0 ? 1 : 0;
break;
case ROP_NEQ:
answer = cmp == 0 ? 0 : 1;
break;
case ROP_LT:
answer = cmp < 0 ? 1 : 0;
break;
case ROP_LTE:
answer = cmp <= 0 ? 1 : 0;
break;
case ROP_GT:
answer = cmp > 0 ? 1 : 0;
break;
case ROP_GTE:
answer = cmp >= 0 ? 1 : 0;
break;
default:
answer = 0;
}
free(strleft);
free(strright);
}
else
{
left = expr();
op = relop();
right = expr();
switch (op)
{
case ROP_EQ:
answer = (left == right) ? 1 : 0;
break;
case ROP_NEQ:
answer = (left != right) ? 1 : 0;
break;
case ROP_LT:
answer = (left < right) ? 1 : 0;
break;
case ROP_LTE:
answer = (left <= right) ? 1 : 0;
break;
case ROP_GT:
answer = (left > right) ? 1 : 0;
break;
case ROP_GTE:
answer = (left >= right) ? 1 : 0;
break;
default:
g_errorflag = 1;
return 0;
}
}
}
return answer;
}