X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=psi.d%2Fstdlib.psi;h=8191c2f2bbbdfc4ec6fc08f3894e8a602a3c531e;hp=6cf8e82b8da0bddfe36d31fc1c473593784786cd;hb=d583a661f2349ac7be4922e6eca0687ea8ccfef3;hpb=7df12c88a4e14611a2585d6e7c994c59e8d7485a diff --git a/psi.d/stdlib.psi b/psi.d/stdlib.psi index 6cf8e82..8191c2f 100644 --- a/psi.d/stdlib.psi +++ b/psi.d/stdlib.psi @@ -6,18 +6,21 @@ function psi\abs(int $i) : int { 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)); } 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)); } 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)); } @@ -28,9 +31,27 @@ function psi\strtold(string $str, string &$end = null) : float { set $end = to_string(*endptr); } -extern double pow(double x, double y); -function psi\pow2() : float { - let x = 1 | 2; - let y = 1 << 1; - return to_float(pow); -} \ No newline at end of file +function psi\free(object $memory) : void { + let ptr = objval($memory); + return void(free); +} + +function psi\malloc(int $size) : object { + let size = intval($size); + pre_assert size >= 0; + return to_object(malloc); +} + +function psi\calloc(int $nmemb, int $size) : object { + let nmemb = intval($nmemb); + let size = intval($size); + pre_assert size >= 0; + return to_object(calloc); +} + +function psi\realloc(object $obj, int $size) : object { + let ptr = objval($obj); + let size = intval($size); + pre_assert size >= 0; + return to_object(realloc); +}