Disallow duplicate unary operators for +, -, and ~

This commit is contained in:
gingerBill
2021-05-15 19:13:34 +01:00
parent 7b7081d607
commit 5e31c04a01

View File

@@ -2754,16 +2754,26 @@ Ast *parse_unary_expr(AstFile *f, bool lhs) {
return ast_auto_cast(f, token, expr);
}
case Token_Add:
case Token_Sub:
case Token_Not:
case Token_Xor:
case Token_And: {
case Token_And:
case Token_Not: {
Token token = advance_token(f);
Ast *expr = parse_unary_expr(f, lhs);
return ast_unary_expr(f, token, expr);
}
case Token_Add:
case Token_Sub:
case Token_Xor: {
Token token = advance_token(f);
Ast *expr = parse_unary_expr(f, lhs);
if (expr != nullptr && expr->kind == Ast_UnaryExpr) {
if (expr->UnaryExpr.op.kind == token.kind) {
syntax_error(expr, "Duplicate unary operator '%.*s' will produce a redundant no-op", LIT(token.string));
}
}
return ast_unary_expr(f, token, expr);
}
case Token_Period: {
Token token = expect_token(f, Token_Period);
Ast *ident = parse_ident(f);