annotate libinterp/octave-value/ov-fcn.h @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 0edbd0efb69d
children 243b51ec9ff0
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 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30034
diff changeset
3 // Copyright (C) 1996-2022 The Octave Project Developers
27923
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 ////////////////////////////////////////////////////////////////////////
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
25
20791
f7084eae3318 maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents: 19861
diff changeset
26 #if ! defined (octave_ov_fcn_h)
17822
ebb3ef964372 maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents: 17787
diff changeset
27 #define octave_ov_fcn_h 1
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
28
21244
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21017
diff changeset
29 #include "octave-config.h"
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21017
diff changeset
30
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
31 #include <string>
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
32
3258
4964d5391acc [project @ 1999-07-21 21:51:33 by jwe]
jwe
parents: 3255
diff changeset
33 #include "oct-time.h"
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3258
diff changeset
34 #include "str-vec.h"
3258
4964d5391acc [project @ 1999-07-21 21:51:33 by jwe]
jwe
parents: 3255
diff changeset
35
20940
48b2ad5ee801 maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents: 20791
diff changeset
36 #include "ovl.h"
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
37 #include "ov-base.h"
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
38 #include "ov-typeinfo.h"
24362
3fc24b792a24 avoid including symtab.h, symscope.h, or symrec.h unnecessarily
John W. Eaton <jwe@octave.org>
parents: 24361
diff changeset
39 #include "symscope.h"
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
40
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22897
diff changeset
41 namespace octave
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22897
diff changeset
42 {
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26794
diff changeset
43 class stack_frame;
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23520
diff changeset
44 class tree_evaluator;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22897
diff changeset
45 class tree_walker;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22897
diff changeset
46 }
2976
641689f67673 [project @ 1997-05-15 20:27:04 by jwe]
jwe
parents: 2974
diff changeset
47
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
48 // Functions.
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
49
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
50 class
6109
c68896f193e3 [project @ 2006-10-27 02:16:18 by jwe]
jwe
parents: 5864
diff changeset
51 OCTINTERP_API
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
52 octave_function : public octave_base_value
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
53 {
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
54 public:
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
55
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
56 octave_function (void)
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
57 : m_relative (false), m_locked (false), m_private (false),
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
58 m_dispatch_class (), m_package_name (), m_name (), m_dir_name (),
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
59 m_doc () { }
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
60
22869
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22868
diff changeset
61 // No copying!
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22868
diff changeset
62
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22868
diff changeset
63 octave_function (const octave_function& f) = delete;
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22868
diff changeset
64
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22868
diff changeset
65 octave_function& operator = (const octave_function& f) = delete;
f75d289645ec make deleted functions public
John W. Eaton <jwe@octave.org>
parents: 22868
diff changeset
66
22868
87e3163f6c87 use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents: 22865
diff changeset
67 ~octave_function (void) = default;
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
68
23446
cd4e1ee28716 maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents: 23220
diff changeset
69 octave_base_value * clone (void) const;
cd4e1ee28716 maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents: 23220
diff changeset
70 octave_base_value * empty_clone (void) const;
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
71
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
72 bool is_defined (void) const { return true; }
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
73
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
74 bool is_function (void) const { return true; }
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
75
3544
71bd2d124119 [project @ 2000-02-02 21:02:31 by jwe]
jwe
parents: 3523
diff changeset
76 virtual bool is_system_fcn_file (void) const { return false; }
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
77
21017
93748bcaec17 maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents: 20940
diff changeset
78 virtual std::string fcn_file_name (void) const { return ""; }
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12783
diff changeset
79
21017
93748bcaec17 maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents: 20940
diff changeset
80 virtual std::string src_file_name (void) const { return ""; }
15005
74c7265c057a fix failure with function handles caused by changeset ea6997657614
John W. Eaton <jwe@octave.org>
parents: 14138
diff changeset
81
12783
ad9263d965dc First experimental profiler implementation with flat profile.
Daniel Kraft <d@domob.eu>
parents: 11586
diff changeset
82 // The name to show in the profiler (also used as map-key).
ad9263d965dc First experimental profiler implementation with flat profile.
Daniel Kraft <d@domob.eu>
parents: 11586
diff changeset
83 virtual std::string profiler_name (void) const { return name (); }
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
84
21017
93748bcaec17 maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents: 20940
diff changeset
85 virtual std::string parent_fcn_name (void) const { return ""; }
6323
ea65de49e18e [project @ 2007-02-17 02:51:02 by jwe]
jwe
parents: 6109
diff changeset
86
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
87 virtual octave::symbol_scope parent_fcn_scope (void) const
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
88 { return octave::symbol_scope (); }
7968
0d607e8dbbfa eliminate curr_parent_function; fix subfunction lookup
John W. Eaton <jwe@octave.org>
parents: 7761
diff changeset
89
28432
71c34141cc2d refactor handling of parent functions and localfunctions
John W. Eaton <jwe@octave.org>
parents: 28429
diff changeset
90 virtual std::list<std::string> parent_fcn_names (void) const
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
91 { return std::list<std::string> (); }
28432
71c34141cc2d refactor handling of parent functions and localfunctions
John W. Eaton <jwe@octave.org>
parents: 28429
diff changeset
92
21730
30c53770f47e use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
93 virtual void mark_fcn_file_up_to_date (const octave::sys::time&) { }
3166
c3409a0cafa8 [project @ 1998-04-16 03:12:19 by jwe]
jwe
parents: 2976
diff changeset
94
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
95 virtual octave::symbol_scope scope (void) { return octave::symbol_scope (); }
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
96
21730
30c53770f47e use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
97 virtual octave::sys::time time_parsed (void) const
30c53770f47e use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
98 { return octave::sys::time (static_cast<time_t> (0)); }
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
99
21730
30c53770f47e use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
100 virtual octave::sys::time time_checked (void) const
30c53770f47e use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
101 { return octave::sys::time (static_cast<time_t> (0)); }
3166
c3409a0cafa8 [project @ 1998-04-16 03:12:19 by jwe]
jwe
parents: 2976
diff changeset
102
26661
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
103 virtual int call_depth (void) const { return 0; }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
104
28439
e760fef2829c refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents: 28432
diff changeset
105 virtual bool is_nested_function (void) const { return false; }
e760fef2829c refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents: 28432
diff changeset
106
e760fef2829c refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents: 28432
diff changeset
107 virtual bool is_parent_function (void) const { return false; }
e760fef2829c refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents: 28432
diff changeset
108
11461
2b8531a6a3c9 Change mentions of "nested function" to the less misleading "subfunction"
David Grundberg <individ@acc.umu.se>
parents: 11445
diff changeset
109 virtual bool is_subfunction (void) const { return false; }
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents: 4192
diff changeset
110
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
111 bool is_class_constructor (const std::string& cname = "") const
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
112 {
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
113 return (is_classdef_constructor (cname) || is_legacy_constructor (cname));
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
114 }
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
115
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
116 bool is_class_method (const std::string& cname = "") const
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
117 {
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
118 return (is_classdef_method (cname) || is_legacy_method (cname));
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
119 }
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
120
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
121 virtual bool
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
122 is_legacy_constructor (const std::string& = "") const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
123 { return false; }
5744
1c36a2e82266 [project @ 2006-04-06 19:38:34 by jwe]
jwe
parents: 5307
diff changeset
124
15869
5e5705b3e505 Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15195
diff changeset
125 virtual bool
21017
93748bcaec17 maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents: 20940
diff changeset
126 is_classdef_constructor (const std::string& = "") const
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
127 { return false; }
15869
5e5705b3e505 Implement some embryonic handle-classdef semantic.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15195
diff changeset
128
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
129 virtual bool is_legacy_method (const std::string& = "") const
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
130 { return false; }
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
131
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
132 virtual bool is_classdef_method (const std::string& = "") const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
133 { return false; }
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
134
4748
7b145222fea3 [project @ 2004-02-07 06:27:27 by jwe]
jwe
parents: 4645
diff changeset
135 virtual bool takes_varargs (void) const { return false; }
7b145222fea3 [project @ 2004-02-07 06:27:27 by jwe]
jwe
parents: 4645
diff changeset
136
7b145222fea3 [project @ 2004-02-07 06:27:27 by jwe]
jwe
parents: 4645
diff changeset
137 virtual bool takes_var_return (void) const { return false; }
7b145222fea3 [project @ 2004-02-07 06:27:27 by jwe]
jwe
parents: 4645
diff changeset
138
22897
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
139 // The next two functions are for dispatching to built-in
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
140 // functions given built-in classes.
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
141
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
142 virtual void push_dispatch_class (const std::string&) { }
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
143
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
144 virtual bool handles_dispatch_class (const std::string&) const
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
145 { return false; }
4090c32fccf8 store set of dispatch classes in built-in function objects
John W. Eaton <jwe@octave.org>
parents: 22869
diff changeset
146
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
147 void stash_dispatch_class (const std::string& nm) { m_dispatch_class = nm; }
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
148
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
149 std::string dispatch_class (void) const { return m_dispatch_class; }
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
150
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
151 void stash_package_name (const std::string& pack) { m_package_name = pack; }
18304
b0e8cc676396 Fix out-of-date status check for package functions.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17856
diff changeset
152
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
153 std::string package_name (void) const { return m_package_name; }
18304
b0e8cc676396 Fix out-of-date status check for package functions.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17856
diff changeset
154
11445
40f311a69417 fix OO field access in subfunctions of private functions
John W. Eaton <jwe@octave.org>
parents: 11220
diff changeset
155 virtual void
21017
93748bcaec17 maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents: 20940
diff changeset
156 mark_as_private_function (const std::string& cname = "")
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
157 {
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
158 m_private = true;
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
159 m_dispatch_class = cname;
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
160 }
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
161
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
162 bool is_private_function (void) const { return m_private; }
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
163
13241
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
164 bool is_private_function_of_class (const std::string& nm) const
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
165 { return m_private && m_dispatch_class == nm; }
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
166
13241
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
167 virtual bool
21017
93748bcaec17 maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents: 20940
diff changeset
168 is_anonymous_function_of_class (const std::string& = "") const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
169 { return false; }
13241
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
170
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
171 std::string dir_name (void) const { return m_dir_name; }
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
172
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
173 void stash_dir_name (const std::string& dir) { m_dir_name = dir; }
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
174
7761
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
175 void lock (void)
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
176 {
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
177 this->lock_subfunctions ();
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
178 m_locked = true;
7761
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
179 }
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
180
7761
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
181 void unlock (void)
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
182 {
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
183 this->unlock_subfunctions ();
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
184 m_locked = false;
7761
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
185 }
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
186
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
187 bool islocked (void) const { return m_locked; }
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
188
7761
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
189 virtual void lock_subfunctions (void) { }
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
190
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
191 virtual void unlock_subfunctions (void) { }
5adeea5de26c symbol table reporting functions
John W. Eaton <jwe@octave.org>
parents: 7489
diff changeset
192
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
193 virtual void maybe_relocate_end (void) { }
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
194
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
195 // Not valid until after the function is completely parsed.
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
196 virtual bool has_subfunctions (void) const { return false; }
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
197
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
198 virtual void stash_subfunction_names (const std::list<std::string>&) { }
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
199
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
200 virtual std::list<std::string> subfunction_names (void) const
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
201 { return std::list<std::string> (); }
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
202
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
203 void mark_relative (void) { m_relative = true; }
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
204
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
205 bool is_relative (void) const { return m_relative; }
6323
ea65de49e18e [project @ 2007-02-17 02:51:02 by jwe]
jwe
parents: 6109
diff changeset
206
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
207 std::string name (void) const { return m_name; }
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
208
18304
b0e8cc676396 Fix out-of-date status check for package functions.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17856
diff changeset
209 std::string canonical_name (void) const
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
210 {
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
211 if (m_package_name.empty ())
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
212 return m_name;
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
213 else
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
214 return m_package_name + '.' + m_name;
19861
19755f4fc851 maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
215 }
18304
b0e8cc676396 Fix out-of-date status check for package functions.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17856
diff changeset
216
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
217 void document (const std::string& ds) { m_doc = ds; }
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5759
diff changeset
218
28514
fab862fedf85 allow help to find docstrings for classdef classes and methods (bug #43047)
John W. Eaton <jwe@octave.org>
parents: 28439
diff changeset
219 virtual std::string
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
220 doc_string (const std::string& /*meth_name*/ = "") const { return m_doc; }
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
221
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3258
diff changeset
222 virtual void unload (void) { }
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3258
diff changeset
223
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22897
diff changeset
224 virtual void accept (octave::tree_walker&) { }
2976
641689f67673 [project @ 1997-05-15 20:27:04 by jwe]
jwe
parents: 2974
diff changeset
225
23503
6a2fed2d39ac improve some function names
John W. Eaton <jwe@octave.org>
parents: 23502
diff changeset
226 virtual bool accepts_postfix_index (char type) const
6a2fed2d39ac improve some function names
John W. Eaton <jwe@octave.org>
parents: 23502
diff changeset
227 { return (type == '('); }
15954
46ca8488de92 Re-engineer tree_expression postfix handling to make it more flexible.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 15869
diff changeset
228
28429
8eb8ba8aff9a refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
229 // Push new stack frame (if necessary) and execute function.
23502
c6714ae1c06c eliminate remaining do_multi_index_op methods
John W. Eaton <jwe@octave.org>
parents: 23446
diff changeset
230 virtual octave_value_list
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23520
diff changeset
231 call (octave::tree_evaluator& tw, int nargout = 0,
28429
8eb8ba8aff9a refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
232 const octave_value_list& args = octave_value_list ());
23502
c6714ae1c06c eliminate remaining do_multi_index_op methods
John W. Eaton <jwe@octave.org>
parents: 23446
diff changeset
233
28429
8eb8ba8aff9a refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
234 // Execute function without pushing new stack frame (assumes that has
8eb8ba8aff9a refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
235 // already been done).
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26794
diff changeset
236 virtual octave_value_list
28429
8eb8ba8aff9a refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
237 execute (octave::tree_evaluator& tw, int nargout = 0,
8eb8ba8aff9a refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
238 const octave_value_list& args = octave_value_list ()) = 0;
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26794
diff changeset
239
27932
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
240 protected:
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
241
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5848
diff changeset
242 octave_function (const std::string& nm,
21017
93748bcaec17 maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents: 20940
diff changeset
243 const std::string& ds = "")
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
244 : m_relative (false), m_locked (false), m_private (false),
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
245 m_dispatch_class (), m_name (nm), m_dir_name (), m_doc (ds) { }
6323
ea65de49e18e [project @ 2007-02-17 02:51:02 by jwe]
jwe
parents: 6109
diff changeset
246
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
247 // TRUE if this function was found from a m_relative path element.
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
248 bool m_relative;
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
249
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
250 // TRUE if this function is tagged so that it can't be cleared.
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
251 bool m_locked;
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
252
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
253 // TRUE means this is a private function.
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
254 bool m_private;
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
255
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
256 // If this object is a class method or constructor, or a private
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
257 // function inside a class directory, this is the name of the class
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
258 // to which the method belongs.
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
259 std::string m_dispatch_class;
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 7968
diff changeset
260
18304
b0e8cc676396 Fix out-of-date status check for package functions.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17856
diff changeset
261 // If this function is part of a package, this is the full name
b0e8cc676396 Fix out-of-date status check for package functions.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17856
diff changeset
262 // of the package to which the function belongs.
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
263 std::string m_package_name;
18304
b0e8cc676396 Fix out-of-date status check for package functions.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17856
diff changeset
264
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
265 // The name of this function.
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
266 std::string m_name;
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
267
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
268 // The name of the directory in the path where we found this
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
269 // function. May be m_relative.
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
270 std::string m_dir_name;
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
271
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
272 // The help text for this function.
30034
0edbd0efb69d maint: use "m_" prefix for member variables in octave_function class.
Rik <rik@octave.org>
parents: 29359
diff changeset
273 std::string m_doc;
2974
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
274 };
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
275
ebbc34ff7f66 [project @ 1997-05-15 19:36:16 by jwe]
jwe
parents:
diff changeset
276 #endif