diff options
| author | Shritesh Bhattarai <shritesh@shritesh.com> | 2019-05-02 08:56:49 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-05-03 16:21:33 -0400 |
| commit | f86b8e4535c6b7803b724e07d32b1cf72f6d2b2c (patch) | |
| tree | 9cabd1fa12cc358bb414b4b9af05144cc680750e | |
| parent | 2f39da7cddca3e3ae6a3c92f2a52eab77f311ccc (diff) | |
| download | zig-f86b8e4535c6b7803b724e07d32b1cf72f6d2b2c.tar.gz zig-f86b8e4535c6b7803b724e07d32b1cf72f6d2b2c.zip | |
WasmAllocator: compileError on non-wasm arch
| -rw-r--r-- | std/heap.zig | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/std/heap.zig b/std/heap.zig index 65d346262b..0751e26e7b 100644 --- a/std/heap.zig +++ b/std/heap.zig @@ -143,7 +143,7 @@ pub const DirectAllocator = struct { const result = try alloc(allocator, new_size, new_align); if (old_mem.len != 0) { @memcpy(result.ptr, old_mem.ptr, std.math.min(old_mem.len, result.len)); - _ = os.posix.munmap(@ptrToInt(old_mem.ptr), old_mem.len); + _ = os.posix.munmap(@ptrToInt(old_mem.ptr), old_mem.len); } return result; }, @@ -155,12 +155,12 @@ pub const DirectAllocator = struct { const old_record_addr = old_adjusted_addr + old_mem.len; const root_addr = @intToPtr(*align(1) usize, old_record_addr).*; const old_ptr = @intToPtr(*c_void, root_addr); - - if(new_size == 0) { + + if (new_size == 0) { if (os.windows.HeapFree(self.heap_handle.?, 0, old_ptr) == 0) unreachable; return old_mem[0..0]; } - + const amt = new_size + new_align + @sizeOf(usize); const new_ptr = os.windows.HeapReAlloc( self.heap_handle.?, @@ -178,11 +178,7 @@ pub const DirectAllocator = struct { // or the memory starting at the old offset would be outside of the new allocation, // then we need to copy the memory to a valid aligned address and use that const new_aligned_addr = mem.alignForward(new_root_addr, new_align); - @memcpy( - @intToPtr([*]u8, new_aligned_addr), - @intToPtr([*]u8, new_adjusted_addr), - std.math.min(old_mem.len, new_size), - ); + @memcpy(@intToPtr([*]u8, new_aligned_addr), @intToPtr([*]u8, new_adjusted_addr), std.math.min(old_mem.len, new_size)); new_adjusted_addr = new_aligned_addr; } const new_record_addr = new_adjusted_addr + new_size; @@ -364,6 +360,12 @@ const WasmAllocator = struct { num_pages: usize, end_index: usize, + comptime { + if (builtin.arch != .wasm32) { + @compileError("WasmAllocator is only available for wasm32 arch"); + } + } + fn alloc(allocator: *Allocator, size: usize, alignment: u29) ![]u8 { const self = @fieldParentPtr(WasmAllocator, "allocator", allocator); @@ -375,12 +377,12 @@ const WasmAllocator = struct { if (new_end_index > self.num_pages * os.page_size) { const required_memory = new_end_index - (self.num_pages * os.page_size); - var num_pages: u32 = required_memory / os.page_size; + var num_pages: usize = required_memory / os.page_size; if (required_memory % os.page_size != 0) { num_pages += 1; } - const prev_page = @"llvm.wasm.memory.grow.i32"(0, num_pages); + const prev_page = @"llvm.wasm.memory.grow.i32"(0, @intCast(u32, num_pages)); if (prev_page == -1) { return error.OutOfMemory; } |
