diff options
Diffstat (limited to 'registry/generator.py')
-rw-r--r-- | registry/generator.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/registry/generator.py b/registry/generator.py index 6203c65..19bbc3c 100644 --- a/registry/generator.py +++ b/registry/generator.py @@ -691,6 +691,47 @@ class OutputGenerator: return (section, '\n'.join(body)) + def buildConstantCDecl(self, enuminfo, name, alias): + """Generate the C declaration for a constant (a single <enum> + value). + + <enum> tags may specify their values in several ways, but are + usually just integers or floating-point numbers.""" + + (_, strVal) = self.enumToValue(enuminfo.elem, False) + + if self.misracppstyle() and enuminfo.elem.get('type') and not alias: + # Generate e.g.: static constexpr uint32_t x = ~static_cast<uint32_t>(1U); + # This appeases MISRA "underlying type" rules. + typeStr = enuminfo.elem.get('type'); + invert = '~' in strVal + number = strVal.strip("()~UL") + if typeStr != "float": + number += 'U' + strVal = "~" if invert else "" + strVal += "static_cast<" + typeStr + ">(" + number + ")" + body = 'static constexpr ' + typeStr.ljust(9) + name.ljust(33) + ' {' + strVal + '};' + elif enuminfo.elem.get('type') and not alias: + # Generate e.g.: #define x (~0ULL) + typeStr = enuminfo.elem.get('type'); + invert = '~' in strVal + paren = '(' in strVal + number = strVal.strip("()~UL") + if typeStr != "float": + if typeStr == "uint64_t": + number += 'ULL' + else: + number += 'U' + strVal = "~" if invert else "" + strVal += number + if paren: + strVal = "(" + strVal + ")"; + body = '#define ' + name.ljust(33) + ' ' + strVal; + else: + body = '#define ' + name.ljust(33) + ' ' + strVal + + return body + def makeDir(self, path): """Create a directory, if not already done. |