MacroCollector: default to not including intermediate macros
By default, exclude macros whose numerical value is not a valid member of the semantic type (e.g. PSA_ALG_xxx_BASE is not itself an algorithm, only an intermediate value used to construct others). But do include them with include_intermediate=True, which generate_psa_constants.py does. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
parent
f8deb759ba
commit
13d60eb4fc
2 changed files with 17 additions and 1 deletions
|
@ -213,6 +213,9 @@ class CaseBuilder(macro_collector.PSAMacroCollector):
|
||||||
2. Call `write_file` to write ``psa_constant_names_generated.c``.
|
2. Call `write_file` to write ``psa_constant_names_generated.c``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(include_intermediate=True)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _make_return_case(name):
|
def _make_return_case(name):
|
||||||
return 'case %(name)s: return "%(name)s";' % {'name': name}
|
return 'case %(name)s: return "%(name)s";' % {'name': name}
|
||||||
|
|
|
@ -22,7 +22,15 @@ class PSAMacroCollector:
|
||||||
"""Collect PSA crypto macro definitions from C header files.
|
"""Collect PSA crypto macro definitions from C header files.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, include_intermediate=False):
|
||||||
|
"""Set up an object to collect PSA macro definitions.
|
||||||
|
|
||||||
|
Call the read_file method of the constructed object on each header file.
|
||||||
|
|
||||||
|
* include_intermediate: if true, include intermediate macros such as
|
||||||
|
PSA_XXX_BASE that do not designate semantic values.
|
||||||
|
"""
|
||||||
|
self.include_intermediate = include_intermediate
|
||||||
self.statuses = set()
|
self.statuses = set()
|
||||||
self.key_types = set()
|
self.key_types = set()
|
||||||
self.key_types_from_curve = {}
|
self.key_types_from_curve = {}
|
||||||
|
@ -37,6 +45,11 @@ class PSAMacroCollector:
|
||||||
|
|
||||||
def is_internal_name(self, name):
|
def is_internal_name(self, name):
|
||||||
"""Whether this is an internal macro. Internal macros will be skipped."""
|
"""Whether this is an internal macro. Internal macros will be skipped."""
|
||||||
|
if not self.include_intermediate:
|
||||||
|
if name.endswith('_BASE') or name.endswith('_NONE'):
|
||||||
|
return True
|
||||||
|
if '_CATEGORY_' in name:
|
||||||
|
return True
|
||||||
return name.endswith('_FLAG') or name.endswith('MASK')
|
return name.endswith('_FLAG') or name.endswith('MASK')
|
||||||
|
|
||||||
# "#define" followed by a macro name with either no parameters
|
# "#define" followed by a macro name with either no parameters
|
||||||
|
|
Loading…
Reference in a new issue