From 58df5b0a8f9d5d1d6826bd178cbec3f7ea12a499 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 8 Apr 2019 23:07:21 +0200 Subject: [PATCH] allocators.nim: use zero initialization --- lib/core/allocators.nim | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/core/allocators.nim b/lib/core/allocators.nim index c4302fc2c2..962a99fd60 100644 --- a/lib/core/allocators.nim +++ b/lib/core/allocators.nim @@ -29,7 +29,11 @@ var when defined(useMalloc) and not defined(nimscript): import "system/ansi_c" - import "system/memory" + +import "system/memory" + +template `+!`(p: pointer, s: int): pointer = + cast[pointer](cast[int](p) +% s) proc getLocalAllocator*(): Allocator = result = localAllocator @@ -41,7 +45,7 @@ proc getLocalAllocator*(): Allocator = # XXX do we need this? nimZeroMem(result, size) else: - result = system.alloc(size) + result = system.alloc0(size) inc a.allocCount result.dealloc = proc (a: Allocator; p: pointer; size: int) {.nimcall, raises: [].} = when defined(useMalloc) and not defined(nimscript): @@ -54,8 +58,9 @@ proc getLocalAllocator*(): Allocator = result = c_realloc(p, newSize) else: result = system.realloc(p, newSize) + nimZeroMem(result +! oldSize, newSize - oldSize) result.deallocAll = nil - result.flags = {ThreadLocal} + result.flags = {ThreadLocal, ZerosMem} result.name = "nim_local" localAllocator = result