summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/interactive.cc4
-rw-r--r--src/interactive.h13
2 files changed, 17 insertions, 0 deletions
diff --git a/src/interactive.cc b/src/interactive.cc
index d0baf07a..9aeb5307 100644
--- a/src/interactive.cc
+++ b/src/interactive.cc
@@ -122,6 +122,10 @@ void interactive_t::verify_arguments() const
label = _("a scope");
wrong_arg = ! next_arg->is_scope();
break;
+ case 'X':
+ label = _("an expression");
+ wrong_arg = ! next_arg->is_expr();
+ break;
case 'S':
label = _("a sequence");
wrong_arg = false;
diff --git a/src/interactive.h b/src/interactive.h
index fbc4ffeb..04c23ae5 100644
--- a/src/interactive.h
+++ b/src/interactive.h
@@ -120,6 +120,19 @@ inline const value_t::sequence_t&
interactive_t::get<const value_t::sequence_t&>(std::size_t index) {
return value_at(index).as_sequence();
}
+template <>
+inline scope_t *
+interactive_t::get<scope_t *>(std::size_t index) {
+ return value_at(index).as_scope();
+}
+template <>
+inline expr_t& interactive_t::get<expr_t&>(std::size_t index) {
+ return value_at(index).as_expr_lval();
+}
+template <>
+inline const expr_t& interactive_t::get<const expr_t&>(std::size_t index) {
+ return value_at(index).as_expr();
+}
template <typename T>
class in_context_t : public interactive_t