aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/interpreter.cpp')
-rw-r--r--src/core/interpreter.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/core/interpreter.cpp b/src/core/interpreter.cpp
index 405023d..1b8ef0a 100644
--- a/src/core/interpreter.cpp
+++ b/src/core/interpreter.cpp
@@ -248,7 +248,7 @@ std::string::size_type interpreter::get_length(const std::string& name,
const unsigned index) const
{
auto var = resolve_variable(name);
- if(!var)
+ if(!is_valid(var, name))
return 0;
return var->get_length(index);
}
@@ -256,7 +256,7 @@ std::string::size_type interpreter::get_length(const std::string& name,
variable::size_type interpreter::get_array_length(const std::string& name) const
{
auto var = resolve_variable(name);
- if(!var)
+ if(!is_valid(var, name))
return 0;
return var->get_array_length();
}
@@ -471,6 +471,24 @@ void interpreter::set_additional_option(const std::string& name, bool value)
iter->second = value;
}
+bool interpreter::get_option(const char name) const
+{
+ auto iter = options.find(name);
+ if(iter == options.end())
+ throw libbash::illegal_argument_exception("Invalid bash option");
+
+ return iter->second;
+}
+
+void interpreter::set_option(const char name, bool value)
+{
+ auto iter = options.find(name);
+ if(iter == options.end())
+ throw libbash::illegal_argument_exception(name + " is not a valid bash option");
+
+ iter->second = value;
+}
+
long interpreter::eval_arithmetic(const std::string& expression)
{
bash_ast ast(std::stringstream(expression), &bash_ast::parser_arithmetics);