aboutsummaryrefslogtreecommitdiff
path: root/src/check_type.cpp
diff options
context:
space:
mode:
authorThisDrunkDane <hoej@northwolfprod.com>2018-02-12 06:07:15 +0100
committerThisDrunkDane <hoej@northwolfprod.com>2018-02-12 06:07:15 +0100
commite225158a6f69e3782a194e5b82b9a5af56686e71 (patch)
treef30b3c5713d5e59c16f4b7677fe32d884dd63bb5 /src/check_type.cpp
parent4c06b443154bcb85982d61f39badbab901ac4da8 (diff)
parent2ce55783d2c9cfb72da5bc4a51556d9938b6124a (diff)
Merge branch 'master' of https://github.com/odin-lang/Odin
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;