Mercurial > octave
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 |
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 | 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 | 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 | 31 #include <string> |
32 | |
3258 | 33 #include "oct-time.h" |
3325 | 34 #include "str-vec.h" |
3258 | 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 | 37 #include "ov-base.h" |
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 | 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 | 47 |
2974 | 48 // Functions. |
49 | |
50 class | |
6109 | 51 OCTINTERP_API |
2974 | 52 octave_function : public octave_base_value |
53 { | |
54 public: | |
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 | 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 | 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 | 71 |
72 bool is_defined (void) const { return true; } | |
73 | |
74 bool is_function (void) const { return true; } | |
75 | |
3544 | 76 virtual bool is_system_fcn_file (void) const { return false; } |
2974 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 134 |
4748 | 135 virtual bool takes_varargs (void) const { return false; } |
136 | |
137 virtual bool takes_var_return (void) const { return false; } | |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 221 |
3325 | 222 virtual void unload (void) { } |
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 | 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 | 241 |
5864 | 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 | 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 | 249 |
7336 | 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 | 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 | 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 | 267 |
7336 | 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 | 271 |
2974 | 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 | 274 }; |
275 | |
276 #endif |