summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-rc/ResourceScriptParser.cpp
diff options
context:
space:
mode:
authorMarek Sokolowski <mnbvmar@gmail.com>2017-09-29 17:46:32 +0000
committerMarek Sokolowski <mnbvmar@gmail.com>2017-09-29 17:46:32 +0000
commitc75a087c7a9beee1e0c23edf4c6ba173524c4773 (patch)
tree6481da56150164701e41b94a9284002bf6c952bd /llvm/tools/llvm-rc/ResourceScriptParser.cpp
parentd06dd61292ef6d1a80ce8794d913c5cd414e3e6b (diff)
downloadbcm5719-llvm-c75a087c7a9beee1e0c23edf4c6ba173524c4773.tar.gz
bcm5719-llvm-c75a087c7a9beee1e0c23edf4c6ba173524c4773.zip
[llvm-rc] Refactoring needed for ACCELERATORS and MENU resources.
This is a part of llvm-rc serialization patch set (serialization, pt 1.5). This: * Unifies the internal representation of flags in ACCELERATORS and MENU with the corresponding representation in .res files (noticed in https://reviews.llvm.org/D37828#inline-329828). * Creates an RCResource subclass, OptStatementsRCResource, describing resource statements that can declare resource-local optional statements (proposed in https://reviews.llvm.org/D37824#inline-329775). These modifications don't fit to any of the current patches, so I'm submitting them as a separate patch. Differential Revision: https://reviews.llvm.org/D37841 llvm-svn: 314541
Diffstat (limited to 'llvm/tools/llvm-rc/ResourceScriptParser.cpp')
-rw-r--r--llvm/tools/llvm-rc/ResourceScriptParser.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/tools/llvm-rc/ResourceScriptParser.cpp b/llvm/tools/llvm-rc/ResourceScriptParser.cpp
index 37d82b8182d..d4aa4b24379 100644
--- a/llvm/tools/llvm-rc/ResourceScriptParser.cpp
+++ b/llvm/tools/llvm-rc/ResourceScriptParser.cpp
@@ -293,9 +293,10 @@ RCParser::readIntsWithCommas(size_t MinCount, size_t MaxCount) {
return std::move(Result);
}
-Expected<uint32_t> RCParser::parseFlags(ArrayRef<StringRef> FlagDesc) {
- assert(FlagDesc.size() <= 32 && "More than 32 flags won't fit in result.");
+Expected<uint32_t> RCParser::parseFlags(ArrayRef<StringRef> FlagDesc,
+ ArrayRef<uint32_t> FlagValues) {
assert(!FlagDesc.empty());
+ assert(FlagDesc.size() == FlagValues.size());
uint32_t Result = 0;
while (isNextTokenKind(Kind::Comma)) {
@@ -307,7 +308,7 @@ Expected<uint32_t> RCParser::parseFlags(ArrayRef<StringRef> FlagDesc) {
if (!FlagResult->equals_lower(FlagDesc[FlagId]))
continue;
- Result |= (1U << FlagId);
+ Result |= FlagValues[FlagId];
FoundFlag = true;
break;
}
@@ -372,8 +373,10 @@ RCParser::ParseType RCParser::parseAcceleratorsResource() {
ASSIGN_OR_RETURN(EventResult, readIntOrString());
RETURN_IF_ERROR(consumeType(Kind::Comma));
ASSIGN_OR_RETURN(IDResult, readInt());
- ASSIGN_OR_RETURN(FlagsResult,
- parseFlags(AcceleratorsResource::Accelerator::OptionsStr));
+ ASSIGN_OR_RETURN(
+ FlagsResult,
+ parseFlags(AcceleratorsResource::Accelerator::OptionsStr,
+ AcceleratorsResource::Accelerator::OptionsFlags));
Accels->addAccelerator(*EventResult, *IDResult, *FlagsResult);
}
@@ -536,7 +539,8 @@ Expected<MenuDefinitionList> RCParser::parseMenuItemsList() {
MenuResult = *IntResult;
}
- ASSIGN_OR_RETURN(FlagsResult, parseFlags(MenuDefinition::OptionsStr));
+ ASSIGN_OR_RETURN(FlagsResult, parseFlags(MenuDefinition::OptionsStr,
+ MenuDefinition::OptionsFlags));
if (IsPopup) {
// If POPUP, read submenu items recursively.
OpenPOWER on IntegriCloud