nlr_jump(py_obj_new_exception_2(rt_q_TypeError,"unsupported operand type(s) for divmod(): '%s' and '%s'",py_obj_get_type_str(o1_in),py_obj_get_type_str(o2_in)));
}
}
py_obj_tpy_builtin_hash(py_obj_to_in){
// TODO hash will generally overflow small integer; can we safely truncate it?
returnpy_obj_new_int(py_obj_hash(o_in));
}
py_obj_tpy_builtin_iter(py_obj_to_in){
returnrt_getiter(o_in);
}
py_obj_tpy_builtin_next(py_obj_to_in){
returnrt_gen_instance_next(o_in);
}
py_obj_tpy_builtin_len(py_obj_to_in){
py_small_int_tlen=0;
if(IS_O(o_in,O_STR)){
py_obj_base_t*o=o_in;
len=strlen(qstr_str(o->u_str));
}elseif(IS_O(o_in,O_TUPLE)||IS_O(o_in,O_LIST)){
py_obj_base_t*o=o_in;
len=o->u_tuple_list.len;
}elseif(IS_O(o_in,O_MAP)){
py_obj_base_t*o=o_in;
len=o->u_map.used;
}else{
nlr_jump(py_obj_new_exception_2(rt_q_TypeError,"object of type '%s' has no len()",py_obj_get_type_str(o_in),NULL));