aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-08-22 15:19:04 +0100
committergingerBill <bill@gingerbill.org>2018-08-22 15:19:04 +0100
commit16dfae62bcdce4d56c4adeaf6229e4d4eb95b329 (patch)
tree8ddf46ec757a5e06641823c08cdd1eddf6198eef /src/check_expr.cpp
parentfe680a8b1f93b9e19cf1ef1536e19328e7389cc8 (diff)
Allow casting to and from rawptr and cstring #249
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 8b143cf36..9a146608f 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -1880,12 +1880,20 @@ bool check_is_castable_to(CheckerContext *c, Operand *operand, Type *y) {
return true;
}
// cstring -> ^u8
- if (src == t_cstring && is_type_u8_ptr(dst)) {
+ if (are_types_identical(src, t_cstring) && is_type_u8_ptr(dst)) {
+ return true;
+ }
+ // cstring -> rawptr
+ if (are_types_identical(src, t_cstring) && is_type_rawptr(dst)) {
return true;
}
// ^u8 -> cstring
- if (is_type_u8_ptr(src) && dst == t_cstring) {
+ if (is_type_u8_ptr(src) && are_types_identical(dst, t_cstring)) {
+ return true;
+ }
+ // rawptr -> cstring
+ if (is_type_rawptr(src) && are_types_identical(dst, t_cstring)) {
return true;
}
// proc <-> proc