aboutsummaryrefslogtreecommitdiff
path: root/src/checker/checker.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2016-10-08 20:37:31 +0100
committerGinger Bill <bill@gingerbill.org>2016-10-08 20:37:31 +0100
commitb705fa7f2257e691f4056a96325d9f01bd031439 (patch)
tree9df673b774e569b7037ae8710efeb24beff4f6dc /src/checker/checker.cpp
parenta5c6340316245f4f63e74d307f9d7c8be09360c6 (diff)
Change from gbArray(T) to Array<T>
Diffstat (limited to 'src/checker/checker.cpp')
-rw-r--r--src/checker/checker.cpp116
1 files changed, 58 insertions, 58 deletions
diff --git a/src/checker/checker.cpp b/src/checker/checker.cpp
index 9e1295b9a..53ae0ae9f 100644
--- a/src/checker/checker.cpp
+++ b/src/checker/checker.cpp
@@ -118,8 +118,8 @@ struct Scope {
Map<Entity *> elements; // Key: String
Map<Entity *> implicit; // Key: String
- gbArray(Scope *) shared;
- gbArray(Scope *) imported;
+ Array<Scope *> shared;
+ Array<Scope *> imported;
b32 is_proc;
b32 is_global;
b32 is_file;
@@ -240,7 +240,7 @@ struct Checker {
AstFile * curr_ast_file;
BaseTypeSizes sizes;
Scope * global_scope;
- gbArray(ProcedureInfo) procs; // NOTE(bill): Procedures to check
+ Array<ProcedureInfo> procs; // NOTE(bill): Procedures to check
gbArena arena;
gbArena tmp_arena;
@@ -249,31 +249,31 @@ struct Checker {
CheckerContext context;
- gbArray(Type *) proc_stack;
+ Array<Type *> proc_stack;
b32 in_defer; // TODO(bill): Actually handle correctly
};
gb_global Scope *universal_scope = NULL;
struct CycleChecker {
- gbArray(Entity *) path; // Entity_TypeName
+ Array<Entity *> path; // Entity_TypeName
};
CycleChecker *cycle_checker_add(CycleChecker *cc, Entity *e) {
if (cc == NULL) {
return NULL;
}
- if (cc->path == NULL) {
- gb_array_init(cc->path, gb_heap_allocator());
+ if (cc->path.data == NULL) {
+ array_init(&cc->path, gb_heap_allocator());
}
GB_ASSERT(e != NULL && e->kind == Entity_TypeName);
- gb_array_append(cc->path, e);
+ array_add(&cc->path, e);
return cc;
}
void cycle_checker_destroy(CycleChecker *cc) {
- if (cc != NULL && cc->path != NULL) {
- gb_array_free(cc->path);
+ if (cc != NULL && cc->path.data != NULL) {
+ array_free(&cc->path);
}
}
@@ -282,10 +282,10 @@ void cycle_checker_destroy(CycleChecker *cc) {
Scope *make_scope(Scope *parent, gbAllocator allocator) {
Scope *s = gb_alloc_item(allocator, Scope);
s->parent = parent;
- map_init(&s->elements, gb_heap_allocator());
- map_init(&s->implicit, gb_heap_allocator());
- gb_array_init(s->shared, gb_heap_allocator());
- gb_array_init(s->imported, gb_heap_allocator());
+ map_init(&s->elements, gb_heap_allocator());
+ map_init(&s->implicit, gb_heap_allocator());
+ array_init(&s->shared, gb_heap_allocator());
+ array_init(&s->imported, gb_heap_allocator());
if (parent != NULL && parent != universal_scope) {
DLIST_APPEND(parent->first_child, parent->last_child, s);
@@ -294,7 +294,7 @@ Scope *make_scope(Scope *parent, gbAllocator allocator) {
}
void destroy_scope(Scope *scope) {
- gb_for_array(i, scope->elements.entries) {
+ for_array(i, scope->elements.entries) {
Entity *e =scope->elements.entries[i].value;
if (e->kind == Entity_Variable) {
if (!e->Variable.used) {
@@ -311,8 +311,8 @@ void destroy_scope(Scope *scope) {
map_destroy(&scope->elements);
map_destroy(&scope->implicit);
- gb_array_free(scope->shared);
- gb_array_free(scope->imported);
+ array_free(&scope->shared);
+ array_free(&scope->imported);
// NOTE(bill): No need to free scope as it "should" be allocated in an arena (except for the global scope)
}
@@ -366,7 +366,7 @@ void scope_lookup_parent_entity(Scope *scope, String name, Scope **scope_, Entit
gone_thru_proc = true;
} else {
// Check shared scopes - i.e. other files @ global scope
- gb_for_array(i, s->shared) {
+ for_array(i, s->shared) {
Scope *shared = s->shared[i];
Entity **found = map_get(&shared->elements, key);
if (found) {
@@ -409,7 +409,7 @@ Entity *current_scope_lookup_entity(Scope *s, String name) {
if (found) {
return *found;
}
- gb_for_array(i, s->shared) {
+ for_array(i, s->shared) {
Entity **found = map_get(&s->shared[i]->elements, key);
if (found) {
return *found;
@@ -436,7 +436,7 @@ Entity *scope_insert_entity(Scope *s, Entity *entity) {
void check_scope_usage(Checker *c, Scope *scope) {
// TODO(bill): Use this?
#if 0
- gb_for_array(i, scope->elements.entries) {
+ for_array(i, scope->elements.entries) {
auto *entry = scope->elements.entries + i;
Entity *e = entry->value;
if (e->kind == Entity_Variable) {
@@ -557,15 +557,15 @@ void init_checker(Checker *c, Parser *parser, BaseTypeSizes sizes) {
init_checker_info(&c->info);
c->sizes = sizes;
- gb_array_init(c->proc_stack, a);
- gb_array_init(c->procs, a);
+ array_init(&c->proc_stack, a);
+ array_init(&c->procs, a);
// NOTE(bill): Is this big enough or too small?
isize item_size = gb_max(gb_max(gb_size_of(Entity), gb_size_of(Type)), gb_size_of(Scope));
isize total_token_count = 0;
- gb_for_array(i, c->parser->files) {
+ for_array(i, c->parser->files) {
AstFile *f = &c->parser->files[i];
- total_token_count += gb_array_count(f->tokens);
+ total_token_count += f->tokens.count;
}
isize arena_size = 2 * item_size * total_token_count;
gb_arena_init_from_allocator(&c->arena, a, arena_size);
@@ -581,8 +581,8 @@ void init_checker(Checker *c, Parser *parser, BaseTypeSizes sizes) {
void destroy_checker(Checker *c) {
destroy_checker_info(&c->info);
destroy_scope(c->global_scope);
- gb_array_free(c->proc_stack);
- gb_array_free(c->procs);
+ array_free(&c->proc_stack);
+ array_free(&c->procs);
gb_arena_free(&c->arena);
}
@@ -723,7 +723,7 @@ void add_type_info_type(Checker *c, Type *t) {
}
isize ti_index = -1;
- gb_for_array(i, c->info.type_info_map.entries) {
+ for_array(i, c->info.type_info_map.entries) {
auto *e = &c->info.type_info_map.entries[i];
Type *prev_type = cast(Type *)cast(uintptr)e->key.key;
if (are_types_identical(t, prev_type)) {
@@ -814,19 +814,19 @@ void check_procedure_later(Checker *c, AstFile *file, Token token, DeclInfo *dec
info.type = type;
info.body = body;
info.tags = tags;
- gb_array_append(c->procs, info);
+ array_add(&c->procs, info);
}
void push_procedure(Checker *c, Type *type) {
- gb_array_append(c->proc_stack, type);
+ array_add(&c->proc_stack, type);
}
void pop_procedure(Checker *c) {
- gb_array_pop(c->proc_stack);
+ array_pop(&c->proc_stack);
}
Type *const curr_procedure(Checker *c) {
- isize count = gb_array_count(c->proc_stack);
+ isize count = c->proc_stack.count;
if (count > 0) {
return c->proc_stack[count-1];
}
@@ -859,7 +859,7 @@ void add_dependency_to_map(Map<Entity *> *map, CheckerInfo *info, Entity *node)
}
DeclInfo *decl = *found;
- gb_for_array(i, decl->deps.entries) {
+ for_array(i, decl->deps.entries) {
Entity *e = cast(Entity *)cast(uintptr)decl->deps.entries[i].key.key;
add_dependency_to_map(map, info, e);
}
@@ -869,7 +869,7 @@ Map<Entity *> generate_minimum_dependency_map(CheckerInfo *info, Entity *start)
Map<Entity *> map = {}; // Key: Entity *
map_init(&map, gb_heap_allocator());
- gb_for_array(i, info->entities.entries) {
+ for_array(i, info->entities.entries) {
auto *entry = &info->entities.entries[i];
Entity *e = cast(Entity *)cast(uintptr)entry->key.key;
if (e->scope->is_global) {
@@ -948,16 +948,16 @@ void init_preload_types(Checker *c) {
void check_parsed_files(Checker *c) {
- gbArray(AstNode *) import_decls;
- gb_array_init(import_decls, gb_heap_allocator());
- defer (gb_array_free(import_decls));
+ Array<AstNode *> import_decls;
+ array_init(&import_decls, gb_heap_allocator());
+ defer (array_free(&import_decls));
Map<Scope *> file_scopes; // Key: String (fullpath)
map_init(&file_scopes, gb_heap_allocator());
defer (map_destroy(&file_scopes));
// Map full filepaths to Scopes
- gb_for_array(i, c->parser->files) {
+ for_array(i, c->parser->files) {
AstFile *f = &c->parser->files[i];
Scope *scope = NULL;
scope = make_scope(c->global_scope, c->allocator);
@@ -971,7 +971,7 @@ void check_parsed_files(Checker *c) {
}
if (scope->is_global) {
- gb_array_append(c->global_scope->shared, scope);
+ array_add(&c->global_scope->shared, scope);
}
f->scope = scope;
@@ -982,13 +982,13 @@ void check_parsed_files(Checker *c) {
}
// Collect Entities
- gb_for_array(i, c->parser->files) {
+ for_array(i, c->parser->files) {
AstFile *f = &c->parser->files[i];
add_curr_ast_file(c, f);
Scope *file_scope = f->scope;
- gb_for_array(decl_index, f->decls) {
+ for_array(decl_index, f->decls) {
AstNode *decl = f->decls[decl_index];
if (!is_ast_node_decl(decl)) {
continue;
@@ -1005,7 +1005,7 @@ void check_parsed_files(Checker *c) {
case_end;
case_ast_node(cd, ConstDecl, decl);
- gb_for_array(i, cd->values) {
+ for_array(i, cd->values) {
AstNode *name = cd->names[i];
AstNode *value = cd->values[i];
ExactValue v = {ExactValue_Invalid};
@@ -1017,8 +1017,8 @@ void check_parsed_files(Checker *c) {
add_entity_and_decl_info(c, name, e, di);
}
- isize lhs_count = gb_array_count(cd->names);
- isize rhs_count = gb_array_count(cd->values);
+ isize lhs_count = cd->names.count;
+ isize rhs_count = cd->values.count;
if (rhs_count == 0 && cd->type == NULL) {
error(ast_node_token(decl), "Missing type or initial expression");
@@ -1028,11 +1028,11 @@ void check_parsed_files(Checker *c) {
case_end;
case_ast_node(vd, VarDecl, decl);
- isize entity_count = gb_array_count(vd->names);
+ isize entity_count = vd->names.count;
isize entity_index = 0;
Entity **entities = gb_alloc_array(c->allocator, Entity *, entity_count);
DeclInfo *di = NULL;
- if (gb_array_count(vd->values) > 0) {
+ if (vd->values.count > 0) {
di = make_declaration_info(gb_heap_allocator(), file_scope);
di->entities = entities;
di->entity_count = entity_count;
@@ -1040,10 +1040,10 @@ void check_parsed_files(Checker *c) {
di->init_expr = vd->values[0];
}
- gb_for_array(i, vd->names) {
+ for_array(i, vd->names) {
AstNode *name = vd->names[i];
AstNode *value = NULL;
- if (i < gb_array_count(vd->values)) {
+ if (i < vd->values.count) {
value = vd->values[i];
}
Entity *e = make_entity_variable(c->allocator, file_scope, name->Ident, NULL);
@@ -1089,13 +1089,13 @@ void check_parsed_files(Checker *c) {
}
}
- gb_for_array(i, c->parser->files) {
+ for_array(i, c->parser->files) {
AstFile *f = &c->parser->files[i];
add_curr_ast_file(c, f);
Scope *file_scope = f->scope;
- gb_for_array(decl_index, f->decls) {
+ for_array(decl_index, f->decls) {
AstNode *decl = f->decls[decl_index];
if (decl->kind != AstNode_ImportDecl) {
continue;
@@ -1107,7 +1107,7 @@ void check_parsed_files(Checker *c) {
GB_ASSERT_MSG(found != NULL, "Unable to find scope for file: %.*s", LIT(id->fullpath));
Scope *scope = *found;
b32 previously_added = false;
- gb_for_array(import_index, file_scope->imported) {
+ for_array(import_index, file_scope->imported) {
Scope *prev = file_scope->imported[import_index];
if (prev == scope) {
previously_added = true;
@@ -1115,14 +1115,14 @@ void check_parsed_files(Checker *c) {
}
}
if (!previously_added) {
- gb_array_append(file_scope->imported, scope);
+ array_add(&file_scope->imported, scope);
} else {
warning(id->token, "Multiple #import of the same file within this scope");
}
if (id->import_name.string == ".") {
// NOTE(bill): Add imported entities to this file's scope
- gb_for_array(elem_index, scope->elements.entries) {
+ for_array(elem_index, scope->elements.entries) {
Entity *e = scope->elements.entries[elem_index].value;
if (e->scope == file_scope) {
continue;
@@ -1186,7 +1186,7 @@ void check_parsed_files(Checker *c) {
}
auto check_global_entity = [](Checker *c, EntityKind kind) {
- gb_for_array(i, c->info.entities.entries) {
+ for_array(i, c->info.entities.entries) {
auto *entry = &c->info.entities.entries[i];
Entity *e = cast(Entity *)cast(uintptr)entry->key.key;
if (e->kind == kind) {
@@ -1222,7 +1222,7 @@ void check_parsed_files(Checker *c) {
check_global_entity(c, Entity_Variable);
// Check procedure bodies
- gb_for_array(i, c->procs) {
+ for_array(i, c->procs) {
ProcedureInfo *pi = &c->procs[i];
add_curr_ast_file(c, pi->file);
@@ -1244,13 +1244,13 @@ void check_parsed_files(Checker *c) {
if (false) {
gb_printf("Dependency graph:\n");
- gb_for_array(i, c->info.entities.entries) {
+ for_array(i, c->info.entities.entries) {
auto *entry = &c->info.entities.entries[i];
Entity *e = cast(Entity *)cast(uintptr)entry->key.key;
DeclInfo *d = entry->value;
- if (gb_array_count(d->deps.entries) > 0) {
+ if (d->deps.entries.count > 0) {
gb_printf("\t%.*s depends on\n", LIT(e->token.string));
- gb_for_array(j, d->deps.entries) {
+ for_array(j, d->deps.entries) {
Entity *e = cast(Entity *)cast(uintptr)d->deps.entries[j].key.key;
gb_printf("\t\t%.*s\n", LIT(e->token.string));
}
@@ -1259,7 +1259,7 @@ void check_parsed_files(Checker *c) {
}
// Add untyped expression values
- gb_for_array(i, c->info.untyped.entries) {
+ for_array(i, c->info.untyped.entries) {
auto *entry = &c->info.untyped.entries[i];
HashKey key = entry->key;
AstNode *expr = cast(AstNode *)cast(uintptr)key.key;