@@ -206,6 +206,24 @@ VAL idris_time() {
206206 return MKBIGI(t);
207207}
208208
209+VAL idris_clock(VM* vm) {
210+ VAL result;
211+#ifdef _WIN32
212+ idris_constructor(result, vm, 0, 2, 0);
213+ idris_setConArg(result, 0, MKBIGI(0));
214+ idris_setConArg(result, 1, MKBIGI(0));
215+#else
216+ struct timespec ts;
217+ // We're not checking the result here, which is of course bad, but
218+ // CLOCK_REALTIME is required by POSIX at least!
219+ clock_gettime(CLOCK_REALTIME, &ts);
220+ idris_constructor(result, vm, 0, 2, 0);
221+ idris_setConArg(result, 0, MKBIGI(ts.tv_sec));
222+ idris_setConArg(result, 1, MKBIGI(ts.tv_nsec));
223+#endif
224+ return result;
225+}
226+
209227VAL idris_mkFileError(VM* vm) {
210228 VAL result;
211229 switch(errno) {