aboutsummaryrefslogtreecommitdiff
path: root/src/check_type.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-02-11 11:13:52 +0000
committergingerBill <bill@gingerbill.org>2018-02-11 11:13:52 +0000
commit0ae3484171ec6f2876c1ff16102c8e92853c6632 (patch)
tree5668ecd8b4cf809ef31de61b55f6806731e91d2a /src/check_type.cpp
parent54976c3249065e846ec29588c5c69e7013fe1e8f (diff)
Fix zero value initialization in IR
Diffstat (limited to 'src/check_type.cpp')
-rw-r--r--src/check_type.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/check_type.cpp b/src/check_type.cpp
index 3252c8bf6..46399f7f1 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -2008,6 +2008,7 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type)
return false;
}
*type = t;
+ set_base_type(named_type, *type);
return true;
case_end;
@@ -2038,21 +2039,22 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type)
case_ast_node(pe, ParenExpr, e);
*type = check_type(c, pe->expr, named_type);
+ set_base_type(named_type, *type);
return true;
case_end;
case_ast_node(ue, UnaryExpr, e);
- if (ue->op.kind == Token_Pointer) {
+ switch (ue->op.kind) {
+ case Token_Pointer:
*type = make_type_pointer(c->allocator, check_type(c, ue->expr));
+ set_base_type(named_type, *type);
return true;
- } /* else if (ue->op.kind == Token_Maybe) {
- *type = make_type_maybe(c->allocator, check_type(c, ue->expr));
- return true;
- } */
+ }
case_end;
case_ast_node(pt, PointerType, e);
*type = make_type_pointer(c->allocator, check_type(c, pt->type));
+ set_base_type(named_type, *type);
return true;
case_end;
@@ -2074,12 +2076,14 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type)
Type *elem = check_type(c, at->elem);
*type = make_type_slice(c->allocator, elem);
}
+ set_base_type(named_type, *type);
return true;
case_end;
case_ast_node(dat, DynamicArrayType, e);
Type *elem = check_type(c, dat->elem);
*type = make_type_dynamic_array(c->allocator, elem);
+ set_base_type(named_type, *type);
return true;
case_end;
@@ -2143,6 +2147,7 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type)
check_expr_or_type(c, &o, e);
if (o.mode == Addressing_Type) {
*type = o.type;
+ set_base_type(named_type, *type);
return true;
}
case_end;
@@ -2152,6 +2157,7 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type)
check_expr_or_type(c, &o, e);
if (o.mode == Addressing_Type) {
*type = o.type;
+ set_base_type(named_type, *type);
return true;
}
case_end;