aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index f337cd08a..0f69ba56b 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -4544,7 +4544,20 @@ bool parse_file(Parser *p, AstFile *f) {
return false;
}
- f->decls = parse_stmt_list(f);
+ f->decls = array_make<Ast *>(heap_allocator());
+
+ while (f->curr_token.kind != Token_EOF) {
+ Ast *stmt = parse_stmt(f);
+ if (stmt && stmt->kind != Ast_EmptyStmt) {
+ array_add(&f->decls, stmt);
+ if (stmt->kind == Ast_ExprStmt &&
+ stmt->ExprStmt.expr != nullptr &&
+ stmt->ExprStmt.expr->kind == Ast_ProcLit) {
+ syntax_error(stmt, "Procedure literal evaluated but not used");
+ }
+ }
+ }
+
parse_setup_file_decls(p, f, base_dir, f->decls);
return true;