Skip to content

Commit

Permalink
[yaml2obj] Add a -E flag to preprocess only.
Browse files Browse the repository at this point in the history
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.

Differential Revision: https://reviews.llvm.org/D130981
  • Loading branch information
statham-arm committed Aug 2, 2022
1 parent bb28324 commit 07e6eb6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
16 changes: 16 additions & 0 deletions llvm/test/tools/yaml2obj/preprocess-only.test
Original file line number Diff line number Diff line change
@@ -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}}
16 changes: 12 additions & 4 deletions llvm/tools/yaml2obj/yaml2obj.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ cl::list<std::string>
"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)"),
Expand Down Expand Up @@ -133,11 +136,16 @@ int main(int argc, char **argv) {
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();
Expand Down

0 comments on commit 07e6eb6

Please sign in to comment.