annotate libinterp/parse-tree/pt-misc.cc @ 28257:ae94e3fad6d4 stable

fix printing of functions with varargin/varargout (bug #58279) * pt-misc.h, pt-misc.cc (tree_parameter_list::m_in_or_out): New data member. (tree_parameter_list::varargs_symbol_name, tree_parameter_list::is_input_list, tree_parameter_list::is_output_list): New functions. (tree_parameter_list::variable_names): Also include varargin or varargout in the list. (tree_parameter_list::dup): Pass m_in_or_out to tree_parameter_list constructor. * oct-parse.yy (opt_param_list): Don't create tree_parameter_list object for empty lists that have no parens. (param_list1): Always create a tree_parameter_list object. * pt-pr-code.cc (tree_print_code::visit_octave_user_function_header): Don't print input/output parameter lists here. (tree_print_code::visit_anon_fcn_handle): Don't print parens for parameter list here. (tree_print_code::visit_parameter_list): Handle printing of all parts of parameter lists here, including parens or brackets. For output lists, skip brackets if there is a single element in the list, including varargout. * ov-fcn-handle.cc (octave_fcn_handle::print_raw): Don't print parens for parameter list here.
author John W. Eaton <jwe@octave.org>
date Fri, 01 May 2020 00:51:01 -0400
parents 3241ede9806c
children 0a5b15007766
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
3 // Copyright (C) 1994-2020 The Octave Project Developers
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
25
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
26 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
27 # include "config.h"
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
28 #endif
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
29
2982
20f5cec4f11c [project @ 1997-05-16 03:29:26 by jwe]
jwe
parents: 2979
diff changeset
30 #include "pt-idx.h"
20f5cec4f11c [project @ 1997-05-16 03:29:26 by jwe]
jwe
parents: 2979
diff changeset
31 #include "pt-misc.h"
4466
b18007283045 [project @ 2003-07-15 11:43:28 by jwe]
jwe
parents: 4465
diff changeset
32
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
33 namespace octave
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
34 {
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
35 // Parameter lists.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
36
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
37 tree_parameter_list::~tree_parameter_list (void)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
38 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
39 while (! empty ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
40 {
25337
3ff9192b676e use auto keyword to declare iterator variables where possible
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
41 auto p = begin ();
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
42 delete *p;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
43 erase (p);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
44 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
45 }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
46
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
47 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
48 tree_parameter_list::mark_as_formal_parameters (void)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
49 {
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23435
diff changeset
50 for (tree_decl_elt *elt : *this)
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
51 elt->mark_as_formal_parameter ();
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
52 }
7587
1f662945c2be handle varargin and varargout without keywords
John W. Eaton <jwe@octave.org>
parents: 7336
diff changeset
53
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
54 std::list<std::string>
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
55 tree_parameter_list::variable_names (void) const
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
56 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
57 std::list<std::string> retval;
16360
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 15467
diff changeset
58
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23435
diff changeset
59 for (tree_decl_elt *elt : *this)
16360
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 15467
diff changeset
60 retval.push_back (elt->name ());
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 15467
diff changeset
61
28257
ae94e3fad6d4 fix printing of functions with varargin/varargout (bug #58279)
John W. Eaton <jwe@octave.org>
parents: 28256
diff changeset
62 if (m_marked_for_varargs)
ae94e3fad6d4 fix printing of functions with varargin/varargout (bug #58279)
John W. Eaton <jwe@octave.org>
parents: 28256
diff changeset
63 retval.push_back (varargs_symbol_name ());
ae94e3fad6d4 fix printing of functions with varargin/varargout (bug #58279)
John W. Eaton <jwe@octave.org>
parents: 28256
diff changeset
64
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
65 return retval;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
66 }
16360
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 15467
diff changeset
67
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
68 tree_parameter_list *
24270
bc3819b7cca1 don't use symbol_table:: nesting for symbol_record, symbol_scope, or fcn_info
John W. Eaton <jwe@octave.org>
parents: 23656
diff changeset
69 tree_parameter_list::dup (symbol_scope& scope) const
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
70 {
28257
ae94e3fad6d4 fix printing of functions with varargin/varargout (bug #58279)
John W. Eaton <jwe@octave.org>
parents: 28256
diff changeset
71 tree_parameter_list *new_list = new tree_parameter_list (m_in_or_out);
5861
2a6cb4ed8f1e [project @ 2006-06-16 05:09:41 by jwe]
jwe
parents: 5848
diff changeset
72
26653
cf4792ae08a1 * pt-misc.cc (tree_parameter_list::dup): Always copy m_marked_for_varargs.
John W. Eaton <jwe@octave.org>
parents: 26652
diff changeset
73 new_list->m_marked_for_varargs = m_marked_for_varargs;
5861
2a6cb4ed8f1e [project @ 2006-06-16 05:09:41 by jwe]
jwe
parents: 5848
diff changeset
74
23449
c763214a8260 maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents: 23435
diff changeset
75 for (const tree_decl_elt *elt : *this)
23602
214cb58ccc1c use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents: 23601
diff changeset
76 new_list->append (elt->dup (scope));
5861
2a6cb4ed8f1e [project @ 2006-06-16 05:09:41 by jwe]
jwe
parents: 5848
diff changeset
77
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
78 return new_list;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
79 }
1742
a02f140ed897 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents: 1670
diff changeset
80 }