Browse Source

Fix issue #130; allow conversion from any pointer to `uintptr` and vice versa

gingerBill 7 years ago
parent
commit
fcc8b89e6b
2 changed files with 8 additions and 8 deletions
  1. 5 5
      core/_preload.odin
  2. 3 3
      src/check_expr.cpp

+ 5 - 5
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);
 	_, is_string := type_info_base(type_info_of(K)).variant.(Type_Info_String);
 	header.is_key_string = is_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;
 	return header;
 }
 }
 
 
@@ -461,7 +461,7 @@ __get_map_key :: proc "contextless" (key: $K) -> __Map_Key {
 	case Type_Info_Rune:
 	case Type_Info_Rune:
 		map_key.hash = u128((cast(^rune)&key)^);
 		map_key.hash = u128((cast(^rune)&key)^);
 	case Type_Info_Pointer:
 	case Type_Info_Pointer:
-		map_key.hash = u128(uint((^rawptr)(&key)^));
+		map_key.hash = u128(uintptr((^rawptr)(&key)^));
 	case Type_Info_Float:
 	case Type_Info_Float:
 		switch 8*size_of(key) {
 		switch 8*size_of(key) {
 		case 32: map_key.hash = u128((^u32)(&key)^);
 		case 32: map_key.hash = u128((^u32)(&key)^);

+ 3 - 3
src/check_expr.cpp

@@ -1759,11 +1759,11 @@ bool check_is_castable_to(Checker *c, Operand *operand, Type *y) {
 		return true;
 		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;
 		return true;
 	}
 	}
-	if (is_type_rawptr(src) && is_type_uintptr(dst)) {
+	if (is_type_pointer(src) && is_type_uintptr(dst)) {
 		return true;
 		return true;
 	}
 	}