From fcc8b89e6b8f2df503ff19abbca67f8cbddf11dc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 2 Nov 2017 22:34:09 +0000 Subject: [PATCH] Fix issue #130; allow conversion from any pointer to `uintptr` and vice versa --- core/_preload.odin | 10 +++++----- src/check_expr.cpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/core/_preload.odin b/core/_preload.odin index 325e5ed9e..7cc2f07e0 100644 --- a/core/_preload.odin +++ b/core/_preload.odin @@ -438,10 +438,10 @@ __get_map_header :: proc "contextless" (m: ^$T/map[$K]$V) -> __Map_Header { _, is_string := type_info_base(type_info_of(K)).variant.(Type_Info_String); header.is_key_string = is_string; - header.entry_size = size_of(Entry); - header.entry_align = align_of(Entry); - header.value_offset = offset_of(Entry, value); - header.value_size = size_of(V); + header.entry_size = int(size_of(Entry)); + header.entry_align = int(align_of(Entry)); + header.value_offset = int(offset_of(Entry, value)); + header.value_size = int(size_of(V)); return header; } @@ -461,7 +461,7 @@ __get_map_key :: proc "contextless" (key: $K) -> __Map_Key { case Type_Info_Rune: map_key.hash = u128((cast(^rune)&key)^); case Type_Info_Pointer: - map_key.hash = u128(uint((^rawptr)(&key)^)); + map_key.hash = u128(uintptr((^rawptr)(&key)^)); case Type_Info_Float: switch 8*size_of(key) { case 32: map_key.hash = u128((^u32)(&key)^); diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c22d59da0..1ab7e0df0 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1759,11 +1759,11 @@ bool check_is_castable_to(Checker *c, Operand *operand, Type *y) { return true; } - // (u)int <-> rawptr - if (is_type_uintptr(src) && is_type_rawptr(dst)) { + // (u)int <-> pointer + if (is_type_uintptr(src) && is_type_pointer(dst)) { return true; } - if (is_type_rawptr(src) && is_type_uintptr(dst)) { + if (is_type_pointer(src) && is_type_uintptr(dst)) { return true; }