hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

malloc+libc.ha (1140B)


      1 // SPDX-License-Identifier: MPL-2.0
      2 // (c) Hare authors <https://harelang.org>
      3 
      4 // Allocates n bytes of memory and returns a pointer to them, or null if there
      5 // is insufficient memory.
      6 export fn malloc(n: size) nullable *opaque = {
      7 	if (n == 0) return null;
      8 	return c_malloc(n);
      9 };
     10 
     11 // Changes the allocation size of a pointer to n bytes. If n is smaller than
     12 // the prior allocation, it is truncated; otherwise the allocation is expanded
     13 // and the values of the new bytes are undefined. May return a different pointer
     14 // than the one given if there is insufficient space to expand the pointer
     15 // in-place. Returns null if there is insufficient memory to support the
     16 // request.
     17 export fn realloc(p: nullable *opaque, n: size) nullable *opaque = {
     18 	if (n == 0) {
     19 		free(p);
     20 		return null;
     21 	};
     22 	return c_realloc(p, n);
     23 };
     24 
     25 // Frees a pointer previously allocated with [[malloc]].
     26 export @symbol("rt.free") fn free_(p: nullable *opaque) void = {
     27 	c_free(p);
     28 };
     29 
     30 @symbol("malloc") fn c_malloc(size) nullable *opaque;
     31 @symbol("realloc") fn c_realloc(nullable *opaque, size) nullable *opaque;
     32 @symbol("free") fn c_free(nullable *opaque) void;