[PATCH] D130981: [yaml2obj] Add a `-E` flag to preprocess only.
Simon Tatham via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 2 04:05:39 PDT 2022
simon_tatham created this revision.
simon_tatham added reviewers: jhenderson, MaskRay, compnerd, grimar, JDevlieghere, probinson.
Herald added a subscriber: StephenFan.
Herald added a project: All.
simon_tatham requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
If you're having trouble getting a yaml2obj macro expansion to do what
you want, it's useful to be able to print the output of the
preprocessing to see what your macros expanded to //before// going
into the YAML processing phase.
yaml2obj has its own preprocessing system which isn't the same as any
other well-known thing like cpp. So there's no way to do this macro
expansion via another tool: yaml2obj will have to do it itself.
In this commit I add an `-E` flag to yaml2obj to do that.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D130981
Files:
llvm/test/tools/yaml2obj/preprocess-only.test
llvm/tools/yaml2obj/yaml2obj.cpp
Index: llvm/tools/yaml2obj/yaml2obj.cpp
===================================================================
--- llvm/tools/yaml2obj/yaml2obj.cpp
+++ llvm/tools/yaml2obj/yaml2obj.cpp
@@ -40,6 +40,9 @@
"definition. The syntax is <macro>=<definition>"),
cl::cat(Cat));
+cl::opt<bool> PreprocessOnly("E", cl::desc("Just print the preprocessed file."),
+ cl::cat(Cat));
+
cl::opt<unsigned>
DocNum("docnum", cl::init(1),
cl::desc("Read specified document from input (default = 1)"),
@@ -133,11 +136,16 @@
Optional<std::string> Buffer = preprocess(Buf.get()->getBuffer(), ErrHandler);
if (!Buffer)
return 1;
- yaml::Input YIn(*Buffer);
- if (!convertYAML(YIn, Out->os(), ErrHandler, DocNum,
- MaxSize == 0 ? UINT64_MAX : MaxSize))
- return 1;
+ if (PreprocessOnly) {
+ Out->os() << Buffer;
+ } else {
+ yaml::Input YIn(*Buffer);
+
+ if (!convertYAML(YIn, Out->os(), ErrHandler, DocNum,
+ MaxSize == 0 ? UINT64_MAX : MaxSize))
+ return 1;
+ }
Out->keep();
Out->os().flush();
Index: llvm/test/tools/yaml2obj/preprocess-only.test
===================================================================
--- /dev/null
+++ llvm/test/tools/yaml2obj/preprocess-only.test
@@ -0,0 +1,16 @@
+# RUN: yaml2obj -E -Dfoo=wibble %s | FileCheck %s
+
+This is a test of yaml2obj's pure preprocessing mode, so it doesn't
+have to contain valid YAML, or any YAML at all. But we do have to be
+careful with the FileCheck CHECK directives, because they'll be
+emitted into the preprocessed output, and risk matching themselves!
+For that reason, each one matches only at the start of a line.
+
+Expand a macro:
+[[foo]] # CHECK: {{^wibble}}
+
+Expand an undefined macro:
+[[bar]] # CHECK: {{^\[\[bar\]\]}}
+
+Expand an undefined macro where we provided a default value:
+[[baz=123]] # CHECK: {{^123}}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D130981.449256.patch
Type: text/x-patch
Size: 1949 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220802/89fbee11/attachment.bin>
More information about the llvm-commits
mailing list