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]);