summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-rc/ResourceScriptParser.cpp
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2018-05-08 20:55:58 +0000
committerMartin Storsjo <martin@martin.st>2018-05-08 20:55:58 +0000
commit818bd56809be068978762b2e9c104f7d86acd303 (patch)
treec0faad58715fe6f6af1a0caa16920dfe84b8ef3b /llvm/tools/llvm-rc/ResourceScriptParser.cpp
parentf9fa17b87309a6e9a13792102bf23f2b3f7a738d (diff)
downloadbcm5719-llvm-818bd56809be068978762b2e9c104f7d86acd303.tar.gz
bcm5719-llvm-818bd56809be068978762b2e9c104f7d86acd303.zip
[llvm-rc] Add support for all missing dialog controls
Differential Revision: https://reviews.llvm.org/D46507 llvm-svn: 331808
Diffstat (limited to 'llvm/tools/llvm-rc/ResourceScriptParser.cpp')
-rw-r--r--llvm/tools/llvm-rc/ResourceScriptParser.cpp45
1 files changed, 38 insertions, 7 deletions
diff --git a/llvm/tools/llvm-rc/ResourceScriptParser.cpp b/llvm/tools/llvm-rc/ResourceScriptParser.cpp
index 7123df9029a..0319563e267 100644
--- a/llvm/tools/llvm-rc/ResourceScriptParser.cpp
+++ b/llvm/tools/llvm-rc/ResourceScriptParser.cpp
@@ -486,15 +486,46 @@ Expected<Control> RCParser::parseControl() {
Caption = *CaptionResult;
}
- ASSIGN_OR_RETURN(Args, readIntsWithCommas(5, 8));
+ ASSIGN_OR_RETURN(ID, readInt());
+ RETURN_IF_ERROR(consumeType(Kind::Comma));
- auto TakeOptArg = [&Args](size_t Id) -> Optional<uint32_t> {
- return Args->size() > Id ? (uint32_t)(*Args)[Id] : Optional<uint32_t>();
- };
+ IntOrString Class;
+ Optional<uint32_t> Style;
+ if (ClassUpper == "CONTROL") {
+ // CONTROL text, id, class, style, x, y, width, height [, exstyle] [, helpID]
+ ASSIGN_OR_RETURN(ClassStr, readString());
+ RETURN_IF_ERROR(consumeType(Kind::Comma));
+ Class = *ClassStr;
+ ASSIGN_OR_RETURN(StyleVal, readInt());
+ RETURN_IF_ERROR(consumeType(Kind::Comma));
+ Style = *StyleVal;
+ } else {
+ Class = CtlInfo->getValue().CtlClass;
+ }
+
+ // x, y, width, height
+ ASSIGN_OR_RETURN(Args, readIntsWithCommas(4, 4));
+
+ if (ClassUpper != "CONTROL") {
+ if (consumeOptionalType(Kind::Comma)) {
+ ASSIGN_OR_RETURN(Val, readInt());
+ Style = *Val;
+ }
+ }
+
+ Optional<uint32_t> ExStyle;
+ if (consumeOptionalType(Kind::Comma)) {
+ ASSIGN_OR_RETURN(Val, readInt());
+ ExStyle = *Val;
+ }
+ Optional<uint32_t> HelpID;
+ if (consumeOptionalType(Kind::Comma)) {
+ ASSIGN_OR_RETURN(Val, readInt());
+ HelpID = *Val;
+ }
- return Control(*ClassResult, Caption, (*Args)[0], (*Args)[1], (*Args)[2],
- (*Args)[3], (*Args)[4], TakeOptArg(5), TakeOptArg(6),
- TakeOptArg(7));
+ return Control(*ClassResult, Caption, *ID, (*Args)[0], (*Args)[1],
+ (*Args)[2], (*Args)[3], Style, ExStyle, HelpID, Class);
}
RCParser::ParseType RCParser::parseBitmapResource() {
OpenPOWER on IntegriCloud