From b5ecbbef9451ab5648822b02fd8e458cfac49a80 Mon Sep 17 00:00:00 2001 From: Alberto Gonzalez Date: Fri, 10 Apr 2020 19:30:22 +0000 Subject: [PATCH] Allow reading file input from stdin, improving REPL experience. --- kernel/register.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/kernel/register.cc b/kernel/register.cc index af8c1b8e8..ad9d0ac94 100644 --- a/kernel/register.cc +++ b/kernel/register.cc @@ -479,26 +479,27 @@ void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector" : arg; + //Accommodate heredocs with EOT marker spaced out from "<<", e.g. "<< EOT" vs. "<") { + if (Frontend::current_script_file == NULL && filename != "") log_error("Unexpected here document '%s' outside of script!\n", filename.c_str()); if (filename.size() <= 2) log_error("Missing EOT marker in here document!\n"); - std::string eot_marker = filename.substr(2); + std::string eot_marker = filename == ""? "EOT" : filename.substr(2); //"EOT" hardcoded as EOT marker when reading from stdin last_here_document.clear(); while (1) { std::string buffer; char block[4096]; while (1) { - if (fgets(block, 4096, Frontend::current_script_file) == NULL) + if (fgets(block, 4096, filename == ""? stdin : Frontend::current_script_file) == NULL) log_error("Unexpected end of file in here document '%s'!\n", filename.c_str()); buffer += block; if (buffer.size() > 0 && (buffer[buffer.size() - 1] == '\n' || buffer[buffer.size() - 1] == '\r')) -- 2.30.2