|
3 | 3 | * |
4 | 4 | * The MIT License (MIT) |
5 | 5 | * |
6 | | - * Copyright (c) 2014 Paul Sokolovsky |
| 6 | + * Copyright (c) 2014-2018 Paul Sokolovsky |
7 | 7 | * |
8 | 8 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
9 | 9 | * of this software and associated documentation files (the "Software"), to deal |
@@ -137,7 +137,11 @@ STATIC void uctypes_struct_print(const mp_print_t *print, mp_obj_t self_in, mp_p |
137 | 137 | (void)kind; |
138 | 138 | mp_obj_uctypes_struct_t *self = MP_OBJ_TO_PTR(self_in); |
139 | 139 | const char *typen = "unk"; |
140 | | - if (MP_OBJ_IS_TYPE(self->desc, &mp_type_dict)) { |
| 140 | + if (MP_OBJ_IS_TYPE(self->desc, &mp_type_dict) |
| 141 | + #if MICROPY_PY_COLLECTIONS_ORDEREDDICT |
| 142 | + || MP_OBJ_IS_TYPE(self->desc, &mp_type_ordereddict) |
| 143 | + #endif |
| 144 | + ) { |
141 | 145 | typen = "STRUCT"; |
142 | 146 | } else if (MP_OBJ_IS_TYPE(self->desc, &mp_type_tuple)) { |
143 | 147 | mp_obj_tuple_t *t = MP_OBJ_TO_PTR(self->desc); |
@@ -206,7 +210,11 @@ STATIC mp_uint_t uctypes_struct_agg_size(mp_obj_tuple_t *t, int layout_type, mp_ |
206 | 210 | } |
207 | 211 |
|
208 | 212 | STATIC mp_uint_t uctypes_struct_size(mp_obj_t desc_in, int layout_type, mp_uint_t *max_field_size) { |
209 | | - if (!MP_OBJ_IS_TYPE(desc_in, &mp_type_dict)) { |
| 213 | + if (!MP_OBJ_IS_TYPE(desc_in, &mp_type_dict) |
| 214 | + #if MICROPY_PY_COLLECTIONS_ORDEREDDICT |
| 215 | + && !MP_OBJ_IS_TYPE(desc_in, &mp_type_ordereddict) |
| 216 | + #endif |
| 217 | + ) { |
210 | 218 | if (MP_OBJ_IS_TYPE(desc_in, &mp_type_tuple)) { |
211 | 219 | return uctypes_struct_agg_size((mp_obj_tuple_t*)MP_OBJ_TO_PTR(desc_in), layout_type, max_field_size); |
212 | 220 | } else if (MP_OBJ_IS_SMALL_INT(desc_in)) { |
@@ -390,8 +398,11 @@ STATIC void set_aligned(uint val_type, void *p, mp_int_t index, mp_obj_t val) { |
390 | 398 | STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set_val) { |
391 | 399 | mp_obj_uctypes_struct_t *self = MP_OBJ_TO_PTR(self_in); |
392 | 400 |
|
393 | | - // TODO: Support at least OrderedDict in addition |
394 | | - if (!MP_OBJ_IS_TYPE(self->desc, &mp_type_dict)) { |
| 401 | + if (!MP_OBJ_IS_TYPE(self->desc, &mp_type_dict) |
| 402 | + #if MICROPY_PY_COLLECTIONS_ORDEREDDICT |
| 403 | + && !MP_OBJ_IS_TYPE(self->desc, &mp_type_ordereddict) |
| 404 | + #endif |
| 405 | + ) { |
395 | 406 | mp_raise_TypeError("struct: no fields"); |
396 | 407 | } |
397 | 408 |
|
|
0 commit comments