Mercurial > octave
changeset 32196:4b48ab05ba02
VM: Expand varargin in input arguments (patch #10361).
* libinterp/parse-tree/pt-bytecode-vm.cc (vm::execute_code): Properly expand
cs-lists into arguments.
* test/compile/bytecode.tst, test/compile/bytecode_varargin.m: Update tests.
author | Petter T. <petter.vilhelm@gmail.com> |
---|---|
date | Thu, 15 Jun 2023 11:11:37 +0200 |
parents | 9cb43336c3b3 |
children | aa038131581c |
files | libinterp/parse-tree/pt-bytecode-vm.cc test/compile/bytecode.tst test/compile/bytecode_varargin.m |
diffstat | 3 files changed, 27 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-bytecode-vm.cc Thu Jul 06 11:56:37 2023 -0400 +++ b/libinterp/parse-tree/pt-bytecode-vm.cc Thu Jun 15 11:11:37 2023 +0200 @@ -4112,7 +4112,8 @@ { cs_args = arg.list_value (); cs_args_idx = 0; - for (int j = 0; j < cs_args.length () && n_args_on_callee_stack < n_args_before_varargin; j++) + for (int j = 0; j < cs_args.length () + && n_args_on_callee_stack < n_args_callee - 1; j++) { PUSH_OV (cs_args (j)); n_args_on_callee_stack++;
--- a/test/compile/bytecode.tst Thu Jul 06 11:56:37 2023 -0400 +++ b/test/compile/bytecode.tst Thu Jun 15 11:11:37 2023 +0200 @@ -283,7 +283,7 @@ %!test %! __enable_vm_eval__ (0, "local"); %! clear all -%! key = "2 3 1 2 1 1 1 1 1 2 3 4 1 4 4 0 0 0 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 1 0 0 1 0 0 0 2 1 1 1 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 2 1 2 4 1 2 3 4 3 3 2 1 0 "; +%! key = "2 3 1 2 1 1 1 1 1 2 3 4 1 4 4 0 0 0 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 1 0 0 1 0 0 0 2 1 1 1 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 1 2 1 2 4 1 2 0 0 2 1 nob 0 0 1 noa nob 0 0 0 2 1 2 4 1 2 3 4 3 3 2 1 0 "; %! %! __compile bytecode_varargin clear; %! bytecode_varargin (1,2,3); @@ -296,7 +296,7 @@ %! %! __enable_vm_eval__ (0, "local"); %! clear all -%! key = "0 0 1 1 1 1 1 2 3 4 1 4 4 0 0 0 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 1 0 0 1 0 0 0 2 1 1 1 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 2 1 2 4 1 2 3 4 1 3 2 1 0 "; +%! key = "0 0 1 1 1 1 1 2 3 4 1 4 4 0 0 0 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 1 0 0 1 0 0 0 2 1 1 1 1 2 3 4 1 3 4 2 3 4 1 3 3 2 2 3 4 1 4 4 1 2 1 2 4 1 2 0 0 2 1 nob 0 0 1 noa nob 0 0 0 2 1 2 4 1 2 3 4 1 3 2 1 0 "; %! %! __compile bytecode_varargin clear; %! bytecode_varargin (1);
--- a/test/compile/bytecode_varargin.m Thu Jul 06 11:56:37 2023 -0400 +++ b/test/compile/bytecode_varargin.m Thu Jun 15 11:11:37 2023 +0200 @@ -12,6 +12,14 @@ cslist = {1,2,3,4}; varg2 (cslist{:}); + varg3 (cslist{:}); + cslist = {1, 2}; + varg3 (cslist{:}); + cslist = {1}; + varg3 (cslist{:}); + cslist = {}; + varg3 (cslist{:}); + justnamenotpos (1, 2); out = inout (1,2,3,4); @@ -41,6 +49,21 @@ varg1 (2, varargin{:}) end +function varg3 (a, b, varargin) + if exist ("a") + __printf_assert__ ("%d ", a); + else + __printf_assert__ ("noa "); + end + if exist ("b") + __printf_assert__ ("%d ", b); + else + __printf_assert__ ("nob "); + end + __printf_assert__ ("%d ", size (varargin)); + __printf_assert__ ("%d ", nargin); +end + function justnamenotpos (varargin, a) __printf_assert__ ("%d ", a); __printf_assert__ ("%d ", varargin);