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