Mercurial > octave
changeset 29316:09f99fe5190c stable
Fix ignored output from user function in left side of assignment (bug #59704).
* libinterp/parse-tree/pt-assign.cc (tree_multi_assignment::evaluate_n):
Set lvalue list of tree_evaluator only to process the right side of the
assignment. Reset it to null after that.
* test/bug-59704/bug59704_2.m, test/bug-59704/bug-59704.tst,
test/bug-59704/module.mk: Add new test case.
author | Fernando Alvarruiz <feralber@upvnet.upv.es> |
---|---|
date | Sun, 03 Jan 2021 20:48:09 +0100 |
parents | 67857e94604a |
children | d680d5ebafaa 3926dcfde203 |
files | libinterp/parse-tree/pt-assign.cc test/bug-59704/bug-59704.tst test/bug-59704/bug59704_1.m test/bug-59704/bug59704_2.m test/bug-59704/module.mk |
diffstat | 5 files changed, 44 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-assign.cc Mon Dec 28 18:24:04 2020 +0100 +++ b/libinterp/parse-tree/pt-assign.cc Sun Jan 03 20:48:09 2021 +0100 @@ -204,6 +204,8 @@ ? rhs_val1(0).list_value () : rhs_val1); + tw.set_lvalue_list (nullptr); + octave_idx_type k = 0; octave_idx_type n = rhs_val.length ();
--- a/test/bug-59704/bug-59704.tst Mon Dec 28 18:24:04 2020 +0100 +++ b/test/bug-59704/bug-59704.tst Sun Jan 03 20:48:09 2021 +0100 @@ -2,3 +2,8 @@ %! o = bug59704_1 (); %! o.test (); %! assert (o.p, []) + +%!test +%! o = bug59704_2 (); +%! [~, o(1)] = size (rand (2, 5)); +%! assert (o(1), 5)
--- a/test/bug-59704/bug59704_1.m Mon Dec 28 18:24:04 2020 +0100 +++ b/test/bug-59704/bug59704_1.m Sun Jan 03 20:48:09 2021 +0100 @@ -6,12 +6,12 @@ methods - function n = numel(this, varargin) + function n = numel (this, varargin) n = 1; endfunction - function test(this) - [~, this.p] = bug59704_1_test(this.p); + function test (this) + [~, this.p] = bug59704_1_test (this.p); endfunction endmethods
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/bug-59704/bug59704_2.m Sun Jan 03 20:48:09 2021 +0100 @@ -0,0 +1,33 @@ +classdef bug59704_2 < handle + + properties + data_ + endproperties + + methods + + function obj = bug59704_2 () + obj.data_ = 1001:1005; + endfunction + + function r = subsref (obj, S) + ## Transform: obj(index) --> obj.data_(index) + if strcmp (S(1).type, '()') + r = subsref (obj.data_, S); + else + r = builtin('subsref', obj, S); + endif + endfunction + + function obj = subsasgn (obj, S, B) + ## Transform: obj(index) --> obj.data_(index) + if strcmp (S(1).type, '()') + obj.data_ = subsasgn (obj.data_, S, B); + else + obj = builtin ('subsasgn', obj, S, B); + endif + endfunction + + endmethods + +endclassdef
--- a/test/bug-59704/module.mk Mon Dec 28 18:24:04 2020 +0100 +++ b/test/bug-59704/module.mk Sun Jan 03 20:48:09 2021 +0100 @@ -1,6 +1,7 @@ bug_59704_TEST_FILES = \ %reldir%/bug59704_1.m \ %reldir%/bug59704_1_test.m \ + %reldir%/bug59704_2.m \ %reldir%/bug-59661.tst TEST_FILES += $(bug_59704_TEST_FILES)