From 2cc22d118d87dfcebce0051c1fb6a4cfad5cb851 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 15 Aug 2023 14:55:02 +0100 Subject: Require parentheses for `#align(N)` --- src/parser.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index dd75399ad..13e5f6130 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2485,6 +2485,13 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string)); } align = parse_expr(f, true); + if (align && align->kind != Ast_ParenExpr) { + ERROR_BLOCK(); + gbString s = expr_to_string(align); + syntax_warning(tag, "#align requires parentheses around the expression"); + error_line("\tSuggestion: #align(%s)", s); + gb_string_free(s); + } } else if (tag.string == "raw_union") { if (is_raw_union) { syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string)); @@ -2566,6 +2573,13 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { syntax_error(tag, "Duplicate union tag '#%.*s'", LIT(tag.string)); } align = parse_expr(f, true); + if (align && align->kind != Ast_ParenExpr) { + ERROR_BLOCK(); + gbString s = expr_to_string(align); + syntax_warning(tag, "#align requires parentheses around the expression"); + error_line("\tSuggestion: #align(%s)", s); + gb_string_free(s); + } } else if (tag.string == "no_nil") { if (no_nil) { syntax_error(tag, "Duplicate union tag '#%.*s'", LIT(tag.string)); -- cgit v1.2.3