STATIC mp_obj_t deque_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 2, 3, false); /* Initialization from existing sequence is not supported, so an empty tuple must be passed as such. */ if (args[0] != mp_const_empty_tuple) { mp_raise_ValueError(NULL); } // Protect against -1 leading to zero-length allocation and bad array access mp_int_t maxlen = mp_obj_get_int(args[1]); if (maxlen < 0) { mp_raise_ValueError(NULL); } mp_obj_deque_t *o = m_new_obj(mp_obj_deque_t); o->base.type = type; o->alloc = maxlen + 1; o->i_get = o->i_put = 0; o->items = m_new0(mp_obj_t, o->alloc); if (n_args > 2) { o->flags = mp_obj_get_int(args[2]); } return MP_OBJ_FROM_PTR(o); }
/// \classmethod \constructor([data[, block_size]]) /// initial data must be given if block_size wants to be passed STATIC mp_obj_t hash_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) { mp_arg_check_num(n_args, n_kw, 0, 2, false); mp_obj_hash_t *self = m_new0(mp_obj_hash_t, 1); self->base.type = type_in; if (self->base.type->name == MP_QSTR_sha1) { self->algo = SHAMD5_ALGO_SHA1; self->h_size = 20; } else /* if (self->base.type->name == MP_QSTR_sha256) */ { self->algo = SHAMD5_ALGO_SHA256; self->h_size = 32; } /* else { self->algo = SHAMD5_ALGO_MD5; self->h_size = 32; } */ if (n_args) { // CPython extension to avoid buffering the data before digesting it // Note: care must be taken to provide all intermediate blocks as multiple // of four bytes, otherwise the resulting hash will be incorrect. // the final block can be of any length if (n_args > 1) { // block size given, we will feed the data directly into the hash engine self->fixedlen = true; self->b_size = mp_obj_get_int(args[1]); hash_update_internal(self, args[0], true); } else { hash_update_internal(self, args[0], false); } } return self; }
asm_x86_t *asm_x86_new(mp_uint_t max_num_labels) { asm_x86_t *as; as = m_new0(asm_x86_t, 1); as->max_num_labels = max_num_labels; as->label_offsets = m_new(mp_uint_t, max_num_labels); return as; }
void mp_map_init(mp_map_t *map, int n) { if (n == 0) { map->alloc = 0; map->table = NULL; } else { map->alloc = get_doubling_prime_greater_or_equal_to(n + 1); map->table = m_new0(mp_map_elem_t, map->alloc); } map->used = 0; map->all_keys_are_qstrs = 1; map->table_is_fixed_array = 0; }
STATIC mp_obj_t array_iterator_new(mp_obj_t array_in) { mp_obj_array_t *array = array_in; mp_obj_array_it_t *o = m_new0(mp_obj_array_it_t, 1); o->base.type = &array_it_type; o->array = array; #if MICROPY_PY_BUILTINS_MEMORYVIEW if (array->base.type == &mp_type_memoryview) { o->offset = array->free; } #endif return o; }
void mp_map_init(mp_map_t *map, mp_uint_t n) { if (n == 0) { map->alloc = 0; map->table = NULL; } else { map->alloc = n; map->table = m_new0(mp_map_elem_t, map->alloc); } map->used = 0; map->all_keys_are_qstrs = 1; map->table_is_fixed_array = 0; }
void mp_map_init(mp_map_t *map, size_t n) { if (n == 0) { map->alloc = 0; map->table = NULL; } else { map->alloc = n; map->table = m_new0(mp_map_elem_t, map->alloc); } map->used = 0; map->all_keys_are_qstrs = 1; map->is_fixed = 0; map->is_ordered = 0; }
STATIC void mp_set_rehash(mp_set_t *set) { size_t old_alloc = set->alloc; mp_obj_t *old_table = set->table; set->alloc = get_hash_alloc_greater_or_equal_to(set->alloc + 1); set->used = 0; set->table = m_new0(mp_obj_t, set->alloc); for (size_t i = 0; i < old_alloc; i++) { if (old_table[i] != MP_OBJ_NULL && old_table[i] != MP_OBJ_SENTINEL) { mp_set_lookup(set, old_table[i], MP_MAP_LOOKUP_ADD_IF_NOT_FOUND); } } m_del(mp_obj_t, old_table, old_alloc); }
STATIC void mp_set_rehash(mp_set_t *set) { int old_alloc = set->alloc; mp_obj_t *old_table = set->table; set->alloc = get_doubling_prime_greater_or_equal_to(set->alloc + 1); set->used = 0; set->table = m_new0(mp_obj_t, set->alloc); for (int i = 0; i < old_alloc; i++) { if (old_table[i] != NULL) { mp_set_lookup(set, old_table[i], true); } } m_del(mp_obj_t, old_table, old_alloc); }
STATIC void mp_map_rehash(mp_map_t *map) { int old_alloc = map->alloc; mp_map_elem_t *old_table = map->table; map->alloc = get_doubling_prime_greater_or_equal_to(map->alloc + 1); map->used = 0; map->all_keys_are_qstrs = 1; map->table = m_new0(mp_map_elem_t, map->alloc); for (int i = 0; i < old_alloc; i++) { if (old_table[i].key != NULL) { mp_map_lookup(map, old_table[i].key, MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)->value = old_table[i].value; } } m_del(mp_map_elem_t, old_table, old_alloc); }
mp_obj_t mp_obj_new_namedtuple_type(qstr name, const char *fields) { mp_obj_namedtuple_type_t *o = m_new0(mp_obj_namedtuple_type_t, 1); o->base.base.type = &mp_type_type; o->base.name = name; o->base.print = namedtuple_print; o->base.make_new = namedtuple_make_new; o->base.unary_op = mp_obj_tuple_unary_op; o->base.binary_op = mp_obj_tuple_binary_op; o->base.load_attr = namedtuple_load_attr; o->base.store_attr = namedtuple_store_attr; o->base.subscr = mp_obj_tuple_subscr; o->base.getiter = mp_obj_tuple_getiter; o->base.bases_tuple = (mp_obj_t)&namedtuple_base_tuple; o->fields = fields; return o; }
STATIC void mp_map_rehash(mp_map_t *map) { size_t old_alloc = map->alloc; size_t new_alloc = get_hash_alloc_greater_or_equal_to(map->alloc + 1); mp_map_elem_t *old_table = map->table; mp_map_elem_t *new_table = m_new0(mp_map_elem_t, new_alloc); // If we reach this point, table resizing succeeded, now we can edit the old map. map->alloc = new_alloc; map->used = 0; map->all_keys_are_qstrs = 1; map->table = new_table; for (size_t i = 0; i < old_alloc; i++) { if (old_table[i].key != MP_OBJ_NULL && old_table[i].key != MP_OBJ_SENTINEL) { mp_map_lookup(map, old_table[i].key, MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)->value = old_table[i].value; } } m_del(mp_map_elem_t, old_table, old_alloc); }
http_request_t * http_request_new(const char * url) { http_request_t * ret = m_new0(http_request_t, 1); assert(ret != NULL); ret->url = strdup(url); ret->ver = NULL; ret->uri = NULL; ret->handlers.on_load = NULL; ret->handlers.on_error = NULL; ret->handlers.on_progress = NULL; ret->handlers.on_state_change = NULL; ret->handlers.on_timeout = NULL; ret->handlers.on_loadstart = NULL; ret->state = STATE_UNSENT; http_request_init(ret); return ret; }
scope_t *scope_new(scope_kind_t kind, mp_parse_node_t pn, qstr source_file, uint emit_options) { scope_t *scope = m_new0(scope_t, 1); scope->kind = kind; scope->pn = pn; scope->source_file = source_file; switch (kind) { case SCOPE_MODULE: scope->simple_name = MP_QSTR__lt_module_gt_; break; case SCOPE_FUNCTION: case SCOPE_CLASS: assert(MP_PARSE_NODE_IS_STRUCT(pn)); scope->simple_name = MP_PARSE_NODE_LEAF_ARG(((mp_parse_node_struct_t*)pn)->nodes[0]); break; case SCOPE_LAMBDA: scope->simple_name = MP_QSTR__lt_lambda_gt_; break; case SCOPE_LIST_COMP: scope->simple_name = MP_QSTR__lt_listcomp_gt_; break; case SCOPE_DICT_COMP: scope->simple_name = MP_QSTR__lt_dictcomp_gt_; break; case SCOPE_SET_COMP: scope->simple_name = MP_QSTR__lt_setcomp_gt_; break; case SCOPE_GEN_EXPR: scope->simple_name = MP_QSTR__lt_genexpr_gt_; break; default: assert(0); } scope->raw_code = mp_emit_glue_new_raw_code(); scope->emit_options = emit_options; scope->id_info_alloc = 8; scope->id_info = m_new(id_info_t, scope->id_info_alloc); return scope; }
emit_t *emit_bc_new(void) { emit_t *emit = m_new0(emit_t, 1); return emit; }
mp_raw_code_t *mp_emit_glue_new_raw_code(void) { mp_raw_code_t *rc = m_new0(mp_raw_code_t, 1); rc->kind = MP_CODE_RESERVED; return rc; }
void mp_set_init(mp_set_t *set, size_t n) { set->alloc = n; set->used = 0; set->table = m_new0(mp_obj_t, set->alloc); }
void mp_set_init(mp_set_t *set, int n) { set->alloc = get_doubling_prime_greater_or_equal_to(n + 1); set->used = 0; set->table = m_new0(mp_obj_t, set->alloc); }