From 4ae4548cebb71f7c0fd36b7b13a59729c718cffe Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Wed, 1 May 2024 17:06:49 -0700 Subject: [PATCH] gen-zam: gen-zam extended to read from multiple files on the command-line --- tools/gen-zam/src/Gen-ZAM.cc | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/tools/gen-zam/src/Gen-ZAM.cc b/tools/gen-zam/src/Gen-ZAM.cc index fc9659f71d..f030d93df2 100644 --- a/tools/gen-zam/src/Gen-ZAM.cc +++ b/tools/gen-zam/src/Gen-ZAM.cc @@ -1959,30 +1959,37 @@ void TemplateInput::Gripe(const char* msg, const InputLoc& l) const ZAMGen::ZAMGen(int argc, char** argv) { - auto prog_name = argv[0]; + auto prog_name = (argv++)[0]; - if ( argc != 2 ) + if ( --argc < 1 ) { fprintf(stderr, "usage: %s \n", prog_name); exit(1); } - auto file_name = argv[1]; - auto f = strcmp(file_name, "-") ? fopen(file_name, "r") : stdin; - - if ( ! f ) + while ( argc-- > 0 ) { - fprintf(stderr, "%s: cannot open \"%s\"\n", prog_name, file_name); - exit(1); + auto file_name = (argv++)[0]; + bool is_stdin = file_name == std::string("-"); + auto f = is_stdin ? stdin : fopen(file_name, "r"); + + if ( ! f ) + { + fprintf(stderr, "%s: cannot open \"%s\"\n", prog_name, file_name); + exit(1); + } + + ti = make_unique(f, prog_name, file_name); + + while ( ParseTemplate() ) + ; + + if ( ! is_stdin ) + fclose(f); } - ti = make_unique(f, prog_name, file_name); - InitEmitTargets(); - while ( ParseTemplate() ) - ; - for ( auto& t : templates ) t->Instantiate();