aboutsummaryrefslogtreecommitdiff
path: root/src/checker/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <ginger.bill.22@gmail.com>2016-08-05 21:07:25 +0100
committergingerBill <ginger.bill.22@gmail.com>2016-08-05 21:07:25 +0100
commitba238c569a54ac52aa318aa1238be790f941f724 (patch)
tree5dea8e913a6f5b21299fb5f5b6b5ed7f5aeed5d0 /src/checker/checker.cpp
parent4a303b5c3ef38bd99c36fa990c922917c0134d52 (diff)
Strings galore!
Diffstat (limited to 'src/checker/checker.cpp')
-rw-r--r--src/checker/checker.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/checker/checker.cpp b/src/checker/checker.cpp
index 1d402abe9..5ae2ec417 100644
--- a/src/checker/checker.cpp
+++ b/src/checker/checker.cpp
@@ -456,8 +456,9 @@ void add_type_and_value(CheckerInfo *i, AstNode *expression, AddressingMode mode
}
TypeAndValue tv = {};
- tv.type = type;
+ tv.type = type;
tv.value = value;
+ tv.mode = mode;
map_set(&i->types, hash_pointer(expression), tv);
}
@@ -522,7 +523,8 @@ void pop_procedure(Checker *c) {
}
void add_curr_ast_file(Checker *c, AstFile *file) {
- gb_zero_item(&c->error_collector);
+ TokenPos zero_pos = {};
+ c->error_collector.prev = zero_pos;
c->curr_ast_file = file;
}
@@ -672,10 +674,12 @@ void check_parsed_files(Checker *c) {
u64 key = entry->key;
AstNode *expr = cast(AstNode *)cast(uintptr)key;
ExpressionInfo *info = &entry->value;
- if (is_type_typed(info->type)) {
- GB_PANIC("%s (type %s) is typed!", expr_to_string(expr), info->type);
+ if (info != NULL && expr != NULL) {
+ if (is_type_typed(info->type)) {
+ GB_PANIC("%s (type %s) is typed!", expr_to_string(expr), info->type);
+ }
+ add_type_and_value(&c->info, expr, info->mode, info->type, info->value);
}
- add_type_and_value(&c->info, expr, info->mode, info->type, info->value);
}
}