(self, key)
| 1496 | yield from self._decls |
| 1497 | |
| 1498 | def __getitem__(self, key): |
| 1499 | # XXX Be more exact for the 3-tuple case? |
| 1500 | if type(key) not in (str, tuple): |
| 1501 | raise KeyError(f'unsupported key {key!r}') |
| 1502 | resolved, extra = self._resolve_key(key) |
| 1503 | if extra: |
| 1504 | raise KeyError(f'key must have at most 3 parts, got {key!r}') |
| 1505 | if not resolved[2]: |
| 1506 | raise ValueError(f'expected name in key, got {key!r}') |
| 1507 | try: |
| 1508 | return self._decls[resolved] |
| 1509 | except KeyError: |
| 1510 | if type(key) is tuple and len(key) == 3: |
| 1511 | filename, funcname, name = key |
| 1512 | else: |
| 1513 | filename, funcname, name = resolved |
| 1514 | if filename and not filename.endswith(('.c', '.h')): |
| 1515 | raise KeyError(f'invalid filename in key {key!r}') |
| 1516 | elif funcname and funcname.endswith(('.c', '.h')): |
| 1517 | raise KeyError(f'invalid funcname in key {key!r}') |
| 1518 | elif name and name.endswith(('.c', '.h')): |
| 1519 | raise KeyError(f'invalid name in key {key!r}') |
| 1520 | else: |
| 1521 | raise # re-raise |
| 1522 | |
| 1523 | @property |
| 1524 | def types(self): |
nothing calls this directly
no test coverage detected