aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-06-15 21:36:29 +0100
committerGinger Bill <bill@gingerbill.org>2017-06-15 21:36:29 +0100
commit3fa398ec43ddc6fc40562087fd8ab87dc5292499 (patch)
treeef6c5f930890adf2692a6ae5fc1594961447acd1 /src
parent1851674b5035527d16e342e9627fcf8e2da9e49e (diff)
Add extra check for bodiless procedures
Diffstat (limited to 'src')
-rw-r--r--src/check_decl.cpp2
-rw-r--r--src/checker.cpp9
2 files changed, 4 insertions, 7 deletions
diff --git a/src/check_decl.cpp b/src/check_decl.cpp
index 2673a4d17..6cb51102a 100644
--- a/src/check_decl.cpp
+++ b/src/check_decl.cpp
@@ -362,6 +362,8 @@ void check_proc_decl(Checker *c, Entity *e, DeclInfo *d) {
GB_ASSERT(pd->body->kind == AstNode_BlockStmt);
check_procedure_later(c, c->curr_ast_file, e->token, d, proc_type, pd->body, pd->tags);
+ } else if (!is_foreign) {
+ error(e->token, "Only a foreign procedure cannot have a body");
}
if (pt->result_count == 0 && is_require_results) {
diff --git a/src/checker.cpp b/src/checker.cpp
index 7fc849237..0f8c2606a 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -1696,19 +1696,14 @@ void check_collect_entities(Checker *c, Array<AstNode *> nodes, bool is_file_sco
case_ast_node(fb, ForeignBlockDecl, decl);
AstNode *foreign_library = fb->foreign_library;
- bool ok = true;
if (foreign_library->kind != AstNode_Ident) {
error_node(foreign_library, "foreign library name must be an identifier");
- ok = false;
+ foreign_library = NULL;
}
CheckerContext prev_context = c->context;
- if (ok) {
- c->context.curr_foreign_library = foreign_library;
- }
-
+ c->context.curr_foreign_library = foreign_library;
check_collect_entities(c, fb->decls, is_file_scope);
-
c->context = prev_context;
case_end;