From b83c3f265b72a5971e55b76ddf81cf33c68a2b57 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 10 Apr 2018 20:18:16 +0100 Subject: [PATCH] Fix #209 #assert bug --- src/check_expr.cpp | 4 +++- src/parser.cpp | 15 +++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 12aae53a1..8bf071dcb 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1012,8 +1012,10 @@ Entity *check_ident(Checker *c, Operand *o, AstNode *n, Type *named_type, Type * if (e->type == nullptr) { + if (e->state == EntityState_Unresolved) { + return nullptr; + } compiler_error("How did this happen? type: %s; identifier: %.*s\n", type_to_string(e->type), LIT(name)); - // return nullptr; } e->flags |= EntityFlag_Used; diff --git a/src/parser.cpp b/src/parser.cpp index f94a66cad..b050433e7 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -3748,7 +3748,7 @@ AstNode *parse_stmt(AstFile *f) { return s; } else if (tag == "assert") { AstNode *t = ast_basic_directive(f, hash_token, tag); - return parse_call_expr(f, t); + return ast_expr_stmt(f, parse_call_expr(f, t)); } if (tag == "include") { @@ -4077,11 +4077,14 @@ void parse_setup_file_decls(Parser *p, AstFile *f, String base_dir, Arraykind != AstNode_WhenStmt) { // NOTE(bill): Sanity check - if (node->kind == AstNode_CallExpr && - node->CallExpr.proc->kind == AstNode_BasicDirective && - node->CallExpr.proc->BasicDirective.name == "assert") { - // NOTE(bill): Okay! - continue; + if (node->kind == AstNode_ExprStmt) { + AstNode *expr = node->ExprStmt.expr; + if (expr->kind == AstNode_CallExpr && + expr->CallExpr.proc->kind == AstNode_BasicDirective && + expr->CallExpr.proc->BasicDirective.name == "assert") { + // NOTE(bill): Okay! + continue; + } } syntax_error(node, "Only declarations are allowed at file scope, got %.*s", LIT(ast_node_strings[node->kind]));