From 999cedb90ff0827cdb9dfe0e4faa6ebc1739d271 Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 27 Nov 2015 17:01:44 +0000 Subject: py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR. This allows the mp_obj_t type to be configured to something other than a pointer-sized primitive type. This patch also includes additional changes to allow the code to compile when sizeof(mp_uint_t) != sizeof(void*), such as using size_t instead of mp_uint_t, and various casts. --- unix/file.c | 33 +++++++++++++++---------------- unix/gccollect.c | 2 +- unix/main.c | 37 ++++++++++++++++++++++++++--------- unix/modffi.c | 28 +++++++++++++-------------- unix/modos.c | 8 ++++---- unix/modsocket.c | 58 +++++++++++++++++++++++++++---------------------------- unix/modtermios.c | 12 ++++++------ unix/moduselect.c | 20 +++++++++---------- 8 files changed, 108 insertions(+), 90 deletions(-) (limited to 'unix') diff --git a/unix/file.c b/unix/file.c index 2b191c4de..448cd50ed 100644 --- a/unix/file.c +++ b/unix/file.c @@ -62,12 +62,12 @@ extern const mp_obj_type_t mp_type_textio; STATIC void fdfile_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { (void)kind; - mp_obj_fdfile_t *self = self_in; - mp_printf(print, "", mp_obj_get_type_str(self), self->fd); + mp_obj_fdfile_t *self = MP_OBJ_TO_PTR(self_in); + mp_printf(print, "", mp_obj_get_type_str(self_in), self->fd); } STATIC mp_uint_t fdfile_read(mp_obj_t o_in, void *buf, mp_uint_t size, int *errcode) { - mp_obj_fdfile_t *o = o_in; + mp_obj_fdfile_t *o = MP_OBJ_TO_PTR(o_in); check_fd_is_open(o); mp_int_t r = read(o->fd, buf, size); if (r == -1) { @@ -78,7 +78,7 @@ STATIC mp_uint_t fdfile_read(mp_obj_t o_in, void *buf, mp_uint_t size, int *errc } STATIC mp_uint_t fdfile_write(mp_obj_t o_in, const void *buf, mp_uint_t size, int *errcode) { - mp_obj_fdfile_t *o = o_in; + mp_obj_fdfile_t *o = MP_OBJ_TO_PTR(o_in); check_fd_is_open(o); mp_int_t r = write(o->fd, buf, size); if (r == -1) { @@ -88,8 +88,8 @@ STATIC mp_uint_t fdfile_write(mp_obj_t o_in, const void *buf, mp_uint_t size, in return r; } -STATIC mp_uint_t fdfile_ioctl(mp_obj_t o_in, mp_uint_t request, mp_uint_t arg, int *errcode) { - mp_obj_fdfile_t *o = o_in; +STATIC mp_uint_t fdfile_ioctl(mp_obj_t o_in, mp_uint_t request, uintptr_t arg, int *errcode) { + mp_obj_fdfile_t *o = MP_OBJ_TO_PTR(o_in); if (request == MP_STREAM_SEEK) { struct mp_stream_seek_t *s = (struct mp_stream_seek_t*)arg; off_t off = lseek(o->fd, s->offset, s->whence); @@ -106,7 +106,7 @@ STATIC mp_uint_t fdfile_ioctl(mp_obj_t o_in, mp_uint_t request, mp_uint_t arg, i } STATIC mp_obj_t fdfile_flush(mp_obj_t self_in) { - mp_obj_fdfile_t *self = self_in; + mp_obj_fdfile_t *self = MP_OBJ_TO_PTR(self_in); check_fd_is_open(self); fsync(self->fd); return mp_const_none; @@ -114,7 +114,7 @@ STATIC mp_obj_t fdfile_flush(mp_obj_t self_in) { STATIC MP_DEFINE_CONST_FUN_OBJ_1(fdfile_flush_obj, fdfile_flush); STATIC mp_obj_t fdfile_close(mp_obj_t self_in) { - mp_obj_fdfile_t *self = self_in; + mp_obj_fdfile_t *self = MP_OBJ_TO_PTR(self_in); close(self->fd); #ifdef MICROPY_CPYTHON_COMPAT self->fd = -1; @@ -130,7 +130,7 @@ STATIC mp_obj_t fdfile___exit__(mp_uint_t n_args, const mp_obj_t *args) { STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(fdfile___exit___obj, 4, 4, fdfile___exit__); STATIC mp_obj_t fdfile_fileno(mp_obj_t self_in) { - mp_obj_fdfile_t *self = self_in; + mp_obj_fdfile_t *self = MP_OBJ_TO_PTR(self_in); check_fd_is_open(self); return MP_OBJ_NEW_SMALL_INT(self->fd); } @@ -145,9 +145,8 @@ STATIC const mp_arg_t file_open_args[] = { }; #define FILE_OPEN_NUM_ARGS MP_ARRAY_SIZE(file_open_args) -STATIC mp_obj_t fdfile_open(mp_obj_t type_in, mp_arg_val_t *args) { +STATIC mp_obj_t fdfile_open(const mp_obj_type_t *type, mp_arg_val_t *args) { mp_obj_fdfile_t *o = m_new_obj(mp_obj_fdfile_t); - mp_const_obj_t type = type_in; const char *mode_s = mp_obj_str_get_str(args[1].u_obj); int mode = 0; @@ -184,7 +183,7 @@ STATIC mp_obj_t fdfile_open(mp_obj_t type_in, mp_arg_val_t *args) { if (MP_OBJ_IS_SMALL_INT(fid)) { o->fd = MP_OBJ_SMALL_INT_VALUE(fid); - return o; + return MP_OBJ_FROM_PTR(o); } const char *fname = mp_obj_str_get_str(fid); @@ -193,13 +192,13 @@ STATIC mp_obj_t fdfile_open(mp_obj_t type_in, mp_arg_val_t *args) { nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(errno))); } o->fd = fd; - return o; + return MP_OBJ_FROM_PTR(o); } STATIC mp_obj_t fdfile_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { mp_arg_val_t arg_vals[FILE_OPEN_NUM_ARGS]; mp_arg_parse_all_kw_array(n_args, n_kw, args, FILE_OPEN_NUM_ARGS, file_open_args, arg_vals); - return fdfile_open(type_in, arg_vals); + return fdfile_open(MP_OBJ_TO_PTR(type_in), arg_vals); } STATIC const mp_rom_map_elem_t rawfile_locals_dict_table[] = { @@ -235,7 +234,7 @@ const mp_obj_type_t mp_type_fileio = { .getiter = mp_identity, .iternext = mp_stream_unbuffered_iter, .stream_p = &fileio_stream_p, - .locals_dict = (mp_obj_t)&rawfile_locals_dict, + .locals_dict = (mp_obj_dict_t*)&rawfile_locals_dict, }; #endif @@ -254,7 +253,7 @@ const mp_obj_type_t mp_type_textio = { .getiter = mp_identity, .iternext = mp_stream_unbuffered_iter, .stream_p = &textio_stream_p, - .locals_dict = (mp_obj_t)&rawfile_locals_dict, + .locals_dict = (mp_obj_dict_t*)&rawfile_locals_dict, }; // Factory function for I/O stream classes @@ -262,7 +261,7 @@ mp_obj_t mp_builtin_open(mp_uint_t n_args, const mp_obj_t *args, mp_map_t *kwarg // TODO: analyze buffering args and instantiate appropriate type mp_arg_val_t arg_vals[FILE_OPEN_NUM_ARGS]; mp_arg_parse_all(n_args, args, kwargs, FILE_OPEN_NUM_ARGS, file_open_args, arg_vals); - return fdfile_open((mp_obj_t)&mp_type_textio, arg_vals); + return fdfile_open(&mp_type_textio, arg_vals); } MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open); diff --git a/unix/gccollect.c b/unix/gccollect.c index 007fbfcdb..125c273a3 100644 --- a/unix/gccollect.c +++ b/unix/gccollect.c @@ -144,7 +144,7 @@ void gc_collect(void) { gc_helper_get_regs(regs); // GC stack (and regs because we captured them) void **regs_ptr = (void**)(void*)®s; - gc_collect_root(regs_ptr, ((mp_uint_t)MP_STATE_VM(stack_top) - (mp_uint_t)®s) / sizeof(mp_uint_t)); + gc_collect_root(regs_ptr, ((uintptr_t)MP_STATE_VM(stack_top) - (uintptr_t)®s) / sizeof(uintptr_t)); #if MICROPY_EMIT_NATIVE mp_unix_mark_exec(); #endif diff --git a/unix/main.c b/unix/main.c index ae09b895d..e22176e13 100644 --- a/unix/main.c +++ b/unix/main.c @@ -58,7 +58,7 @@ STATIC uint emit_opt = MP_EMIT_OPT_NONE; long heap_size = 1024*1024 * (sizeof(mp_uint_t) / 4); #endif -STATIC void stderr_print_strn(void *env, const char *str, mp_uint_t len) { +STATIC void stderr_print_strn(void *env, const char *str, size_t len) { (void)env; ssize_t dummy = write(STDERR_FILENO, str, len); (void)dummy; @@ -70,11 +70,11 @@ const mp_print_t mp_stderr_print = {NULL, stderr_print_strn}; // If exc is SystemExit, return value where FORCED_EXIT bit set, // and lower 8 bits are SystemExit value. For all other exceptions, // return 1. -STATIC int handle_uncaught_exception(mp_obj_t exc) { +STATIC int handle_uncaught_exception(mp_obj_base_t *exc) { // check for SystemExit - if (mp_obj_is_subclass_fast(mp_obj_get_type(exc), &mp_type_SystemExit)) { + if (mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(exc->type), MP_OBJ_FROM_PTR(&mp_type_SystemExit))) { // None is an exit value of 0; an int is its value; anything else is 1 - mp_obj_t exit_val = mp_obj_exception_get_value(exc); + mp_obj_t exit_val = mp_obj_exception_get_value(MP_OBJ_FROM_PTR(exc)); mp_int_t val = 0; if (exit_val != mp_const_none && !mp_obj_get_int_maybe(exit_val, &val)) { val = 1; @@ -83,7 +83,7 @@ STATIC int handle_uncaught_exception(mp_obj_t exc) { } // Report all other exceptions - mp_obj_print_exception(&mp_stderr_print, exc); + mp_obj_print_exception(&mp_stderr_print, MP_OBJ_FROM_PTR(exc)); return 1; } @@ -130,7 +130,7 @@ STATIC int execute_from_lexer(mp_lexer_t *lex, mp_parse_input_kind_t input_kind, } else { // uncaught exception mp_hal_set_interrupt_char(-1); - return handle_uncaught_exception((mp_obj_t)nlr.ret_val); + return handle_uncaught_exception(nlr.ret_val); } } @@ -364,7 +364,26 @@ STATIC void set_sys_argv(char *argv[], int argc, int start_arg) { #define PATHLIST_SEP_CHAR ':' #endif +/* +typedef union _a_t { uint32_t u32; uint64_t u64; } a_t; +STATIC const uint64_t table[4] = { + 1, + 2, + 3, + //(a_t){(uint32_t)&set_sys_argv}.u64, + ((a_t){(uint32_t)123}).u64, +}; +*/ + int main(int argc, char **argv) { + /* + printf("sizeof(void*)=%u\n", (uint)sizeof(void*)); + for (int i = 0; i < sizeof(table); ++i) { + byte *ptr = (void*)&table[0]; + printf(" %02x", ptr[i]); + if ((i + 1)%8 == 0) printf("\n"); + } + */ mp_stack_set_limit(40000 * (BYTES_PER_WORD / 4)); pre_process_options(argc, argv); @@ -397,7 +416,7 @@ int main(int argc, char **argv) { p++; } } - mp_obj_list_init(mp_sys_path, path_num); + mp_obj_list_init(MP_OBJ_TO_PTR(mp_sys_path), path_num); mp_obj_t *path_items; mp_obj_list_get(mp_sys_path, &path_num, &path_items); path_items[0] = MP_OBJ_NEW_QSTR(MP_QSTR_); @@ -421,7 +440,7 @@ int main(int argc, char **argv) { } } - mp_obj_list_init(mp_sys_argv, 0); + mp_obj_list_init(MP_OBJ_TO_PTR(mp_sys_argv), 0); #if defined(MICROPY_UNIX_COVERAGE) { @@ -487,7 +506,7 @@ int main(int argc, char **argv) { nlr_pop(); } else { // uncaught exception - return handle_uncaught_exception((mp_obj_t)nlr.ret_val) & 0xff; + return handle_uncaught_exception(nlr.ret_val) & 0xff; } if (mp_obj_is_package(mod)) { diff --git a/unix/modffi.c b/unix/modffi.c index 48834fb73..c998a809e 100644 --- a/unix/modffi.c +++ b/unix/modffi.c @@ -170,12 +170,12 @@ STATIC mp_obj_t return_ffi_value(ffi_arg val, char type) STATIC void ffimod_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { (void)kind; - mp_obj_ffimod_t *self = self_in; + mp_obj_ffimod_t *self = MP_OBJ_TO_PTR(self_in); mp_printf(print, "", self->handle); } STATIC mp_obj_t ffimod_close(mp_obj_t self_in) { - mp_obj_ffimod_t *self = self_in; + mp_obj_ffimod_t *self = MP_OBJ_TO_PTR(self_in); dlclose(self->handle); return mp_const_none; } @@ -205,12 +205,12 @@ STATIC mp_obj_t make_func(mp_obj_t rettype_in, void *func, mp_obj_t argtypes_in) nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Error in ffi_prep_cif")); } - return o; + return MP_OBJ_FROM_PTR(o); } STATIC mp_obj_t ffimod_func(mp_uint_t n_args, const mp_obj_t *args) { (void)n_args; // always 4 - mp_obj_ffimod_t *self = args[0]; + mp_obj_ffimod_t *self = MP_OBJ_TO_PTR(args[0]); const char *symname = mp_obj_str_get_str(args[2]); void *sym = dlsym(self->handle, symname); @@ -222,7 +222,7 @@ STATIC mp_obj_t ffimod_func(mp_uint_t n_args, const mp_obj_t *args) { MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ffimod_func_obj, 4, 4, ffimod_func); STATIC mp_obj_t mod_ffi_func(mp_obj_t rettype, mp_obj_t addr_in, mp_obj_t argtypes) { - void *addr = (void*)mp_obj_int_get_truncated(addr_in); + void *addr = (void*)MP_OBJ_TO_PTR(mp_obj_int_get_truncated(addr_in)); return make_func(rettype, addr, argtypes); } MP_DEFINE_CONST_FUN_OBJ_3(mod_ffi_func_obj, mod_ffi_func); @@ -267,12 +267,12 @@ STATIC mp_obj_t mod_ffi_callback(mp_obj_t rettype_in, mp_obj_t func_in, mp_obj_t nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "ffi_prep_closure_loc")); } - return o; + return MP_OBJ_FROM_PTR(o); } MP_DEFINE_CONST_FUN_OBJ_3(mod_ffi_callback_obj, mod_ffi_callback); STATIC mp_obj_t ffimod_var(mp_obj_t self_in, mp_obj_t vartype_in, mp_obj_t symname_in) { - mp_obj_ffimod_t *self = self_in; + mp_obj_ffimod_t *self = MP_OBJ_TO_PTR(self_in); const char *rettype = mp_obj_str_get_str(vartype_in); const char *symname = mp_obj_str_get_str(symname_in); @@ -285,12 +285,12 @@ STATIC mp_obj_t ffimod_var(mp_obj_t self_in, mp_obj_t vartype_in, mp_obj_t symna o->var = sym; o->type = *rettype; - return o; + return MP_OBJ_FROM_PTR(o); } MP_DEFINE_CONST_FUN_OBJ_3(ffimod_var_obj, ffimod_var); STATIC mp_obj_t ffimod_addr(mp_obj_t self_in, mp_obj_t symname_in) { - mp_obj_ffimod_t *self = self_in; + mp_obj_ffimod_t *self = MP_OBJ_TO_PTR(self_in); const char *symname = mp_obj_str_get_str(symname_in); void *sym = dlsym(self->handle, symname); @@ -315,9 +315,9 @@ STATIC mp_obj_t ffimod_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_ nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(errno))); } mp_obj_ffimod_t *o = m_new_obj(mp_obj_ffimod_t); - o->base.type = type_in; + o->base.type = MP_OBJ_TO_PTR(type_in); o->handle = mod; - return o; + return MP_OBJ_FROM_PTR(o); } STATIC const mp_rom_map_elem_t ffimod_locals_dict_table[] = { @@ -334,19 +334,19 @@ STATIC const mp_obj_type_t ffimod_type = { .name = MP_QSTR_ffimod, .print = ffimod_print, .make_new = ffimod_make_new, - .locals_dict = (mp_obj_t)&ffimod_locals_dict, + .locals_dict = (mp_obj_dict_t*)&ffimod_locals_dict, }; // FFI function STATIC void ffifunc_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { (void)kind; - mp_obj_ffifunc_t *self = self_in; + mp_obj_ffifunc_t *self = MP_OBJ_TO_PTR(self_in); mp_printf(print, "", self->func); } STATIC mp_obj_t ffifunc_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { - mp_obj_ffifunc_t *self = self_in; + mp_obj_ffifunc_t *self = MP_OBJ_TO_PTR(self_in); assert(n_kw == 0); assert(n_args == self->cif.nargs); diff --git a/unix/modos.c b/unix/modos.c index 3e8c5a6eb..faf33dac9 100644 --- a/unix/modos.c +++ b/unix/modos.c @@ -53,7 +53,7 @@ STATIC mp_obj_t mod_os_stat(mp_obj_t path_in) { int res = stat(path, &sb); RAISE_ERRNO(res, errno); - mp_obj_tuple_t *t = mp_obj_new_tuple(10, NULL); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(10, NULL)); t->items[0] = MP_OBJ_NEW_SMALL_INT(sb.st_mode); t->items[1] = MP_OBJ_NEW_SMALL_INT(sb.st_ino); t->items[2] = MP_OBJ_NEW_SMALL_INT(sb.st_dev); @@ -64,7 +64,7 @@ STATIC mp_obj_t mod_os_stat(mp_obj_t path_in) { t->items[7] = MP_OBJ_NEW_SMALL_INT(sb.st_atime); t->items[8] = MP_OBJ_NEW_SMALL_INT(sb.st_mtime); t->items[9] = MP_OBJ_NEW_SMALL_INT(sb.st_ctime); - return t; + return MP_OBJ_FROM_PTR(t); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_os_stat_obj, mod_os_stat); @@ -94,7 +94,7 @@ STATIC mp_obj_t mod_os_statvfs(mp_obj_t path_in) { int res = STATVFS(path, &sb); RAISE_ERRNO(res, errno); - mp_obj_tuple_t *t = mp_obj_new_tuple(10, NULL); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(10, NULL)); t->items[0] = MP_OBJ_NEW_SMALL_INT(sb.f_bsize); t->items[1] = MP_OBJ_NEW_SMALL_INT(sb.f_frsize); t->items[2] = MP_OBJ_NEW_SMALL_INT(sb.f_blocks); @@ -105,7 +105,7 @@ STATIC mp_obj_t mod_os_statvfs(mp_obj_t path_in) { t->items[7] = MP_OBJ_NEW_SMALL_INT(F_FAVAIL); t->items[8] = MP_OBJ_NEW_SMALL_INT(F_FLAG); t->items[9] = MP_OBJ_NEW_SMALL_INT(F_NAMEMAX); - return t; + return MP_OBJ_FROM_PTR(t); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_os_statvfs_obj, mod_os_statvfs); #endif diff --git a/unix/modsocket.c b/unix/modsocket.c index db36c727a..6a7c3f551 100644 --- a/unix/modsocket.c +++ b/unix/modsocket.c @@ -88,12 +88,12 @@ STATIC mp_obj_socket_t *socket_new(int fd) { STATIC void socket_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { (void)kind; - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); mp_printf(print, "<_socket %d>", self->fd); } STATIC mp_uint_t socket_read(mp_obj_t o_in, void *buf, mp_uint_t size, int *errcode) { - mp_obj_socket_t *o = o_in; + mp_obj_socket_t *o = MP_OBJ_TO_PTR(o_in); mp_int_t r = read(o->fd, buf, size); if (r == -1) { *errcode = errno; @@ -103,7 +103,7 @@ STATIC mp_uint_t socket_read(mp_obj_t o_in, void *buf, mp_uint_t size, int *errc } STATIC mp_uint_t socket_write(mp_obj_t o_in, const void *buf, mp_uint_t size, int *errcode) { - mp_obj_socket_t *o = o_in; + mp_obj_socket_t *o = MP_OBJ_TO_PTR(o_in); mp_int_t r = write(o->fd, buf, size); if (r == -1) { *errcode = errno; @@ -113,20 +113,20 @@ STATIC mp_uint_t socket_write(mp_obj_t o_in, const void *buf, mp_uint_t size, in } STATIC mp_obj_t socket_close(mp_obj_t self_in) { - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); close(self->fd); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_close_obj, socket_close); STATIC mp_obj_t socket_fileno(mp_obj_t self_in) { - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); return MP_OBJ_NEW_SMALL_INT(self->fd); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_fileno_obj, socket_fileno); STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) { - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); mp_buffer_info_t bufinfo; mp_get_buffer_raise(addr_in, &bufinfo, MP_BUFFER_READ); int r = connect(self->fd, (const struct sockaddr *)bufinfo.buf, bufinfo.len); @@ -136,7 +136,7 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) { STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_connect_obj, socket_connect); STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) { - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); mp_buffer_info_t bufinfo; mp_get_buffer_raise(addr_in, &bufinfo, MP_BUFFER_READ); int r = bind(self->fd, (const struct sockaddr *)bufinfo.buf, bufinfo.len); @@ -146,7 +146,7 @@ STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) { STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_bind_obj, socket_bind); STATIC mp_obj_t socket_listen(mp_obj_t self_in, mp_obj_t backlog_in) { - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); int r = listen(self->fd, MP_OBJ_SMALL_INT_VALUE(backlog_in)); RAISE_ERRNO(r, errno); return mp_const_none; @@ -154,17 +154,17 @@ STATIC mp_obj_t socket_listen(mp_obj_t self_in, mp_obj_t backlog_in) { STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_listen_obj, socket_listen); STATIC mp_obj_t socket_accept(mp_obj_t self_in) { - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); struct sockaddr addr; socklen_t addr_len = sizeof(addr); int fd = accept(self->fd, &addr, &addr_len); RAISE_ERRNO(fd, errno); - mp_obj_tuple_t *t = mp_obj_new_tuple(2, NULL); - t->items[0] = socket_new(fd); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL)); + t->items[0] = MP_OBJ_FROM_PTR(socket_new(fd)); t->items[1] = mp_obj_new_bytearray(addr_len, &addr); - return t; + return MP_OBJ_FROM_PTR(t); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_accept_obj, socket_accept); @@ -172,7 +172,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_accept_obj, socket_accept); // this does not swallow blocking errors (EAGAIN, EWOULDBLOCK) - // these would be thrown as exceptions. STATIC mp_obj_t socket_recv(mp_uint_t n_args, const mp_obj_t *args) { - mp_obj_socket_t *self = args[0]; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(args[0]); int sz = MP_OBJ_SMALL_INT_VALUE(args[1]); int flags = 0; @@ -191,7 +191,7 @@ STATIC mp_obj_t socket_recv(mp_uint_t n_args, const mp_obj_t *args) { STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_recv_obj, 2, 3, socket_recv); STATIC mp_obj_t socket_recvfrom(mp_uint_t n_args, const mp_obj_t *args) { - mp_obj_socket_t *self = args[0]; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(args[0]); int sz = MP_OBJ_SMALL_INT_VALUE(args[1]); int flags = 0; @@ -209,11 +209,11 @@ STATIC mp_obj_t socket_recvfrom(mp_uint_t n_args, const mp_obj_t *args) { mp_obj_t buf_o = mp_obj_new_str_of_type(&mp_type_bytes, buf, out_sz); m_del(char, buf, sz); - mp_obj_tuple_t *t = mp_obj_new_tuple(2, NULL); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL)); t->items[0] = buf_o; t->items[1] = mp_obj_from_sockaddr((struct sockaddr*)&addr, addr_len); - return t; + return MP_OBJ_FROM_PTR(t); } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_recvfrom_obj, 2, 3, socket_recvfrom); @@ -221,7 +221,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_recvfrom_obj, 2, 3, socket_rec // this does not swallow blocking errors (EAGAIN, EWOULDBLOCK) - // these would be thrown as exceptions. STATIC mp_obj_t socket_send(mp_uint_t n_args, const mp_obj_t *args) { - mp_obj_socket_t *self = args[0]; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(args[0]); int flags = 0; if (n_args > 2) { @@ -238,7 +238,7 @@ STATIC mp_obj_t socket_send(mp_uint_t n_args, const mp_obj_t *args) { STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_send_obj, 2, 3, socket_send); STATIC mp_obj_t socket_sendto(mp_uint_t n_args, const mp_obj_t *args) { - mp_obj_socket_t *self = args[0]; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(args[0]); int flags = 0; mp_obj_t dst_addr = args[2]; @@ -260,7 +260,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_sendto_obj, 3, 4, socket_sendt STATIC mp_obj_t socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) { (void)n_args; // always 4 - mp_obj_socket_t *self = args[0]; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(args[0]); int level = MP_OBJ_SMALL_INT_VALUE(args[1]); int option = mp_obj_get_int(args[2]); @@ -284,7 +284,7 @@ STATIC mp_obj_t socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) { STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_setsockopt_obj, 4, 4, socket_setsockopt); STATIC mp_obj_t socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in) { - mp_obj_socket_t *self = self_in; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(self_in); int val = mp_obj_is_true(flag_in); int flags = fcntl(self->fd, F_GETFL, 0); RAISE_ERRNO(flags, errno); @@ -303,7 +303,7 @@ STATIC mp_obj_t socket_makefile(mp_uint_t n_args, const mp_obj_t *args) { // TODO: CPython explicitly says that closing returned object doesn't close // the original socket (Python2 at all says that fd is dup()ed). But we // save on the bloat. - mp_obj_socket_t *self = args[0]; + mp_obj_socket_t *self = MP_OBJ_TO_PTR(args[0]); mp_obj_t *new_args = alloca(n_args * sizeof(mp_obj_t)); memcpy(new_args + 1, args + 1, (n_args - 1) * sizeof(mp_obj_t)); new_args[0] = MP_OBJ_NEW_SMALL_INT(self->fd); @@ -336,7 +336,7 @@ STATIC mp_obj_t socket_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_ int fd = socket(family, type, proto); RAISE_ERRNO(fd, errno); - return socket_new(fd); + return MP_OBJ_FROM_PTR(socket_new(fd)); } STATIC const mp_rom_map_elem_t usocket_locals_dict_table[] = { @@ -375,7 +375,7 @@ STATIC const mp_obj_type_t usocket_type = { .getiter = NULL, .iternext = NULL, .stream_p = &usocket_stream_p, - .locals_dict = (mp_obj_t)&usocket_locals_dict, + .locals_dict = (mp_obj_dict_t*)&usocket_locals_dict, }; #if MICROPY_SOCKET_EXTRA @@ -474,7 +474,7 @@ STATIC mp_obj_t mod_socket_getaddrinfo(mp_uint_t n_args, const mp_obj_t *args) { mp_obj_t list = mp_obj_new_list(0, NULL); for (struct addrinfo *addr = addr_list; addr; addr = addr->ai_next) { - mp_obj_tuple_t *t = mp_obj_new_tuple(5, NULL); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL)); t->items[0] = MP_OBJ_NEW_SMALL_INT(addr->ai_family); t->items[1] = MP_OBJ_NEW_SMALL_INT(addr->ai_socktype); t->items[2] = MP_OBJ_NEW_SMALL_INT(addr->ai_protocol); @@ -486,7 +486,7 @@ STATIC mp_obj_t mod_socket_getaddrinfo(mp_uint_t n_args, const mp_obj_t *args) { t->items[3] = mp_const_none; } t->items[4] = mp_obj_new_bytearray(addr->ai_addrlen, addr->ai_addr); - mp_obj_list_append(list, t); + mp_obj_list_append(list, MP_OBJ_FROM_PTR(t)); } freeaddrinfo(addr_list); return list; @@ -499,18 +499,18 @@ STATIC mp_obj_t mod_socket_sockaddr(mp_obj_t sockaddr_in) { switch (((struct sockaddr*)bufinfo.buf)->sa_family) { case AF_INET: { struct sockaddr_in *sa = (struct sockaddr_in*)bufinfo.buf; - mp_obj_tuple_t *t = mp_obj_new_tuple(3, NULL); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(3, NULL)); t->items[0] = MP_OBJ_NEW_SMALL_INT(AF_INET); t->items[1] = mp_obj_new_bytes((byte*)&sa->sin_addr, sizeof(sa->sin_addr)); t->items[2] = MP_OBJ_NEW_SMALL_INT(ntohs(sa->sin_port)); - return t; + return MP_OBJ_FROM_PTR(t); } default: { struct sockaddr *sa = (struct sockaddr*)bufinfo.buf; - mp_obj_tuple_t *t = mp_obj_new_tuple(2, NULL); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL)); t->items[0] = MP_OBJ_NEW_SMALL_INT(sa->sa_family); t->items[1] = mp_obj_new_bytes((byte*)sa->sa_data, bufinfo.len - offsetof(struct sockaddr, sa_data)); - return t; + return MP_OBJ_FROM_PTR(t); } } return mp_const_none; diff --git a/unix/modtermios.c b/unix/modtermios.c index c49014c94..a70edf5bf 100644 --- a/unix/modtermios.c +++ b/unix/modtermios.c @@ -44,7 +44,7 @@ STATIC mp_obj_t mod_termios_tcgetattr(mp_obj_t fd_in) { int res = tcgetattr(fd, &term); RAISE_ERRNO(res, errno); - mp_obj_list_t *r = mp_obj_new_list(7, NULL); + mp_obj_list_t *r = MP_OBJ_TO_PTR(mp_obj_new_list(7, NULL)); r->items[0] = MP_OBJ_NEW_SMALL_INT(term.c_iflag); r->items[1] = MP_OBJ_NEW_SMALL_INT(term.c_oflag); r->items[2] = MP_OBJ_NEW_SMALL_INT(term.c_cflag); @@ -52,8 +52,8 @@ STATIC mp_obj_t mod_termios_tcgetattr(mp_obj_t fd_in) { r->items[4] = MP_OBJ_NEW_SMALL_INT(cfgetispeed(&term)); r->items[5] = MP_OBJ_NEW_SMALL_INT(cfgetospeed(&term)); - mp_obj_list_t *cc = mp_obj_new_list(NCCS, NULL); - r->items[6] = cc; + mp_obj_list_t *cc = MP_OBJ_TO_PTR(mp_obj_new_list(NCCS, NULL)); + r->items[6] = MP_OBJ_FROM_PTR(cc); for (int i = 0; i < NCCS; i++) { if (i == VMIN || i == VTIME) { cc->items[i] = MP_OBJ_NEW_SMALL_INT(term.c_cc[i]); @@ -63,7 +63,7 @@ STATIC mp_obj_t mod_termios_tcgetattr(mp_obj_t fd_in) { cc->items[i] = mp_obj_new_bytes(&term.c_cc[i], 1); } } - return r; + return MP_OBJ_FROM_PTR(r); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_termios_tcgetattr_obj, mod_termios_tcgetattr); @@ -80,14 +80,14 @@ STATIC mp_obj_t mod_termios_tcsetattr(mp_obj_t fd_in, mp_obj_t when_in, mp_obj_t } assert(MP_OBJ_IS_TYPE(attrs_in, &mp_type_list)); - mp_obj_list_t *attrs = attrs_in; + mp_obj_list_t *attrs = MP_OBJ_TO_PTR(attrs_in); term.c_iflag = mp_obj_get_int(attrs->items[0]); term.c_oflag = mp_obj_get_int(attrs->items[1]); term.c_cflag = mp_obj_get_int(attrs->items[2]); term.c_lflag = mp_obj_get_int(attrs->items[3]); - mp_obj_list_t *cc = attrs->items[6]; + mp_obj_list_t *cc = MP_OBJ_TO_PTR(attrs->items[6]); for (int i = 0; i < NCCS; i++) { if (i == VMIN || i == VTIME) { term.c_cc[i] = mp_obj_get_int(cc->items[i]); diff --git a/unix/moduselect.c b/unix/moduselect.c index 41255ff90..0d06cc530 100644 --- a/unix/moduselect.c +++ b/unix/moduselect.c @@ -46,7 +46,7 @@ typedef struct _mp_obj_poll_t { /// \method register(obj[, eventmask]) STATIC mp_obj_t poll_register(uint n_args, const mp_obj_t *args) { - mp_obj_poll_t *self = args[0]; + mp_obj_poll_t *self = MP_OBJ_TO_PTR(args[0]); mp_uint_t flags; if (n_args == 3) { flags = mp_obj_get_int(args[2]); @@ -79,7 +79,7 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(poll_register_obj, 2, 3, poll_register); /// \method unregister(obj) STATIC mp_obj_t poll_unregister(mp_obj_t self_in, mp_obj_t obj_in) { - mp_obj_poll_t *self = self_in; + mp_obj_poll_t *self = MP_OBJ_TO_PTR(self_in); struct pollfd *entries = self->entries; int fd = mp_obj_get_int(obj_in); for (int i = self->len - 1; i >= 0; i--) { @@ -97,7 +97,7 @@ MP_DEFINE_CONST_FUN_OBJ_2(poll_unregister_obj, poll_unregister); /// \method modify(obj, eventmask) STATIC mp_obj_t poll_modify(mp_obj_t self_in, mp_obj_t obj_in, mp_obj_t eventmask_in) { - mp_obj_poll_t *self = self_in; + mp_obj_poll_t *self = MP_OBJ_TO_PTR(self_in); struct pollfd *entries = self->entries; int fd = mp_obj_get_int(obj_in); for (int i = self->len - 1; i >= 0; i--) { @@ -116,7 +116,7 @@ MP_DEFINE_CONST_FUN_OBJ_3(poll_modify_obj, poll_modify); /// \method poll([timeout]) /// Timeout is in milliseconds. STATIC mp_obj_t poll_poll(uint n_args, const mp_obj_t *args) { - mp_obj_poll_t *self = args[0]; + mp_obj_poll_t *self = MP_OBJ_TO_PTR(args[0]); // work out timeout (its given already in ms) int timeout = -1; @@ -135,19 +135,19 @@ STATIC mp_obj_t poll_poll(uint n_args, const mp_obj_t *args) { return mp_const_empty_tuple; } - mp_obj_list_t *ret_list = mp_obj_new_list(n_ready, NULL); + mp_obj_list_t *ret_list = MP_OBJ_TO_PTR(mp_obj_new_list(n_ready, NULL)); int ret_i = 0; struct pollfd *entries = self->entries; for (int i = 0; i < self->len; i++, entries++) { if (entries->revents != 0) { - mp_obj_tuple_t *t = mp_obj_new_tuple(2, NULL); + mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL)); t->items[0] = MP_OBJ_NEW_SMALL_INT(entries->fd); t->items[1] = MP_OBJ_NEW_SMALL_INT(entries->revents); - ret_list->items[ret_i++] = t; + ret_list->items[ret_i++] = MP_OBJ_FROM_PTR(t); } } - return ret_list; + return MP_OBJ_FROM_PTR(ret_list); } MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(poll_poll_obj, 1, 2, poll_poll); @@ -162,7 +162,7 @@ STATIC MP_DEFINE_CONST_DICT(poll_locals_dict, poll_locals_dict_table); STATIC const mp_obj_type_t mp_type_poll = { { &mp_type_type }, .name = MP_QSTR_poll, - .locals_dict = (mp_obj_t)&poll_locals_dict, + .locals_dict = (void*)&poll_locals_dict, }; STATIC mp_obj_t select_poll(mp_uint_t n_args, const mp_obj_t *args) { @@ -175,7 +175,7 @@ STATIC mp_obj_t select_poll(mp_uint_t n_args, const mp_obj_t *args) { poll->entries = m_new(struct pollfd, alloc); poll->alloc = alloc; poll->len = 0; - return poll; + return MP_OBJ_FROM_PTR(poll); } MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_select_poll_obj, 0, 1, select_poll); -- cgit v1.2.3