| ... | ... | @@ -118,22 +118,14 @@ pub const DirectAllocator = struct { |
| 118 | 118 | } |
| 119 | 119 | return old_mem[0..new_size]; |
| 120 | 120 | }, |
| 121 | | Os.windows => { |
| 122 | | if (new_size == 0) { |
| 123 | | const self = @fieldParentPtr(DirectAllocator, "allocator", allocator); |
| 124 | | _ = os.windows.HeapFree(self.heap_handle.?, 0, old_mem.ptr); |
| 125 | | return old_mem[0..new_size]; |
| 126 | | } |
| 127 | | |
| 128 | | return realloc(allocator, old_mem, old_align, new_size, new_align) catch { |
| 129 | | const old_adjusted_addr = @ptrToInt(old_mem.ptr); |
| 130 | | const old_record_addr = old_adjusted_addr + old_mem.len; |
| 131 | | const root_addr = @intToPtr(*align(1) usize, old_record_addr).*; |
| 132 | | const old_ptr = @intToPtr(*c_void, root_addr); |
| 133 | | const new_record_addr = old_record_addr - new_size + old_mem.len; |
| 134 | | @intToPtr(*align(1) usize, new_record_addr).* = root_addr; |
| 135 | | return old_mem[0..new_size]; |
| 136 | | }; |
| 121 | Os.windows => return realloc(allocator, old_mem, old_align, new_size, new_align) catch { |
| 122 | const old_adjusted_addr = @ptrToInt(old_mem.ptr); |
| 123 | const old_record_addr = old_adjusted_addr + old_mem.len; |
| 124 | const root_addr = @intToPtr(*align(1) usize, old_record_addr).*; |
| 125 | const old_ptr = @intToPtr(*c_void, root_addr); |
| 126 | const new_record_addr = old_record_addr - new_size + old_mem.len; |
| 127 | @intToPtr(*align(1) usize, new_record_addr).* = root_addr; |
| 128 | return old_mem[0..new_size]; |
| 137 | 129 | }, |
| 138 | 130 | else => @compileError("Unsupported OS"), |
| 139 | 131 | } |
| ... | ... | @@ -151,7 +143,6 @@ pub const DirectAllocator = struct { |
| 151 | 143 | return result; |
| 152 | 144 | }, |
| 153 | 145 | Os.windows => { |
| 154 | | assert(new_size > 0); |
| 155 | 146 | if (old_mem.len == 0) return alloc(allocator, new_size, new_align); |
| 156 | 147 | |
| 157 | 148 | const self = @fieldParentPtr(DirectAllocator, "allocator", allocator); |