ifdef HAVE_INT128
[m6w6/ext-psi] / psi.d / stdlib.psi
1 #include <stdlib.h>
2
3 function psi\abs(int $i) : int {
4 let n = intval($i);
5 return abs(n) as to_int(abs);
6 }
7
8 function psi\div(int $numerator, int $denominator) : array {
9 let numerator = intval($numerator);
10 let denominator = intval($denominator);
11 pre_assert denominator != 0;
12 return div(numerator, denominator)
13 as to_array(div, to_int(quot), to_int(rem));
14 }
15
16 function psi\ldiv(int $numerator, int $denominator) : array {
17 let numerator = intval($numerator);
18 let denominator = intval($denominator);
19 pre_assert denominator != 0;
20 return ldiv(numerator, denominator)
21 as to_array(ldiv, to_int(quot), to_int(rem));
22 }
23
24 function psi\lldiv(int $numerator, int $denominator) : array {
25 let numerator = intval($numerator);
26 let denominator = intval($denominator);
27 pre_assert denominator != 0;
28 return lldiv(numerator, denominator)
29 as to_array(lldiv, to_int(quot), to_int(rem));
30 }
31
32 function psi\strtold(string $str, string &$end = null) : float {
33 let nptr = strval($str);
34 let endptr = &NULL;
35 return strtold(nptr, endptr)
36 as to_float(strtold);
37 set $end = to_string(*endptr);
38 }
39
40 function psi\free(object $memory) : void {
41 let ptr = objval($memory);
42 return free(ptr) as void(free);
43 }
44
45 function psi\malloc(int $size) : object {
46 let size = intval($size);
47 pre_assert size >= 0;
48 return malloc(size) as to_object(malloc);
49 }
50
51 function psi\calloc(int $nmemb, int $size) : object {
52 let nmemb = intval($nmemb);
53 let size = intval($size);
54 pre_assert size >= 0;
55 return calloc(nmemb, size) as to_object(calloc);
56 }
57
58 function psi\realloc(object $obj, int $size) : object {
59 let ptr = objval($obj);
60 let size = intval($size);
61 pre_assert size >= 0;
62 return realloc(ptr, size) as to_object(realloc);
63 }