impl: add {pre,post}_assert statements
[m6w6/ext-psi] / psi.d / stdlib.psi
index 6044d41251802e971cc5b8f36ac318c15fb08394..63f28685e8bd37a84c29dba2b55b9d534fee0049 100644 (file)
@@ -1,2 +1,32 @@
+function psi\abs(int $i) : int {
+       let n = intval($i);
+       return to_int(abs);
+}
 
-extern void free(void *ptr);
+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));
+}
+
+function psi\strtold(string $str, string &$end = null) : float {
+       let nptr = strval($str);
+       let endptr = &NULL;
+       return to_float(strtold);
+       set $end = to_string(*endptr);
+}