[PATCH] D82265: [llvm-rc] Implement the language id option

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 20 13:46:10 PDT 2020


mstorsjo created this revision.
mstorsjo added reviewers: amccarth, thakis.
Herald added a project: LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82265

Files:
  llvm/test/tools/llvm-rc/Inputs/language.rc
  llvm/test/tools/llvm-rc/language.test
  llvm/tools/llvm-rc/Opts.td
  llvm/tools/llvm-rc/llvm-rc.cpp


Index: llvm/tools/llvm-rc/llvm-rc.cpp
===================================================================
--- llvm/tools/llvm-rc/llvm-rc.cpp
+++ llvm/tools/llvm-rc/llvm-rc.cpp
@@ -187,7 +187,17 @@
     ExitOnErr(NullResource().visit(Visitor.get()));
 
     // Set the default language; choose en-US arbitrarily.
-    ExitOnErr(LanguageResource(0x09, 0x01).visit(Visitor.get()));
+    unsigned PrimaryLangId = 0x09, SubLangId = 0x01;
+    if (InputArgs.hasArg(OPT_LANG_ID)) {
+      unsigned LangId;
+      if (InputArgs.getLastArgValue(OPT_LANG_ID)
+              .getAsInteger(16, LangId))
+        fatalError("Invalid language id: " +
+                   InputArgs.getLastArgValue(OPT_LANG_ID));
+      PrimaryLangId = LangId & 0x3ff;
+      SubLangId = LangId >> 10;
+    }
+    ExitOnErr(LanguageResource(PrimaryLangId, SubLangId).visit(Visitor.get()));
   }
 
   rc::RCParser Parser{std::move(Tokens)};
Index: llvm/tools/llvm-rc/Opts.td
===================================================================
--- llvm/tools/llvm-rc/Opts.td
+++ llvm/tools/llvm-rc/Opts.td
@@ -12,7 +12,7 @@
 def UNDEF : Separate<[ "/", "-" ], "U">,
             HelpText<"Undefine a symbol for the C preprocessor.">;
 
-def LANG_ID : Separate<[ "/", "-" ], "L">,
+def LANG_ID : JoinedOrSeparate<[ "/", "-" ], "L">,
               HelpText<"Set the default language identifier.">;
 def LANG_NAME : Separate<[ "/", "-" ], "LN">,
                 HelpText<"Set the default language name.">;
Index: llvm/test/tools/llvm-rc/language.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-rc/language.test
@@ -0,0 +1,19 @@
+; RUN: llvm-rc /l 40A /FO %t.res -- %p/Inputs/language.rc
+; RUN: llvm-readobj %t.res | FileCheck %s
+; RUN: llvm-rc /l40A /FO %t.res -- %p/Inputs/language.rc
+; RUN: llvm-readobj %t.res | FileCheck %s
+
+; CHECK:      Resource name (int): 1
+; CHECK-NEXT: Data version:
+; CHECK-NEXT: Memory flags:
+; CHECK-NEXT: Language ID: 2049
+
+; CHECK:      Resource name (int): 2
+; CHECK-NEXT: Data version:
+; CHECK-NEXT: Memory flags:
+; CHECK-NEXT: Language ID: 1034
+
+; CHECK:      Resource name (int): 3
+; CHECK-NEXT: Data version:
+; CHECK-NEXT: Memory flags:
+; CHECK-NEXT: Language ID: 4099
Index: llvm/test/tools/llvm-rc/Inputs/language.rc
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-rc/Inputs/language.rc
@@ -0,0 +1,15 @@
+1 MENU
+LANGUAGE 1, 2
+{
+  MENUITEM "foo", 1
+}
+
+2 MENU {
+  MENUITEM "bar", 2
+}
+
+LANGUAGE 3, 4
+
+3 MENU {
+  MENUITEM "baz", 3
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82265.272270.patch
Type: text/x-patch
Size: 2588 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200620/30344d5c/attachment.bin>


More information about the llvm-commits mailing list