annotate libinterp/octave-value/ov-fcn-handle.h @ 28430:5bfa8e018704 stable

store local init vars for anonymous functions in handle, not function object This change is step toward revamping function handles by storing variable init values for anonymous functions in function handle objects instead of in the corresponding functions. * call-stack.h, call-stack.cc (call_stack::push): New overload that accepts local variable map in addition to function object. * stack-frame.h (user_fcn_stack_frame::user_fcn_stack_frame): New constructor that accepts local variable map in addition to function object. (stack_frame::local_vars_map): New typedef. * ov-fcn-handle.h, ov-fcn-handle.cc (octave_fcn_handle::m_local_vars): New data member. (octave_fcn_handle::octave_fcn_handle): Update existing constructors and provide new one to construct handle from function object and local variable map. (octave_fcn_handle::call): If m_local_vars is defined, push stack frame with that info and execute function here. (octave_fcn_handle::workspace): Create workspace struct from m_local_vars instead of getting that info from the function object. (octave_fcn_handle::parse_anon_fcn_handle): Copy m_local_vars from new function handle object. (octave_fcn_handle::save_ascii, octave_fcn_handle::save_binary, octave_fcn_handle::save_hdf5): Use m_local_vars instead of getting info from function object. * ov-usr-fcn.h, ov-usr-fcn.cc (octave_user_function::local_vars_map): Delete typedef. (octave_user_function::m_local_var_init_vals): Delete data member and all uses. (octave_user_function::local_var_init_vals): Delete. * pt-eval.h, pt-eval.cc (tree_evaluator::push_stack_frame): New overload that accepts local variable map and user function. (tree_evaluator::init_local_fcn_vars): Delete function and all uses. * pt-fcn-handle.cc (tree_anon_fcn_handle::evaluate): Store local variables in function handle object instead of function object.
author John W. Eaton <jwe@octave.org>
date Mon, 30 Mar 2020 15:14:10 -0400
parents 9a3deb17b4ea
children d05a4194f1ad
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) 2003-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 ////////////////////////////////////////////////////////////////////////
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
25
20791
f7084eae3318 maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents: 19863
diff changeset
26 #if ! defined (octave_ov_fcn_handle_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_handle_h 1
4343
db5e0814277a [project @ 2003-02-20 16:44: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: 20791
diff changeset
29 #include "octave-config.h"
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 20791
diff changeset
30
8950
d865363208d6 include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
31 #include <iosfwd>
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
32 #include <list>
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
33 #include <string>
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
34
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
35 #include "ov-base.h"
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
36 #include "ov-fcn.h"
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
37 #include "ov-typeinfo.h"
28430
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
38 #include "stack-frame.h"
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
39 #include "symscope.h"
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
40
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents: 23433
diff changeset
41 namespace octave
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents: 23433
diff changeset
42 {
26693
1da1d9e60bf3 pass reference to interpreter to make_fcn_handle function
John W. Eaton <jwe@octave.org>
parents: 26399
diff changeset
43 class interpreter;
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
44 class tree_evaluator;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents: 23433
diff changeset
45 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents: 23433
diff changeset
46
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
47 // Function handles.
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
48
4925
90f51232d751 [project @ 2004-08-02 22:09:47 by jwe]
jwe
parents: 4924
diff changeset
49 class
7867
f6fffa74b9b5 Export additional symbols: octave_fcn_inline, octave_fcn_handle, read_binary_data, save_binary_data.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 7761
diff changeset
50 OCTINTERP_API
4925
90f51232d751 [project @ 2004-08-02 22:09:47 by jwe]
jwe
parents: 4924
diff changeset
51 octave_fcn_handle : public octave_base_value
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
52 {
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
53 public:
10261
a4fb4675accb make printing of handles more Matlab-compatible
Jaroslav Hajek <highegg@gmail.com>
parents: 10160
diff changeset
54
a4fb4675accb make printing of handles more Matlab-compatible
Jaroslav Hajek <highegg@gmail.com>
parents: 10160
diff changeset
55 static const std::string anonymous;
a4fb4675accb make printing of handles more Matlab-compatible
Jaroslav Hajek <highegg@gmail.com>
parents: 10160
diff changeset
56
4930
bdb307dc8613 [project @ 2004-08-05 04:55:26 by jwe]
jwe
parents: 4925
diff changeset
57 octave_fcn_handle (void)
26962
b033cf021048 allow @obj.meth to work (bug #51709)
John W. Eaton <jwe@octave.org>
parents: 26916
diff changeset
58 : m_fcn (), m_obj (), m_name (), m_scope (), m_is_nested (false),
28430
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
59 m_closure_frames (), m_local_vars (nullptr), m_dispatch_class ()
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
60 { }
5007
f8c27dad3643 [project @ 2004-09-17 11:42:04 by jwe]
jwe
parents: 4988
diff changeset
61
26962
b033cf021048 allow @obj.meth to work (bug #51709)
John W. Eaton <jwe@octave.org>
parents: 26916
diff changeset
62 octave_fcn_handle (const octave::symbol_scope& scope, const std::string& n);
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
63
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
64 octave_fcn_handle (const octave::symbol_scope& scope,
28430
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
65 const octave_value& f, const std::string& n);
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
66
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
67 octave_fcn_handle (const octave_value& f, const std::string& n);
10321
97b4bd6f0925 partially rewrite function handles
Jaroslav Hajek <highegg@gmail.com>
parents: 10313
diff changeset
68
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
69 octave_fcn_handle (const octave_value& f,
28430
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
70 const octave::stack_frame::local_vars_map& local_vars);
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
71
28430
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
72 octave_fcn_handle (const octave_fcn_handle& fh);
4967
0355f2f7d193 [project @ 2004-09-07 15:09:14 by jwe]
jwe
parents: 4933
diff changeset
73
28430
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
74 ~octave_fcn_handle (void);
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
75
23446
cd4e1ee28716 maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents: 23435
diff changeset
76 octave_base_value * clone (void) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
77 { return new octave_fcn_handle (*this); }
23446
cd4e1ee28716 maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents: 23435
diff changeset
78 octave_base_value * empty_clone (void) const
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
79 { return new octave_fcn_handle (); }
4967
0355f2f7d193 [project @ 2004-09-07 15:09:14 by jwe]
jwe
parents: 4933
diff changeset
80
26916
9cd4b045fe3d avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents: 26854
diff changeset
81 // We don't need to override all three forms of subsref. The using
9cd4b045fe3d avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents: 26854
diff changeset
82 // declaration will avoid warnings about partially-overloaded virtual
9cd4b045fe3d avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents: 26854
diff changeset
83 // functions.
9cd4b045fe3d avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents: 26854
diff changeset
84 using octave_base_value::subsref;
9cd4b045fe3d avoid some overloaded virtual warnings (bug #55741)
John W. Eaton <jwe@octave.org>
parents: 26854
diff changeset
85
7651
443a8f5a50fd require both subsref variants to be defined in octave_value subclasses
John W. Eaton <jwe@octave.org>
parents: 7336
diff changeset
86 octave_value subsref (const std::string& type,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10261
diff changeset
87 const std::list<octave_value_list>& idx)
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
88 {
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
89 octave_value_list tmp = subsref (type, idx, 1);
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
90 return tmp.length () > 0 ? tmp(0) : octave_value ();
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
91 }
4924
9a3a32f5a27d [project @ 2004-08-02 19:04:20 by jwe]
jwe
parents: 4898
diff changeset
92
9a3a32f5a27d [project @ 2004-08-02 19:04:20 by jwe]
jwe
parents: 4898
diff changeset
93 octave_value_list subsref (const std::string& type,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10261
diff changeset
94 const std::list<octave_value_list>& idx,
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10261
diff changeset
95 int nargout);
4924
9a3a32f5a27d [project @ 2004-08-02 19:04:20 by jwe]
jwe
parents: 4898
diff changeset
96
4925
90f51232d751 [project @ 2004-08-02 22:09:47 by jwe]
jwe
parents: 4924
diff changeset
97 bool is_defined (void) const { return true; }
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
98
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
99 bool is_function_handle (void) const { return true; }
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
100
28197
087bccd1ab49 new function to identify anonymous function handles
John W. Eaton <jwe@octave.org>
parents: 28164
diff changeset
101 bool is_anonymous (void) const { return m_name == anonymous; }
087bccd1ab49 new function to identify anonymous function handles
John W. Eaton <jwe@octave.org>
parents: 28164
diff changeset
102
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
103 bool is_nested (void) const { return m_is_nested; }
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
104
21573
f3f8e1d3e399 avoid mulitple definitions of static function-scope vars (bug #47372)
John W. Eaton <jwe@octave.org>
parents: 19863
diff changeset
105 dim_vector dims (void) const;
5654
6aae52010e3b [project @ 2006-03-09 19:04:53 by jwe]
jwe
parents: 5307
diff changeset
106
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
107 // FIXME: These must go away. They don't do the right thing for
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
108 // scoping or overloads.
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
109 octave_function * function_value (bool = false);
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
110 octave_user_function * user_function_value (bool = false);
6625
5d02dfacfc9e [project @ 2007-05-16 08:49:47 by dbateman]
dbateman
parents: 5958
diff changeset
111
23446
cd4e1ee28716 maint: Use convention 'void * fcn ()' for functions which return pointers.
Rik <rik@octave.org>
parents: 23435
diff changeset
112 octave_fcn_handle * fcn_handle_value (bool = false) { return this; }
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
113
26854
ab97008be411 use m_ for member variables in function handle and inline function classes
John W. Eaton <jwe@octave.org>
parents: 26847
diff changeset
114 octave_value fcn_val (void) const { return m_fcn; }
5007
f8c27dad3643 [project @ 2004-09-17 11:42:04 by jwe]
jwe
parents: 4988
diff changeset
115
26854
ab97008be411 use m_ for member variables in function handle and inline function classes
John W. Eaton <jwe@octave.org>
parents: 26847
diff changeset
116 std::string fcn_name (void) const { return m_name; }
4930
bdb307dc8613 [project @ 2004-08-05 04:55:26 by jwe]
jwe
parents: 4925
diff changeset
117
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
118 void push_closure_context (octave::tree_evaluator& tw);
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
119
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
120 octave_value workspace (void) const;
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
121
26966
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
122 void set_dispatch_class (const std::string& class_name)
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
123 {
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
124 m_dispatch_class = class_name;
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
125 }
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
126
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
127 std::string get_dispatch_class (void) const { return m_dispatch_class; }
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
128
10322
21551cc88061 improve function handles comparison
Jaroslav Hajek <highegg@gmail.com>
parents: 10321
diff changeset
129 bool is_equal_to (const octave_fcn_handle&) const;
21551cc88061 improve function handles comparison
Jaroslav Hajek <highegg@gmail.com>
parents: 10321
diff changeset
130
25969
7eeb89b0d2d5 make char function work for function handles (bug #53118)
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
131 octave_value convert_to_str_internal (bool pad, bool force, char type) const;
7eeb89b0d2d5 make char function work for function handles (bug #53118)
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
132
6974
9e32bb109980 [project @ 2007-10-08 11:06:47 by jwe]
jwe
parents: 6625
diff changeset
133 bool save_ascii (std::ostream& os);
4988
352d228d409b [project @ 2004-09-11 13:05:38 by jwe]
jwe
parents: 4967
diff changeset
134
352d228d409b [project @ 2004-09-11 13:05:38 by jwe]
jwe
parents: 4967
diff changeset
135 bool load_ascii (std::istream& is);
352d228d409b [project @ 2004-09-11 13:05:38 by jwe]
jwe
parents: 4967
diff changeset
136
26399
586413770c7f pass save_as_floats by value in octave_value save_binary functions
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
137 bool save_binary (std::ostream& os, bool save_as_floats);
4988
352d228d409b [project @ 2004-09-11 13:05:38 by jwe]
jwe
parents: 4967
diff changeset
138
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
139 bool load_binary (std::istream& is, bool swap,
21739
c4ab2e54f100 use namespace for oct_mach_info class
John W. Eaton <jwe@octave.org>
parents: 21574
diff changeset
140 octave::mach_info::float_format fmt);
4988
352d228d409b [project @ 2004-09-11 13:05:38 by jwe]
jwe
parents: 4967
diff changeset
141
19863
09ed6f7538dd avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents: 19697
diff changeset
142 bool save_hdf5 (octave_hdf5_id loc_id, const char *name, bool save_as_floats);
4988
352d228d409b [project @ 2004-09-11 13:05:38 by jwe]
jwe
parents: 4967
diff changeset
143
19863
09ed6f7538dd avoid needing to include hdf5 in public header files (bug #44370, #43180)
John W. Eaton <jwe@octave.org> and Mike Miller <mtmiller@ieee.org>
parents: 19697
diff changeset
144 bool load_hdf5 (octave_hdf5_id loc_id, const char *name);
4988
352d228d409b [project @ 2004-09-11 13:05:38 by jwe]
jwe
parents: 4967
diff changeset
145
18416
bcd71a2531d3 Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents: 17822
diff changeset
146 void print (std::ostream& os, bool pr_as_read_syntax = false);
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
147
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
148 void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
149
10324
7673850d6adf make simple handles printed inline
Jaroslav Hajek <highegg@gmail.com>
parents: 10322
diff changeset
150 // Simple function handles are printed without a newline.
26854
ab97008be411 use m_ for member variables in function handle and inline function classes
John W. Eaton <jwe@octave.org>
parents: 26847
diff changeset
151 bool print_as_scalar (void) const { return m_name != anonymous; }
10324
7673850d6adf make simple handles printed inline
Jaroslav Hajek <highegg@gmail.com>
parents: 10322
diff changeset
152
4654
a9b22513b7a6 [project @ 2003-11-24 18:56:35 by jwe]
jwe
parents: 4649
diff changeset
153 private:
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
154
23433
c9fab0bc983e maint: Use convention 'int& x' for naming references.
Rik <rik@octave.org>
parents: 23220
diff changeset
155 bool set_fcn (const std::string& octaveroot, const std::string& fpath);
6625
5d02dfacfc9e [project @ 2007-05-16 08:49:47 by dbateman]
dbateman
parents: 5958
diff changeset
156
4612
d44675070f1a [project @ 2003-11-14 19:49:56 by jwe]
jwe
parents: 4346
diff changeset
157 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
4925
90f51232d751 [project @ 2004-08-02 22:09:47 by jwe]
jwe
parents: 4924
diff changeset
158
4933
cd58733c326b [project @ 2004-08-05 16:08:28 by jwe]
jwe
parents: 4930
diff changeset
159 protected:
4930
bdb307dc8613 [project @ 2004-08-05 04:55:26 by jwe]
jwe
parents: 4925
diff changeset
160
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
161 // The function we are handling (this should be valid for handles to
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
162 // anonymous functions and some other special cases). Otherwise, we
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
163 // perform dynamic lookup based on the name of the function we are
26962
b033cf021048 allow @obj.meth to work (bug #51709)
John W. Eaton <jwe@octave.org>
parents: 26916
diff changeset
164 // handling and the scope where the function handle object was created.
26854
ab97008be411 use m_ for member variables in function handle and inline function classes
John W. Eaton <jwe@octave.org>
parents: 26847
diff changeset
165 octave_value m_fcn;
4925
90f51232d751 [project @ 2004-08-02 22:09:47 by jwe]
jwe
parents: 4924
diff changeset
166
26962
b033cf021048 allow @obj.meth to work (bug #51709)
John W. Eaton <jwe@octave.org>
parents: 26916
diff changeset
167 // If defined, this is the classdef object corresponding to the
b033cf021048 allow @obj.meth to work (bug #51709)
John W. Eaton <jwe@octave.org>
parents: 26916
diff changeset
168 // classdef method we are handling.
b033cf021048 allow @obj.meth to work (bug #51709)
John W. Eaton <jwe@octave.org>
parents: 26916
diff changeset
169 octave_value m_obj;
b033cf021048 allow @obj.meth to work (bug #51709)
John W. Eaton <jwe@octave.org>
parents: 26916
diff changeset
170
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
171 // The function we would find without considering argument types. We
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
172 // cache this value so that the function_value and user_function_value
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
173 // methods may continue to work.
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
174 octave_value m_generic_fcn;
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
175
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
176 // The name of the handle, not including the "@".
26854
ab97008be411 use m_ for member variables in function handle and inline function classes
John W. Eaton <jwe@octave.org>
parents: 26847
diff changeset
177 std::string m_name;
9450
cf714e75c656 implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents: 8950
diff changeset
178
26847
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
179 // The scope where this object was defined.
8bd9fd99c12a lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents: 26825
diff changeset
180 octave::symbol_scope m_scope;
9450
cf714e75c656 implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents: 8950
diff changeset
181
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
182 // TRUE means this is a handle to a nested function.
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
183 bool m_is_nested;
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
184
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
185 // Saved stack frames for handles to nested functions. This allows us
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
186 // to access non-locals and other context info when calling nested
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
187 // functions indirectly through handles.
28426
9a3deb17b4ea use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents: 28197
diff changeset
188 std::shared_ptr<octave::stack_frame> m_closure_frames;
26825
6e9034836239 allow handles to nested functions to work (bug #39257)
John W. Eaton <jwe@octave.org>
parents: 26694
diff changeset
189
28430
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
190 // List of captured variable values for anonymous fucntions.
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
191 octave::stack_frame::local_vars_map *m_local_vars;
5bfa8e018704 store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents: 28426
diff changeset
192
26966
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
193 // The name of the class in which this handle was created, if any.
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
194 // Used to determine access permission when the referenced function is
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
195 // called.
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
196 std::string m_dispatch_class;
4ba365817652 allow dispatch class to be stored in octave_fcn_handle (bug #45351)
John W. Eaton <jwe@octave.org>
parents: 26962
diff changeset
197
24108
1a53f0c855db move some duplicate code into a separate function
John W. Eaton <jwe@octave.org>
parents: 23502
diff changeset
198 bool parse_anon_fcn_handle (const std::string& fcn_text);
1a53f0c855db move some duplicate code into a separate function
John W. Eaton <jwe@octave.org>
parents: 23502
diff changeset
199
23502
c6714ae1c06c eliminate remaining do_multi_index_op methods
John W. Eaton <jwe@octave.org>
parents: 23481
diff changeset
200 virtual octave_value_list call (int nargout, const octave_value_list& args);
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
201 };
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
202
26693
1da1d9e60bf3 pass reference to interpreter to make_fcn_handle function
John W. Eaton <jwe@octave.org>
parents: 26399
diff changeset
203 namespace octave
1da1d9e60bf3 pass reference to interpreter to make_fcn_handle function
John W. Eaton <jwe@octave.org>
parents: 26399
diff changeset
204 {
1da1d9e60bf3 pass reference to interpreter to make_fcn_handle function
John W. Eaton <jwe@octave.org>
parents: 26399
diff changeset
205 extern octave_value
26854
ab97008be411 use m_ for member variables in function handle and inline function classes
John W. Eaton <jwe@octave.org>
parents: 26847
diff changeset
206 make_fcn_handle (interpreter& interp, const std::string& name);
26693
1da1d9e60bf3 pass reference to interpreter to make_fcn_handle function
John W. Eaton <jwe@octave.org>
parents: 26399
diff changeset
207 }
4343
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
208
db5e0814277a [project @ 2003-02-20 16:44:16 by jwe]
jwe
parents:
diff changeset
209 #endif