Skip to content

Commit 7d78dba

Browse files
authored
Initial implementation of the time module (#1680)
1 parent 2d25371 commit 7d78dba

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

src/libasr/runtime/lfortran_intrinsics.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
#include <limits.h>
1111
#include <ctype.h>
1212

13+
#if defined(_MSC_VER)
14+
# include <winsock2.h>
15+
#endif
16+
1317
#include <libasr/runtime/lfortran_intrinsics.h>
1418
#include <libasr/config.h>
1519

@@ -1254,6 +1258,22 @@ LFORTRAN_API void _lfortran_i64sys_clock(
12541258
#endif
12551259
}
12561260

1261+
LFORTRAN_API double _lfortran_time()
1262+
{
1263+
#if defined(_MSC_VER)
1264+
FILETIME ft;
1265+
ULARGE_INTEGER uli;
1266+
GetSystemTimeAsFileTime(&ft);
1267+
uli.LowPart = ft.dwLowDateTime;
1268+
uli.HighPart = ft.dwHighDateTime;
1269+
return (double)uli.QuadPart / 10000000.0 - 11644473600.0;
1270+
#else
1271+
struct timespec ts;
1272+
clock_gettime(CLOCK_REALTIME, &ts);
1273+
return (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000.0;
1274+
#endif
1275+
}
1276+
12571277
LFORTRAN_API void _lfortran_sp_rand_num(float *x) {
12581278
srand(time(0));
12591279
*x = rand() / (float) RAND_MAX;

src/libasr/runtime/lfortran_intrinsics.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ LFORTRAN_API void _lfortran_i32sys_clock(
211211
int32_t *count, int32_t *rate, int32_t *max);
212212
LFORTRAN_API void _lfortran_i64sys_clock(
213213
uint64_t *count, int64_t *rate, int64_t *max);
214+
LFORTRAN_API double _lfortran_time();
214215
LFORTRAN_API void _lfortran_sp_rand_num(float *x);
215216
LFORTRAN_API void _lfortran_dp_rand_num(double *x);
216217
LFORTRAN_API int64_t _lpython_open(char *path, char *flags);

src/runtime/time.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from lpython import f64, ccall
2+
3+
def time() -> f64:
4+
return _lfortran_time()
5+
6+
@ccall
7+
def _lfortran_time() -> f64:
8+
pass

0 commit comments

Comments
 (0)