Mercurial > octave
diff test/struct.tst @ 28804:3719f5d452d4 stable
refactor implementation of END indexing in interpreter (bug #58953)
* oct-lvalue.h, oct-lvalue.cc (octave_lvalue::eval_for_numel): New function.
(octave_lvalue::m_nel): Delete data member.
(octave_lvalue::numel (octave_idx_type)): Delete.
(octave_lvalue::numel (void) const): Compute result instead of
returning cached value.
* pt-eval.h, pt-eval.cc (tree_evaluator::convert_to_const_vector):
Simplify.
(Fend): Call tree_evaluator::evaluate_end_expression to do the real work.
(tree_evaluator::make_value_list): Don't check for magic_end here.
(end_value, tree_evaluator::evaluate_end_expression): New functions.
(tree_evaluator::m_index_list, tree_evaluator::m_index_type): New data members.
(tree_evaluator::set_indexed_object, tree_evaluator::index_list,
tree_evaluator::set_index_list, tree_evaluator::clear_index_list,
tree_evaluator::append_index_list, tree_evaluator::index_type):
New functions.
* pt-idx.cc (make_value_list): Delete.
(tree_index_expression::lvalue, tree_index_expression::evaluate_n):
Refactor to avoid evaluating partial expressions to obtain values for
the END function. Instead, cache info necessary to do that job as
needed and inside the END function itself.
author | John W. Eaton <jwe@octave.org> and Fernando Alvarruiz |
---|---|
date | Mon, 21 Sep 2020 10:45:18 -0400 |
parents | bd51beb6205e |
children | d5efdf5cfc56 0a5b15007766 |
line wrap: on
line diff
--- a/test/struct.tst Sun Sep 27 12:24:24 2020 -0400 +++ b/test/struct.tst Mon Sep 21 10:45:18 2020 -0400 @@ -155,9 +155,13 @@ %! assert ({b.name}, {1, 2, "b", "e", 3, 4}); %! assert ({b.value}, {100, "5", 100, "6", 100, "7"}); +%!error <deal: nargin> +%! [a(1:3).x] = deal ([1, 5], [3, 7], [8, 9]); +%! [a(2:3).x(2)] = deal (10, 11); + %!error <a cs-list cannot be further indexed> %! [a(1:3).x] = deal ([1, 5], [3, 7], [8, 9]); -%! [a(2:3).x(2)] = deal (10, 11); +%! [a(2:3).x(2)] = 1; %!error <a cs-list cannot be further indexed> %! [a(1:3).x] = deal ([1, 5], [3, 7], [8, 9]);