math: Print special error for logical operators

Until now, something like

`math '7 = 2'`

would complain about a "missing" operator.

Now we print an error about logical operators not being supported and
point the user towards `test`.

Fixes #6096
This commit is contained in:
Fabian Homborg
2019-11-01 08:40:56 +01:00
parent 067b30208d
commit c0d8439f3a
4 changed files with 18 additions and 1 deletions

View File

@@ -149,6 +149,8 @@ static const wchar_t *math_describe_error(te_error_t &error) {
return _(L"Missing operator");
case TE_ERROR_UNEXPECTED_TOKEN:
return _(L"Unexpected token");
case TE_ERROR_LOGICAL_OPERATOR:
return _(L"Logical operations are not supported, use `test` instead");
case TE_ERROR_UNKNOWN:
return _(L"Expression is bogus");
default:

View File

@@ -306,6 +306,15 @@ void next_token(state *s) {
case '\n':
case '\r':
break;
case '=':
case '>':
case '<':
case '&':
case '|':
case '!':
s->type = TOK_ERROR;
s->error = TE_ERROR_LOGICAL_OPERATOR;
break;
default:
s->type = TOK_ERROR;
s->error = TE_ERROR_MISSING_OPERATOR;

View File

@@ -36,7 +36,8 @@ typedef enum {
TE_ERROR_TOO_MANY_ARGS = 5,
TE_ERROR_MISSING_OPERATOR = 6,
TE_ERROR_UNEXPECTED_TOKEN = 7,
TE_ERROR_UNKNOWN = 8
TE_ERROR_LOGICAL_OPERATOR = 8,
TE_ERROR_UNKNOWN = 9
} te_error_type_t;
typedef struct te_error_t {

View File

@@ -126,3 +126,8 @@ math 0x 3
# CHECK: 20
# CHECK: 8
# CHECK: 0
math "42 >= 1337"
# CHECKERR: math: Error: Logical operations are not supported, use `test` instead
# CHECKERR: '42 >= 1337'
# CHECKERR: ^