X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=psi.d%2Fstdlib.psi;h=35cf171aa30f396aad11ee94e7e9c1c8d0c9c4d0;hp=63f28685e8bd37a84c29dba2b55b9d534fee0049;hb=93d6b7f962a82b725d1918684297d68221b0b733;hpb=f15288e185e65bcdfde87c217fb6bd7ff12eb653 diff --git a/psi.d/stdlib.psi b/psi.d/stdlib.psi index 63f2868..35cf171 100644 --- a/psi.d/stdlib.psi +++ b/psi.d/stdlib.psi @@ -1,32 +1,67 @@ +#ifdef __linux__ +#pragma lib "crypt"; +#endif + +#include + function psi\abs(int $i) : int { let n = intval($i); - return to_int(abs); + return abs(n) as to_int(abs); } function psi\div(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); pre_assert denominator != 0; - return to_array(div, to_int(quot), to_int(rem)); + return div(numerator, denominator) + as to_array(div, to_int(quot), to_int(rem)); } function psi\ldiv(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); pre_assert denominator != 0; - return to_array(ldiv, to_int(quot), to_int(rem)); + return ldiv(numerator, denominator) + as to_array(ldiv, to_int(quot), to_int(rem)); } function psi\lldiv(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); pre_assert denominator != 0; - return to_array(lldiv, to_int(quot), to_int(rem)); + return lldiv(numerator, denominator) + as to_array(lldiv, to_int(quot), to_int(rem)); } function psi\strtold(string $str, string &$end = null) : float { let nptr = strval($str); let endptr = &NULL; - return to_float(strtold); + return strtold(nptr, endptr) + as to_float(strtold); set $end = to_string(*endptr); } + +function psi\free(object $memory) : void { + let ptr = objval($memory); + return free(ptr) as void(free); +} + +function psi\malloc(int $size) : object { + let size = intval($size); + pre_assert size >= 0; + return malloc(size) as to_object(malloc); +} + +function psi\calloc(int $nmemb, int $size) : object { + let nmemb = intval($nmemb); + let size = intval($size); + pre_assert size >= 0; + return calloc(nmemb, size) as to_object(calloc); +} + +function psi\realloc(object $obj, int $size) : object { + let ptr = objval($obj); + let size = intval($size); + pre_assert size >= 0; + return realloc(ptr, size) as to_object(realloc); +}