aboutsummaryrefslogtreecommitdiff
path: root/src/checker
diff options
context:
space:
mode:
authorgingerBill <ginger.bill.22@gmail.com>2016-08-16 20:08:40 +0100
committergingerBill <ginger.bill.22@gmail.com>2016-08-16 20:08:40 +0100
commite8530ca883edd79c188443ced54cea2c5d3ad4ed (patch)
tree4e264d51cbbbe41f0dc7eed16bcdbb73f372c844 /src/checker
parent2d49a615630eb27d95c7cde67722f419a1977996 (diff)
Win32 Demo: OpenGL Context
Diffstat (limited to 'src/checker')
-rw-r--r--src/checker/checker.cpp8
-rw-r--r--src/checker/expr.cpp9
-rw-r--r--src/checker/stmt.cpp7
-rw-r--r--src/checker/type.cpp13
4 files changed, 16 insertions, 21 deletions
diff --git a/src/checker/checker.cpp b/src/checker/checker.cpp
index 225e94a95..1bc50a890 100644
--- a/src/checker/checker.cpp
+++ b/src/checker/checker.cpp
@@ -633,14 +633,6 @@ void check_parsed_files(Checker *c) {
add_file_entity(c, td->name, e, d);
case_end;
- case_ast_node(ad, AliasDecl, decl);
- ast_node(n, Ident, ad->name);
- Entity *e = make_entity_alias_name(c->allocator, c->global_scope, n->token, NULL);
- DeclInfo *d = make_declaration_info(c->allocator, e->parent);
- d->type_expr = ad->type;
- add_file_entity(c, ad->name, e, d);
- case_end;
-
case_ast_node(pd, ProcDecl, decl);
ast_node(n, Ident, pd->name);
Token token = n->token;
diff --git a/src/checker/expr.cpp b/src/checker/expr.cpp
index f5b3d2158..542afb853 100644
--- a/src/checker/expr.cpp
+++ b/src/checker/expr.cpp
@@ -600,10 +600,10 @@ void check_is_expressible(Checker *c, Operand *o, Type *type) {
if (!is_type_integer(o->type) && is_type_integer(type)) {
error(&c->error_collector, ast_node_token(o->expr), "`%s` truncated to `%s`", a, b);
} else {
- error(&c->error_collector, ast_node_token(o->expr), "`%s` overflows `%s`", a, b);
+ error(&c->error_collector, ast_node_token(o->expr), "`%s = %lld` overflows `%s`", a, o->value.value_integer, b);
}
} else {
- error(&c->error_collector, ast_node_token(o->expr), "Cannot convert `%s` to `%s`", a, b);
+ error(&c->error_collector, ast_node_token(o->expr), "Cannot convert `%s` to `%s`", a, b);
}
o->mode = Addressing_Invalid;
@@ -867,6 +867,11 @@ b32 check_castable_to(Checker *c, Operand *operand, Type *y) {
return true;
}
+ // proc <-> proc
+ if (is_type_proc(xb), is_type_proc(yb)) {
+ return true;
+ }
+
return false;
}
diff --git a/src/checker/stmt.cpp b/src/checker/stmt.cpp
index 2fbe8e1d3..0ae500efc 100644
--- a/src/checker/stmt.cpp
+++ b/src/checker/stmt.cpp
@@ -878,12 +878,5 @@ void check_stmt(Checker *c, AstNode *node, u32 flags) {
add_entity(c, c->context.scope, td->name, e);
check_type_decl(c, e, td->type, NULL);
case_end;
-
- case_ast_node(ad, AliasDecl, node);
- ast_node(name, Ident, ad->name);
- Entity *e = make_entity_alias_name(c->allocator, c->context.scope, name->token, NULL);
- add_entity(c, c->context.scope, ad->name, e);
- check_alias_decl(c, e, ad->type, NULL);
- case_end;
}
}
diff --git a/src/checker/type.cpp b/src/checker/type.cpp
index e0ce88c03..0931774e5 100644
--- a/src/checker/type.cpp
+++ b/src/checker/type.cpp
@@ -382,6 +382,9 @@ b32 is_type_u8_slice(Type *t) {
b32 is_type_vector(Type *t) {
return t->kind == Type_Vector;
}
+b32 is_type_proc(Type *t) {
+ return t->kind == Type_Proc;
+}
Type *base_vector_type(Type *t) {
if (is_type_vector(t)) {
return t->vector.elem;
@@ -747,10 +750,12 @@ gbString write_type_to_string(gbString str, Type *type) {
if (type->tuple.variable_count > 0) {
for (isize i = 0; i < type->tuple.variable_count; i++) {
Entity *var = type->tuple.variables[i];
- GB_ASSERT(var->kind == Entity_Variable);
- if (i > 0)
- str = gb_string_appendc(str, ", ");
- str = write_type_to_string(str, var->type);
+ if (var != NULL) {
+ GB_ASSERT(var->kind == Entity_Variable);
+ if (i > 0)
+ str = gb_string_appendc(str, ", ");
+ str = write_type_to_string(str, var->type);
+ }
}
}
break;