diff --git a/build.bat b/build.bat index 32e67af1e..f51dde9cc 100644 --- a/build.bat +++ b/build.bat @@ -42,7 +42,7 @@ del *.ilk > NUL 2> NUL cl %compiler_settings% "src\main.cpp" ^ /link %linker_settings% -OUT:%exe_name% ^ - && odin run examples/demo/demo.odin + && odin check examples/demo/demo.odin del *.obj > NUL 2> NUL diff --git a/core/thread/thread.odin b/core/thread/thread_windows.odin similarity index 98% rename from core/thread/thread.odin rename to core/thread/thread_windows.odin index 2289c6bc6..adf59b898 100644 --- a/core/thread/thread.odin +++ b/core/thread/thread_windows.odin @@ -1,6 +1,5 @@ package thread -#assert(ODIN_OS == "windows"); import "core:sys/win32" Thread_Proc :: #type proc(^Thread) -> int; diff --git a/examples/demo/demo.odin b/examples/demo/demo.odin index abd788120..8e3842e23 100644 --- a/examples/demo/demo.odin +++ b/examples/demo/demo.odin @@ -1,7 +1,5 @@ package main -#assert(_BUFFER_SIZE > 0); - import "core:fmt" import "core:strconv" import "core:mem" diff --git a/src/array.cpp b/src/array.cpp index 6809574df..c28463c1b 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -54,7 +54,10 @@ gb_inline void array_init(Array *array, gbAllocator const &a, isize count) { template gb_inline void array_init(Array *array, gbAllocator const &a, isize count, isize capacity) { array->allocator = a; - array->data = gb_alloc_array(a, T, capacity); + array->data = nullptr; + if (capacity > 0) { + array->data = gb_alloc_array(a, T, capacity); + } array->count = count; array->capacity = capacity; } diff --git a/src/checker.cpp b/src/checker.cpp index 51689d027..4d1b2c46a 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -215,7 +215,7 @@ bool decl_info_has_init(DeclInfo *d) { Scope *create_scope(Scope *parent, gbAllocator allocator) { Scope *s = gb_alloc_item(allocator, Scope); s->parent = parent; - map_init(&s->elements, heap_allocator()); + map_init(&s->elements, heap_allocator()); ptr_set_init(&s->implicit, heap_allocator()); ptr_set_init(&s->imported, heap_allocator()); ptr_set_init(&s->exported, heap_allocator()); @@ -2119,6 +2119,16 @@ void check_collect_entities(Checker *c, Array nodes) { for_array(decl_index, nodes) { AstNode *decl = nodes[decl_index]; if (!is_ast_node_decl(decl) && !is_ast_node_when_stmt(decl)) { + + if (c->context.scope->is_file && decl->kind == AstNode_ExprStmt) { + AstNode *expr = decl->ExprStmt.expr; + if (expr->kind == AstNode_CallExpr && + expr->CallExpr.proc->kind == AstNode_BasicDirective && + expr->CallExpr.proc->BasicDirective.name == "assert") { + array_add(&c->context.scope->delayed_asserts, expr); + continue; + } + } continue; } @@ -2158,18 +2168,6 @@ void check_collect_entities(Checker *c, Array nodes) { check_add_foreign_block_decl(c, decl); case_end; - - case_ast_node(ce, CallExpr, decl); - if (c->context.scope->is_file && - ce->proc->kind == AstNode_BasicDirective && - ce->proc->BasicDirective.name == "assert") { - array_add(&c->context.scope->delayed_asserts, decl); - } else { - goto error_case; - } - case_end; - - error_case: default: if (c->context.scope->is_file) { error(decl, "Only declarations are allowed at file scope"); @@ -2709,17 +2707,6 @@ void check_import_entities(Checker *c) { GB_ASSERT(node->scope->is_package); AstPackage *p = node->scope->package; - - - for_array(i, p->files.entries) { - AstFile *f = p->files.entries[i].value; - - CheckerContext prev_context = c->context; - defer (c->context = prev_context); - add_curr_ast_file(c, f); - check_collect_entities(c, f->decls); - } - for_array(i, p->files.entries) { AstFile *f = p->files.entries[i].value; CheckerContext prev_context = c->context;