diff options
author | Marek Sokolowski <mnbvmar@gmail.com> | 2017-09-29 17:46:32 +0000 |
---|---|---|
committer | Marek Sokolowski <mnbvmar@gmail.com> | 2017-09-29 17:46:32 +0000 |
commit | c75a087c7a9beee1e0c23edf4c6ba173524c4773 (patch) | |
tree | 6481da56150164701e41b94a9284002bf6c952bd /llvm/tools/llvm-rc/ResourceScriptParser.cpp | |
parent | d06dd61292ef6d1a80ce8794d913c5cd414e3e6b (diff) | |
download | bcm5719-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.cpp | 16 |
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. |