Pushing null values into a sequence is legitimate

This commit is contained in:
John Wiegley 2009-10-28 18:39:09 -04:00
parent 2aef4f8884
commit c26daee2cf
2 changed files with 26 additions and 30 deletions

View file

@ -62,6 +62,8 @@ void interactive_t::verify_arguments() const
for (; ! wrong_arg && ! exit_loop && *p && next_arg; p++) {
DEBUG("interactive.verify",
"Want " << *p << " got: " << next_arg->label());
wrong_arg = false;
switch (*p) {
case 'a':
label = _("an amount");
@ -134,6 +136,8 @@ void interactive_t::verify_arguments() const
dont_skip = true;
break;
}
if (wrong_arg && optional && next_arg->is_null())
wrong_arg = false;
if (wrong_arg)
vlabel = next_arg->label();

View file

@ -818,14 +818,12 @@ public:
}
void push_back(const value_t& val) {
if (! val.is_null()) {
if (is_null())
*this = sequence_t();
if (! is_sequence())
in_place_cast(SEQUENCE);
as_sequence_lval().push_back(val);
}
}
void pop_back() {
VERIFY(! is_null());
@ -855,24 +853,18 @@ public:
}
sequence_t::iterator begin() {
VERIFY(is_sequence());
return as_sequence_lval().begin();
}
sequence_t::iterator end() {
VERIFY(is_sequence());
// This special hack is because we never used end() in a context which
// needs us to call _dup().
return boost::get<sequence_t *>(storage->data)->end();
return as_sequence_lval().end();
}
sequence_t::const_iterator begin() const {
VERIFY(is_sequence());
return as_sequence().begin();
}
sequence_t::const_iterator end() const {
VERIFY(is_sequence());
return as_sequence().end();
}