Fix spaceship operator bugs, document, add tests

Remove some erroneously added brackets_increment() calls.

Reject <=> in preprocessor expressions with a clear error message (it
seems it isn't supported here - clang and gcc don't at least).

The type returned by `<=>` is not `bool`.  We pretend it's
`int` for now, which should work for how it's likely to be used
in constant expressions.

Fixes #1622
This commit is contained in:
Olly Betts 2022-03-09 10:08:17 +13:00
commit 02b4bd8eca
10 changed files with 91 additions and 7 deletions

View file

@ -445,6 +445,8 @@ int Preprocessor_expr(DOH *s, int *error) {
stack[sp - 1].svalue = stack[sp].svalue;
sp--;
break;
case SWIG_TOKEN_LTEQUALGT:
goto spaceship_not_allowed;
default:
goto syntax_error_expected_operator;
break;
@ -476,6 +478,11 @@ extra_rparen:
errmsg = "Extra \')\'";
*error = 1;
return 0;
spaceship_not_allowed:
errmsg = "Spaceship operator (<=>) not allowed in preprocessor expression";
*error = 1;
return 0;
}
/* -----------------------------------------------------------------------------