aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/bash_ast.cpp20
-rw-r--r--src/core/bash_ast.h3
2 files changed, 15 insertions, 8 deletions
diff --git a/src/core/bash_ast.cpp b/src/core/bash_ast.cpp
index 213264c..f3afc30 100644
--- a/src/core/bash_ast.cpp
+++ b/src/core/bash_ast.cpp
@@ -26,6 +26,7 @@
#include <sstream>
#include <thread>
+#include <boost/algorithm/string/erase.hpp>
#include <boost/numeric/conversion/cast.hpp>
#include "core/exceptions.h"
@@ -34,13 +35,19 @@
#include "libbashParser.h"
#include "libbashWalker.h"
-bash_ast::bash_ast(const std::istream& source,
- std::function<pANTLR3_BASE_TREE(plibbashParser)> p): parse(p)
+void bash_ast::read_script(const std::istream& source)
{
std::stringstream stream;
stream << source.rdbuf();
script = stream.str();
- init_parser(script, "unknown source");
+ boost::algorithm::erase_all(script, "\\\n");
+}
+
+bash_ast::bash_ast(const std::istream& source,
+ std::function<pANTLR3_BASE_TREE(plibbashParser)> p): parse(p)
+{
+ read_script(source);
+ init_parser("unknown source");
}
bash_ast::bash_ast(const std::string& script_path,
@@ -51,9 +58,8 @@ bash_ast::bash_ast(const std::string& script_path,
if(!file_stream)
throw libbash::parse_exception(script_path + " can't be read");
- stream << file_stream.rdbuf();
- script = stream.str();
- init_parser(script, script_path);
+ read_script(file_stream);
+ init_parser(script_path);
}
namespace
@@ -78,7 +84,7 @@ namespace
}
}
-void bash_ast::init_parser(const std::string& script, const std::string& script_path)
+void bash_ast::init_parser(const std::string& script_path)
{
input.reset(antlr3NewAsciiStringInPlaceStream(
reinterpret_cast<pANTLR3_UINT8>(const_cast<char*>(script.c_str())),
diff --git a/src/core/bash_ast.h b/src/core/bash_ast.h
index 8aa291a..fcf031c 100644
--- a/src/core/bash_ast.h
+++ b/src/core/bash_ast.h
@@ -67,7 +67,8 @@ class bash_ast: public boost::noncopyable
typedef std::unique_ptr<libbashWalker_Ctx_struct, std::function<void(libbashWalker_Ctx_struct*)>> walker_pointer;
- void init_parser(const std::string& script, const std::string& script_path);
+ void read_script(const std::istream& source);
+ void init_parser(const std::string& script_path);
walker_pointer create_walker(interpreter& walker,
antlr_pointer<ANTLR3_COMMON_TREE_NODE_STREAM_struct>& nodes);