From 1eeae97a9c650421d056a8c249c29fe42244ccd8 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 25 Mar 2020 21:38:42 +0300 Subject: Add peek_file() and peek_line() functions to argv_file_scanner --- cli/runtime-header.cxx | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'cli/runtime-header.cxx') diff --git a/cli/runtime-header.cxx b/cli/runtime-header.cxx index 3a51b20..adf70dd 100644 --- a/cli/runtime-header.cxx +++ b/cli/runtime-header.cxx @@ -12,7 +12,8 @@ generate_runtime_header (context& ctx) ostream& os (ctx.os); if (ctx.options.generate_file_scanner ()) - os << "#include " << endl; + os << "#include " << endl + << "#include " << endl; if (ctx.options.generate_description ()) os << "#include " << endl; @@ -456,6 +457,19 @@ generate_runtime_header (context& ctx) << "virtual void" << endl << "skip ();" << endl + << "// Return the file path if the peeked at argument came from a file and" << endl + << "// the empty string otherwise. The reference is guaranteed to be valid" << endl + << "// till the end of the scanner lifetime." << endl + << "//" << endl + << "const std::string&" << endl + << "peek_file ();" + << endl + << "// Return the 1-based line number if the peeked at argument came from" << endl + << "// a file and zero otherwise." << endl + << "//" << endl + << "std::size_t" << endl + << "peek_line ();" + << endl << "private:" << endl << "const option_info*" << endl << "find (const char*) const;" @@ -470,7 +484,14 @@ generate_runtime_header (context& ctx) << "const option_info* options_;" << "std::size_t options_count_;" << endl - << "std::deque args_;" + << "struct arg" + << "{" + << "std::string value;" + << "const std::string* file;" + << "std::size_t line;" + << "};" + << "std::deque args_;" + << "std::list files_;" << endl << "// Circular buffer of two arguments." << endl << "//" << endl @@ -483,6 +504,7 @@ generate_runtime_header (context& ctx) os << endl << "static int zero_argc_;" + << "static std::string empty_string_;" << "};"; } -- cgit v1.1