| 1340 | @lru_cache(maxsize=2048, copy=False) |
| 1341 | def set_bitfields_format(format): |
| 1342 | class Accumulator: |
| 1343 | def __init__(self, fmt, comp_fields): |
| 1344 | self._subfields = [] |
| 1345 | # add a prefix to distinguish the artificially created compoud field |
| 1346 | # from regular fields |
| 1347 | self._name = "~" |
| 1348 | self._type = None |
| 1349 | self._bits_left = 0 |
| 1350 | self._comp_fields = comp_fields |
| 1351 | self._format = fmt |
| 1352 | |
| 1353 | def wrap_up(self): |
| 1354 | if self._type is None: |
| 1355 | return |
| 1356 | self._format.append(self._type + "," + self._name) |
| 1357 | self._comp_fields[len(self._format) - 1] = (self._type, self._subfields) |
| 1358 | self._name = "~" |
| 1359 | self._type = None |
| 1360 | self._subfields = [] |
| 1361 | |
| 1362 | def new_type(self, tp): |
| 1363 | self._bits_left = STRUCT_SIZEOF_TYPES[tp] * 8 |
| 1364 | self._type = tp |
| 1365 | |
| 1366 | def add_subfield(self, name, bitcnt): |
| 1367 | self._name += name |
| 1368 | self._bits_left -= bitcnt |
| 1369 | self._subfields.append((name, bitcnt)) |
| 1370 | |
| 1371 | def get_type(self): |
| 1372 | return self._type |
| 1373 | |
| 1374 | def get_name(self): |
| 1375 | return self._name |
| 1376 | |
| 1377 | def get_bits_left(self): |
| 1378 | return self._bits_left |
| 1379 | |
| 1380 | old_fmt = [] |
| 1381 | comp_fields = {} |
no outgoing calls
no test coverage detected