Browse Source

Improve `-strict-style` for `foreign import`

gingerBill 3 years ago
parent
commit
b40998de9e
1 changed files with 7 additions and 4 deletions
  1. 7 4
      src/parser.cpp

+ 7 - 4
src/parser.cpp

@@ -2112,6 +2112,7 @@ Ast *parse_operand(AstFile *f, bool lhs) {
 
 
 	case Token_OpenParen: {
 	case Token_OpenParen: {
 		bool allow_newline;
 		bool allow_newline;
+		isize prev_expr_level;
 		Token open, close;
 		Token open, close;
 		// NOTE(bill): Skip the Paren Expression
 		// NOTE(bill): Skip the Paren Expression
 		open = expect_token(f, Token_OpenParen);
 		open = expect_token(f, Token_OpenParen);
@@ -2121,16 +2122,18 @@ Ast *parse_operand(AstFile *f, bool lhs) {
 			return ast_bad_expr(f, open, close);
 			return ast_bad_expr(f, open, close);
 		}
 		}
 
 
+		prev_expr_level = f->expr_level;
 		allow_newline = f->allow_newline;
 		allow_newline = f->allow_newline;
 		if (f->expr_level < 0) {
 		if (f->expr_level < 0) {
 			f->allow_newline = false;
 			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);
 		operand = parse_expr(f, false);
-		f->expr_level--;
 
 
 		f->allow_newline = allow_newline;
 		f->allow_newline = allow_newline;
+		f->expr_level = prev_expr_level;
 
 
 		close = expect_token(f, Token_CloseParen);
 		close = expect_token(f, Token_CloseParen);
 		return ast_paren_expr(f, operand, open, close);
 		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
 	// NOTE(bill): The body may be within an expression so reset to zero
 	f->expr_level = 0;
 	f->expr_level = 0;
-	f->allow_newline = false;
+	// f->allow_newline = false;
 	open = expect_token(f, Token_OpenBrace);
 	open = expect_token(f, Token_OpenBrace);
 	stmts = parse_stmt_list(f);
 	stmts = parse_stmt_list(f);
 	close = expect_token(f, Token_CloseBrace);
 	close = expect_token(f, Token_CloseBrace);
@@ -4468,7 +4471,7 @@ Ast *parse_foreign_decl(AstFile *f) {
 					break;
 					break;
 				}
 				}
 			}
 			}
-			expect_token(f, Token_CloseBrace);
+			expect_closing_brace_of_field_list(f);
 		} else {
 		} else {
 			filepaths = array_make<Token>(heap_allocator(), 0, 1);
 			filepaths = array_make<Token>(heap_allocator(), 0, 1);
 			Token path = expect_token(f, Token_String);
 			Token path = expect_token(f, Token_String);