summaryrefslogtreecommitdiff
path: root/cli/runtime-source.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-03-25 21:38:42 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2020-03-27 16:37:56 +0300
commit1eeae97a9c650421d056a8c249c29fe42244ccd8 (patch)
tree7d53c75be685152a594485cf1eae9f5caa091574 /cli/runtime-source.cxx
parentcf89cd04b3cd95667e6d6d5d3821d191dc62b759 (diff)
Add peek_file() and peek_line() functions to argv_file_scanner
Diffstat (limited to 'cli/runtime-source.cxx')
-rw-r--r--cli/runtime-source.cxx36
1 files changed, 31 insertions, 5 deletions
diff --git a/cli/runtime-source.cxx b/cli/runtime-source.cxx
index b836406..36d8968 100644
--- a/cli/runtime-source.cxx
+++ b/cli/runtime-source.cxx
@@ -365,6 +365,7 @@ generate_runtime_source (context& ctx, bool complete)
<< "//" << endl
<< "int argv_file_scanner::zero_argc_ = 0;"
+ << "std::string argv_file_scanner::empty_string_;"
<< endl
<< "bool argv_file_scanner::" << endl
@@ -452,7 +453,25 @@ generate_runtime_source (context& ctx, bool complete)
<< "if (!more ())" << endl
<< "throw eos_reached ();"
<< endl
- << "return args_.empty () ? base::peek () : args_.front ().c_str ();"
+ << "return args_.empty () ? base::peek () : args_.front ().value.c_str ();"
+ << "}"
+
+ << "const std::string& argv_file_scanner::" << endl
+ << "peek_file ()"
+ << "{"
+ << "if (!more ())" << endl
+ << "throw eos_reached ();"
+ << endl
+ << "return args_.empty () ? empty_string_ : *args_.front ().file;"
+ << "}"
+
+ << "std::size_t argv_file_scanner::" << endl
+ << "peek_line ()"
+ << "{"
+ << "if (!more ())" << endl
+ << "throw eos_reached ();"
+ << endl
+ << "return args_.empty () ? 0 : args_.front ().line;"
<< "}"
<< "const char* argv_file_scanner::" << endl
@@ -465,7 +484,7 @@ generate_runtime_source (context& ctx, bool complete)
<< "return base::next ();"
<< "else"
<< "{"
- << "hold_[i_ == 0 ? ++i_ : --i_].swap (args_.front ());"
+ << "hold_[i_ == 0 ? ++i_ : --i_].swap (args_.front ().value);"
<< "args_.pop_front ();"
<< "return hold_[i_].c_str ();"
<< "}"
@@ -503,7 +522,12 @@ generate_runtime_source (context& ctx, bool complete)
<< "if (!is.is_open ())" << endl
<< "throw file_io_failure (file);"
<< endl
- << "while (!is.eof ())"
+ << "files_.push_back (file);"
+ << endl
+ << "arg a;"
+ << "a.file = &*files_.rbegin ();"
+ << endl
+ << "for (a.line = 1; !is.eof (); ++a.line)"
<< "{"
<< "string line;"
<< "getline (is, line);"
@@ -633,9 +657,11 @@ generate_runtime_source (context& ctx, bool complete)
<< endl
<< "continue;"
<< "}"
- << "args_.push_back (s1);"
+ << "a.value = s1;"
+ << "args_.push_back (a);"
<< "}"
- << "args_.push_back (s2);"
+ << "a.value = s2;"
+ << "args_.push_back (a);"
<< "}" // while
<< "}";
}