diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-10-25 10:17:09 -0700 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-10-25 10:18:38 -0700 |
commit | 5934cd11ea3e15dd9f13a9ee960012b5b64463ec (patch) | |
tree | cc7fad7a875183519d598b1e7e9b5be6b1ec4d5d | |
parent | de79836312e02b3b4a6d322ced971afee6d4ba4d (diff) | |
download | llvm-5934cd11ea3e15dd9f13a9ee960012b5b64463ec.zip llvm-5934cd11ea3e15dd9f13a9ee960012b5b64463ec.tar.gz llvm-5934cd11ea3e15dd9f13a9ee960012b5b64463ec.tar.bz2 |
[TableGen] Add asserts to make sure default values match property type
This adds a few asserts to the property TableGen backend to prevent
mismatches between property types and their default values. This
would've prevented a copy-paste mistake we discovered downstream.
-rw-r--r-- | lldb/include/lldb/Core/PropertiesBase.td | 2 | ||||
-rw-r--r-- | lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp | 16 |
2 files changed, 18 insertions, 0 deletions
diff --git a/lldb/include/lldb/Core/PropertiesBase.td b/lldb/include/lldb/Core/PropertiesBase.td index be97d44..6e95ceb 100644 --- a/lldb/include/lldb/Core/PropertiesBase.td +++ b/lldb/include/lldb/Core/PropertiesBase.td @@ -18,11 +18,13 @@ class Global { class DefaultTrue { int DefaultUnsignedValue = 1; bit HasDefaultUnsignedValue = 1; + bit HasDefaultBooleanValue = 1; } class DefaultFalse { int DefaultUnsignedValue = 0; bit HasDefaultUnsignedValue = 1; + bit HasDefaultBooleanValue = 1; } // Gives the property a default string value. diff --git a/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp b/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp index f49c05c..51c15a7 100644 --- a/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp +++ b/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp @@ -46,6 +46,7 @@ static void emitProperty(Record *Property, raw_ostream &OS) { bool hasDefaultUnsignedValue = Property->getValue("HasDefaultUnsignedValue"); bool hasDefaultEnumValue = Property->getValue("HasDefaultEnumValue"); bool hasDefaultStringValue = Property->getValue("HasDefaultStringValue"); + bool hasDefaultBooleanValue = Property->getValue("HasDefaultBooleanValue"); // Guarantee that every property has a default value. assert((hasDefaultUnsignedValue || hasDefaultEnumValue || @@ -57,6 +58,21 @@ static void emitProperty(Record *Property, raw_ostream &OS) { assert(!(hasDefaultUnsignedValue && hasDefaultEnumValue) && "Property cannot have both a unsigned and enum default value."); + // Guarantee that every boolean property has a boolean default value. + assert(!(Property->getValueAsString("Type") == "Boolean" && + !hasDefaultBooleanValue) && + "Boolean property must have a boolean default value."); + + // Guarantee that every string property has a string default value. + assert(!(Property->getValueAsString("Type") == "String" && + !hasDefaultStringValue) && + "String property must have a string default value."); + + // Guarantee that every enum property has an enum default value. + assert( + !(Property->getValueAsString("Type") == "Enum" && !hasDefaultEnumValue) && + "Enum property must have a enum default value."); + // Emit the default uint value. if (hasDefaultUnsignedValue) { OS << std::to_string(Property->getValueAsInt("DefaultUnsignedValue")); |