authorgravatar for shritesh@shritesh.comShritesh Bhattarai <shritesh@shritesh.com> 2019-05-02 08:56:49-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-03 16:21:33-04:00
logf86b8e4535c6b7803b724e07d32b1cf72f6d2b2c
tree9cabd1fa12cc358bb414b4b9af05144cc680750e
parent2f39da7cddca3e3ae6a3c92f2a52eab77f311ccc

WasmAllocator: compileError on non-wasm arch


1 files changed, 13 insertions(+), 11 deletions(-)

std/heap.zig+13-11
......@@ -143,7 +143,7 @@ pub const DirectAllocator = struct {
143143 const result = try alloc(allocator, new_size, new_align);
144144 if (old_mem.len != 0) {
145145 @memcpy(result.ptr, old_mem.ptr, std.math.min(old_mem.len, result.len));
146 _ = os.posix.munmap(@ptrToInt(old_mem.ptr), old_mem.len);
146 _ = os.posix.munmap(@ptrToInt(old_mem.ptr), old_mem.len);
147147 }
148148 return result;
149149 },
......@@ -155,12 +155,12 @@ pub const DirectAllocator = struct {
155155 const old_record_addr = old_adjusted_addr + old_mem.len;
156156 const root_addr = @intToPtr(*align(1) usize, old_record_addr).*;
157157 const old_ptr = @intToPtr(*c_void, root_addr);
158
159 if(new_size == 0) {
158
159 if (new_size == 0) {
160160 if (os.windows.HeapFree(self.heap_handle.?, 0, old_ptr) == 0) unreachable;
161161 return old_mem[0..0];
162162 }
163
163
164164 const amt = new_size + new_align + @sizeOf(usize);
165165 const new_ptr = os.windows.HeapReAlloc(
166166 self.heap_handle.?,
......@@ -178,11 +178,7 @@ pub const DirectAllocator = struct {
178178 // or the memory starting at the old offset would be outside of the new allocation,
179179 // then we need to copy the memory to a valid aligned address and use that
180180 const new_aligned_addr = mem.alignForward(new_root_addr, new_align);
181 @memcpy(
182 @intToPtr([*]u8, new_aligned_addr),
183 @intToPtr([*]u8, new_adjusted_addr),
184 std.math.min(old_mem.len, new_size),
185 );
181 @memcpy(@intToPtr([*]u8, new_aligned_addr), @intToPtr([*]u8, new_adjusted_addr), std.math.min(old_mem.len, new_size));
186182 new_adjusted_addr = new_aligned_addr;
187183 }
188184 const new_record_addr = new_adjusted_addr + new_size;
......@@ -364,6 +360,12 @@ const WasmAllocator = struct {
364360 num_pages: usize,
365361 end_index: usize,
366362
363 comptime {
364 if (builtin.arch != .wasm32) {
365 @compileError("WasmAllocator is only available for wasm32 arch");
366 }
367 }
368
367369 fn alloc(allocator: *Allocator, size: usize, alignment: u29) ![]u8 {
368370 const self = @fieldParentPtr(WasmAllocator, "allocator", allocator);
369371
......@@ -375,12 +377,12 @@ const WasmAllocator = struct {
375377 if (new_end_index > self.num_pages * os.page_size) {
376378 const required_memory = new_end_index - (self.num_pages * os.page_size);
377379
378 var num_pages: u32 = required_memory / os.page_size;
380 var num_pages: usize = required_memory / os.page_size;
379381 if (required_memory % os.page_size != 0) {
380382 num_pages += 1;
381383 }
382384
383 const prev_page = @"llvm.wasm.memory.grow.i32"(0, num_pages);
385 const prev_page = @"llvm.wasm.memory.grow.i32"(0, @intCast(u32, num_pages));
384386 if (prev_page == -1) {
385387 return error.OutOfMemory;
386388 }