diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-05-05 14:41:19 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-05-08 21:58:56 +0200 |
commit | 79477ae61e625f0552a59b42aad34f463d571f04 (patch) | |
tree | e1fa16796eefc1a1761b4459ea4a746459a521ee /rtemsspec/interface.py | |
parent | content: Make align_declarations() public (diff) | |
download | rtems-central-79477ae61e625f0552a59b42aad34f463d571f04.tar.bz2 |
interface: Improve enabled-by for header files
Diffstat (limited to 'rtemsspec/interface.py')
-rw-r--r-- | rtemsspec/interface.py | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/rtemsspec/interface.py b/rtemsspec/interface.py index c1655c4c..d5ed395d 100644 --- a/rtemsspec/interface.py +++ b/rtemsspec/interface.py @@ -39,7 +39,7 @@ from rtemsspec.content import CContent, CInclude, enabled_by_to_exp, \ get_value_forward_declaration, get_value_hash, get_value_header_file, \ get_value_params, get_value_plural, get_value_unspecified_type, \ to_camel_case -from rtemsspec.items import Item, ItemCache, ItemGetValueMap, ItemMapper +from rtemsspec.items import Item, ItemCache, ItemGetValueMap, ItemMapper, Link ItemMap = Dict[str, Item] Lines = Union[str, List[str]] @@ -723,6 +723,28 @@ def _bubble_sort(nodes: List[Node]) -> List[Node]: return nodes +def _merge_enabled_by(link: Link) -> Any: + enabled_by = link["enabled-by"] + enabled_by_2 = link.item["enabled-by"] + if enabled_by == enabled_by_2: + return enabled_by + if isinstance(enabled_by, bool): + if enabled_by: + return enabled_by_2 + return False + if isinstance(enabled_by_2, bool): + if enabled_by_2: + return enabled_by + return False + return {"and": [enabled_by, enabled_by_2]} + + +def _combine_enabled_by(item: Item, enabled_by: Any) -> Any: + if enabled_by == item["enabled-by"]: + return True + return enabled_by + + class _HeaderFile: """ A header file. """ @@ -817,13 +839,20 @@ class _HeaderFile: exp_mapper = _HeaderExpressionMapper(self._item, self.enabled_by_defined) includes = [ - CInclude(item["path"], - enabled_by_to_exp(item["enabled-by"], exp_mapper)) - for item in self._includes if item != self._item + CInclude( + item["path"], + enabled_by_to_exp( + _combine_enabled_by(self._item, item["enabled-by"]), + exp_mapper)) for item in self._includes + if item != self._item ] includes.extend([ - CInclude(link.item["path"], - enabled_by_to_exp(link["enabled-by"], exp_mapper)) + CInclude( + link.item["path"], + enabled_by_to_exp( + _combine_enabled_by(self._item, + _merge_enabled_by(link)), + exp_mapper)) for link in self._item.links_to_parents("interface-include") ]) self._content.add_includes(includes) |