From aa029fe8d9d48477f0be27fa79f8c541451a8a0a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 23 May 2020 13:38:06 +0100 Subject: Add `"pure"` procedure types --- src/check_stmt.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/check_stmt.cpp') diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 6672ea204..e357d366d 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1301,6 +1301,11 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) { case_end; case_ast_node(as, AssignStmt, node); + if (ctx->curr_proc_calling_convention == ProcCC_Pure) { + error(node, "Assignment statements are not allowed within a \"pure\" procedure"); + // Continue + } + switch (as->op.kind) { case Token_Eq: { // a, b, c = 1, 2, 3; // Multisided @@ -2027,6 +2032,12 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) { check_arity_match(ctx, vd); check_init_variables(ctx, entities, entity_count, vd->values, str_lit("variable declaration")); + if (ctx->curr_proc_calling_convention == ProcCC_Pure) { + if (vd->values.count == 0) { + error(node, "Variable declarations without assignment are not allowed within \"pure\" procedures"); + } + } + for (isize i = 0; i < entity_count; i++) { Entity *e = entities[i]; -- cgit v1.2.3