diff options
Diffstat (limited to 'src/core/interpreter.cpp')
-rw-r--r-- | src/core/interpreter.cpp | 22 |
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); |