diff options
-rw-r--r-- | src/pyinterp.cc | 8 | ||||
-rw-r--r-- | src/value.cc | 10 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/pyinterp.cc b/src/pyinterp.cc index dc6fb4f7..048f5a39 100644 --- a/src/pyinterp.cc +++ b/src/pyinterp.cc @@ -467,7 +467,7 @@ namespace { case value_t::STRING: // a string object return object(handle<>(borrowed(str_to_py_unicode(val.as_string())))); case value_t::MASK: // a regular expression mask - return object(handle<>(borrowed(str_to_py_unicode(val.as_mask().str())))); + return object(val); case value_t::SEQUENCE: { // a vector of value_t objects list arglist; foreach (const value_t& elem, val.as_sequence()) @@ -495,8 +495,7 @@ namespace { } return object(); case value_t::ANY: // a pointer to an arbitrary object - assert("Attempted to convert an Value.ANY object to Python" == NULL); - return object(); + return object(val); } } } @@ -535,8 +534,7 @@ value_t python_interpreter_t::functor_t::operator()(call_scope_t& args) Py_DECREF(val); } else { Py_DECREF(val); - throw_(calc_error, - _("Could not evaluate Python variable '%1'") << name); + return NULL_VALUE; } std::signal(SIGINT, sigint_handler); return result; diff --git a/src/value.cc b/src/value.cc index 5fa748f6..2446c97a 100644 --- a/src/value.cc +++ b/src/value.cc @@ -1251,6 +1251,16 @@ void value_t::in_place_cast(type_t cast_type) } break; + case MASK: + switch (cast_type) { + case STRING: + set_string(as_mask().str()); + return; + default: + break; + } + break; + default: break; } |