summaryrefslogtreecommitdiffstatshomepage
path: root/unix/modtime.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-04-17 18:58:46 +0100
committerDamien George <damien.p.george@gmail.com>2014-04-17 18:58:46 +0100
commitd89b69eb3a8c53e0026e9dfffb1fa5d8da5569f7 (patch)
treeb33203dec0dba5294f3ee754e7c495c999978631 /unix/modtime.c
parentd0f9f6cd3f4b541dd4324dd73371638185178cdb (diff)
parente1e4249a674397ab837a31b8b4821f64e655c74e (diff)
downloadmicropython-d89b69eb3a8c53e0026e9dfffb1fa5d8da5569f7.tar.gz
micropython-d89b69eb3a8c53e0026e9dfffb1fa5d8da5569f7.zip
Merge branch 'master' of github.com:micropython/micropython
Diffstat (limited to 'unix/modtime.c')
-rw-r--r--unix/modtime.c43
1 files changed, 35 insertions, 8 deletions
diff --git a/unix/modtime.c b/unix/modtime.c
index 032528947c..a0d7cd0462 100644
--- a/unix/modtime.c
+++ b/unix/modtime.c
@@ -11,18 +11,28 @@
#include "runtime.h"
STATIC mp_obj_t mod_time_time() {
+#if MICROPY_ENABLE_FLOAT
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ mp_float_t val = tv.tv_sec + (mp_float_t)tv.tv_usec / 1000000;
+ return mp_obj_new_float(val);
+#else
return mp_obj_new_int((machine_int_t)time(NULL));
+#endif
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_time_time_obj, mod_time_time);
// Note: this is deprecated since CPy3.3, but pystone still uses it.
STATIC mp_obj_t mod_time_clock() {
-// return mp_obj_new_int((machine_int_t)clock());
- // POSIX requires CLOCKS_PER_SEC equals 1000000, so that's what we assume
+#if MICROPY_ENABLE_FLOAT
+ // POSIX requires CLOCKS_PER_SEC equals 1000000, so that's what we assume.
// float cannot represent full range of int32 precisely, so we pre-divide
// int to reduce resolution, and then actually do float division hoping
// to preserve integer part resolution.
return mp_obj_new_float((float)(clock() / 1000) / 1000.0);
+#else
+ return mp_obj_new_int((machine_int_t)clock());
+#endif
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_time_clock_obj, mod_time_clock);
@@ -41,9 +51,26 @@ STATIC mp_obj_t mod_time_sleep(mp_obj_t arg) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_time_sleep_obj, mod_time_sleep);
-void time_init() {
- mp_obj_t m = mp_obj_new_module(QSTR_FROM_STR_STATIC("time"));
- mp_store_attr(m, QSTR_FROM_STR_STATIC("time"), (mp_obj_t)&mod_time_time_obj);
- mp_store_attr(m, QSTR_FROM_STR_STATIC("clock"), (mp_obj_t)&mod_time_clock_obj);
- mp_store_attr(m, QSTR_FROM_STR_STATIC("sleep"), (mp_obj_t)&mod_time_sleep_obj);
-}
+STATIC const mp_map_elem_t mp_module_time_globals_table[] = {
+ { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_time) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_clock), (mp_obj_t)&mod_time_clock_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_sleep), (mp_obj_t)&mod_time_sleep_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&mod_time_time_obj },
+};
+
+STATIC const mp_obj_dict_t mp_module_time_globals = {
+ .base = {&mp_type_dict},
+ .map = {
+ .all_keys_are_qstrs = 1,
+ .table_is_fixed_array = 1,
+ .used = sizeof(mp_module_time_globals_table) / sizeof(mp_map_elem_t),
+ .alloc = sizeof(mp_module_time_globals_table) / sizeof(mp_map_elem_t),
+ .table = (mp_map_elem_t*)mp_module_time_globals_table,
+ },
+};
+
+const mp_obj_module_t mp_module_time = {
+ .base = { &mp_type_module },
+ .name = MP_QSTR_time,
+ .globals = (mp_obj_dict_t*)&mp_module_time_globals,
+};