summaryrefslogtreecommitdiffhomepage
path: root/registry/generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'registry/generator.py')
-rw-r--r--registry/generator.py41
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.