Browse Source

Implement suggestions from #247

gingerBill 7 years ago
parent
commit
0dc29a7208
1 changed files with 5 additions and 1 deletions
  1. 5 1
      core/mem/alloc.odin

+ 5 - 1
core/mem/alloc.odin

@@ -106,6 +106,9 @@ new_clone_with_allocator :: inline proc(a: Allocator, data: $T, loc := #caller_l
 
 
 make_slice :: proc(T: type/[]$E, auto_cast len: int, loc := #caller_location) -> T {
 make_slice :: proc(T: type/[]$E, auto_cast len: int, loc := #caller_location) -> T {
 	runtime.make_slice_error_loc(loc, len);
 	runtime.make_slice_error_loc(loc, len);
+	if len == 0 {
+		return nil;
+	}
 	data := alloc(size_of(E)*len, align_of(E));
 	data := alloc(size_of(E)*len, align_of(E));
 	s := Raw_Slice{data, len};
 	s := Raw_Slice{data, len};
 	return transmute(T)s;
 	return transmute(T)s;
@@ -118,7 +121,8 @@ make_dynamic_array_len :: proc(T: type/[dynamic]$E, auto_cast len: int, loc := #
 }
 }
 make_dynamic_array_len_cap :: proc(T: type/[dynamic]$E, auto_cast len: int, auto_cast cap: int, loc := #caller_location) -> T {
 make_dynamic_array_len_cap :: proc(T: type/[dynamic]$E, auto_cast len: int, auto_cast cap: int, loc := #caller_location) -> T {
 	runtime.make_dynamic_array_error_loc(loc, len, cap);
 	runtime.make_dynamic_array_error_loc(loc, len, cap);
-	data := alloc(size_of(E)*cap, align_of(E));
+	data: rawptr;
+	if cap > 0 do data = alloc(size_of(E)*cap, align_of(E));
 	s := Raw_Dynamic_Array{data, len, cap, context.allocator};
 	s := Raw_Dynamic_Array{data, len, cap, context.allocator};
 	return transmute(T)s;
 	return transmute(T)s;
 }
 }