aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-06-13 11:11:51 +0100
committergingerBill <bill@gingerbill.org>2022-06-13 11:11:51 +0100
commitb40998de9e74588a498fecaa4a2ac903da411f7e (patch)
tree40461b30cc080c3800a60e95ede722cf18fce1b1 /src
parent8c0c327df95208634e87df10c2f33b3c870637e4 (diff)
Improve `-strict-style` for `foreign import`
Diffstat (limited to 'src')
-rw-r--r--src/parser.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 22c76d746..a6f30cdfd 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -2112,6 +2112,7 @@ Ast *parse_operand(AstFile *f, bool lhs) {
case Token_OpenParen: {
bool allow_newline;
+ isize prev_expr_level;
Token open, close;
// NOTE(bill): Skip the Paren Expression
open = expect_token(f, Token_OpenParen);
@@ -2121,16 +2122,18 @@ Ast *parse_operand(AstFile *f, bool lhs) {
return ast_bad_expr(f, open, close);
}
+ prev_expr_level = f->expr_level;
allow_newline = f->allow_newline;
if (f->expr_level < 0) {
f->allow_newline = false;
}
- f->expr_level++;
+ // NOTE(bill): enforce it to >0
+ f->expr_level = gb_max(f->expr_level, 0)+1;
operand = parse_expr(f, false);
- f->expr_level--;
f->allow_newline = allow_newline;
+ f->expr_level = prev_expr_level;
close = expect_token(f, Token_CloseParen);
return ast_paren_expr(f, operand, open, close);
@@ -4010,7 +4013,7 @@ Ast *parse_body(AstFile *f) {
// NOTE(bill): The body may be within an expression so reset to zero
f->expr_level = 0;
- f->allow_newline = false;
+ // f->allow_newline = false;
open = expect_token(f, Token_OpenBrace);
stmts = parse_stmt_list(f);
close = expect_token(f, Token_CloseBrace);
@@ -4468,7 +4471,7 @@ Ast *parse_foreign_decl(AstFile *f) {
break;
}
}
- expect_token(f, Token_CloseBrace);
+ expect_closing_brace_of_field_list(f);
} else {
filepaths = array_make<Token>(heap_allocator(), 0, 1);
Token path = expect_token(f, Token_String);